提交链码-编辑前后端,调用链码功能

news2024/11/25 23:28:22

 一 . 链码介绍

1.什么链码?

  • • 链码是一段用 Go、Node.js 或者 Java 实现了规定接口的程序。链码在安全的Docker容器中运行, 与背书节点的进程隔离。通过应用程序提交的交易,链码初始化和管理账本状态。
  • • 链码通常处理网络成员协商达成的业务逻辑,因此可以被视为”智能合约”。由链码创建的账本更新 仅限于该链码的范围,其他链码无法直接访问。然而,在同一个网络中,如果具有适当的权限,一个 链码可以调用另一个链码来访问其状态。
  • • 在这个概念主题中,我们将从区块链网络运营者的角度来探讨链码,而不是应用程序开发者。链码运 营者可以将本主题作为指南,了解如何使用Fabric链码生命周期在其网络上部署和管理链码。

 2.链码生命周期

二.代码形式实现链码的生命周期

 1. 链码准备

准备文件 

  1.  在测试目录下创建chaincode 
mkdir chaincode
  1.  拷贝测试链码进chaincode目录

  1. 拷贝set-env.sh脚本进scripts目录

2.打包链码 

打包测试链码

运行以下链码:

export FABRIC_CFG_PATH=${PWD}/config
peer lifecycle chaincode package ./chaincode/chaincode_basic.tar.gz --path ./chaincode/chaincode-basic --lang node --label chaincode_basic_1.0

检查打包结果:

3. 安装链码

运行以下进入fabric-cli容器:
docker exec -it fabric-cli bash

1. 在org1中安装 运行以下链码安装:

. scripts/set-env.sh 1 0 7051
peer lifecycle chaincode install chaincode/chaincode_basic.tar.gz

在org2中安装 运行以下链码安装:

. scripts/set-env.sh 2 0 9051
peer lifecycle chaincode install chaincode/chaincode_basic.tar.gz

查看安装情况
peer lifecycle chaincode queryinstalled

4. 批准链码

org1批准链码

1. 设置链码环境变量

export CC_PACKAGE_ID=chaincode_basic_1.0:1acd72b79f2d6f41ee6c55d408e8639ddd1cb90b4a450f571ded881d5d91f439

2. 设置Org1环境变量

. scripts/set-env.sh 1 0 7051

3.批准链码

peer lifecycle chaincode approveformyorg -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com --channelID $CHANNEL_NAME --name chaincode_basic --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile $ORDERER_CA

org2批准链码

1. 设置Org1环境变量

. scripts/set-env.sh 2 0 9051

2.批准链码

peer lifecycle chaincode approveformyorg -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com --channelID $CHANNEL_NAME --name chaincode_basic --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile $ORDERER_CA

检查提交准备

peer lifecycle chaincode checkcommitreadiness --channelID $CHANNEL_NAME --name chaincode_basic --version 1.0 --sequence 1 --tls --cafile $ORDERER_CA --output json

5. 提交链码

提交链码是特殊交易,需要背书节点背书,因此需要指定2个背书节点。具体操作如下:

peer lifecycle chaincode commit -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com --channelID $CHANNEL_NAME --name chaincode_basic --version 1.0 --sequence 1 --tls --cafile $ORDERER_CA --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles $PEER0_ORG1_CA --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles $PEER0_ORG2_CA

查询提交的链码

peer lifecycle chaincode querycommitted --channelID $CHANNEL_NAME --name chaincode_basic --tls --cafile $ORDERER_CA

6. 测试验证

调用InitLedger功能

执行以下命令调用:

peer chaincode invoke -o orderer.example.com:7050 --tls --cafile $ORDERER_CA --channelID $CHANNEL_NAME --name chaincode_basic --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles $PEER0_ORG1_CA --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles $PEER0_ORG2_CA -c '{"function":"InitLedger", "Args":[]}'

调用ReadAsset功能

执行以下命令调用:

peer chaincode query -C $CHANNEL_NAME --name chaincode_basic -c '{"function":"ReadAsset","Args":["asset1"]}'

三.HF链码调用

1.. 使用示例代码调用

拷贝application-gateway-go项目

1. 在服务器创建goProject目录

2. 找到fabric-samples\asset-transfer-basic\application-gateway-go文件夹

3. 将文件夹拷贝至服务器goProject目录

拷贝证书

运行以下代码拷贝:

cd ~/goProject/application-gateway-go 
cp ~/test/organizations . -r

安装依赖

运行以下代码安装依赖:

go mod tidy

运行项目验证

运行以下代码:

go run assetTransfer.go

2. 使用给定接口项目调用

使用VSCode打开Go-Gateway项目

修改app.conf

修改peer1Org1IP为你服务器IP

拷贝organizations目录

拷贝服务器test目录下的organizations目录到项目中

复制项目进入服务器goProject中

安装依赖并运行

go mod tidy
bee run

使用Postman验证

验证evaluate接口

三.fabric基础案例开发实训

项目架构

1. 构建案例项目服务端

创建项目

• 创建目录 在指定目录下创建base-back文件夹,在文件夹下创建app.py

构建最小系统

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
 return 'Hello World!'
if __name__ == '__main__':
 app.run()

运行与调试代码

点击右上角三角符号 执行成功将有下方信息显示

访问“/”路由确认 使用浏览器,访问“http://localhost:5000/”

 

2. 代码调用basic链码

链码功能说明链码功能包括:InitLedger(初始 化资产)、CreateAsset(创建资 产)、ReadAsset(读取资产)、UpdateAsset(更新资产)、DeleteAsset(删除资产)

启动go-gateway

服务端进入指定目录

bee run

初始化接口功能

使用VSCode在app.py中添加如下代码:

from flask import Flask,request,jsonify
import requests
import json
app = Flask(__name__)
invokeURL = "http://192.168.200.112:8080/invoke"
evaluateURL = "http://192.168.200.112:8080/evaluate"
@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route('/initLedger',)
def ledgerInit():
    pass

@app.route('/createAsset',methods=['POST'])
def assetCreate():
    json_data = request.json
    payload = json.dumps({
        "channelName":"applicationchannel",
        "chaincodeName":"chaincode_basic",
        "funcName":"CreateAsset",
        "paramArray":json_data.get("paramArray")
    })
    headers = {
        'Content-Type': 'application/json'
    }

    response = requests.request("POST",invokeURL,headers=headers,data=payload)

    print(response.text)
    return jsonify({
        'code':200,
        'msg':"create success"
    })


@app.route('/readAsset',methods=['POST'])
def assetRead():
    json_data = request.json
    payload = json.dumps({
        "channelName": "applicationchannel",
        "chaincodeName": "chaincode_basic",
        "funcName": "ReadAsset",
        "paramArray": json_data.get("paramArray")
    })
    headers = {
        'Content-Type': 'application/json'
    }

    response = requests.request("POST",evaluateURL,headers=headers,data=payload)

    print(response.text)
    return jsonify({
        'code':200,
        'msg':"query success",
        "data": response.text
    })

@app.route('/updateAsset',)
def assetUpdate():
    pass

@app.route('/deleteAsset',)
def assetDelete():
    pass

if __name__ == '__main__':
    app.run()

安装并使用requests

pip install requests

开发CreateAssets功能

使用VSCode在app.py中添加如下代码:

CreateAssets功能开发验证

开发ReadAssets功能

使用VSCode在app.py中添加如下代码:

ReadAssets功能开发验证

3. 开发前端项目代码

使用VSCode打开项目

解压base-front-init.zip文件,使用VSCode打开项目

首先要把原本20.0版本的Node删掉,下载16.6版本 

使用VSCode打开项目

使用npm run serve运行项目,使用浏览器打开url: http://localhost:8020

完善CreateAsset功能代码

找到Basic.vue完善以下代码:

在调用之前确保postman已经调用成功,启动go-gateway 

createAsset功能调用

 

完善ReadAsset功能代码

在Basic.vue中首先完善页面显示代码:

readAsset功能调用

1. 页面输入参数:

2. 点击调用,显示调用成功:

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

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

相关文章

vue下载文件时显示进度条

1.单个下载&#xff08;开始是导出按钮 下载显示进度条&#xff09; html <el-button click.stop"exportReport(scope.row, scope.index)" v-if"!scope.row.schedule" icon"el-icon-download"size"small" type"text"styl…

2023最新!MySQL8于win10环境下的安装配置保姆级教程

2023最新&#xff01;MySQL8于win10环境下的安装配置保姆级教程 MySQL官网&#xff1a;https://www.mysql.com/downloads/ 导航 文章目录 2023最新&#xff01;MySQL8于win10环境下的安装配置保姆级教程导航一、MySQL下载二、安装MySQLchoosing a Setup Typeselect products…

软件测试面试题(三)

Selenium 相关Selenium 基础什么是 Selenium&#xff1f;什么是 Selenium WebdriverS 什么是 elenium IDE&#xff1f;常用自动化测试工具机器运行原理&#xff0c;写出一段元素查找的代码&#xff1f;如何开展自动化测试框架的构建&#xff1f;如何设计自动化测试用例webdrive…

Angular 由一个bug说起之五:为什么现代CSS系统倾向于少用或不用absolute定位?

在现代网页设计中&#xff0c;CSS&#xff08;层叠样式表&#xff09;是不可或缺的一部分。在过去&#xff0c;使用position: absolute定位元素是一种常见的技术&#xff0c;但是随着前端开发的发展&#xff0c;现代CSS系统倾向于减少或避免使用absolute定位。本文将探讨这一趋…

上班族必备的便签备忘录app 好用的便签备忘录软件

上班族每天都需要处理大量的工作事项&#xff0c;从策划方案到客户沟通&#xff0c;每一个环节都至关重要。然而&#xff0c;仅仅依靠大脑记忆&#xff0c;很容易遗漏某些细节&#xff0c;甚至可能错过重要的截止日期。为了避免这种情况&#xff0c;许多人选择使用一款优秀的便…

NATAPP内网穿透工具安装和使用教程

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 必须要按照先操作完第一步 再操作第二步骤下载教程 1.进入网址注册&#xff1a;NATAPP - 2.下载网址&#xff1a;NATAPP-内网穿透 基于ngrok的国内高速内网映射工具 流程 注册NATAPP 实名认证通过之后…

学习笔记Label自右向左滚动和父容器内左右移动方法(含代码)

一、【滚动效果】 【radialMenu1控件】菜单切换浏览器和控制台 需要定时器Timer&#xff08;默认属性EnabledFalse,Interval100&#xff09; 二、【方法1和方法2&#xff0c;通过属性切换开关和方向】 try{if (myObject.TextScrollSwitch){//打开移动if(myObject.TextScroll…

固态继电器:推进可再生能源系统

随着可再生能源系统的发展&#xff0c;太阳能系统日益成为现代能源解决方案的先锋。在这种背景下&#xff0c;固态继电器&#xff08;SSR&#xff09;&#xff0c;特别是光耦固态继电器的利用变得日益突出。本文旨在深入探讨SSR在可再生能源系统中的多方位应用&#xff0c;重点…

echarts利用graphic属性给饼图添加内圈图片及外圈图片(可自适应宽度位于饼图中心)

最终效果图&#xff1a; 目录 前言资源主要部分graphic介绍style介绍代码 加载饼图方法&#xff08;option所有的配置&#xff09; 前言 思路是看到这个博客启发的&#xff1a;点击跳转查看博客&#xff0c;然后在graphic属性里改了我的实际需求&#xff0c;譬如图片的宽高、…

Django框架之python后端框架介绍

一、网络框架及MVC、MTV模型 1、网络框架 网络框架&#xff08;Web framework&#xff09;是一种软件框架&#xff0c;用于帮助开发人员构建Web应用程序和Web服务。它提供了一系列预先编写好的代码和工具&#xff0c;以简化开发过程并提高开发效率。网络框架通常包括以下功能…

Python-VBA函数之旅-len函数

目录 一、len函数的常见应用场景&#xff1a; 二、len函数使用注意事项&#xff1a; 三、如何用好len函数&#xff1f; 1、len函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、…

【上岗认证】错题整理记录

目录 &#x1f31e;一、阶段1&#xff1a;编码规范 &#x1f30a;编码规范考试-CC &#x1f31e;二、阶段2&#xff1a;开发基础 &#x1f30a;C/C &#x1f30a;数据库&#xff08;Oracle/MySql&#xff09; &#x1f31e;三、阶段3&#xff1a;测试基础 &#x1f30a;…

好的猫咪主食冻干到底该咋选?品控稳定的主食冻干推荐

315中国之声报道的河北省邢台市南和区某宠粮代工厂的“行业潜规则”&#xff0c;给各位铲屎官拉响了警钟。配料表上写的鸡肉含量为52%&#xff0c;新鲜鸡小胸含量为20%&#xff0c;所谓的鲜鸡肉其实就是鸡肉粉。本来养宠物是为了让自己身心愉悦&#xff0c;但这样的行业乱象弄得…

就业班 第三阶段(负载均衡) 2401--4.18 day2 LVS-DR模式

3、LVS/DR 模式 实验说明&#xff1a; 1.网络使用NAT模式 2.DR模式要求Director DIP 和 所有RealServer RIP必须在同一个网段及广播域 3.所有节点网关均指定真实网关 主机名ip系统用途client172.16.147.1mac客户端lvs-server172.16.147.154centos7.5分发器real-server1172.16.…

我的创作纪念日_十多年来的坚守

机缘 今天是我的码龄15周年&#xff0c;也是我撰写了第 1 篇技术博客&#xff1a;《如何把Centos stream 9桌面字体调大》三周年的时子&#xff0c;我看到 CSDN官方给我的短信“魔极客 &#xff0c;有幸再次遇见你”&#xff0c;很是高兴&#xff0c;为了感谢CSDN官方给我的回…

回归与聚类——K-Means(六)

什么是无监督学习 一家广告平台需要根据相似的人口学特征和购买习惯将美国人口分成不同的小 组&#xff0c;以便广告客户可以通过有关联的广告接触到他们的目标客户。Airbnb 需要将自己的房屋清单分组成不同的社区&#xff0c;以便用户能更轻松地查阅这些清单。一个数据科学团队…

16 JavaScript学习: 类型转换

JavaScript 类型转换 Number() 转换为数字&#xff0c; String() 转换为字符串&#xff0c; Boolean() 转换为布尔值。 JavaScript 数据类型 在 JavaScript 中有 6 种不同的数据类型&#xff1a; stringnumberbooleanobjectfunctionsymbol 3 种对象类型&#xff1a; Obje…

双向链表专题

文章目录 目录1. 双向链表的结构2. 双向链表的实现3. 顺序表和双向链表的优缺点分析 目录 双向链表的结构双向链表的实现顺序表和双向链表的优缺点分析 1. 双向链表的结构 注意&#xff1a; 这⾥的“带头”跟前面我们说的“头节点”是两个概念&#xff0c;带头链表里的头节点…

强大CSS3可视化代码生成器

DIY可视化CSS可视化代码生成器是一种工具&#xff0c;它允许用户通过图形界面直观地创建和编辑CSS样式&#xff0c;然后自动生成相应的CSS代码。DIY可视化对于那些不熟悉CSS语法或者想要更直观地调整样式的人来说特别有用。 提供了强大的CSS可视化编辑功能&#xff0c;用户可以…

【牛客网】:链表的回文结构(提升)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;每日一练 &#x1f337;追光的人&#xff0c;终会万丈光芒 目录 &#x1f3dd;问题描述&#xff1a; &#x1f3dd;问题分析&#xff1a; 步骤一&#xff1a;查找链表的中间节点 步骤二&am…