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
链码里不写业务 不同的业务控制接口
hyperledger fabric 智能合约开发的更多相关文章
- Hyperledger Fabric 智能合约开发及 fabric-sdk-go/fabric-gateway 使用示例
前言 在上个实验 Hyperledger Fabric 多组织多排序节点部署在多个主机上 中,我们已经实现了多组织多排序节点部署在多个主机上,但到目前为止,我们所有的实验都只是研究了联盟链的网络配置方 ...
- 使用IBM Blockchain Platform extension开发你的第一个fabric智能合约
文章目录 安装IBM Blockchain Platform extension for VS Code 创建一个智能合约项目 理解智能合约 打包智能合约 Local Fabric Ops 安装智能合 ...
- 区块链入门到实战(27)之以太坊(Ethereum) – 智能合约开发
智能合约的优点 与传统合同相比,智能合约有一些显著优点: 不需要中间人 费用低 代码就是规则 区块链网络中有多个备份,不用担心丢失 避免人工错误 无需信任,就可履行协议 匿名履行协议 以太坊(Ethe ...
- 智能合约开发环境搭建及Hello World合约
如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇. 就先学习任何编程语言一样,入门的第一个程序都是Hello World.今天我们来一步一步从搭建以太坊智能合约 ...
- 智能合约开发solidity编程语言开发一个以太坊应用区块链投票实例
智能合约开发用solidity编程语言部署在以太坊这个区块链平台,本文提供一个官方实战示例快速入门,用例子深入浅出智能合约开发,体会以太坊构建去中心化可信交易技术魅力.智能合约其实是"执行合 ...
- NEO智能合约开发(二)再续不可能的任务
NEO智能合约开发中,应用合约比较简单,是的你没看错,应用合约比较简单. 应用合约三部曲,发布.调用.看结果.除了看结果工具比较缺乏,发布调用neogui最起码可以支撑你测试. 鉴权合约比较麻 ...
- EOS智能合约开发(四):智能合约部署及调试(附编程示例)
EOS智能合约开发(一):EOS环境搭建和创建节点 EOS智能合约开发(二):EOS创建和管理钱包 EOS智能合约开发(三):EOS创建和管理账号 部署智能合约的示例代码如下: $ cleos set ...
- EOS智能合约开发(三):EOS创建和管理账号
没有看前面文章的小伙伴可以看一下 EOS智能合约开发(一):EOS环境搭建和启动节点 EOS智能合约开发(二):EOS创建和管理钱包 创建好钱包.密钥之后,接下来你就可以创建账号了,账号是什么?账号保 ...
- 以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明
以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明 为了让你的Ðapp运行上以太坊,一种选择是使用web3.js library提供的web3.对象.底层实 ...
随机推荐
- Java—构造方法及this/super/final/static关键字
构造方法 构建创造时用的方法,即就是对象创建时要执行的方法. //构造方法的格式: 修饰符 构造方法名(参数列表) { } 构造方法的体现: 构造方法没有返回值类型.也不需要写返回值.因为它是为构建对 ...
- C#LeetCode刷题之#155-最小栈(Min Stack)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4020 访问. 设计一个支持 push,pop,top 操作,并能 ...
- JavaScript Babel说明
babel插件只是去唤醒 @babel/core中的转换过程 转换模块需要手动安装 npm install @babel/core 转换方式需要安装 @babel/preset-env babel默认 ...
- JavaScript 防抖(debounce)和节流(throttle)
防抖函数 触发高频事件后,n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间 /** * * @param {*} fn :callback function * @param {* ...
- 三分钟秒懂BIO/NIO/AIO区别?
首先来举个例子说明吧,假设你想吃一份盖饭: 同步阻塞:你到饭馆点餐,然后在那等着,还要一边喊:好了没啊! 同步非阻塞:在饭馆点完餐,就去遛狗了.不过溜一会儿,就回饭馆喊一声:好了没啊! 异步阻塞:遛狗 ...
- SQL Server中row_number函数的简单用法
一.SQL Server Row_number函数简介 ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数. 行号以每个分区中第一行的行号开头. 以下是R ...
- Linux top详解
命令 top 参数说明: d:改变显示的更新速度 q: 没有任何延迟的显示速度 c:切换显示模式,共有两种模式,一是只显示执行档的名称,零一种显示完整的路径与名称S:累计模式,会将已完成或消失的子行 ...
- Java继承后访问成员的特点
继承后的特点--成员变量 对象访问成员变量时,会先在子类中查找有没有定义对应的变量,若子类中存在就会就近使用子类中的变量,若子类中没有定义就会沿着继承关系往上找有没有定义相应的变量,若父类中也没有则编 ...
- python爬虫以及后端开发--实用加密模板整理
都是作者累积的,且看其珍惜,大家可以尽量可以保存一下,如果转载请写好出处https://www.cnblogs.com/pythonywy 一.md5加密 1.简介 这是一种使用非常广泛的加密方式,不 ...
- 修改vsftpd的默认根目录/var/ftp/pub到另一个目录
修改ftp的根目录只要修改/etc/vsftpd/vsftpd.conf文件即可: 加入如下几行: local_root=/var/www/html chroot_local_user=YES ano ...