在 Debian 上构建 Hyperledger Fabric 2.4 开发环境并运行示例用例
2023-10-09 20:58:08
导言
分布式账本技术 (DLT) 正以其去中心化、安全性和透明性的特性改变着各种行业。其中,Hyperledger Fabric 是一个领先的企业区块链平台,为开发人员提供了构建高度可扩展且灵活的区块链应用程序所需的工具和框架。
在本文中,我们将引导您在 Debian 系统上设置一个 Hyperledger Fabric 2.4 开发环境,并逐步指导您运行一个简单的示例用例。我们将涵盖以下主题:
- 设置 Hyperledger Fabric 开发环境
- 运行 Fabric 网络
- 部署智能合约
- 调用智能合约
要求
- Debian 10 或更高版本
- Docker 18.09 或更高版本
- Docker Compose 1.25 或更高版本
- 具有 sudo 权限的非 root 用户
设置 Hyperledger Fabric 开发环境
-
安装 Docker 和 Docker Compose
sudo apt update sudo apt install docker.io docker-compose
-
下载 Fabric 二进制文件
创建用于存储 Fabric 二进制文件和样本代码的目录:
mkdir fabric-samples cd fabric-samples
下载 Fabric 二进制文件:
curl -O https://github.com/hyperledger/fabric/releases/download/v2.4.3/hyperledger-fabric-linux-amd64-2.4.3.tar.gz tar -xzf hyperledger-fabric-linux-amd64-2.4.3.tar.gz
-
设置环境变量
编辑 ~/.profile 文件并添加以下行:
export FABRIC_HOME=/path/to/fabric-samples/fabric export PATH=$PATH:$FABRIC_HOME/bin
其中 /path/to/fabric-samples/fabric 是 Fabric 二进制文件解压缩到的目录。
-
初始化 Fabric 网络
初始化一个名为 my-network 的新 Fabric 网络:
cd fabric/scripts ./bootstrap.sh
运行 Fabric 网络
-
启动 Fabric 网络
使用 Docker Compose 运行 Fabric 网络:
cd .. docker-compose up -d
-
创建通道
创建一个名为 mychannel 的新通道:
./createChannel.sh mychannel
-
加入通道
让组织加入通道:
./joinChannel.sh org1 mychannel ./joinChannel.sh org2 mychannel
部署智能合约
-
编写智能合约
创建一个名为 simplechaincode 的新智能合约:
mkdir chaincode cd chaincode touch simplechaincode.go
将以下代码添加到 simplechaincode.go 文件中:
package main import ( "fmt" "github.com/hyperledger/fabric-contract-api-go/contractapi" ) type SmartContract struct { contractapi.Contract } func (s *SmartContract) Init(ctx contractapi.TransactionContextInterface) error { return nil } func (s *SmartContract) Invoke(ctx contractapi.TransactionContextInterface) error { function, args := ctx.GetStub().GetFunctionAndParameters() switch function { case "set": return s.set(ctx, args) case "get": return s.get(ctx, args) default: return fmt.Errorf("invalid function name: %s", function) } } func (s *SmartContract) set(ctx contractapi.TransactionContextInterface, args []string) error { if len(args) != 2 { return fmt.Errorf("incorrect number of arguments. Expecting 2") } key := args[0] value := args[1] err := ctx.GetStub().PutState(key, []byte(value)) if err != nil { return fmt.Errorf("failed to set state: %v", err) } return nil } func (s *SmartContract) get(ctx contractapi.TransactionContextInterface, args []string) error { if len(args) != 1 { return fmt.Errorf("incorrect number of arguments. Expecting 1") } key := args[0] value, err := ctx.GetStub().GetState(key) if err != nil { return fmt.Errorf("failed to get state: %v", err) } if value == nil { return fmt.Errorf("key %s does not exist", key) } return ctx.GetStub().SetEvent("my-event", []byte(value)) } func main() { chaincode, err := contractapi.NewChaincode(new(SmartContract)) if err != nil { fmt.Printf("Error creating chaincode: %s", err.Error()) } if err := chaincode.Start(); err != nil { fmt.Printf("Error starting chaincode: %s", err.Error()) } }
-
打包智能合约
打包智能合约映像:
docker-compose run cli peer lifecycle chaincode package simplechaincode.tar.gz --path chaincode/simplechaincode --lang golang --label mychaincode
-
安装智能合约
在所有组织中安装智能合约:
./installChaincode.sh mychannel 1 org1 mychaincode ./installChaincode.sh mychannel 2 org2 mychaincode
-
实例化智能合约
在通道上实例化智能合约:
./instantiateChaincode.sh mychannel org1 mychaincode
调用智能合约
-
调用 set 函数
使用 cli 容器调用智能合约的 set 函数:
docker-compose exec cli peer chaincode invoke -n mychaincode -c '{"Args":["set", "key1", "value1"]}' -C mychannel
-
调用 get 函数
使用 cli 容器调用智能合约的 get 函数:
docker-compose exec cli peer chaincode query -n mychaincode -c '{"Args":["get", "key1"]}' -C mychannel
结论
恭喜您!您已成功在 Debian 上设置了一个 Hyperledger Fabric 2.4 开发环境,并运行了一个简单的示例用例。通过遵循本文中的步骤,您可以构建和部署自己的 Fabric 应用程序,探索 DLT 技术在各种行业中的潜力。