zoukankan      html  css  js  c++  java
  • hyperledger fabric 智能合约开发

    开发步奏:

    1.创建教育联盟

    2.区块链服务平台自动生成通道id

    3.区块链网络服务人员通过命令行在区块链网络中创建对应通道

    4.创建相关教育组织

    5.邀请相关组织加入联盟

    6.区块链网络管理人员通过命令行在区块链网络创建组织并加入通道

    7.教育组织相关开发人员通过区块链网络进行系统开发

    实现功能:

    联盟管理

    组织管理

    联盟邀请

    证书下载

    实现联盟相关组织签名同意机制、实现智能合约在线上传

    其他需求:

    1、把区块链显示仪表盘的接口实现换成Java的(目前:node.js)

    2、Java查看区块链信息的api接口 ------------- blockWalker

    借鉴腾讯区块链平台搭建思想

    ①创建联盟

    ②创建网络(选择区块链引擎[Fabric、Bcos、TrustSQL])

    =======================> ③选择区块链类型:私有链、公有链 =====> 创建对应channel

    ④设置网络信息 ------> 邀请组织(绑定channel中的org、peer)

     

    智能合约部分

    运行在docker容器里面,如果需要调试只能通过打日志log方式

    一个合约,就是一个用户用go/java/ node编写的文件(包括:字符,方法,返回信息)

    在区块中 chaincode目录下),一个合约只能对应一个目录

    用户上传的智能合约都是存放在hyperledger安装的以下目录:(注:src目录结构之前的是用户自定义安装目录结构)

    /home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/chaincode

    下面目录有用go/java/node语言开发智能合约的代码

    下面网址可以查看channel跟存入的数据等(一个合约跟一个channel会生成一个库)

    一个channel下可以安装多个合约,每个合约都会生成一个数据库

    安装合约

    命令行代码

    解释:

    -n : 合约名称

    -v:合约版本

    -p:合约所在目录

    说明:

    合约所在目录从github.com开始,因为前面会自动从根目录(opt)目录层拼上路径

    安装后,状态查看

    实例化合约

    实例化操作是会存到区块链上的,需要指定是在哪个channel里面上传区块。

    指令:

    说明:

      -n、-v跟上面指令相同

      -o:指定order的节点 //上块操作都必须指定order节点

      --tls --cafile:指定tls证书 //保证数据的安全性

      -c:执行方法名参数 //-c '{"Args":["init"]}'

      -P:指定倍数策略 //上面指令只装一台节点

    实例化后,状态查看

     

    实例化完整之后,可以触发合约

    往合约里面上传一条数据【invoke命令】

    查询刚刚上传的数据【调用自定义的合约方法】

    调用自定义的query方法,查询结果

    通过create database查看上传的数据

    合约代码调试(log打印方式)

    升级合约

    情景:增加新功能、有新的优化等

    注意:不需要再实例化

    1、修改、

    2、重新安装当前合约(版本更改2.0)

    3、调用升级指令(会在区块链上生成一个区块)

      a、升级之前先查询当前channel区块信息

      结果:高度 = 9

      b、执行升级指令

      c、升级之后再查询一次channel区块信息,看height增加了没有

      注意:更新之后,调用原来合约的查询方法,得到的都是最新数据,原来的版本数据作废

    合约里对私有数据(字段)处理【只能指定人查看】

    使用private data

    1、修改合约代码

    调用api存储和取值时,换成保存私有数据的api

    2、定义一个json

    说明:

    name:私有字段名称

    policy:策略(允许哪些组织机构访问)

    requiredPeerCount:除了倍数节点以外,哪些节点还可以作为私有数据的存储备份

    maxPeerCount:私有数据备份的最大数量

    blockToLive:私有数据存储上链之后,增加?个块,当前私有数据消失(0:永远不消失)

    memberOnlyRead:只有当前定义的组织机构成员可以访问

    3、指定实例化合约的路径

    说明:所有的策略都是在实例化的时候指定的

    channel部分

    创建channel

    方法一、服务器命令行创建

    方法二、Java sdk 创建

    1、在服务器生成tlx证书文件

    命令: configtxgen -profile TwoOrgsChannel -outputCreateChannelTx channel-artifacts/sunsheen.tx -channelID sunsheen

    说明:红色部分是证书名

    first-network目录下面执行当前命令

    查看当前生成的证书

    2、将证书文件下载到本地

    channel-artifacts目录下....

    3、编写userContext类;编写FabricClient类;测试

    FabricClient:

     

    上面获取channel方法需要修改

    测试:

     

    优化:

    先创建channel,返回后再加入peer跟order ...

    查看新创建的channel

    问题点:

    1、docker没有正常启动 ---- > docker ps

    · 命令查看,重新启动

    生成tx证书

    configtxgen -profile TwoOrgsChannel -outputCreateChannelTx channel-artifacts/ws.tx -channelID ws

    configtxgen -profile TwoOrgsChannel -outputCreateChannelTx channel-artifacts/sunsheen.tx -channelID sunsheen

    通过生成的证书创建channel

    /home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/fabric-ca-server/ca-cert.pem

    /home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem

    /home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem

    /home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

    /home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem

    peer channel create -o orderer.example.com:7050 -c testChannel -f ./channel-artifacts/testChannel.tx --tls --cafile /home/ubuntu/gopath/src/github.com/hyperledger/fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

    peer channel fetch config config_block.pb -o orderer.example.com:7050 -c testchainid

    ideal:

    阿里有区块链API,下下来,直接调用。

    https://help.aliyun.com/document_detail/141372.html?spm=a2c4g.11186623.6.606.281c379evInTeZ

    链码里不写业务  不同的业务控制接口

  • 相关阅读:
    Android Fragment 解析和使用
    Android数据库表的创建和数据升级操作
    Android通过xml文件配置数据库
    Android上的事件流操作数据库
    Android SQLite的ORM接口实现(一)---findAll和find的实现
    Android注解编程的第一步---模仿ButterKnife的ViewBinder机制
    Android下拉刷新底部操作栏的隐藏问题
    Android开发总结
    一个ListView布局的不断演化
    SpringBoot入门-概念(一)
  • 原文地址:https://www.cnblogs.com/Soy-technology/p/11993091.html
Copyright © 2011-2022 走看看