我一直在研究fabcar示例,并在没有发生任何更改的情况下使其完美运行。我想做的是更新fabcar.go代码以添加更多字段,并简单地使用示例进行播放,但是我的docker映像未使用正确的代码进行更新。
要安装chaincode,此命令在cli容器上运行:
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode install -n fabcar -v 1.0 -p github.com/fabcar
cli容器已设置以下音量:
./../chaincode/:/opt/gopath/src/github.com/
但是,在代码/执行更新之后(实际上我已经将其从Car更改为具有全新字段的Ticket对象,并更新了所有相关的链式命令以进行反映),拆解,然后再次启动,我仍然看到所有旧字段。
我在这里想念什么?
这是将代码更改为“调用”功能上的票证的摘录
func (s *SmartContract) Invoke(APIstub shim.ChaincodeStubInterface) sc.Response { // Retrieve the requested Smart Contract function and arguments function, args := APIstub.GetFunctionAndParameters() // Route to the appropriate handler function to interact with the ledger appropriately if function == "queryTicket" { return s.queryTicket(APIstub, args) } else if function == "initLedger" { return s.initLedger(APIstub) } else if function == "createTicket" { return s.createTicket(APIstub, args) } else if function == "queryAllTickets" { return s.queryAllTickets(APIstub) } else if function == "sellTicket" { return s.sellTicket(APIstub, args) } return shim.Error("Invalid Smart Contract function name.") }
但是,这样做我只会收到消息“无效的智能合约功能名称”。调用w /时:
const request = { chaincodeId: options.chaincode_id, txId: transaction_id, fcn: 'queryAllTickets', args: [''] };
我建议两种可能的方法:
名称相同,但更新版本:
peer chaincode install -n fabcar -v 2.0 -p github.com/fabcar
或相同版本,但新名称:
peer chaincode install -n tickets -v 1.0 -p github.com/fabcar
您可以使用以下命令删除旧的chaincode容器映像:
docker images | grep fabcar | awk '{print $2}' | docker rmi