HyperLedger超級賬本智能合約部署問題
報錯:Error: could not assemble transaction: ProposalResponsePayloads do not match - proposal response: version:1 response:<status:200 >
我自己遇到這個問題的背景及原因:
背景:
在超級賬本的first-network的基礎上,即兩個組織org1和org2,然後每個組織的peer0來充當各自的錨節點。當我想自己嘗試部署鏈碼,用的也是下面鏈接中的例子。
智能合約(鏈碼)詳細解釋和應用:https://www.cnblogs.com/zongmin/p/11874792.html#autoid-2-4-0
不過我在對鏈碼實例化的時候加了約束,即在調用的時候必須同時使用兩個組織的錨節點peer0的證書籤名來備案纔行。具體就是在初始化的時候加上-P "AND ('Org1MSP.peer','Org2MSP.peer')" ,表示只有兩個節點的背書交易才能驗證通過(調用智能合約就是一次交易,查詢不需要證書備案的,只需要對應節點有安裝此鏈碼即可)。
peer chaincode instantiate -o orderer.example.com:7050 -C $CHANNEL_NAME -n car3 -v 1.0 -c '{"Args":[]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
於是完成這步之後我就想調用下面來對此智能合約相關賬本進行初始化,於是就出現了上述的報錯。
peer chaincode invoke -o orderer.example.com:7050 -n car3 -c '{"Args":["initLedger"]}' -C mychannel --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
原因:
因爲我在調用上述initLedger的時候,只在組織1的錨節點peer0上安裝並實例化了此鏈碼。試了很久,最後猜測可能是因爲組織2 的錨節點對此智能合約一無所知,怎麼爲它的操作備案呢。經過自己嘗試,就是在組織2的錨節點也安裝了此鏈碼(不需要再次實例化,一個channel裏面對鏈碼實例化一次即可,其他組織或節點只需安裝即可使用),然後再次執行了上述操作,沒有再報錯。