简介
链码(chaincode)安装后需要实例化才能使用,在通道中一个 chaincode 只需要进行一次实例化(instantiate)操作即可(链码的实例化过程有点慢,请您耐心等待)。
实例化通道上的链码
我们使用下面的命令对通道上的链码进行实例化操作
peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
成功实例化的结果如下图所示:
在通道上实例化链码,意味着会在通道上初始化链码,为链码指定背书策略,然后为目标节点启动链码容器。
背书策略
注意 -P 这个参数,这是我们的策略,我们在此策略中指定针对此链码要验证的交易所需的背书级别。-P "AND ('Org1MSP.peer','Org2MSP.peer')" 作为策略表明:我们需要属于 Org1 和 Org2 的节点 "背书" (就是说要两个组织的背书)。如果我们把语法改成 OR ,那我们将只需要一个组织的背书。
链码调用
重点关注一下最后的-c标志,这表示对链码的操作,Args表示参数,其参数值就是链码中定义的一些方法,init 表示调用链码中的 init 方法,该链码中 init 方法定义如下:
该链码中定义很多方法,你可以在/opt/gopath/src/github.com/chaincode/chaincode_example02/go/中进行查看,这可以帮助你更好的理解链码的一系列操作背后的逻辑!
切换节点与区块链账本交互
如果你想让其他的节点与账本交互,你需要将他们加入通道,然后在节点的文件系统上安装名字、版本和语言一样的链码。一旦它们尝试与特定的链代码进行交互,就会为每一个节点启动一个链码容器。
一旦链码在通道上实例化,我们可以放弃 -l 标志,那时我们只需传递通道标识符和链码的名称。
例如,我想让 peer1.org2.example.com 也与该链码进行交互,我只需要进行如下操作:
- 切换节点身份
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ADDRESS=peer1.org2.example.com:10051
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt
- 在节点上安装链码
peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/
我们之前已经对通道上的链码进行了实例化,所以此时我们不需要再次实例化,只要在这个节点上安装了链码,就可以与区块链账本交互了,交互部分我们放到下一篇文章介绍。
总结
总体看下来,是不是发现和之前的操作一个原理,俗话说:万变不离其宗,我们要善于从个性中找到共性,从共性中发掘个性,善于发现规律,就能在学习上事半功倍。