首页 > 其他分享 >【系列】链码开发

【系列】链码开发

时间:2022-09-01 23:24:59浏览次数:51  
标签:CORE 系列 chaincode 开发 peer 链码 com example

目录

官方basic-network开发者模式

打开三个terminals,都进入chaincode-docker-devmode

Terminal 1 - Start the network

docker-compose -f docker-compose-simple.yaml up

以上使用SingleSampleMSPSolo排序节点配置文件启动网络,并以dev mode启动peer节点。 它还启动了两个额外的容器——一个用于链码环境和一个用于与链码交互的 CLI。 创建和加入通道的命令在 CLI 容器中使用,因此我们可以立即跳转到链码调用。

Terminal 2 - Build & start the chaincode

执行命令

docker exec -it chaincode bash

输出为:

root@d2629980e76b:/opt/gopath/src/chaincode#

编译链码

cd chaincode_example02/go
go build -o chaincode_example02

运行链码

CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=mycc:0 ./chaincode_example02

The chaincode is started with peer and chaincode logs indicating successful registration with the peer.
Note that at this stage the chaincode is not associated with any channel. This is done in subsequent steps using the instantiate command.

Terminal 3 - Use the chaincode

即使处于 --peer-chaincodedev 模式,仍必须安装链码,以便生命周期系统链码可以正常通过检查。

使用CLI执行下列操作

docker exec -it cli bash

peer chaincode install -p chaincodedev/chaincode/chaincode_example02/go -n mycc -v 0

peer chaincode instantiate -n mycc -v 0 -c '{"Args":["init","a","100","b","200"]}' -C myc

invoke to move 10 from a to b.

peer chaincode invoke -n mycc -c '{"Args":["invoke","a","b","10"]}' -C myc

query a. 返回值应为 90.

peer chaincode query -n mycc -c '{"Args":["query","a"]}' -C myc

Testing new chaincode

默认情况下,我们只挂载chaincode_example02。 但是,您可以通过将不同的链码添加到 chaincode 子目录并重新启动网络来轻松测试不同的链码。 此时,它们将可以在您的chaincode容器中访问。

链码开发的一般过程

1 本地撰写代码

2 推送到远程

3 在相应的节点上安装链码/智能合约

# (peer0.org1)
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051
export CORE_PEER_LOCALMSPID=Org1MSP
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
peer chaincode install -n mycc -v 1.0 -l golang -p github.com/chaincode/chaincode_example02/go/

# (peer1.org1)
export CORE_PEER_ADDRESS=peer1.org1.example.com:7051
export CORE_PEER_LOCALMSPID=Org1MSP
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
peer chaincode install -n mycc -v 1.0 -l golang -p github.com/chaincode/chaincode_example02/go/

# (peer0.org2)
export CORE_PEER_ADDRESS=peer0.org2.example.com:7051
export CORE_PEER_LOCALMSPID=Org2MSP
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp
peer chaincode install -n mycc -v 1.0 -l golang -p github.com/chaincode/chaincode_example02/go/

# (peer1.org2)
export CORE_PEER_ADDRESS=peer1.org2.example.com:7051
export CORE_PEER_LOCALMSPID=Org2MSP
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp
peer chaincode install -n mycc -v 1.0 -l golang -p github.com/chaincode/chaincode_example02/go/

4 实例化链码

peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -l golang -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P 'OR ('\''Org1MSP.peer'\'','\''Org2MSP.peer'\'')'

5 查询智能合约/链码

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

6 调用链码

peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -c '{"Args":["invoke","a","b","10"]}'

开发者模式

1 关闭之前的网络

./byfn.sh down

2 修改docker-compose-cli.yaml

在basic-network的docker-compose.yaml里边有示例代码

# command: peer node start --peer-chaincodedev=true

每一个节点都需要配置,所以直接在base/peer-base.yaml中修改,将command: peer node start注释,增加command: peer node start --peer-chaincodedev=true。注意对齐。

3 增加peer节点的通信端口

70517053端口用于TLS安全通信,增加7052端口用于非加密通信。

image-20210910112545262 image-20210910112522825 image-20210910112707124 image-20210910112748891

4 以开发者模式运行网络

启动网络

export IMAGE_TAG=latest
export COMPOSE_PROJECT_NAME=devnet

docker-compose -f docker-compose-cli.yaml up -d

创建和加入通道并更新锚节点

安装链码

退出cli,在本地进行以下操作:

进入node.js链码工程文件夹(chaincode/mycc)

CORE_CHAINCODE_ID_NAME="mycc:v1.0" npm start -- --peer.address grpc://172.17.0.1:7052

image-20210910114703179

标签:CORE,系列,chaincode,开发,peer,链码,com,example
From: https://www.cnblogs.com/gangao/p/16648067.html

相关文章

  • 【系列】nodeSDK
    目录runAPP.sh代码分析docker-compose.yamltestAPIs.shBalancetransferPrerequisitesandsetup:ArtifactsRunningthesampleprogramOption1:TerminalWindow1Termina......
  • 【系列】手动启动网络
    目录准备工作1首先清理掉docker中所有相关的历史的容器2清除不需要的镜像3检查docker-composer是否安装4检查bin文件夹中的文件是否存在5创建项目文件夹6准备配置文......
  • Javamis 开发环境 - Tomcat安装和配置(超详细图文说明)
     文章目录 二、第二章搭建开发环境(windows环境)2.1、Tomcat安装和配置2.1.1、官网下载2.1.2、开始安装2.1.3、端口配置2.......
  • 学习doc —— Android开发者 01 组件基础
    组件们——初识活动Activity用户交互的入口点,拥有单个屏幕。服务Service通用的入口点,只在后台保持运行而没有界面。不会阻断用户与活动Activity的交互。其他组件来启......
  • 安全问题系列一|每位开发者必问的五个安全问题
    【编者按】关于安全防护的问题,我们将有两期系列内容,这是安全系列的第一期内容,如阅读第二期内容,请关注后期推送。开发团队在互联网应用的安全方面扮演着至关重要的角色。虽......
  • 3.多线程开发
    线程的常用方法:- t.start(),当前线程准备就绪(等待CPU调度,具体时间由CPU进行决定)   -t.join(),等待当前线程的任务执行完毕后再向下继续执行。i......
  • 【学习底层原理系列】Java底层-synchronized锁-3轻量级锁篇
     一.上一篇回顾1.偏向锁中的批量撤销和批量重偏向2.偏向锁发生了竞争,锁就要升级二.轻量级锁拆解1.加锁流程构建LockRecord,将LockRecord的obj指向当前锁对象,然后将无......
  • 使用OpenMMLab系列的开源库时,常用的脚本合集。
    使用OpenMMLab系列的开源库时,常用的脚本合集。开源仓库:gy-7/mmlab_scripts脚本解释:anchor_visiual.py生成的锚框可视化aug_test.py自动数据增强,单文件可视化效果......
  • .net core微服务系列之前言
    微服务概念其实已经流行了不短的年头了,只是大部分实战都是在以java为主的大型互联网公司使用,.net在国内的市场,作为.net程序猿们都懂得,就拿北京来说,前2年别说微服务了,就......
  • 人均瑞数系列,瑞数 5 代 JS 逆向分析
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切......