Hyperledger Fabric2.x基本概念之(一)交易和区块链
▲ 点击101链视界,关注不走丢
大家好,我是阿创,这是我的第30篇原创文章。
我比较爱看书,2021年全年我的阅读量大概是20+本书,涵盖法律、哲学、技术、人文。
但是阅读量一上来反而会觉得,单纯的阅读其实是在逃避,所以我决定还是将自己的阅读和思考梳理出来,写一点对大家有帮助的文字。
最近一直在思考自己的核心竞争力在哪里,我发现还是要聚焦到技术领域,经过一段时间的摸索,决定近期聚焦Fabric的源码,写一个系列文章。
虽然网上有很多解读Fabric源码的博客,但我希望写点不一样的。曾经听过张宇老师的课,他在课上介绍了华罗庚先生曾经说过的一句话:“数无形时少直觉,形少数时难入微。”
我对这句话十分认同,因此也想斗胆用图表配上文字来表达自己的思考,希望对你,对我都有帮助。
本系列文章将以Hyperledger Fabric2.x系列为基础进行分析。
Fabric源码解读的第一篇文章,题为:《Hyperledger Fabric2.x的一些基本概念之(一)》,主要介绍交易、区块两个概念。
1、交易(Transaction)
交易(Transaction,或称为事务)是Fabric的核心概念,通常是指通过调用链码(智能合约)改变账本状态数据的一次操作。
对账本状态的变更是用交易结果读写集来描述的,将交易集合经过Orderer节点排序后按规则打包到区块中。
(1)普通交易消息封装了变更账本状态的执行交易结果,需要经过排序后打包成区块。
(2)配置交易消息则用于创建新的应用通道或更新通道配置,通常在排序后单独打包成区块,同时将最新配置区块号更新到最新的区块元数据中以便于索引查找。
2、区块(Block)
区块(Block)是指一段时间内发生的交易集合,经排序后按规则打包后并添加签名、哈希值、时间戳与其他元数据所构成的数据结构。
区块链就是以区块为基础按照时间顺序连接构成的链状数据结构。
Fabric中的区块结构(Block类型)包括区块头Header、交易数据集合Data以及区块元数据Metadata三个部分。
(1)区块头Header封装了区块号、前一个区块的哈希值、当前区块的哈希值
(2)交易数据集合Data封装了打包的交易集合
(3)区块元数据Metadata封装了如下4个元数据索引项:
- BlockMetadataIndex_SIGNATURES:区块签名;
- BlockMetadataIndex_LAST_CONFIG:最新配置区块的区块号;
- BlockMetadataIndex_TRANSACTIONS_FILTER:最新交易过滤器,封装了交易数据集合Data中所有交易对应的交易验证码,标识其交易的有效性。
- BlockMetadataIndex_ORDERER:Orderer配置信息,如Kafka共识组件的初始化参数。
实际上,真实的区块数据结构远比上图复杂,本文权当抛砖引玉,为后文的深入介绍打下基础。
这里放出Fabric区块数据结构的代码:github.com/hyperledger/fabric-protos-go/common/common.pb.go
// This is finalized block structure to be shared among the orderer and peer
// Note that the BlockHeader chains to the previous BlockHeader, and the BlockData hash is embedded
// in the BlockHeader. This makes it natural and obvious that the Data is included in the hash, but
// the Metadata is not.
type Block struct {
Header *BlockHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
Data *BlockData `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
Metadata *BlockMetadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
期待后面我们一起对fabric区块数据结构做深入剖析,像剥洋葱一样,循序渐进,由浅入深。
如果你觉得写得不错
麻烦给个赞~
关注我,带你了解区块链行业
推荐阅读:
1、一个好用的多方隐私求交算法库MultipartyPSI-Pro
2、区块链产业发展五大趋势:数据安全、科技监管、自主可控、双碳战略、数字经济
3、揭秘北京冬奥会开幕式“数字雪花”背后的区块链技术
4、Web3对于我们普通人意味着什么?
5、最近火爆的数字藏品究竟是什么?
6、《区块链是构建产业互联网的可信基础设施》
7、《隐私计算布局思考》
8、读书 |《数据资产论》:数据如何资产化?
9、区块链产业发展五大趋势:数据安全、科技监管、自主可控、双碳战略、数字经济
提前看到未来的人,
和花一辈子都看不清的人,
注定是截然不同的命运。
点击下方卡片关注101链视界,
和1000+读者一起
洞察技术本质
▲ 点击上方卡片关注101链视界,洞察技术本质
技术交流 | 行业研报 | 前沿洞察 | 转载开白 | 加入社群
请在公众号后台回复 合作
欢迎把文章分享到朋友圈
Hyperledger Fabric2.x基本概念之(一)交易和区块链的更多相关文章
- 用Hyperledger Fabric(超级账本)来构建Java语言开发区块链的环境
面向 Java 开发人员的链代码简介 您或许听说过区块链,但可能不确定它对 Java™ 开发人员有何用.本教程将帮助大家解惑.我将分步展示如何使用 Hyperledger Fabric v0.6 来构 ...
- 区块链教程(二):比特币、区块链、以太坊、Hyperledger的关系
不知道大家喜不喜欢音乐! 朋克音乐:诞生于七十年代中期,一种源于六十年代车库摇滚和前朋克摇滚的简单摇滚乐.它由一个简单悦耳的主旋律和三个和弦组成,经过演变,朋克已经逐渐脱离摇滚,成为一种独立的音乐,朋 ...
- HyperLedger Fabric Introduction——区块链超级账本介绍
介绍 HyperLedger Fabric是一个基于模块化架构的分布式账本解决方案平台,它拥有深度加密.便捷扩展.部署灵活及可插拔等特性.它设计之初的目的是支持不同组件的可插拔实现,并适应整个经济生态 ...
- cpp 区块链模拟示例(六) 交易
交易(transaction)是比特币的核心所在,而区块链的唯一目的,也正是为了能够安全可靠地存储交易.在区块链中,交易一旦被创建,就没有任何人能够再去修改或是删除它.在今天的文章中,我们会实现交易的 ...
- 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
摘要: 全球开源区块链领域影响最为广泛的Hyperledger Fabric日前宣布了1.1版本的正式发布,带来了一系列丰富的新功能以及在安全性.性能与扩展性等方面的显著提升.阿里云容器服务区块链解决 ...
- 区块链学习7:超级账本项目Hyperledger与Fabric以及二者的关系
☞ ░ 前往老猿Python博文目录 ░ 一.超级账本(hyperledger) 超级账本(hyperledger)是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目,成员包括 ...
- Hyperledger Fabric(2)共识与交易
Fabric 的网络节点本质上是互相复制的状态机,节点之间需要保持相同的账本状态.为了实现这个目的,各个节点需要通过共识( consensus )过程,对账本状态的变化达成一致性的认同. Fabric ...
- HyperLedger Fabric 1.4 区块链开发平台(4.1)
目前区块链开发平台分“公有链平台”和“联盟链系统”两类,“公有链平台”主要以以太坊为主的平台,可以在该类平台上进行代币的发行和根据各种模块搭建应用:“联盟链系统”主要以超级账本为主的开源系统,该类开源 ...
- 区块链开源实现hyperledger fabric架构详解
hyperledger fabric是区块链中联盟链的优秀实现,主要代码由IBM.Intel.各大银行等贡献,目前v1.1版的kafka共识方式可达到1000/s次的吞吐量.本文中我们依次讨论:区块链 ...
- 用Java为Hyperledger Fabric(超级账本)开发区块链智能合约链代码之部署与运行示例代码
部署并运行 Java 链代码示例 您已经定义并启动了本地区块链网络,而且已构建 Java shim 客户端 JAR 并安装到本地 Maven 存储库中,现在已准备好在之前下载的 Hyperledger ...
随机推荐
- ssh WARNING: UNPROTECTED PRIVATE KEY FILE!
前言 在 ssh -i 指定密钥文件 登录时,出现以下报错: Permissions 0644 for 'xxxx' are too open. It is required that your pr ...
- MySQL中怎么分析性能?
MySQL中主要有4种方式可以分析数据库性能,分别是慢查询日志,profile,Com_xxx和explain. 慢查询日志 先用下面命令查询慢查询日志是否开启, show variables lik ...
- 支持VS2022的包发布工具NuPack 2022发布
我们很高兴地宣布 NuPack 2022 正式发布!这是一个开源项目,旨在简化 .NET 开发中的 NuGet 包发布流程. NuPack 是什么? NuPack 是一个轻量级工具,VS扩展,它可以帮 ...
- C 语言内存布局深度剖析:从栈到堆,你真的了解吗?
大家好,我是小康. 今天咱们聊点看似复杂实则简单的东西 -- C 语言的内存布局. 别急着翻页!相信我,读完这篇文章,你会拍着大腿说:"原来这么简单!" 微信搜索 「跟着小康学编程 ...
- Debian 9 更换源
Debian 全球镜像站 # 先备份源列表文件 mv /etc/apt/sources.list /etc/apt/sources.list.bak # 生成新的源列表文件(用的国内源镜像) echo ...
- Javascript try catch finally
很少用到javascript的异常捕获,突然需要,发现挺全的,小小记录下,留爪. 直接打码: //public.js //异常输出 function exception(ex) { console.l ...
- leetcode每日一题:酿造药水需要的最少总时间
引言 今天的每日一题原题是2255. 统计是给定字符串前缀的字符串数目,直接模拟,逐个匹配words中的字符串是否是s的前缀即可.更换成前几天遇到的更有意思的一题来写这个每日一题. 题目 给你两个 ...
- 我要成为node_modules大师!(一):包管理器选择,依赖关系分析
好家伙 1.npm曾经的一些问题 1. 依赖地狱(Dependency Hell) 嵌套依赖结构:早期版本的 npm 采用嵌套的 node_modules 结构,依赖层级极深,容易导致路径过长问题(尤 ...
- IDEA target中没有class文件/target中有class没有yml文件/yml文件不显示叶子
target中没有class文件.表现为文件显示红波浪线,但是点进去自己又好了,但是编译会说找不到.点进入target文件夹发现没有class文件,只有yml文件或者什么都没有 解决方法:rebuil ...
- mybatis数据的批量插入
1:xml的配置 <insert id="insertUserBatch"> insert into user(username, birthday, sex, add ...