如何不用docker 原生构建fabric (方便开发调试) 及如何使用chaincode插件

fabric 源码

原生生成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插件

注意:

  1. chaincode 包必须包含main
  2. 函数Init在 ** peer **加入一个通道时被调用,但是在这个函数中不会执行ledger-write,因为没有像基于Docker的链代码的instantiate这样的事务上下文

我们使用examples/chaincode/go/example02中的Fabric source附带的example02chaincode示例来演示。

cd $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/example02
go build -buildmode=plugin -o example02.so chaincode.go
  1. 我们需要对** 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
启动网络
  1. 启动orderer 节点。
    FABRIC_CFG_PATH=$FABCONF ORDERER_GENERAL_GENESISPROFILE=SampleSingleMSPSolo $FABBIN/orderer
    
  2. 启动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.txmych.block。您可以重新运行网络,它将从上次开始接收。但是,如果您已完成并想要清理所有内容,请运行以下命令:

rm -rf /var/hyperledger/production
rm mych.tx mych.block

你可能感兴趣的:(fabric,fabric,区块链)