(Fabric 学习二)测试fabric2.0 test-network使用basic链码

2023-11-03

这是更新,上一次写的错误很多,这次来更新一下!

以下是参考:

Hyperledger 学习(二):超级账本链码部署及调用(上:官方示例测试)_王三三的博客-CSDN博客

尝试链码编写及部署测试_routiao的博客-CSDN博客

routiao的博客_CSDN博客-区块链,前端领域博主

测试fabric-samples/test-network

1、启动docker网络

首先我们启动这个测试例子

cd fabric-samples/test-network

然后先移除先前运行中的所有容器

sudo ./network.sh down

然后重新打开网络

sudo ./network.sh up

可以通过命令来查看是否已经打开:

sudo docker ps -a

我们可以仔细看一下上面命令后得到的结果:

2、创建channel

Channel是一个用于特定网络成员之间通信的私有层,只有被邀请加入Channel的成员才能够使用它,对网络中其他成员不可见,每个Channel都有一个单独的区块链账本,被邀请加入Channel的peer可以存储Channel的账本然后验证Channel的交易。

运行如下命令可以创建一个名为mychannel的Channel连接Org1和Org2。

sudo ./network.sh createChannel

当出现这样就说明通道已经创立完毕

注:在测试时可能会出现很多权限的问题,如果出现permission denied,那么就需要将文件的权限打开,接下来会在文章中细说。 

为用户添加一个权限,目的是方便操作整个关于fabric的文件夹

sudo chmod -R 777 ~/go

同时由于还需要给用户添加opt的权限

sudo chmod -R 777 /opt

与网络进行交互:

当测试网络成功启动之后,可以利用命令行的peer命令与网络交互,它允许用户调用部署好的智能合约,更新channel或者安装和部署新的智能合约。

首先要设置一下,在bin目录下有peer等二进制文件,在config目录下有若干yaml文件,如果需要的话,可以使用如下命令将peer等添加到环境变量中:

先保证你要在test-network中:配置临时变量:(这里如果不配置,不能用peer命令)

export PATH=${PWD}/../bin:$PATH

此外还需要配置一下config所在的目录。

export FABRIC_CFG_PATH=$PWD/../config/

我们还需要设置go的环境

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

这样的话就可以进行链码的部署,注意这里不能用sudo ,不然会导致环境出问题

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

若出现这样的情况,说明链码部署成功 。

我们也可以在文件中看到,如果链码部署上去,系统会在test-network文件夹下面打出一个jar包名叫basic.tar.gz

3、智能合约调用

链码部署上去之后我们就可以来进行智能合约的调用

初始化成员的身份为组织1

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":[]}'

成功运行后会出现:

然后我们查询已添加到通道分类账本的资产列表:

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

查看效果:

 可以发现我们确实已经查询到数据,仔细发现其实这些数据是写死在智能合约中的,我们可以找到调用的智能合约/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go

查看到初始化分类账本的方法InitLedger是这么写的

 然后我们调用后就会得到这个数据

[
    {"ID": "asset1", "color": "blue", "size": 5, "owner": "Tomoko", "appraisedValue": 300},
    {"ID": "asset2", "color": "red", "size": 5, "owner": "Brad", "appraisedValue": 400},
    {"ID": "asset3", "color": "green", "size": 10, "owner": "Jin Soo", "appraisedValue": 500},
    {"ID": "asset4", "color": "yellow", "size": 10, "owner": "Max", "appraisedValue": 600},
    {"ID": "asset5", "color": "black", "size": 15, "owner": "Adriana", "appraisedValue": 700},
    {"ID": "asset6", "color": "white", "size": 15, "owner": "Michel", "appraisedValue": 800}
]

接下来我们使用智能合约中的不同方法。

4、调用合约中的不同方法

这些智能合约都是写在/asset-transfer-basic/chaincode-go/chaincode/smartcontract.go中,

我们打开来看看他可以执行的方法

4.1 添加资产

查看go文件中的代码:

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","10","XZDD","16402"]}'

执行情况:

4.2 删除资产

智能合约:

 执行:

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":["asset6"]}'

执行情况:

查看信息: 

可以发现下面这条记录已经不见了 

{"ID": "asset6", "color": "white", "size": 15, "owner": "Michel", "appraisedValue": 800}

4.3 修改资产

智能合约:

执行:

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","9","XZDD","521521"]}'

执行情况:

查看信息:

4.4 转移资产

智能合约:

执行:

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":["asset5","XZDD"]}'

执行情况:

查看信息:

 可以查看资产转移给了XZDD,现在XZDD是owner。

4.5 查看特定的资产

智能合约:

执行:

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

执行情况:

5、切换身份

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

export PATH=${PWD}/../bin:$PATH
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

具体操作此处不做复述,可以尝试打开两个bash窗口,初始化为不同的身份,一个窗口做资产变更操作,另一个窗口做资产查询操作来进行区块链的同步效果测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(Fabric 学习二)测试fabric2.0 test-network使用basic链码 的相关文章

  • 门禁管理:我才知道这个技术,可以如此高效!

    随着社会的发展和科技的进步 门禁监控技术在各类场所得到了广泛的应用 门禁监控系统不仅仅是简单的出入口管理 更是对安全和隐私的重要保障 客户案例 企业办公大楼 在现代企业办公环境中 对于办公大楼的安全管理显得尤为重要 通过部署泛地缘科技推出的
  • 没有互联网的远程主机上的 git 更新/补丁

    我有一个可以访问的主机 例如 10 0 0 2 该主机无法访问我的 git 存储库 也根本无法访问互联网 我不想一直复制包含完整项目的 zip 存档并将其解压缩到 10 0 0 2 git format patch mybranch roo
  • KALI Linux 最新超详细安装教程

    自己也在学习所以就想着记录一下 接下来开始安装 一 先下载好kali linux 的镜像 可以去kali的官网 https www kali org get kali kali bare metal 还可以去 清华大学开源软件镜像站下载 h
  • 在win10和Linux上配置SSH 无密码登录

    文章目录 一 用途 二 在本地机器上使用ssh keygen产生公钥私钥对 1 在Linux 或macOS 上产生SSH公私钥的方法 2 在win10上产生SSH公私钥的方法 a 检查windows 本地是否安装有ssh b 在本地生成SS
  • 使用匿名binder实现client向server端的死亡通知

    一 引言 因为binder是跨进程通信 难免会遇到服务端出现异常挂死的情况 这个时候需要通知到客户端进行相应的处理 在网络通信中是非常常见的机制 当然 在binder中 Android也为我们写好了相关的框架 但通过binder源码分析 你
  • 消耗服务器带宽的因素有哪些

    消耗 服务器 带宽的因素有 1 网站布局更改使网站页面大小增加 用户获取数据时会加大带宽的消耗 2 网站访客增加使浏览页面数据增加 从而加大对带宽的消耗 3 网页数量增加导致服务器带宽消耗加快 4 突然引起流量峰值 导致带宽使用量增加 5
  • TeslaMate特斯拉神器本地Docker部署实现无公网远程访问

    文章目录 1 Docker部署TeslaMate 2 本地访问TeslaMate 3 Linux安装Cpolar 4 配置TeslaMate公网地址 5 远程访问TeslaMate 6 固定TeslaMate公网地址
  • Linux中如何查看开启了哪些端口?

    在Linux中 端口是设备与外界通讯交流的出口 常用于指TCP IP协议中的端口 其按照端口号可以分为三类 分别是 公认端口 注册端口 动态端口 那么Linux中如何查看开启了哪些端口 以下是常用命令介绍 1 使用netstat命令 net
  • Linux 系统日志及其归档

    主要记录Linux 系统需要关注的日志文件 以及日志归档服务 rsyslogd 系统日志服务 rsyslogd 日志服务 rsyslogd reliable and extended syslogd 可靠 可扩展的系统日志服务 Rsyslo
  • Linux 软件安装以及管理

    本篇主要记录常用的软件安装和管理方式 主要是 yum rpm dnf apt pip 大致都是一样的 主要是部分软件提供了解决依赖的功能 内容不包括源码安装 源码安装情况相对比较复杂 后续有时间再补充 约定 案例所用模板软件均为 pytho
  • 如何解读服务器的配置和架构?

    在当今数字化时代 服务器作为企业或组织的重要基础设施 其配置和架构对于保障业务的稳定运行至关重要 如何解读服务器的配置和架构 成为了一个备受关注的话题 本文将围绕服务器配置和架构的解读进行深入探讨 帮助读者更好地理解服务器的性能 扩展性和安
  • 如何解决Mybatis-plus与Mybatis不兼容的问题:An attempt was made to call a method that does not exist. The attempt

    博主猫头虎的技术世界 欢迎来到 猫头虎的博客 探索技术的无限可能 专栏链接 精选专栏 面试题大全 面试准备的宝典 IDEA开发秘籍 提升你的IDEA技能 100天精通Golang Go语言学习之旅 领域矩阵 猫头虎技术领域矩阵 深入探索各技
  • 如何使用 Fabric 创建 postgresql 用户

    我想为我的设置 Fabric 脚本创建一个数据库用户 但 createuser 具有交互式密码输入功能 并且接缝不喜欢 Fabric 用 Fabric 示例来扩展答案 In fabfile py def create database Cr
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • 服务器VPS是什么意思?一文了解其含义与重要性

    在今天的数字时代 服务器扮演着至关重要的角色 它们是网站 应用程序和在线业务的基石 但是 你是否听说过VPS 本文将深入探讨什么是服务器VPS 以及为什么它在今天的互联网世界中如此重要 什么是服务器VPS 服务器的基本概念 在我们深入探讨V
  • 2023下半年软考「单独划线」合格标准公布

    中国计算机技术职业资格网发布了 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告 2023下半年软考单独划线地区合格标准各科目均为42分 01 官方通告 关于2023年度下半年计算机软件资格考试单独划线地区合格标准的通告
  • 网工内推 | 上市公司同程、科达,五险一金,年终奖,最高12k*15薪

    01 同程旅行 招聘岗位 网络工程师 职责描述 1 负责职场 门店网络规划 建设 维护 2 负责网络安全及访问控制 上网行为管理和VPN设备的日常运维 3 负责内部相关网络自动化和系统化建设 4 优化与提升网络运行质量 制定应急预案 人员培
  • 导入错误:没有名为“fabric.contrib”的模块

    Fabric 2 0 1 运行调用 fabfile py 的项目时出错 我使用的是 Python 3 5 1 有谁知道为什么会发生这种情况 Traceback most recent call last File bootstrap pex
  • 如何对项目的 cron 作业进行版本控制? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一堆项目 我用 git 和 fab 推送到服务器 它们是 Django 站点的负载 其中一些站点有 cron 作业 我希望处于这样的境地 通
  • 如何发现 Python Fabric 中的当前角色

    这是一个非常Fabric http docs fabfile org具体问题 但更有经验的 python 黑客可能能够回答这个问题 即使他们不了解 Fabric 我试图根据命令运行的角色来指定不同的行为 即 def restart if S

随机推荐

  • uniapp在H5获取当前定位信息不需要SDK可直接获取城市(包括经纬度省市区和市区编码)

    前言 最近在做获取用户当前定位信息的时候 发现uniapp官方提供的uni getLocation OBJECT 兼容性并不是特别好 光注意事项都是密密麻麻一大堆 在实际使用场景下 效果并不理想 也不是很稳定 于是便重新封装了一下腾讯地图的
  • JUC-多线程(5.获得线程的第三种方式)学习笔记

    文章目录 获得线程的第三种方式 Callable接口 1 前言 1 获得多线程的方法几种 2 以下两种获得线程的方式的异同 2 使用 1 重写 call 方法 2 创建线程 3 获取返回值 3 原理 1 简述 2 解释 3 结论 获得线程的
  • 关于加速度计读数与加速度方向的问题

    近几日对加速计读数的正负与其敏感轴 实际加速度计方向的关系又产生了诸多疑问 参考这篇博文的一个模型后 更是混乱了 http www geek workshop com forum php mod viewthread tid 1695 re
  • Kotlin Primer·第三章·Kotlin 与 Java 混编

    虽然 Kotlin 的开发很方便 但当你与他人协作时 总会碰到 Java 与 Kotlin 代码共存的代码项目 本章就教你如何优雅的实现 Kotlin 与 Java 混合编程 3 1 直接转换 3 1 1 将 Java 转换为 Kotlin
  • 数据库设计技巧

    如今 随着软件应用领域的扩大 我们要处理的数据也越来越多 面对各式各样的数据 我怎么样系统的保存和管理这些数据呢 这里我们就要采用关系型数据库 关系型数据库是当前最广泛的应用的数据库类型 如mysql oracle access 等等 很多
  • 力扣:455. 分发饼干--方法二使用while

    假设你是一位很棒的家长 想要给你的孩子们一些小饼干 但是 每个孩子最多只能给一块饼干 对每个孩子 i 都有一个胃口值 g i 这是能让孩子们满足胃口的饼干的最小尺寸 并且每块饼干 j 都有一个尺寸 s j 如果 s j gt g i 我们可
  • 等额本息算法及原理

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 首先我们假设我们的借款总额为a 借款年利率为n 借款月利率为b 借款期数为d 总还款为z 每月应还款为y 则会有 z d y 首先我们来算第一个月还钱情况 我们第一个月还的
  • LVS负载均衡群集(NAT模式、IP隧道模式、DR模式)

    目录 一 集群 1 1 含义即特点 1 2 群集的类型 1 3 LVS 的三种工作模式 1 4 LVS 调度算法 1 5 负载均衡群集的结构 1 6 ipvsadm 工具 二 NAT模式 LVS NAT模式配置步骤 实例 配置NFS服务器1
  • 论文笔记:Learning Traffic as Images: A Deep Convolutional Neural Network for Large-Scale Transportation

    2017 Sensor CNN 交通预测 1 交通矩阵提取 x轴 y轴分别是矩阵的时间和空间 交通矩阵的channel数量为1 2 使用CNN进行预测 3 实验部分 3 1 交通矩阵可视化 3 2 不同的CNN框架以及对应的精度
  • JDK动态代理的底层实现原理

    JDK动态代理的底层实现原理 动态代理是许多框架底层实现的基础 比如Spirng的AOP等 其实弄清楚了动态代理的实现原理 它就没那么神奇了 下面就来通过案例和分析JDK底层源码来揭秘她的神秘面纱 让她一丝不挂地呈现在我们面前 邪恶了 代理
  • 软件测试行业核心竞争力是什么?

    1 测试行业正在发生变化 在互联网新趋势和新要求的变革推动下 测试行业也在不知不觉中发生着非常大的改变 从早些年的懵懂发展 大家摸着石头过河 到大多高校设立软件测试专业 再到近几年各种测试培训盛行 如果说早期软件测试行业还是一个风口 随着不
  • 7.27美联储未能给出明确指引,黄金多空该如何布局

    近期有哪些消息面影响黄金走势 黄金多空该如何研判 黄金消息面解析 周四 7月27日 亚市早盘 美元指数承压于101 00关口附近 现货黄金价格维持在1980美元 盎司左右 美联储7月决策符合预期 鲍威尔对利率前景的看法接近 中间立场 介于鹰
  • javascript 判断奇偶性

  • 反思"列名无效"的问题

    发帖解决了 贴在地址 http topic csdn net u 20110316 21 1ee00820 09f4 446a a451 6e84694abfc5 html 829232601 初学 net 今天连数据库 一直报 列名无效
  • 浅谈迁移学习

    迁移学习背景 吴恩达 Andrew Ng 曾说 迁移学习将会是继监督学习之后的下一个机器学习商业成功的驱动力 现如今数据大爆炸 对机器学习模型来说要求快速构建 强泛化 对于数据来说 大部分数据没有标签 而传统的机器学习需要对每个领域都标定大
  • 关于Data at the root level is invalid错误的解决方式

    有时在使用XmlDocument LoadXML 方法时会出现报Data at the root level is invalid的错误 网上很多说发是因为xml文件的格式不对引起 如果你在仔细的查看了xml文件格式后并没有发现问题 那么很
  • 阿里云服务器Linux中CentOS7安装配置nginx的完整教程

    阿里云服务器CentOS7中安装配置nginx的完整教程 安装nginx依赖的环境 解压到要安装的文件夹 先创建一个目录用来存放安装的目录 指定nginx的安装路径为创建的目录路径 编译nginx 先执行make 执行安装 make ins
  • 制作简单的元素跟随鼠标移动,处于元素中心

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 原理 首先需要监听鼠标移动事件 我使用的是 addEventListener 然后将获取的鼠标位置赋予需要移动的元素 此元素需要将position设为ab
  • 链新:区块链大赛火热,成为技术与创意的练兵场

    链新 ID ChinaBlockchainNews 原创 作者 王晟宇 溯源 存证 供应链金融等概念 已经从业界延伸到学界 一个好的区块链方案有多么吃香 全国各地纷纷开展的区块链赛事或许能反映这个问题 一些原先知名度并不高的高校 凭借了区块
  • (Fabric 学习二)测试fabric2.0 test-network使用basic链码

    这是更新 上一次写的错误很多 这次来更新一下 以下是参考 Hyperledger 学习 二 超级账本链码部署及调用 上 官方示例测试 王三三的博客 CSDN博客 尝试链码编写及部署测试 routiao的博客 CSDN博客 routiao的博