2017-08-14 54 views
0

我試圖從織物樣本中更改fabcar示例,以便能夠快速迭代鏈式代碼開發。默認情況下,我總是需要刪除圖像並重新運行設置腳本,如this question elaborated on。這需要30秒。Hyperledger Fabric fabcar在dev模式下的鏈式代碼示例(peer-chaincodedev)

我在docker-composition中看到了標誌--peer-chaincodedev=true,並想知道如何才能讓它工作。

我跟着Tutorial "Chaincode for Developers",並將其與基礎網絡的碼頭構成進行比較。我注意到有一個名爲chaincode的容器,它運行一個名爲fabric-ccenv的圖像。我將這個定義添加到docker撰寫,但不能實例化對端的chaincode。這應該怎麼做?

我試圖運行

peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n fabcar -v 1.0 -c '{"Args":[""]}' -P "OR ('Org1MSP.member','Org2MSP.member')" 
在CLI

,但我發現

2017-08-14 11:54:13.404 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP 
2017-08-14 11:54:13.404 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity 
2017-08-14 11:54:13.406 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc 
2017-08-14 11:54:13.406 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc 
2017-08-14 11:54:13.407 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A95070A6708031A0C08E59EC6CC0510...324D53500A04657363630A0476736363 
2017-08-14 11:54:13.407 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: 61C75870AB68C1E7D6921DB4CA6029A0093A3D57DB421BC697864555BFC81167 
Error: Error endorsing chaincode: rpc error: code = Unknown desc = Failed to deserialize creator identity, err MSP Org1MSP is unknown 

回答

3

--peer-chaincodedev=true或引入所謂的開發模式,以允許短路而開發chaincode,即允許您跳過使用鏈碼打包,編譯和部署Docker鏡像的官方過程。相反,您可以從IDE執行鏈接代碼並進行調試並與其交互操作。例如,你可能有一些非常簡單的chaincode:

type smartContract struct { 
} 

func (p *smartContract) Init(stub shim.ChaincodeStubInterface) peer.Response { 
    return shim.Success(nil) 
} 

func (p *smartContract) Invoke(stub shim.ChaincodeStubInterface) peer.Response { 
    actionName, params := stub.GetFunctionAndParameters() 

    if actionName == "hello" { 
     shim.putState("Greeting", "Hello World") 
     return shim.Success(nil) 
    } 
return shim.Error(errors.New("Undefined function")) 
} 

func main() { 
    err := shim.Start(new(smartContract)) 
    if err != nil { 
     fmt.Printf("Error starting chaincode: %s", err) 
    } 
} 

現在,如果你有--peer-chaincodedev=true標誌運行你的同伴,你可以從它的文件夾,例如執行你的chaincode:你有它運行

CORE_PEER_ADDRESS=localhost:7051 CORE_CHAINCODE_ID_NAME=chaincodeName:v1.0 go run smartContract.go 

下一個,您需要像往常一樣安裝和實例化通道中的鏈式代碼。當然,您可以從您選擇的IDE運行鏈接代碼。

注意:在實例化chaincode時,您需要使用您在CORE_CHAINCODE_ID_NAME=chaincodeName:v1.0變量中定義的名稱和版本。當然你需要創建一個頻道。

# Creating and joining the channel 
peer channel create -o localhost:7050 -c mychannel -f mychannel.tx 
peer channel join -o localhost:7050 --blockpath mychannel.block 

# Once chaincode is running we can install and instantiate it 
peer chaincode install -o localhost:7050 -n chaincodeName -v 1.0 -p github.com/somepackage/chaincode 
peer chaincode instantiate -o localhost:7050 -n chaincodeName -v 1.0 -C mychannel -c '{"Args": ["init"]}' 

回到你的問題,我想你會看到錯誤可能是因爲您的MSP的錯誤配置或您尚未創建一個通道。在錯誤的配置的情況下,你需要確保CORE_PEER_MSPCONFIGPATH環境變量指向有效的位置,例如在許多例子中使用CLI中的容器的背景:

export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp 

而且指定MSP ID:

CORE_PEER_LOCALMSPID=Org1MSP 

和地址贊同同行:

CORE_PEER_ADDRESS=peer0.org1.example.com:7051 
0

感謝阿爾喬姆,我現在找到了解決我的問題。

我複製了chaincode容器的docker-compose定義,該容器又覆蓋了安裝的卷。所以,無論何時,這個MSP都無法找到。所以我再次移除chaincode容器。

我移動離開startFabric.sh腳本installinstantiateinvoke命令到install.sh腳本。我通過執行./startFabric.sh來啓動Docker容器。然後,我編譯和

CORE_PEER_ADDRESS=localhost:7051 CORE_CHAINCODE_ID_NAME=fabcar:${VERSION} go run fabcar.go 

現在我需要在上一步中使用的版本執行install.sh在主機上運行的chaincode。

當我對鏈碼進行更改後,我將在主機上重新編譯鏈碼,遞增版本。然後我執行upgrade.sh,看起來像這樣:

#!/bin/bash 
# 
# Exit on first error 
set -e 

if [ -z "$1" ]; then echo "Error: Needs chaincode version"; exit; fi 
CHAINCODE_VERSION=$1 

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/[email protected]/msp" cli peer chaincode install -n fabcar -v ${CHAINCODE_VERSION} -p github.com/fabcar 
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/[email protected]/msp" cli peer chaincode upgrade -o orderer.example.com:7050 -C mychannel -n fabcar -v ${CHAINCODE_VERSION} -c '{"Args":[""]}' -P "OR ('Org1MSP.member','Org2MSP.member')" 
相關問題