前提:已经启动了一个orderer和一个peer节点,但是还有节点为启动
例如:
- orderer节点个数为1个
- 组织个数2个
- Org1 //已经创建
- Peer0 //已经创建
- Peer1
- Org2
- Peer0 // 待创建
- Peer1
- Org1 //已经创建
# 新增peer节点
# 进入cli容器
docker exec -it cli bash
# 需要修改的全局变量
CORE_PEER_ID=peer0.org2.example.com
CORE_PEER_ADDRESS=peer0.org2.example.com:7051
CORE_PEER_CHAINCODELISTENADDRESS=peer0.org2.example.com:7052
CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051
CORE_PEER_LOCALMSPID=Org2MSP
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp# 变量修改完毕后,将peer0org2加入通道,安装智能合约
peer channel join -b mychannel.block
peer chaincode install -n mychannel -p github.com/hyperledger/fabric/aberic/chaincode/go/chaincode_example02 -v 1.0# 测试智能合约是否成功运行
peer chaincode query -C mychannel -n mychannel -c '{"Args":["query","A"]}'# 调用智能合约的invoke方法,A向B转账5
peer chaincode invoke -C mychannel -n mychannel -c '{"Args":["invoke","A","B","5"]}'
# 此时去查询会发生A和B的值并没有发生改变,这是因为在之前实例化智能合约的时候(上一篇blog)选择的背书组织是Org1
# 而后加入的Org2组织对资产变更的操作都不具备任何效力,但是因为Org2加入了通道(账本)且安装有合法的合约,可以对区块链进行检索
# 此时执行exit退出cli,再重新进入cli容器,这是cli容器默认的是对peer0org1节点的操作,此节点的接受了背书的,所以可以正常进行转账