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

 一 . 链码介绍

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. 点击调用,显示调用成功:

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值