basic1.0链码部署(基于test-network 环境ubuntu20.04腾讯云)

news2024/11/25 15:28:08

解决了官方示例指令需要科学上网才能运行的问题(通过手动下载二进制文件和拉取官方fabric-samples)。具体的将bootstrap.sh脚本解读了一遍 具体可以参照我的博客 fabric中bootstrap.sh到底帮助我们干了什么?(curl -sSL https://bit.ly/2ysbOFE | bash -s执行不成功,如何手动执行相相关操作?)_sh bootstrap.sh_小小小小关同学的博客-CSDN博客

前期的准备工作不再记录 也就是安装go docker docker-compose等操作

链码部署与调用等操作基于完成克隆fabric-samples仓库、拉取二进制文件、下载需要的镜像这些操作之后

这个脚本可以快速帮助我们搭建起自己的fabric网络 是一个单机多节点的示例。对于脚本的具体实现在搭建完多级部署后再看会有不一样的体会,将一些指令通过脚本的方式封装执行节省了使用者的操作,类似于一个fabric尝鲜。笔记中还有对basic链码的标注,看懂链码学会调用!


1.查看test-network脚本的使用说明

./network.sh -h  

可以看出我们可以通过他给出的这些指令来完成对应的功能,也可以用过一些参数也自定义通道名称。

2.启动测试网络

./network.sh up

启动后创建了四个结点: cli ;两个peer结点 一个排序结点。

3.创建通道

 

./network.sh createChannel  (可以带上 -c 通道名称  来指定)我使用的是默认名称mychannel

 执行成功后

4.在通道上安装一个链码

 在我们安装链码之前最好去链码所在的目录去查看一下链码所需要的依赖包是否成功导入:

可以先进入到链码所在的目录看一看:../asset-transfer-basic/chaincode-go 就是这个目录下。

 cd ../asset-transfer-basic/chaincode-go

这里已经有了vendor 之前遇见过没有的情况 也就是要自己手动拉取一下(go mod vendor)

然后回到test-network执行部署链码命令

./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go

成功后:

 注意:

如果没有vendor的话可与参考下面的方法,有的话直接跳过就可以(有的时候没有的话也先执行一些启动连链码的那条指令 可能会帮助拉取vendor)

执行前注意使用 go env 查看go环境 确认配置好了gomoudle ,然后在chaincode-go目录下输入

go mod vendor 即可 然后再次查看就能看到vendor

回到测试网络.sh文件所在的目录下 重新启动链码即可

 

5 与网络交互

到现在我们的basic链码已经成功安装了,现在我们可以对basic链码的功能来一个测试了:

  • 使用以下命令将这些二进制文件添加到您的CLI路径:
export PATH=${PWD}/../bin:$PATH
  • 您还需要将fabric-samples代码库中的FABRIC_CFG_PATH设置为指向其中的core.yaml文件:
export FABRIC_CFG_PATH=$PWD/../config/
  • 现在,您可以设置环境变量,以允许您作为Org1操作peer CLI:
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/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=localhost:7051
  • 运行以下命令用一些资产来初始化账本:
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":[]}'

这是初始化账本的源码实现,就是讲结构变量通过json.Marshal转换成json 再通过PutState讲资产存入世界状态。

  • 现在你可以用你的 CLI 工具来查询账本。运行以下指令来获取添加到通道账本的资产列表(在运行指令之前可以先看看链码中对于这个函数的实现到底是怎样的):

可以看到这个想要调用这这个函数 只需要一个传入一个交易上下文接口就可以了,但是在使用中这个应该是fabric内部自己传入的并不需要我们来传入,所以对于这个函数我们并不需要传入任何参数,直接给出函数名即可。

peer chaincode query -C gdwchannel -n basic -c '{"Args":["GetAllAssets"]}'

  • basic中还给出了一些其他函数,我们可以看看具体怎么实现的 然后来调用它
  • 添加资产

命令:(下面命令一次性输入)

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":"CreateAsset","Args":["asset7","pink","20","HEUN","888"]}'

  • 删除资产

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":"DeleteAsset","Args":["asset1"]}'

  • 更新资产(修改资产)

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":"UpdateAsset","Args":["asset7","RED","20","gdw","888"]}'

  • 转移资产

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":"TransferAsset","Args":["asset6","Christopher"]}'

  • 切换身份

之前都是使用组织1来验证代码的增删改查操作,现在我们可以再开一个终端,用组织2来验证功能,只需要变更环境变量即可!

export CORE_PEER_TLS_ENABLED=true 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/Admin@org2.example.com/msp export CORE_PEER_ADDRESS=localhost:9051

然后就可以在 peer0.org2.example.com上来调用一些智能合约,比如来查询我们自定义的资产7看看是否能在组织二上查询到

peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset7"]}'

完成后想要关闭测试网络的话可以执行:

./network.sh down

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/401331.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PACS(CT、CR、DR、MR、DSA、RF医院影像管理系统源码)

PACS具体功能介绍: 病人、采集、观片、三维、报告、照相、退出、文件、图像采集、观片操作、三维、测量标注、诊断报告、照相打印、统计报表、系统管理、帮助、病人浏览器、选择数据源、打开图像、病人登记、工作列表、采集、打开画廊。 DICOM查询/获取&#xff1a…

应用层

应用层 是计算机网络体系的最顶层,是设计和建立计算机网络的最终目的,也是计算机网络中发展的最快的部分 开发一种新的网络应用首先考虑的问题就是网络应用程序在各种端系统上的组织方式和它们之间的关系 客户/服务器方式(C/S方式) 客户是服务请求方,服务器是服务提供方 服务…

【2023-03-10】JS逆向之美团滑块

提示:文章仅供参考,禁止用于非法途径 前言 目标网站:aHR0cHM6Ly9wYXNzcG9ydC5tZWl0dWFuLmNvbS9hY2NvdW50L3VuaXRpdmVsb2dpbg 页面分析 接口流程 1.https://passport.meituan.com/account/unitivelogin主页接口:需获取下面的参数&#xff0…

Intel 处理器 macOS降级到Big Sur

1 创建可引导的 macOS 安装器 将移动硬盘作安装 Mac 操作系统的启动磁盘。 创建可引导安装器需要满足的条件 移动硬盘(格式化为 Mac OS 扩展格式),至少有 14GB 可用空间已下载 macOS Big Sur的安装器 2 下载 macOS macOS Big Sur安装器会…

分享一个OJ平台——浙江工商大学的OJ平台

1.引言 最近是有总喜欢讨论算法题,因为他们在准备考研复试,为什么我不准备呢?这是一个悲伤的故事,刚好自己也有面试遇到只能使用C和C的代码题,他们说这OJ平台相对简单一些,那些刷不来LeetCode可以试试这个&…

【数据分析:工具篇】NumPy(1)NumPy介绍

【数据分析:工具篇】NumPy(1)NumPy介绍NumPy介绍NumPy的特点数组的基本操作创建数组索引和切片数组运算NumPy介绍 NumPy(Numerical Python)是Python的一个开源的科学计算库,它主要用于处理大规模的多维数组…

linux安装mysql-8.0.31

1)、下载mysql-8.0.31压缩包两种方式 a.本地下载后上传服务器解压,下载地址:https://downloads.mysql.com/archives/community/ b.服务器使用命令下载,注意:路径在那,就下载到那个位置。 wget https://dev.mysql.com/…

解Bug之路-Nginx 502 Bad Gateway

前言 事实证明,读过Linux内核源码确实有很大的好处,尤其在处理问题的时刻。当你看到报错的那一瞬间,就能把现象/原因/以及解决方案一股脑的在脑中闪现。甚至一些边边角角的现象都能很快的反应过来是为何。笔者读过一些Linux TCP协议栈的源码…

宁盾目录成功对接Coremail邮箱,为其提供LDAP统一认证和双因子认证

近日,宁盾与 Coremail 完成兼容适配,在 LDAP 目录用户同步、统一身份认证及双因子认证等模块成功对接。借此机会,双方将加深在产品、解决方案等多个领域的合作,携手共建信创合作生态,打造信创 LDAP 身份目录服务新样本…

第15章 局部波动率的影响

这学期会时不时更新一下伊曼纽尔德曼(Emanuel Derman) 教授与迈克尔B.米勒(Michael B. Miller)的《The Volatility Smile》这本书,本意是协助导师课程需要,发在这里有意的朋友们可以学习一下,思…

Java基础-2023.3.08-Java入门

Java入门 1.人机交互 CMD(K1-K5) 1.CMD: 1)在Windows中,利用命令行的方式操作计算机 2)可以打开文件,打开文件夹,创建文件夹等 注: 2.打开CMD …

GEE学习01--配置Python与Jupyter Notebook

1、查看自己电脑有哪些Python 首先,使用Arcgis Pro克隆了Python,原先的Pro自带和clone的Python都要确保在系统变量中设置了Path。 这里可以看到有一个WindowsApps,在Path中要将其至于自己的Python下面,否则的话,在Cm…

JavaScript语法

文章目录一、JavaScript是什么?JavaScript引入方式二、基础语法书写语法输出语句变量数据类型运算符流程控制语句数组函数JS变量作用域对象一、JavaScript是什么? JavaScript:是一门跨平台的脚本语言,用来控制网页行为&#xff0…

目标检测 pytorch复现R-CNN目标检测项目

目标检测 pytorch复现R-CNN目标检测项目1、R-CNN目标检测项目基本流程思路2、项目实现1 、数据集下载:2、车辆数据集抽取3、创建分类器数据集3、微调二分类网络模型4、分类器训练5、边界框回归器训练6、效果测试目标检测 R-CNN论文详细讲解1、R-CNN目标检测项目基本…

IO系统—相关数据结构初始化及调用详解(文件描述符表、文件结构表、文件节点表、设备节点表、内核驱动表等)

文章目录数据结构总述数据结构初始化流程概述各结构初始化及关联说明文件描述符表文件结构(文件表)文件节点设备节点内核驱动表数据结构总述 本文基于NEW_1 型内核数据结构展开,通过上图可以看出了使用三种数据结构(文件描述符表项…

【Linux系统编程】03:文件夹操作

文件夹操作 OVERVIEW文件夹操作一、文件夹操作1.修改目录chdir2.打开目录opendir3.关闭目录closedir4.读取目录readdir5.文件信息获取stat二、案例使用1.ls实现2.stat文件信息获取3.ls -la主要实现4.ls -la重点修改5.ls -la文件字典序6.ls -la文件颜色显示三、补充操作1.文件定…

【SPSS】交叉设计方差分析和协方差分析详细操作教程(附案例实战)

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 方差分析概述 交叉设计方差分析

hibernate学习(三)

session:类似connection对象是连接对象 一、session: 二、session中的API 三、get和load的区别 四、修改方法: void update(object obj) 五、删除方法: void delete(object obj&#xff0…

案例14-代码结构逻辑混乱,页面设计不美观

目录 目录 一:背景介绍 二:思路&方案 三:过程 问题1:代码可读性差,代码结构混乱 问题2: 代码逻辑混乱,缺乏封装的意识 问题3:美观问题:问题和图标没有对应上 四…

最短路专题——Dijkstra、Floyd、Bellman-Ford、SPFA

目录前言一、全源最短路1.1 Floyd二、单源最短路2.1 Dijkstra2.1.1 堆优化版的Dijkstra2.2 Bellman-Ford2.2.1 队列优化版的Bellman-Ford:SPFA前言 BFS是一种朴素的最短路算法,它可以找到无权图或边权都相同的图的最短路,但是对于边权不完全…