部署管理征信链码

 一 链码准备

需要删除上面后面标记的文件,之后拖入

 

 打包链码 

注意需要先启动链

打包测试链码

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

 检查打包结果

ls -al chaincode

安装链码

运行以下进入 fabric-cli 容器:

docker exec -it fabric-cli bash

在org1中安装

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

在org2中安装

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

查看安装情况

peer lifecycle chaincode queryinstalled

批准链码

org1批准链码

设置链码环境变量

export CC_PACKAGE_ID=credit_chaincode_1.0:07b393b647b1ab0f20584987a23bbb27abade58be04670e9bca576b045182776

 设置 Org1 环境变量

. scripts/set-env.sh 1 0 7051

. 批准链码

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

org2批准链码

设置 Org1 环境变量

. scripts/set-env.sh 2 0 9051

. 批准链码

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

检查提交准备

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

提交链码

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

peer lifecycle chaincode commit -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com --channelID $CHANNEL_NAME --name credit_chaincode --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 credit_chaincode --tls --cafile $ORDERER_CA

测试验证

docker logs -f 容器名称

 调用功能creatCreditSubject功能

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

调用 queryCreditSubject功能

peer chaincode query -C $CHANNEL_NAME --name credit_chaincode -c '{"function":"queryCreditSubject","Args":["A001"]}'

七.征信后端开发

注意:需要启动链码,查看

docker-compose -f fabfic-compose.yaml up -d
docker ps

项目配置

使用vscode打开credit-back-init/app.py

app.py

加入query端口和create端口,启动app.py

修改成你自己的ip

from flask import Flask, request, jsonify
import requests
import json

app = Flask(__name__)
invokeURL = "http://192.168.200.101:8080/invoke"
evaluateURL = "http://192.168.200.101:8080/evaluate"
@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route('/createCreditSubject',methods=['POST'])
def creditCreate():
    json_data = request.json
    payload = json.dumps({
        "channelName":"applicationchannel",
        "chaincodeName":"credit_chaincode",
        "funcName":"createCreditSubject",
        "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('/queryCreditSubject',methods=['POST'])
def creditCredit():
    json_data = request.json
    payload = json.dumps({
        "channelName":"applicationchannel",
        "chaincodeName":"credit_chaincode",
        "funcName":"queryCreditSubject",
        "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('/createC')

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

启动go-gateway项目

nohup bee run &
tail -f nohup.out

出现端口占用问题

sudo lsof -i :8080
kill 4794

 postman接口验证

八.征信功能用户管理功能开发 

MySQL配置

使用容器启动 mysql (对外挂载 3307 端口)
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -d mysql:5.7

Mysql 配置
使用 navicat 连接 mysql

 创建credit数据库并创建user

Redis安装

以容器方式运行,对外映射 6379 端口
docker run -itd -p 6379:6379 redis

注意:需要开启链码

 

使用requirements.txt安装依赖,在credit-back-init中

 

pip install -r requirements.txt

 在项目添加config.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_cors import *
import redis
from urllib.parse import quote_plus as urlquote

app = Flask(__name__)
userName = 'root'
password = '123456'
dbHost = '192.168.200.101'
dbPort = 3307
dbName = 'credit'
app.config['SQLALCHEMY_DATABASE_URI'] = f'mysql://{userName}:{urlquote(password)}@{dbHost}:{dbPort}/{dbName}?charset=utf8'

db = SQLAlchemy(app)
CORS(app,resources=r'/*')
redis_service = redis.StrictRedis(host="192.168.200.101",port=6379,db=0)

user.py

from config import db
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String)
    password = db.Column(db.String)

    def __init__(self,username,password):
        self.username = username
        self.password = password
        

app.py

from flask import request, jsonify
import requests
import json
from config import app,db,redis_service
from user import User
import hashlib
import random

invokeURL = "http://192.168.200.101:8080/invoke"
evaluateURL = "http://192.168.200.101:8080/evaluate"

def get_token():
    """
    随机生成token
    """
    src = ''.join(random.sample('abcdefghijklmnopqrtuvwxyz!@#$%^&*()', 20))
    m2 = hashlib.md5()
    m2.update(src.encode("utf8"))
    return m2.hexdigest()

@app.before_request
def before():
    url = request.path
    if url == '/login' or url == '/register':
        pass
    else:
        token = request.headers.get('token')
        if token is None:
            return jsonify({'code': 500, 'data': '用户未登录'})
        username = redis_service.get(token)
        if username:
            pass
        else:
            return jsonify({'code': 500, 'data': '用户未登录'})

@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route('/createCreditSubject',methods=['POST'])
def creditCreate():
    json_data = request.json
    payload = json.dumps({
        "channelName":"applicationchannel",
        "chaincodeName":"credit_chaincode",
        "funcName":"createCreditSubject",
        "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('/queryCreditSubject',methods=['POST'])
def creditCredit():
    json_data = request.json
    payload = json.dumps({
        "channelName":"applicationchannel",
        "chaincodeName":"credit_chaincode",
        "funcName":"queryCreditSubject",
        "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('/createC')

@app.route('/register',methods=['POST'])
def register():
    get_json = request.json
    username = get_json['username']
    password = get_json['password']
    get_user = User.query.filter_by(username=username).first()
    if get_user is not None:
        return jsonify({
            'code':500,
            'msg':"User exists!"
        })
    save_user = User(username,password)
    db.session.add(save_user)
    db.session.commit()
    return jsonify({
        'code':200,
        'msg':"Register Success!"
    })

@app.route('/login',methods=['POST'])
def login():
    get_json = request.json
    username = get_json['username']
    password = get_json['password']
    get_user = User.query.filter_by(username=username).first()
    if get_user is None:
        return jsonify({
            'code':404,
            'msg':"User not exist"
        })
    if get_user.password == password:
        token = get_token()
        redis_service.set(token, username)
        data = {
            'token': token,
            'username': username,
        }
        return jsonify({
            'code':200,
            'msg': data
        })
    else:
        return jsonify({
            'code':500,
            'msg': "Password error!"
        })

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

 register登录测试

login登录测试



过滤器验证

九.前端设置

注意:前端/后端都要开启,需要开启mysql,redis

启动项目,在导航内,点击征信主体,点击创建征信主体,输入指定内容,有如下显示说明创建成功:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南栀北夏ii

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值