首页 > 编程语言 >学习hyperledgerfabric的小笔记(how to deploy a contract)

学习hyperledgerfabric的小笔记(how to deploy a contract)

时间:2023-03-04 19:35:27浏览次数:45  
标签:hyperledgerfabric -- chaincode deploy contract PWD 链码 com example

start the network

./network.sh down 关闭当前正在运行的网络
./network.sh up createChannel 启动测试网络,创建一个通道,这个命令会创建一个叫做mychannel的通道,同时创造一个Org1和一个Org2

package the smart contract(use GO)

go.mod文件有当前Go文件所需要调用的API
GO111MODULE=on go mod vendor 如果成功会创建一个vendor文件

到达此处已经完成了Go语言依赖的创建,接下来就可以打包文件了

export PATH=${PWD}/../bin:$PATH 使用这个文件将peer结点的二进制文件进行加入CLI path(CLI是用来和fabric网络进行交互的一个工具)
export FABRIC_CFG_PATH=$PWD/../config/可以将完成FABRIC_CFG_PATH的配置
此时已经成功将peer结点置入CLI,可以使用peer version命令来确认是否已经完成

peer lifecycle chaincode package basic.tar.gz --path ../asset-transfer-basic/chaincode-go/ --lang golang --label basic_1.0该命令可以完成chaincode的打包
这个命令可以在当前文件目录下创建一个basic.tar.gz ,使用--lang去指定打包中所使用的语言,--path用来提供你需要打包的链码的地址,--label作为打包使用的标签,用来检验你是否已经完成了合约的部署

install the chaincode package

当我们打包了一个合约之后,我们需要将这个合约安装到每一个peer结点上面去,第一步先安装到org1结点

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051

进行以上的环境变量的设定,将结点CLI变成Org1的管理者
peer lifecycle chaincode install basic.tar.gz使用该命令将该安装包链码安装到结点上
同理,先配置org2的环境,然后使用上述相同的命令将链码安装到结点上

export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:9051

approve a chaincode definition

在安装完链码过后,需要为你的组织去赞成这样的一个链码定义。这个定义包括了很多关于链码管理的许多参数,例如名字、版本和背书策略等等
一个org已经在它的结点上面安装了链码之后,他们需要输入package的ID去赞成链码定义
peer lifecycle chaincode queryinstalled命令可以直接查询当前包的ID
export CC_PACKAGE_ID=basic_1.0:69de748301770f6ef64b42aa6bb6cb291df20aa39542c3ef94008615704007f3在此处输入这段命令加上自己package的ID

而由于此时的环境是为了配置org2所设置的,因此我们可以作为org2的管理员去进行这样的一个定义的赞成,因此作为组织(org)层面的赞成,我们可以通过gossip的方式将该赞成传递到每一个结点

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name basic --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem"该命令可以对合约的定义进行赞成
其中--package-id直接使用之前定义的外部变量,--sequence是一个数字用来表示链表被更新或者放置的次数,在这里因为是第一次部署,所以sequence为1,在这个链码更新之后,sequence的值就会变为2。
我们本应该提供一个签名条例或者通道配置条例给approveformyorg命令去做成一个链码背书条例。如果我们没有提供的时候,系统便会使用默认的条例。也就是说,当有组织加入或者退出通道时,背书条例会自行进行更改和修正当前组织数目

若想去赞同一个链码的定义,你需要使用一个管理者的身份。因此,CORE_PEER_MSPCONFIGPATH这个变量需要指向一个有着管理员身份的MSP文件夹。因为这样一个赞成的过程为被提交到排序结点上,在那里需要验证你的管理员身份,然后将赞成的结果分发到每一个小的结点上。

我们仍然需要作为org1来赞成这样一个链码,因此首先需要先调整环境变量使自己指向org1的管理员

export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_ADDRESS=localhost:7051

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name basic --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem"

至此,我们已经完成了大部分内容。如果一个组织想要在它的结点上运行链码,那么他们必须要先赞成这个链码。如果你在一个组织赞成之前提交了定义,那么这个组织并不会将后续的交易背书。因此我们建议现让所有的组织都赞成链码之后再将链码定义进行提交。

commit the chaincode definition to the channel

在大部分的组织都已经赞成了链码定义之后,其中一个组织便可以将这个链码定义提交到通道之上。如果大部分组织都赞成了链码定义,那么提交的交易就会被成功接受。

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name basic --version 1.0 --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" --output json这条命令可以帮助观察是否通道成员们都赞成着同一个链码定义。因为只是查看是否相同,在这条命令中不需要输入package的id
这条指令会返回出每个org是否赞成这个链码(使用json的形式)

peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name basic --version 1.0 --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt"这条命令会提交链码定义到通道之中(前提是组织们都已经赞成了当前链码定义中的参数)其中--peeraddress用来目标结点地址

peer lifecycle chaincode querycommitted --channelID mychannel --name basic --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem"这个命令可以查询链码定义是否已经成功地提交到了通道之中,在这之前各个结点会进行确认,确认大部分组织都已经赞成了这个链码定义

invoking the chaincode

在链码定义成功提交到通道上之后,我们各个安装了链码包的结点就可以开始正常运行链码了
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"InitLedger","Args":[]}'以下命令在账本上创建了一个初始的资产集合。

注意:在使用invoke的时候需要选取复数的已经赞成了链码定义的结点来满足背书策略。

peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'该命令可以帮助读取初始化的所有资产

upgrading a smart contract

通道成员们可以通过打包一个新的链码包然后使用新的链码包的id去赞成一个新的定义,将序列号加一……这样的方法来完成一次链码的更新。同样,也可以通过升级链码来更换背书策略(此时只需要重新赞成一次新的链码定义即可,不需要重新打包安装)

标签:hyperledgerfabric,--,chaincode,deploy,contract,PWD,链码,com,example
From: https://www.cnblogs.com/MakeTheFoxRush/p/17178891.html

相关文章

  • deploy资源-配置节点亲和性以及污点容忍
    apiVersion:apps/v1kind:Deploymentmetadata:name:health-check-deploymentlabels:app:health-checkspec:replicas:1selector:matchLabels......
  • 4大特性,带你认识化繁为简的华为云CodeArts Deploy
    摘要:2月27日,华为云发布持续部署服务CodeArtsDeploy,通过模块化自由编排部署流程,实现软件的自动化部署,帮助企业软件产品的快速、高效、高质量交付。本文分享自华为云社区《......
  • k8sdeploy配置文件示例
    apiVersion:extensions/v1beta1kind:Deploymentmetadata:name:[k8s服务名]namespace:defaultlabels:k8s-app:[k8s服务名]spec:replicas:1te......
  • Odoo Deployment Expert.
    OdooDeploymentExpert.  roadyoung请假设你是odoo部署专家,应用及开发工程师。 好的,作为Odoo部署专家、应用及开发工程师,我可以提供以下服务: Odoo部署:我可以帮助客......
  • k8s-deployment扩缩容
    目录手动扩缩容手动扩缩容1.kubectlscaledeploynginx--replicas=3#非交互2.kubectleditdeploynginx#交互式......
  • k8s-deployment回滚
    更新yaml文件镜像版本--模拟更新版本1.kubectlsetimagedeploynginxnginx=nginx:1.14.2--record#非交互2.kubectleditdeploynginx#交互式更改查看历史版......
  • Deployment
    Deployment部署(Deployment)是k8s中常用的资源之一,部署是无状态的,为一般性项目应用的主体,我们可以像声明docker-compose.yaml文件一样去定义容器的属性。内容介绍:Deployme......
  • Istio从入门到精通——Istio Deployment Models
    IstioDeploymentModelshttps://istio.io/latest/docs/ops/deployment/deployment-models/ WhenconfiguringaproductiondeploymentofIstio,youneedtoanswer......
  • Vercel deploy environment variables All In One
    VerceldeployenvironmentvariablesAllInOne.envfilevsENV_API_KEYvariables(......
  • Spring Cloud Contract/Test
    Spring|Cloudhttps://spring.io/cloudApacheOpenWhiskisaserverless,opensourcecloudplatformhttps://openwhisk.apache.org/SpringCloudContracthttps:/......