有对IBM Hyperledger fabric架构有更深入了解的吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有对IBM Hyperledger fabric架构有更深入了解的吗相关的知识,希望对你有一定的参考价值。

参考技术A Hyperledger fabric和公有链的区别见我在这里的回答。 区块链是什么,如何简单易懂地介绍区块链? - 知乎 Hyperledger-fabric算是目前在联盟链(私有链)这领域做得最成熟的了。新版本(v1)的整个结构大概是这样: 首先,链上有些chaincode(链码),可以理解为智能合约,总之是已经同意的逻辑。 然后一笔交易可以指向并触发这些合约,然后得到一个输出,这个输出也会被写在交易里。 此外,新版本相比于旧版本的变化是,整个网络的节点被分为两种(client我不认为是网络中的节点,因为不参与共识)。一种叫endorser(批准者),一种就是普通节点(peer)。此外还有某个叫做orderer(排序)的功能模块,有些节点可以身兼orderer,这个模块的主要功能是负责给交易排序和打包成区块。 交易的过程是这样: 1,首先,每个链码都有规定的批准者,假设我们考虑一个用于汽车交易的链码,它规定的批准者有A,B,C三个节点,比如说,这个链码规定了如下逻辑:这个交易生效的前提是A,B,C中的两个批准了这笔交易。 2,这个时候,假设用户小明要买车,他生成一笔交易请求用于触发这个用于交易的链码,他把这个请求发给A,B,C三个节点等待批准。 3,如果请求无误可信,A,B,C三个节点认可了这个请求,他们会直接进行运算生成结果然后写成交易反馈给用户(这个时候并不写入区块链,或者他们管这个叫账本)。 4,用户收到返回的交易之后,如果确认返回的交易结果一致,则把交易发给排序模块,然后排序模块将所有收到的交易根据时间排序,打包形成区块,然后发给所有节点。注意,这里排序模块不对交易进行任何验证,也就是不管他们收到的交易是不是得到了足够的批准,只要格式对,他们都打包进区块。 5,所有节点验证每笔交易是不是得到了足够的批准,如果是,则注明有效交易,否则著名无效交易,但不论结果如何,所有交易都会被写进账本。 6,最后,如果交易成功,节点通知用户交易已经加入账本。 相比于之前的版本,v1多了这些东西: 1,排序模块从逻辑上被拆了出来,然而实际上节点可以兼职排序。 2,多了批准者这个东西,也就是说,只有批准者会知道你的交易的详情,而其他节点在验证的时候只验证是不是得到了规定的批准者的批准。 3,我这里没写,但是多了一个叫通道的东西,不同的通道本质上就是不同的独立的区块链。 注:我不是这个项目的参与者,所以以上的介绍完全基于个人看他们说明文件的理解,他们文档里对于区块链的一个核心问题——存在恶意节点的情况所言甚少,所以我也不清楚他们对于恶意节点有多高的容忍度。 但是,光从这个结构本身看,的确,v1增加了很多功能,结构也很清晰,很灵活,可以支持不同的应用场景。然而,从理论的角度讲,并没有多少创新性可言,区块链技术的目前的两个主要问题——scalability(可扩展性)和私密性,它都没有解决。尽管它号称解决了这两个问题,实际上还是建立在牺牲可靠性和安全性的基础之上的。本回答被提问者采纳

在 Win7 环境使用 hyperledger fabric source code 模拟 IBM Bluemix Blockchain Service

 

在 Win7 环境使用 hyperledger fabric source code 模拟 IBM Bluemix Blockchain Service

标签: blockchain区块链
技术分享 分类:
  
 

目录(?)[+]

 

在 Win7 环境使用 hyperledger/fabric source code 模拟 IBM Bluemix Blockchain Service

作者:陳兆麟 Email:[email protected]

当美国联准会(Fed)主席叶伦力挺区块链 (blockchain) 后,区块链如野火燎原般风靡了整个地球,它将改变人类传统生活习惯;唯一 IBM bluemix所提供的 bloclcahain service 最近几乎塞到爆,常出现用量超出负荷的讯息,幸好IBM佛心提供了4 万行 hyperledger/fabric source code如果没有这些 source code, 区块链的应用将会被口袋深的大厂把持;目前企业只要有支持 Docker 云端平台都可以自行开发区块链的应用系统,有兴趣的企业可私讯联系共同开发。以下范例是以 hyperledger/fabric source code在local machine 仿真 IBM Bluemix bloclcahain service 的功能,也就是不必登录至 IBM bluemix 就可以执行IBM 所提供的範例blockchain marbles。

開發環境:Win7 (64 bit, RAM >=8G) , vagrant , blockchain, docker,golang

1. win7 安装 cygwin (https://cygwin.com/install.html)

将安装之执行文件目录 (C:\cygwin64\bin) 设定在控制台系统 path 变量 
win7 安装 virtualbox (VirtualBox-5.1.6-110634-Win.exe) (https://www.virtualbox.org/
win7 安装 Git (https://git-scm.com/downloads)

2.建立 github账号

登入github 建立账号 (https://github.com/ 纪录 username 及 password)

fork hyperledger/fabric

浏览器入以下网址: 
https://github.com/hyperledger/fabric/blob/master/docs/Gerrit/gerrit.md#Working-with-a-local-clone-of-the-repository

(点选 fork )

技术分享

3. 确认 fabric 安装至你的 guthub repository,

技术分享

4.将 xxxxxx/fabric clone 至 Win7 local machine

进入Win7 command shell:

$mkdir -p d:\GoProjects\src\github.com\hyperledger

$cd d:\GoProjects\src\github.com\hyperledger

$git clone https://github.com/xxxxxxx/fabric

$cd d:\GoProjects\src\github.com\hyperledger\fabric\devenv

修正 Vagrantfile (D:\GoProjects\src\github.com\hyperledger\fabric\devenv) 
新增 : 
config.vm.network “forwarded_port”, guest: 22, host: 22 
config.vm.network “forwarded_port”, guest: 3000, host: 3000

$vagrant up (第一次在 virtual box 产生虚拟机器 hyperledger需要一段时间)

技术分享

5.使用 putty (附录 1) 登录 hyperledger VM

(username: vagrant,password:vagrant) 
技术分享

6.在hyperledger VM 使用 nvm 安装 node 最新版 (参考附录 2)

$ nvm use 6.7.0 (选择 node 版本)

$ node -v

  v6.7.0

$ npm -v

  3.10.3

7. 验证hyperledger已挂载 Win7 目录

hyperledger挂载点 ($GOPATH/src/github.com/hyperledger/fabric) 
已挂载 win 7 local machine目录(d:\GoProjects\src\github.com\hyperledger\fabric) 
可用 touch 指令新增 empty file (例如 touch abcd) 测试是否挂载成功

8. 下载编辑 marbles 范例相关档案

将 marbles 范例安装至local machine (https://github.com/IBM-Blockchain/marbles)

cdGOPATH/src/github.com/hyperledger/fabric

$ git clone https://github.com/IBM-Blockchain/marbles.git

$ cd marbles

将附录 3之app.js, mycreds.json覆盖原先档案,因不使用bluemix blockchain 
service,就必须使用hyperledger chaincode,先将marbles-chaincode fork至 
我的repository, 再clone至hyperledger VM,修改以下档案: 
(*shim.ChaincodeStub 修正 shim.ChaincodeStubInterface) 
https://github.com/chenlin2/marbles-chaincode/tree/master/hyperledger/part1/part1_chaincode.go 
https://github.com/chenlin2/marbles-chaincode/tree/master/hyperledger/part2/part2_chaincode.go 
修改后再回存至我的 github repository。以下 app.js 所含zip_url,git_url 
已修正为 chenlin2/marbles-chaincode (不可使用系统默认值,user可尝试使用 
自己的github repository) 
技术分享

IBM-Blockchain/marbles-chaincode fork 至 user repository

技术分享

marbles-chaincode下载经 hyperledger VM修改后上传的chaincode

技术分享

9. 在hyperledger VM 建立 node vp0,vp1 (以 putty 重新开启另一 terminal)

mkdirGOPATH/src/github.com/hyperledger/fabric/vagrant_marbles

cdGOPATH/src/github.com/hyperledger/fabric/vagrant_marbles

$ docker pull hyperledger/fabric-baseimage:x86_64-0.1.0

$ docker images (记录 image id: db53d04b117c)

$ docker tag db53d04b117c hyperledger/fabric-baseimage:latest(更改 tag)

$ docker images (验证 hyperledger/fabric-baseimage:latest)

技术分享

$ vi docker-compose.yaml (编辑 docker-compose.yaml如附件 3)

$ docker-compose up (过程需要 hyperledger/fabric-baseimage:latest)

技术分享

10 执行 marbles 范例 (另一 terminal)

cdGOPATH/src/github.com/hyperledger/fabric/marbles

$sudo npm install gulp -g (安装 gulp 套件)

技术分享

$sudo npm install (根据package.json 在node modules数据夹安装 dependences)

以上执行若无错误则执行 $gulp (执行 gulpfile.js 内所定义的工作)

sudonpminstall(node app.js)

若 (gulpnode app.js)执行时出现以下错误则重复执行指令(与RAM 大小 
有关,请关闭窗口内不必要的程序) 
技术分享

若执行成功出现以下画面

技术分享

11. 浏览器输入http://localhost:3000, 点选 CREATE (每一步骤代表transaction)

技术分享

12. 选择 颜色,大小,使用者 => create

技术分享

13.将Bob’s 之 marble 拖曳置至 Leroy’s

技术分享

14. 将 Red Mable 拖曳至垃圾桶

技术分享

15. 浏览器输入http://localhost:3000/p2, (2 peer) 点选 CREATE

Bob 及 Leroy 可建立自己的 marble 并拖曳至另不同 user, 且user可以所持 marble 交易不同颜色的 marble。

16. 指定 User 为 BOB 将 white marble 拖曳至 Leroy’s (非 BOB 无法拖曳)

技术分享

17. 在 BOB 之下点选 TRADE (交易 marbles 使用)

技术分享

18. 选择交易对象

技术分享

19. 显示正在等待的交易,点选 x (删除等待的交易)

技术分享

20.正在等待的交易将消失

技术分享

若将 Bob之 red marble 拖曳至垃圾桶, 正在等待的交易也会消失

技术分享

21. 本例可修改为夺宝游戏

a 可增加参与者人数 ( 2 -> 5)
b 建立宝藏库, marble可改为宝物, 每一种宝物都有不同颜色组合, 根据 user所付出劳务的多寡,可至宝藏库换得不同价值的宝物.相同宝物不同颜色全拿,可至宝藏库交换更高价值的宝物,也可与其它参与者交换。
c 参予者不积极参与游戏,先前的宝物,将自动退还至宝藏库,积极度的计算与目前所获宝物价值有关,所获宝物愈多,积极度愈严格 (一定时间未取得相对应。
d 等级宝物就需退回原有取得之宝物;当所有宝物都被退回,即中止该user 参与取宝游戏)。

22. 夺宝游戏可应用在广告代理商, user 所看广告多寡视为劳务支出,夺宝冠军后可向代理商得现金作为报酬;游戏与个人能力无关; user只要肯花时间看广告就能取得报酬。

附录:

1.Win7 安装 putty 
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 
http://download.ithome.com.tw/article/index/id/1649 
2.hyperledger VM 安装 nvm & node 
http://www.liquidweb.com/kb/how-to-install-nvm-node-version-manager-for-node-js-on-ubuntu-14-04-lts/ 
https://www.liquidweb.com/kb/how-to-install-node-js-via-nvm-node-version-manager-on-ubuntu-14-04-lts/ 
3.Docker-compose.yaml, app.js, mycreds.json 
https://1drv.ms/u/s!AkBmzWP0h-VxghFdrcW_nVX1GpgO 
4.陈兆麟 facebook 
https://zh-cn.facebook.com/chaolin.chen.18

參考文獻:

1.https://github.com/chenlin2/marbles2/blob/master/local_blockchain.md 
2.http://www.wealth.com.tw/article_in.aspx?nid=8450 
3.https://github.com/hyperledger/fabric/blob/master/docs/dev-setup/devenv.md 
4.https://github.com/diegomasini/hyperledger-fabric/blob/master/docs/dev-setup/devnet-setup.md 
5.https://github.com/IBM-Blockchain/marbles 
6.https://github.com/IBM-Blockchain/learn-chaincode 
7.https://github.com/hyperledger/fabric/blob/master/docs/Setup/Network-setup.md 
8.https://console.ng.bluemix.net/docs/services/blockchain/ibmblockchain_tutorials.html 
9.https://1drv.ms/b/s!AkBmzWP0h-VxggcKD76DVuLZ92ky 
10.https://1drv.ms/f/s!AkBmzWP0h-Vxbr7h1uTNsTMcPWI 
11.https://1drv.ms/b/s!AkBmzWP0h-VxazOBOsVz8nGMLpM 
12.https://1drv.ms/b/s!AkBmzWP0h-VxbLK7FOjH9IL5HHc 
13.https://www.youtube.com/watch?v=24JAF9Eu1mk&list=UUOTZe-b_jE_Ovy9K9UhZ4BA&index=74 
14.https://www.youtube.com/watch?v=wSmJ-rwUo8I&list=UUOTZe-b_jE_Ovy9K9UhZ4BA&index=73 











































以上是关于有对IBM Hyperledger fabric架构有更深入了解的吗的主要内容,如果未能解决你的问题,请参考以下文章

Hyperledger Fabric 1.4 快速环境搭建

Hyperledger Fabric 开发环境搭建

Hyperledger Fabric 的性能测试

Hyperledger Fabric 1.0 从零开始——吐槽

Hyperledger Fabric架构详解

Hyperledger Fabric 开发环境搭建&构建Fabric