🧭
区块链技术指南
  • 前言
  • 修订记录
  • 如何贡献
  • 区块链的诞生
    • 记账科技的千年演化
    • 分布式记账与区块链
    • 集大成者的比特币
    • 区块链的商业价值
    • 本章小结
  • 核心技术概览
    • 定义与原理
    • 技术的演化与分类
    • 关键问题和挑战
    • 趋势与展望
    • 认识上的误区
    • 本章小结
  • 典型应用场景
    • 应用场景概览
    • 金融服务
    • 征信管理
    • 权属管理与溯源
    • 资源共享
    • 物流与供应链
    • 物联网
    • 数字艺术品和 NFT
    • 其它场景
    • 本章小结
  • 分布式系统核心技术
    • 一致性问题
    • 共识算法
    • FLP 不可能原理
    • CAP 原理
    • ACID 原则与多阶段提交
    • Paxos 算法与 Raft 算法
    • 拜占庭问题与算法
    • 可靠性指标
    • 本章小结
  • 密码学与安全技术
    • 密码学简史
    • Hash 算法与数字摘要
    • 加解密算法
    • 消息认证码与数字签名
    • 数字证书
    • PKI 体系
    • Merkle 树结构
    • Bloom Filter 结构
    • 同态加密
    • 其它技术
    • 本章小结
  • 比特币 —— 初露锋芒的区块链
    • 比特币项目简介
    • 比特币诞生背景
    • 工作原理
    • 挖矿过程
    • 共识机制
    • 闪电网络
    • 侧链
    • 热门问题
    • 相关工具
    • 本章小结
  • 以太坊 —— 挣脱加密货币的枷锁
    • 以太坊项目简介
    • 核心概念
    • 主要设计
    • 相关工具
    • 安装客户端
    • 使用智能合约
    • 智能合约案例:投票
    • 本章小结
  • 超级账本 —— 面向企业的分布式账本
    • 超级账本项目简介
    • 社区组织结构
    • 顶级项目介绍
    • 开发必备工具
    • 贡献代码
    • 本章小结
  • Fabric 安装与部署
    • 简介
    • 本地编译组件
    • 容器方式获取
    • 本地方式启动 Fabric 网络
    • 容器方式启动 Fabric 网络
    • 本章小结
  • 管理 Fabric 网络
    • 简介
    • 使用通道
    • 管理节点
    • 管理链上代码
    • 监听网络事件
    • 自动发现网络信息
    • 使用运维服务
    • 如何升级网络版本
    • 使用 SDK
    • 注意事项与最佳实践
    • 本章小结
  • 智能合约开发
    • 简介
    • 链码概念与结构
    • 示例一:信息公证
    • 示例二:交易资产
    • 示例三:数字货币发行与管理
    • 示例四:学历认证
    • 示例五:社区能源共享
    • 小结
  • Fabric 架构与设计
    • 简介
    • 架构设计
    • 消息协议
    • 小结
  • 区块链服务平台设计
    • 简介
    • IBM Bluemix 云区块链服务
    • 微软 Azure 云区块链服务
    • 使用超级账本 Cello 搭建区块链服务
    • 本章小结
  • 性能与评测
    • 简介
    • Hyperledger Fabric v0.6
    • 小结
  • 附录
    • 术语
    • 常见问题
    • Go 语言开发相关
      • 安装与配置 Golang 环境
      • 编辑器与 IDE
      • 高效开发工具
      • 依赖管理
    • ProtoBuf 与 gRPC
    • 参考资源链接
由 GitBook 提供支持
在本页
  • 定义
  • 早期应用
  • 基本原理
  • 以比特币为例理解区块链工作过程

这有帮助吗?

在GitHub上编辑
  1. 核心技术概览

定义与原理

上一页核心技术概览下一页技术的演化与分类

最后更新于3年前

这有帮助吗?

定义

区块链技术自身仍然在飞速发展中,相关规范和标准还待进一步成熟。

公认的最早关于区块链的描述性文献是中本聪所撰写的 ,但该文献重点在于讨论比特币系统,并没有明确提出区块链的术语。在其中,区块和链被描述为用于记录比特币交易账目历史的数据结构。

另外, 上给出的定义中,将区块链类比为一种分布式数据库技术,通过维护数据块的链式结构,可以维持持续增长的、不可篡改的数据记录。

笔者认为,讨论区块链可以从狭义和广义两个层面来看待。

狭义上,区块链是一种以区块为基本单位的链式数据结构,区块中利用数字摘要对之前的交易历史进行校验,适合分布式记账场景下防篡改和可扩展性的需求。

广义上,区块链还指代基于区块链结构实现的分布式记账技术,包括分布式共识、隐私与安全保护、点对点通信技术、网络协议、智能合约等。

早期应用

1990 年 8 月,Bellcore(1984 年由 AT&T 拆分而来的研究机构)的 Stuart Haber 和 W. Scott Stornetta 在论文《How to Time-Stamp a Digital Document》中就提出利用链式结构来解决防篡改问题,其中新生成的时间证明需要包括之前证明的 Hash 值。这可以被认为是区块链结构的最早雏形。

后来,2005 年 7 月,在 Git 等开源软件中,也使用了类似区块链结构的机制来记录提交历史。

区块链结构最早的大规模应用出现在 2009 年初上线的比特币项目中。在无集中式管理的情况下,比特币网络持续稳定,支持了海量的交易记录,并且从未出现严重的漏洞,引发了广泛关注。这些都与区块链结构自身强校验的特性密切相关。

基本原理

区块链的基本原理理解起来并不复杂。首先来看三个基本概念:

  • 交易(Transaction):一次对账本的操作,导致账本状态的一次改变,如添加一条转账记录;

  • 区块(Block):记录一段时间内发生的所有交易和状态结果等,是对当前账本状态的一次共识;

  • 链(Chain):由区块按照发生顺序串联而成,是整个账本状态变化的日志记录。

如果把区块链系统作为一个状态机,则每次交易意味着一次状态改变;生成的区块,就是参与者对其中交易导致状态改变结果的共识。

区块链的目标是实现一个分布的数据记录账本,这个账本只允许添加、不允许删除。账本底层的基本结构是一个线性的链表。链表由一个个“区块”串联组成(如下图所示),后继区块中记录前导区块的哈希(Hash)值。某个区块(以及块里的交易)是否合法,可通过计算哈希值的方式进行快速检验。网络中节点可以提议添加一个新的区块,但必须经过共识机制来对区块达成确认。

以比特币为例理解区块链工作过程

具体以比特币网络为例,来看其中如何使用了区块链技术。

首先,用户通过比特币客户端发起一项交易,消息广播到比特币网络中等待确认。网络中的节点会将收到的等待确认的交易请求打包在一起,添加上前一个区块头部的哈希值等信息,组成一个区块结构。然后,试图找到一个 nonce 串(随机串)放到区块里,使得区块结构的哈希结果满足一定条件(比如小于某个值)。这个计算 nonce 串的过程,即俗称的“挖矿”。nonce 串的查找需要花费一定的计算力。

一旦节点找到了满足条件的 nonce 串,这个区块在格式上就“合法”了,成为候选区块。节点将其在网络中广播出去。其它节点收到候选区块后进行验证,发现确实合法,就承认这个区块是一个新的合法区块,并添加到自己维护的本地区块链结构上。当大部分节点都接受了该区块后,意味着区块被网络接受,区块中所包括的交易也就得到确认。

这里比较关键的步骤有两个,一个是完成对一批交易的共识(创建合法区块结构);一个是新的区块添加到链结构上,被网络认可,确保未来无法被篡改。当然,在实现上还会有很多额外的细节。

比特币的这种基于算力(寻找 nonce 串)的共识机制被称为工作量证明(Proof of Work,PoW)。这是因为要让哈希结果满足一定条件,并无已知的快速启发式算法,只能对 nonce 值进行逐个尝试的蛮力计算。尝试的次数越多(工作量越大),算出来的概率越大。

通过调节对哈希结果的限制条件,比特币网络控制平均约 10 分钟产生一个合法区块。算出区块的节点将得到区块中所有交易的管理费和协议固定发放的奖励费(目前是 12.5 比特币,每四年减半)。

读者可能会关心,比特币网络是任何人都可以加入的,如果网络中存在恶意节点,能否进行恶意操作来对区块链中记录进行篡改,从而破坏整个比特币网络系统。比如最简单的,故意不承认别人产生的合法候选区块,或者干脆拒绝来自其它节点的交易请求等。

实际上,因为比特币网络中存在大量(据估计数千个)的维护节点,而且大部分节点都是正常工作的,默认都只承认所看到的最长的链结构。只要网络中不存在超过一半的节点提前勾结一起采取恶意行动,则最长的链将很大概率上成为最终合法的链。而且随着时间增加,这个概率会越来越大。例如,经过 6 个区块生成后,即便有一半的节点联合起来想颠覆被确认的结果,其概率也仅为 (1/2)^6 ≈ 1.6%,即低于 1/60 的可能性。10 个区块后概率将降到千分之一以下。

当然,如果整个网络中大多数的节点都联合起来作恶,可以导致整个系统无法正常工作。要做到这一点,往往意味着付出很大的代价,跟通过作恶得到的收益相比,往往得不偿失。

《比特币:一种点对点的电子现金系统》
Wikipedia
区块链结构示例