2017-08-14 58 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')" 
相关问题