Docker compose Hyperledger fabcar示例链码处于开发模式(对等链码开发)
我试图从结构示例中修改fabcar示例,以便能够快速迭代链代码开发。默认情况下,我总是需要删除映像并重新运行安装脚本,如下所示。这需要大约30秒 我在docker compose中看到了标志--peer chaincodedev=true,我想知道如何才能让它工作 我遵循并将其与基本网络的docker组合进行了比较。我注意到有一个名为Docker compose Hyperledger fabcar示例链码处于开发模式(对等链码开发),docker-compose,hyperledger,hyperledger-fabric,Docker Compose,Hyperledger,Hyperledger Fabric,我试图从结构示例中修改fabcar示例,以便能够快速迭代链代码开发。默认情况下,我总是需要删除映像并重新运行安装脚本,如下所示。这需要大约30秒 我在docker compose中看到了标志--peer chaincodedev=true,我想知道如何才能让它工作 我遵循并将其与基本网络的docker组合进行了比较。我注意到有一个名为chaincode的容器,它运行一个名为fabric ccenv的图像。我将此定义添加到docker compose中,但无法在对等机上实例化链码。这应该怎么做 我
chaincode
的容器,它运行一个名为fabric ccenv
的图像。我将此定义添加到docker compose中,但无法在对等机上实例化链码。这应该怎么做
我想跑
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
引入了--peer chaincodedev=true
或所谓的开发模式,以允许在开发链码时短路,即允许您跳过使用链码打包、编译和部署docker映像的正式过程。相反,您可以从IDE执行链码,并对其进行调试和交互操作。例如,您可能有一些非常简单的链码:
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
标志运行您的对等计算机,您可以从其文件夹中执行您的链码,例如:
CORE_PEER_ADDRESS=localhost:7051 CORE_CHAINCODE_ID_NAME=chaincodeName:v1.0 go run smartContract.go
下一步运行时,需要像往常一样在通道中安装并实例化链码。当然,您可以从自己选择的IDE运行链码
注意:实例化链码时,需要使用在CORE\u chaincode\u ID\u 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\u PEER\u MSPCONFIGPATH
环境变量指向有效位置,例如在cli容器上下文中的许多示例中使用的位置:
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
还要指定MSP ID,请执行以下操作:
CORE_PEER_LOCALMSPID=Org1MSP
背书人的姓名和地址:
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
引入了--peer chaincodedev=true
或所谓的开发模式,以允许在开发链码时短路,即允许您跳过使用链码打包、编译和部署docker映像的正式过程。相反,您可以从IDE执行链码,并对其进行调试和交互操作。例如,您可能有一些非常简单的链码:
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
标志运行您的对等计算机,您可以从其文件夹中执行您的链码,例如:
CORE_PEER_ADDRESS=localhost:7051 CORE_CHAINCODE_ID_NAME=chaincodeName:v1.0 go run smartContract.go
下一步运行时,需要像往常一样在通道中安装并实例化链码。当然,您可以从自己选择的IDE运行链码
注意:实例化链码时,需要使用在CORE\u chaincode\u ID\u 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\u PEER\u MSPCONFIGPATH
环境变量指向有效位置,例如在cli容器上下文中的许多示例中使用的位置:
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
还要指定MSP ID,请执行以下操作:
CORE_PEER_LOCALMSPID=Org1MSP
背书人的姓名和地址:
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
谢谢阿泰姆,我现在找到了解决问题的办法 我复制了
chaincode
容器的docker compose定义,这反过来又重写了装载的卷。因此,无论何时安装,都无法找到MSP。因此,我再次删除了chaincode
容器
我将安装
、实例化
和调用
命令从startFabric.sh
脚本移动到install.sh
脚本中。我通过执行/startFabric.sh
启动docker容器。然后,我在主机上编译并运行链码
CORE_PEER_ADDRESS=localhost:7051 CORE_CHAINCODE_ID_NAME=fabcar:${VERSION} go run fabcar.go
现在我需要使用上一步中使用的版本执行install.sh
更改链码后,我将在主机上重新编译链码,增加版本。然后执行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/Admin@org1.example.com/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/Admin@org1.example.com/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')"
谢谢阿泰姆,我现在找到了解决问题的办法 我复制了
chaincode
容器的docker compose定义,这反过来又重写了装载的卷。因此,无论何时安装,都无法找到MSP。因此,我再次删除了chaincode
容器
我将安装
、实例化
和调用
命令从startFabric.sh
脚本移动到install.sh
脚本中。我通过执行/startFabric.sh
启动docker容器。然后,我在主机上编译并运行链码
CORE_PEER_ADDRESS=localhost:7051 CORE_CHAINCODE_ID_NAME=fabcar:${VERSION} go run fabcar.go
现在我需要使用上一步中使用的版本执行install.sh
更改链码后,我将在主机上重新编译链码,增加版本。然后执行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/Admin@org1.example.com/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/Admin@org1.example.com/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')"