fabric 转账_Fabric 学习笔记-架构初探

d9712b1ad29d5d7d9f706f8b97a41e97.png

本文介绍了Fabric的架构,以及通过一个简单的Demo来熟悉整个交易流程。

Hyperledger fabric V1.0的架构

如下图所示:

c2cd4510b40b6560b7815768bebd64a1.png

application提供各种语言的SDK接口。

membership也就是fabric-ca提供成员服务,用来管理身份,提供授权和认证。

peer负责模拟交易和记账

  • Endorser(背书)用来当peer执行一个交易以后返回yes/no。
  • Committer将验证过的区块追加到通道上各个账本的副本。
  • Ledger就是账本啦。
  • Chaincode用来编写业务逻辑,交易指令用来修改资产,可以理解为 fabric 网络对外提供的一个交互接口(智能合约)。
  • Event是fabric提供的一个事件框架,比如链代码事件,拒绝事件,注册事件等,在编写代码的时候可以订阅这些事件来实现自己的业务逻辑。

o-service用来实现共识。

交易流程

交易过程如下图所示:

a97fe13845f5bc01d6913827bb1a0755.png
  • Application向一个或多个peer节点发送对交易的背书请求。
  • Peer的endorse执行背书,但并不将结果提交到本地账本,只是将结果返回给应用。
  • 应用收集所有背书节点的结果后,将结果广播给orderers,orderers执行共识,生成block,通过消息通道批量的将block发布给peer节点,更新lerdger。

可以看一下下面这张图,一样的过程,更加突出了多个peer背书的过程。

b8957eb86bad7ce5488467ec6fd0758f.png

在介绍一下在交易过程中扮演重要角色的channel

channel是构建在Fabric网络上的私有区块链,实现了数据的隔离和保密。channel是由特定的peer所共享的,并且交易方必须通过该通道的正确验证才能与账本进行交互。

如下图所示:

347e4d6e0094b8c015a61ddaf508cf28.png

可以看到不同颜色的channel隔离了不同的peer之间的通信。

构建Fabric网络

Fabric提供了一个first-network的demo来学习整个流程。

first-network有两个组织,每个组织各有两个个peer节点,以及一个排序服务。两个peer节点无法达成共识,三个peer节点无法容错,四个peer节点刚好完成演示。

Demo启动以后会自动完成一笔转账,并且打印出整个操作过程。

启动网络以后可以看到非常多的日志,这里我们只追踪关键步骤。

...
##########################################################
#########  Generating Orderer Genesis block ##############
##########################################################
2018-02-05 15:13:08.760 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-02-05 15:13:08.816 CST [common/configtx/tool] doOutputBlock -> INFO 002 Generating genesis block
2018-02-05 15:13:08.819 CST [common/configtx/tool] doOutputBlock -> INFO 003 Writing genesis block#################################################################
### Generating channel configuration transaction 'channel.tx' ###
#################################################################
2018-02-05 15:13:08.845 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-02-05 15:13:08.849 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
2018-02-05 15:13:08.850 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 003 Writing new channel tx#################################################################
#######    Generating anchor peer update for Org1MSP   ##########
#################################################################
2018-02-05 15:13:08.876 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-02-05 15:13:08.880 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2018-02-05 15:13:08.881 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update
...

可以看到,在转账之前首先进行了fabric网络的初始化过程,创建了创世区块,配置了channel和生成了membership(MSP)身份服务。

Channel name : mychannel
Creating channel...
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
CORE_PEER_LOCALMSPID=Org1MSP
CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
CORE_PEER_TLS_ENABLED=true
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ID=cli
CORE_LOGGING_LEVEL=DEBUG
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
2018-02-05 07:13:13.382 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP
2018-02-05 07:13:13.382 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity
2018-02-05 07:13:13.406 UTC [channelCmd] InitCmdFactory -> INFO 003 Endorser and orderer connections initialized
2018-02-05 07:13:13.409 UTC [msp] GetLocalMSP -> DEBU 004 Returning existing local MSP
dd

接着可以看到在转账前首先创建了channel,其中包括了身份认证的ca文件,key以及通信的socket信息和MSP的信息。

Attempting to Query PEER0 ...3 secs2018-02-05 07:13:55.998 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP
2018-02-05 07:13:55.998 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity
2018-02-05 07:13:55.998 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2018-02-05 07:13:55.998 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
2018-02-05 07:13:55.999 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A95070A6708031A0C08B388E0D30510...6D7963631A0A0A0571756572790A0161
2018-02-05 07:13:55.999 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: D6BB27BAC40E5A58ED3CF0AFB147280B60E305053D9B97A38461A398736ED7C7
Query Result: 100

接着在很不起眼的地方看到了上面这些日志,差点看瞎我~重点来了~

在转账之前使用默认的ESCC(背书链码),VSCC(验证链码),以及自身的签名查询了Peer0得到余额是100。

2018-02-05 07:14:14.950 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> DEBU 009 ESCC invoke result: version:1 response:<status:200 message:"OK" > payload:"n 3703165...,k363_(n212027" >
2018-02-05 07:14:14.952 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 00a Chaincode invoke successful. result: status:200
2018-02-05 07:14:14.953 UTC [main] main -> INFO 00b Exiting.....
===================== Invoke transaction on PEER0 on channel 'mychannel' is successful =====================

调用链码进行转账操作,发现两边的状态码都是200表示转账成功,其中payload是发送转账的一些具体信息。

Attempting to Query PEER3 ...3 secs2018-02-05 07:14:18.566 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP
2018-02-05 07:14:18.566 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity
2018-02-05 07:14:18.566 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2018-02-05 07:14:18.566 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
2018-02-05 07:14:18.567 UTC [msp/identity] Sign -> DEBU 005 Sign: plaintext: 0A95070A6708031A0C08CA88E0D30510...6D7963631A0A0A0571756572790A0161
2018-02-05 07:14:18.567 UTC [msp/identity] Sign -> DEBU 006 Sign: digest: 9E93A6D0549C627788C5074633DE28C9D08F36A4763EFF55479613B2DD32CADB
Query Result: 90
2018-02-05 07:14:37.014 UTC [main] main -> INFO 007 Exiting.....

最后查询Peer3发现余额只有90了,这样就完成了一个最小区块链网络的交易示例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多个goruntine 性能变慢_提高 JavaScript 性能的 12 个技巧

作者丨Liz Parody在创建 Web 应用程序时应始终考虑性能。为了帮助你开始&#xff0c;本文列举了有效提高应用程序性能的 12 种方法。性能是创建网页或应用程序时最重要的一个方面。没有人想要应用程序崩溃或者网页无法加载&#xff0c;或者用户的等待时间很长。根据 Kissmetric…

#celery#周期性任务

2019独角兽企业重金招聘Python工程师标准>>> 玩了一个星期的clannad&#xff0c;是时候干点事了。 折腾了下celery周期性任务&#xff1a; celery提供了一个叫celery beat的服务&#xff0c;用于定时驱使worker执行任务。也就是说&#xff0c;如果本地没有活动的wor…

WTMPlus 1.1 发布

点击上方蓝字关注我们1.1版本WTMPlus上线一个多月以来&#xff0c;得到了越来越多用户的喜爱。虽然1.0版本还有不少问题&#xff0c;但是它的核心理念和功能受到了用户的认可。1.1版本修复了大量用户反馈的易用性的问题和系统Bug&#xff0c;并且加入了强悍的图表工具。图表编辑…

4部“教材级”纪录片,有生之年必看系列!

全世界只有3.14 % 的人关注了爆炸吧知识纪录片是以真实生活为创作素材&#xff0c;以真人真事为表现对象&#xff0c;并对其进行艺术的加工与展现的&#xff0c;以展现真实为本质&#xff0c;并用真实引发人们思考的电影或电视艺术形式。好的纪录片就像打开了一扇新世界的大门&…

Java 操作POI 之复制sheet页

2019独角兽企业重金招聘Python工程师标准>>> 来点干货直接上代码&#xff0c;就不细说了 package com.qs.web.tools.core.excel; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.TreeSet; import org.apache.poi.hssf.us…

Serverless 落地实践

.Net Core Serverless初体验什么是ServerlessServerless 是一个当今软件世界中比较新的话题。它并没有一个普遍公认的权威定义&#xff0c;每个人每个企业对它的解释可能都有不同&#xff0c;而 Serverless 正是在这种情况下不断发发展的。但是就算如此&#xff0c;有一些 Serv…

KOFLive Beta Daily-Scrum 9

组 员今天的工作进 度问 题明天的计划田 飞Work Item 38911&#xff1a;角色四照片拍摄 Work Item 38897:键盘输入人物四的图片已经导入&#xff0c;键盘三个连键检测完成还剩最后一个连键的检测Work Item 38911:拍摄人物角色五付 浩Work Item 37741:游戏主模块 Work Item 3889…

Dapr + .NET 实战(十-终篇)K8S运行Dapr

工作原理为了实现在k8s上安装Dapr&#xff0c;Dapr需要部署dapr-sidecar-injector、dapr-operator、dapr-placement和dapr-sentry服务。 dapr-operator: 管理组件(state stores, pub/subs, etc.)dapr-sidecar-injector: 将 Dapr 注入 annotated pods&#xff0c;并添加环境变量…

mvc control 请求两次问题

今天在做项目时&#xff0c;突然发现一个mvc 的control中action被执行了两次&#xff0c;最终发现是由于favicon.ico导致的。问题代码&#xff1a; <link rel"shortcut icon" href"Images/wangyi.ico" type"image/x-icon" />,最终改成了 &…

为什么老师批改完试卷,分数下要画两条横线?今天终于知道了!

全世界只有3.14 % 的人关注了爆炸吧知识总有考试分数下画两条横线的习惯&#xff0c;原来是这样形成的&#xff01;为什么老师改卷之后会在分数下画两条横线呢&#xff1f;你要去问老师&#xff1f;别问了&#xff0c;可能连老师都不知道……来看看这位当了老师的网友怎么说的&…

Windows 11 小技巧- WSL开启Linux桌面应用

WSL 经过⼏年的发展&#xff0c;已经是⼀个Windows下不少开发⼈员做云原⽣应⽤的必备环境&#xff0c;你可以在上⾯写各种语⾔&#xff0c;各种后端框架&#xff0c;也可以完成容器和k8s的部署&#xff0c;在Windows11下更进⼀步&#xff0c;直接⽀持Linux桌⾯应⽤&#xff0c;…

lcd屏幕抖动_电视屏幕面板大科普!买电视之前必看!

BOE知识酷 ?显示技术|显示资讯| PPT|知识管理第856篇推文导读&#xff1a;经常看到什么LCD、LED、OLED、ULED、QLED、SLED、GLED……之类的名词&#xff0c;花里胡哨。别看那么多名词&#xff0c;但从显示技术角度看&#xff0c;现在市场上主流的电视机其实就两种&#xff1a;…

一击即中的表白方式,学会了吗?

1 自己吃自己的&#xff0c;敢抢我吃的&#xff0c;吃我的小拳拳&#xff01;2 承受了太多哈哈哈3 狗狗在你不知道的时候会默默守护你4 眼前的方不是方。。5 一击即中的表白方式&#xff0c;学会了吗&#xff1f;&#xff1f; 图自甜星球日报社6 哦…了解了图自迷影心生 7 当90…

mysql2012用户名_SQL Server 登录名、服务器角色、用户名和数据库角色 --- 解释

1.一个数据库用户可以对应多个架构(架构是表容器)。架构里面包含的是数据库表。2.一个数据库角色有可能涉及多个架构。数据库角色对应的是权限。3.一个用户对应一个数据库角色。4.登录名与数据库用户在服务器级别是一对多的&#xff1b;在数据库级别是一对一的。服务器登录名&a…

Windows 11 正式版 ISO 镜像下载大全

Windows 11 ISO 镜像规格1.Windows 11 中文版文件大小&#xff1a;5.13 GB系统类型&#xff1a;64 位操作系统版本号&#xff1a;Windows 11 21H2发布日期&#xff1a;2021 年 10 月 5 日MD5: 68FB0CAD069CF82A9BA0996A6D3D112BSHA1: 9F602662FFAB0DF3B3A66FC6A42849BFFD3315A7…

于明:APU能否接力取代迟暮的X86?

图&#xff1a;AMD Fusion APU中国发布会 有作用力必然有反作用力&#xff0c;有光亮也必然有黑暗&#xff0c;有诚实也必然有欺骗&#xff0c;任何事物都具有两面性&#xff0c;而PC的核心处理器也不例外&#xff0c;存在着“真融合”与“假融合”之分。 就拿AMD(NYSE: AMD)在…

SQL Azure Reporting CTP

http://blogs.msdn.com/b/azchina/archive/2011/02/18/sql-azure-reporting-limited-ctp-arrived.a概念SQL Azure Reporting 把云端报表作为服务来提供&#xff0c;构建于SQL Server Reporting Services 和 SQL Azure 技术之上。诸如SQL Azure Reporting此类云端报表服务具有许…

Windows 11 小技巧- winget安装和维护应用程序

安装好Windows 11后&#xff0c;你可能需要为系统安装常⽤的⼯具&#xff0c;例如安装Visual Studio Code&#xff0c;Google Chrome &#xff0c;VLC Player 等应⽤。以往你可能需要⾃⼰去各大网站上安装。如果你曾经使⽤Linux, 你可以通过命令⾏⽅式用apt安装和维护很多的…

输出毫秒_自学单片机第十三篇上:单点输出

关注一下&#xff0c;更多精彩等着你&#xff01;打开之前的工程&#xff0c;当然新建也可以&#xff0c;具体步骤看之前的文章就行。因为是学习&#xff0c;所以也用不着总是新建工程&#xff0c;起名起一大堆&#xff0c;接下来&#xff0c;除非要用两个执行文件&#xff0c;…

Hadoop分布式文件系统:架构和设计要点

一、前提和设计目标 1、硬件错误是常态&#xff0c;而非异常情况&#xff0c;HDFS可能是有成百上千的server组成&#xff0c;任何一个组件都有可能一直失效&#xff0c;因此错误检测和快速、自动的恢复是HDFS的核心架构目标。 2、跑在HDFS上的应用与一般的应用不同&#xff0c;…