前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hyperledger Fabric交易流程

Hyperledger Fabric交易流程

作者头像
用户2909867
发布2018-08-22 11:15:22
7380
发布2018-08-22 11:15:22
举报
文章被收录于专栏:互联网大杂烩互联网大杂烩
账本结构

image.png

1.区块链数据,这是用文件系统存储在Committer节点上的。区块链中存储了Transaction的读写集。 2.为了检索区块链的方便,所以用LevelDB对其中的Transaction进行了索引。 3.ChainCode操作的实际数据存储在State Database中,这是一个Key Value的数据库,默认采用的LevelDB,现在1.0也支持使用CouchDB作为State Database

交易流程

1.客户端构造交易提案

客户端构造交易提案,发送给一个或多个Peer节点,交易提案中包含本次交易要调用的合约标识、合约方法和参数信息以及客户端签名等。

Peer节点模拟执行交易

Peer节点收到交易提案后,会模拟执行交易,然后将原始交易提案和执行结果打包到一起,进行签名并发回给客户端,其中在模拟执行交易期间产生的数据修改不会写到账本上。

客户端打包

客户端收到各个Peer的应答后,打包到一起组成一个交易并签名,发送给Orderer。

共识排序,生成新区块

Orderer对接收到的交易进行共识排序,然后按照区块生成策略,将一批交易打包到一起,生成新的区块,发送给Peer节点。

交易校验

Peer节点收到区块后,会对区块中的每笔交易进行校验,检查交易依赖的输入输出是否符合当前区块链的状态,完成后将区块写入账本,并修改K-V状态数据。

示例

example2

{"Args":["invoke","a","b","10"]}
Avalbytes, err := stub.GetState(A)
Bvalbytes, err := stub.GetState(B)
err = stub.PutState(A, []byte(strconv.Itoa(Aval)))
err = stub.PutState(B, []byte(strconv.Itoa(Bval)))

1.客户端SDK把'{"Args":["invoke","a","b","10"]}'这些参数发送到endorser peer节点, 2.endorser peer会与ChainCode的docker实例通信,并为其提供模拟的State Database的读写集,也就是说ChainCode会执行完逻辑,但是并不会在stub.PutState的时候写数据库。 3.endorser把这些读写集连同签名返回给Client SDK。 4.SDK再把读写集发送给Orderer节点,Orderer节点是进行共识的排序节点,在测试的情况下,只启动一个orderer节点,没有容错。在生产环境,要进行Crash容错,需要启用Zookeeper和Kafka。在1.0中移除了拜占庭容错,没有0.6的PBFT,也没有传说中的SBFT,不得不说是一个遗憾。 5.Orderer节点只是负责排序和打包工作,处理的结果是一个Batch的Transactions,也就是一个Block,这个Block的产生有两种情况,一种情况是Transaction很多,Block的大小达到了设定的大小,而另一种情况是Transaction很少,没有达到设定的大小,那么Orderer就会等,等到大小足够大或者超时时间。这些设置是在configtx.yaml中设定的。 6.打包好的一堆Transactions会发送给Committer Peer提交节点, 7.提交节点收到Orderer节点的数据后,会先进行VSCC校验,检查Block的数据是否正确。接下来是对每个Transaction的验证,主要是验证Transaction中的读写数据集是否与State Database的数据版本一致。验证完Block中的所有Transactions后,提交节点会把吧Block写入区块链。然后把所有验证通过的Transaction的读写集中的写的部分写入State Database。另外对于区块链,本身是文件系统,不是数据库,所有也会有把区块中的数据在LevelDB中建立索引。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.08.11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 账本结构
  • 交易流程
    • 1.客户端构造交易提案
      • Peer节点模拟执行交易
        • 客户端打包
          • 共识排序,生成新区块
            • 交易校验
            • 示例
            相关产品与服务
            对象存储
            对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档