hyperledger fabric 智能合约开发

摘要:
开发步骤:1.创建教育联盟2.区块链服务平台自动生成频道id 3.区块链网络服务人员通过命令行在区块链网络中创建相应频道4.创建相关教育组织5.邀请相关组织加入联盟6。区块链网络管理器通过命令行7创建组织并加入区块链网络中的渠道。教育组织的相关开发者通过区块链网络开发系统实现功能:链接联盟管理组织管理联盟邀请证书下载实现联盟相关组织的签名和同意机制,实现智能合约的在线上传。其他要求:1.在仪表板上显示区块链

hyperledger fabric 智能合约开发第1张

开发步奏:

1.创建教育联盟

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

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

4.创建相关教育组织

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

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

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

实现功能:

联盟管理

组织管理

联盟邀请

证书下载

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

hyperledger fabric 智能合约开发第2张

hyperledger fabric 智能合约开发第3张

其他需求:

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

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

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

①创建联盟

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

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

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

hyperledger fabric 智能合约开发第4张

智能合约部分

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

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

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

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

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

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

hyperledger fabric 智能合约开发第5张

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

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

hyperledger fabric 智能合约开发第6张

安装合约

命令行代码

hyperledger fabric 智能合约开发第7张

解释:

-n : 合约名称

-v:合约版本

-p:合约所在目录

说明:

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

安装后,状态查看

hyperledger fabric 智能合约开发第8张

实例化合约

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

指令:

hyperledger fabric 智能合约开发第9张

说明:

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

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

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

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

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

实例化后,状态查看

hyperledger fabric 智能合约开发第10张

hyperledger fabric 智能合约开发第11张

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

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

hyperledger fabric 智能合约开发第12张

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

hyperledger fabric 智能合约开发第13张

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

hyperledger fabric 智能合约开发第14张

通过create database查看上传的数据

hyperledger fabric 智能合约开发第15张

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

hyperledger fabric 智能合约开发第16张

升级合约

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

注意:不需要再实例化

1、修改、

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

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

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

hyperledger fabric 智能合约开发第17张

结果:高度 = 9

b、执行升级指令

hyperledger fabric 智能合约开发第18张

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

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

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

使用private data

1、修改合约代码

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

hyperledger fabric 智能合约开发第19张

2、定义一个json

hyperledger fabric 智能合约开发第20张

说明:

name:私有字段名称

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

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

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

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

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

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

hyperledger fabric 智能合约开发第21张

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

channel部分

创建channel

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

hyperledger fabric 智能合约开发第22张

方法二、Java sdk 创建

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

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

说明:红色部分是证书名

hyperledger fabric 智能合约开发第23张

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

查看当前生成的证书

hyperledger fabric 智能合约开发第24张

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

channel-artifacts目录下....

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

hyperledger fabric 智能合约开发第25张

FabricClient:

hyperledger fabric 智能合约开发第26张

hyperledger fabric 智能合约开发第27张

上面获取channel方法需要修改

hyperledger fabric 智能合约开发第28张

测试:

hyperledger fabric 智能合约开发第29张

hyperledger fabric 智能合约开发第30张

优化:

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

hyperledger fabric 智能合约开发第31张

查看新创建的channel

hyperledger fabric 智能合约开发第32张

问题点:

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

· 命令查看,重新启动

hyperledger fabric 智能合约开发第33张

生成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

peerchannelfetchconfigconfig_block.pb-oorderer.example.com:7050-ctestchainid

ideal:

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

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

hyperledger fabric 智能合约开发第34张

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

免责声明:文章转载自《hyperledger fabric 智能合约开发》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Django --- 与数据库进行交互Arduino学习笔记 (五) -- 红外接收与解码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

去除win10中Edge的新建标签页广告

听人安利多了microsoft的Edge浏览器各种好处,想着也许就可以替代chrome了也不错,至少可以少安装一个浏览器,装上之后,的确比较香,但是每次新建标签页就是: 在菜单中设置--隐私、搜索和服务--防止跟踪--跟踪防护--严格 最后的效果: 后来发现在页面设置中--页面布局--自定义{ 显示快速链接:关闭 背景:关闭 内容:内容关闭 } 就会有...

Cesium原理篇:Material【转】

https://www.cnblogs.com/fuckgiser/p/6171245.html Shader 首先,在本文开始前,我们先普及一下材质的概念,这里推荐材质,普及材质的内容都是截取自该网站,我觉得他写的已经够好了。在开始普及概念前,推荐一首我此刻想到的歌《光---陈粒》。 在真实世界里,每个物体会对光产生不同的反应。钢看起来比陶瓷花瓶更闪闪...

FISCO-BCOS平台共识

FISCO-BCOS 应用于区块链的多节点并行拜占庭容错共识算法 看了下微众平台的wiki共识知识 学习下 ()内是自己的思考  参考: https://github.com/FISCO-BCOS/Wiki/tree/master/ 问题与动机:PBFT是一种可用的拜占庭容错算法,但是由于该算法的三个阶段是串行执行,存在共识效率低的问题 提出的算法内容:...

zedgraph 定制X轴标签无法完整显示的问题

在分布式项目中发现,X轴温度坐标点,在曲线回放中不能完整显示,右键点击恢复原始大小,又可以显示。把该事件执行也不成功;点击刷新按钮也可显示 在测试中又可以完全显示。 后采用如下方法进行解决,原理不太清楚: for (int i = xtraTabControl1.TabPages.Count-1 ; i > 0; i--) { xtraTabCon...

c# C#设置WebBrowser使用Edge内核

开始尝试是用 Microsoft.Toolkit.Forms.UI.Controls.WebView,后来发现一大堆问题,还要求WIN10 SDK的版本之类的。 网上看到的简单的解决办法(只需要修改注册表)(前提是win10系统需要安装Edge浏览器): 这个函数是网上复制的, 传入11000是IE11, 9000是IE9, 只不过当试着传入6000时,...

区块链学习5:智能合约Smart contract原理及发展历程科普知识

☞ ░ 前往老猿Python博文目录 ░ 一、智能合约的定义 通俗来说,智能合约就是一种在计算机系统上,当一定条件满足的情况下可被自动执行的合约,智能合约体现为一段代码及其运行环境。例如银行信用卡的自动还款就是一种典型的智能合约。 我们来看看智能合约概念的演进历史: 智能合约概念于1994年由Nick Szabo首次提出,百度上关于智能合约的定义...