原生生成fabric 可执行文件与工具
cd $GOPATH/src/github.com/hyperledger/fabric
make native
设置环境变量
export FABBIN=$GOPATH/src/github.com/hyperledger/fabric/.build/bin // 指向Fabric二进制文件所在的位置
export FABCONF=$GOPATH/src/github.com/hyperledger/fabric/sampleconfig // 二个变量`FABCONF`指向Fabric源代码附带的示例配置
编译chaincode插件
注意:
- chaincode 包必须包含main
- 函数
Init
在 ** peer **加入一个通道时被调用,但是在这个函数中不会执行ledger-write,因为没有像基于Docker的链代码的instantiate
这样的事务上下文
我们使用
examples/chaincode/go/example02
中的Fabric source附带的example02
chaincode示例来演示。
cd $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/example02
go build -buildmode=plugin -o example02.so chaincode.go
- 我们需要对** core.yaml **进行修改开启系统插件。
chaincode:
system:
example02: enable
systemPlugins:
- enabled: true
name: example02
path: /src/github.com/hyperledger/fabric/examples/chaincode/go/example02/example02.so
invokableExternal: true
invokableCC2CC: true
启动网络
- 启动orderer 节点。
FABRIC_CFG_PATH=$FABCONF ORDERER_GENERAL_GENESISPROFILE=SampleSingleMSPSolo $FABBIN/orderer
- 启动peer节点
FABRIC_CFG_PATH=$FABCONF FABRIC_LOGGING_SPEC=gossip=warn:msp=warn:debug $FABBIN/peer node start
现在我们创建一个** mych **频道,以便我们可以使用我们的chaincode进行交易。我们使用configtxgen
工具生成$FABCONF\configtx.yaml
规范的配置事务。打开另一个终端窗口并运行以下命令以生成通道创建配置事务:
FABRIC_CFG_PATH=$FABCONF $FABBIN/configtxgen -profile SampleSingleMSPChannel -outputCreateChannelTx mych.tx -channelID mych
创建通道
FABRIC_CFG_PATH=$FABCONF $FABBIN/peer channel create -f mych.tx -c mych -o 127.0.0.1:7050
加入通道
FABRIC_CFG_PATH=$FABCONF $FABBIN/peer channel join -b mych.block
测试是否成功
FABRIC_CFG_PATH=$FABCONF $FABBIN/peer chaincode invoke -C mych -n example02 -c '{"Args":["initialize", "a", "100", "b","200"]}'
FABRIC_CFG_PATH=$FABCONF $FABBIN/peer chaincode invoke -C mych -n example02 -c '{"Args":["transfer","a","b","10"]}'
FABRIC_CFG_PATH=$FABCONF $FABBIN/peer chaincode query -C mych -n example02 -c '{"Args":["query","a"]}'
清除通道
Fabric将数据存储在/var/hyperledger/production
中。我们还创建了mych.tx
和mych.block
。您可以重新运行网络,它将从上次开始接收。但是,如果您已完成并想要清理所有内容,请运行以下命令:
rm -rf /var/hyperledger/production
rm mych.tx mych.block