区块链诞生
记账科技的千年演化
| 阶段 | 时期 | 主要特点 |
|---|---|---|
| 阶段一:单式账本 | 约公元前 3500 年 ~ 15 世纪 | 使用原始的单式记账法(Single Entry Bookkeeping) |
| 阶段二:复式账本 | 15 世纪 ~ 20 世纪中期 | 现代复式记账法(Double Entry Bookkeeping)出现和应用。 记录余额变化 |
| 阶段三:数字化账本 | 20 世纪中期 ~ 21 世纪初 | 物理媒介账本演化到数字化账本 |
| 阶段四:分布式账本 | 2009 年至今 | 以区块链为代表的分布式账本相关思想和技术出现 |
复式记账法虽然记录了交易的来龙去脉,不易出错,但本质上仍然是中心化模式。
中心化模式的记账系统方便使用,但在很多情况下仍然存在不少问题:账本掌握在个体手中,一旦出现数据丢失则无法找回;在同时涉及到多个交易方的情况下,需要分别维护各自的账本,如果出现不一致,对账较为困难。
因此,人们很自然地想到借助分布式系统的思想来实现分布式账本(Distributed Ledger):由交易多方共同维护同一个共享的分布式账本;打通交易在不同阶段的来龙去脉;凭借分布式技术,进一步提高记账的规模、效率、可靠性以及合规性。
2009 年 1 月,基于区块链结构的比特币网络悄然问世,它融合了现代密码学和分布式网络技术等重要成果。此后数年里,在纯分布式场景下,比特币网络稳定支持了海量转账交易。这让人们开始认识到,区块链这一看似极为简洁的数据结构,居然恰好解决了分布式记账的基本需求,于是基于区块链结构的分布式记账技术开始大量出现。由于这些技术多以区块链结构作为其核心的账本结构,也往往被统称为区块链技术。
分布式记账的难题
分布式记账由来已久。为了正常进行商业活动,参与者需要找到一个多方均能信任的第三方来负责记账,确保交易记录的准确。然而,随着商业活动的规模越来越大,商业过程愈加动态和复杂,很多场景下难以找到符合要求的第三方记账方(例如,供应链领域动辄涉及来自数十个行业的数百家参与企业)。这就需要交易各方探讨在分布式场景下进行协同记账的可能性。
因此,区块链就是对历史区块做一个摘要,然后任何增量也一起做个新的摘要,就可以定代到谁进行了篡改。
当然,区块链结构也并非解决分布式记账问题的唯一答案,实际上,除了简单的线性队列结构,也有人提出采用树或图结构。
| 难题 | 说明 | 区块链解决方案 |
|---|---|---|
| 拜占庭问题 | 不可信节点之间如何达成共识 | 共识机制(PoW、PoS) |
| 双花问题 | 同一资产被重复消费 | 广播交易 + 共识确认 |
| 一致性问题 | 全网记录保持同步 | 最长链规则等 |
| 女巫/DDoS 攻击 | 伪造节点影响网络 | 需消耗资源参与 |
| MEV 问题 | 排序操控交易获利 | 公平排序、加密交易 |
| 性能瓶颈 | TPS 低、成本高 | Layer2、分片等 |
| 隐私问题 | 链上数据公开透明 | 零知识证明、隐私链 |
零知识证明(Zero-Knowledge Proof,ZKP)是一种密码学技术,它允许一方(证明者)向另一方(验证者)证明某个陈述是真的,但不泄露任何额外的信息,包括这个陈述的具体内容。
区块链定义和原理
区块链类比为一种分布式数据库技术,通过维护数据块的链式结构,可以维持持续增长的、不可篡改的数据记录。
笔者认为,讨论区块链可以从狭义和广义两个层面来看待。
狭义上,区块链是一种以区块为基本单位的链式数据结构,区块中利用数字摘要对之前的交易历史进行校验,适合分布式记账场景下防篡改和可扩展性的需求。
广义上,区块链还指代基于区块链结构实现的分布式记账技术,包括分布式共识、隐私与安全保护、点对点通信技术、网络协议、智能合约等。
区块链是首个自带对账功能的数字账本结构。
更广泛地,区块链实现了非中心化的记录。参与到系统中的节点,并不属于同一组织,彼此可以信任或不信任;链上数据由所有节点共同维护,每个节点都存储一份完整或部分的记录拷贝。
跟传统的记账技术相比,基于区块链的分布式账本包括如下特点:
- 维护一条不断增长的链,只可能添加记录,而且记录一旦确认则不可篡改;
- 非中心化,或者说多中心化的共识,无需集中的控制,实现上尽量分布式;
- 通过密码学的机制来确保交易无法被抵赖和破坏,并尽量保护用户信息和记录的隐私性。
以比特币为例理解区块链工作过程
具体以比特币网络为例,来看其中如何使用了区块链技术。
首先,用户通过比特币客户端发起一项交易,消息广播到比特币网络中等待确认。网络中的节点会将收到的等待确认的交易请求打包在一起,添加上前一个区块头部的哈希值等信息,组成一个区块结构。然后,试图找到一个 nonce 串(随机串)放到区块里,使得区块结构的哈希结果满足一定条件(比如小于某个值)。这个计算 nonce 串的过程,即俗称的“挖矿”。nonce 串的查找需要花费一定的计算力。
一旦节点找到了满足条件的 nonce 串,这个区块在格式上就“合法”了,成为候选区块。节点将其在网络中广播出去。其它节点收到候选区块后进行验证,发现确实合法,就承认这个区块是一个新的合法区块,并添加到自己维护的本地区块链结构上。当大部分节点都接受了该区块后,意味着区块被网络接受,区块中所包括的交易也就得到确认。
这里比较关键的步骤有两个,一个是完成对一批交易的共识(创建合法区块结构);一个是新的区块添加到链结构上,被网络认可,确保未来无法被篡改。当然,在实现上还会有很多额外的细节。
比特币的这种基于算力(寻找 nonce 串)的共识机制被称为工作量证明(Proof of Work,PoW)。这是因为要让哈希结果满足一定条件,并无已知的快速启发式算法,只能对 nonce 值进行逐个尝试的蛮力计算。尝试的次数越多(工作量越大),算出来的概率越大。
通过调节对哈希结果的限制条件,比特币网络控制平均约 10 分钟产生一个合法区块。算出区块的节点将得到区块中所有交易的管理费和协议固定发放的奖励费(目前是 12.5 比特币,每四年减半)。
读者可能会关心,比特币网络是任何人都可以加入的,如果网络中存在恶意节点,能否进行恶意操作来对区块链中记录进行篡改,从而破坏整个比特币网络系统。比如最简单的,故意不承认别人产生的合法候选区块,或者干脆拒绝来自其它节点的交易请求等。
实际上,因为比特币网络中存在大量(据估计数千个)的维护节点,而且大部分节点都是正常工作的,默认都只承认所看到的最长的链结构。只要网络中不存在超过一半的节点提前勾结一起采取恶意行动,则最长的链将很大概率上成为最终合法的链。而且随着时间增加,这个概率会越来越大。例如,经过 6 个区块生成后,即便有一半的节点联合起来想颠覆被确认的结果,其概率也仅为 (1/2)^6 ≈ 1.6%,即低于 1/60 的可能性。10 个区块后概率将降到千分之一以下。
当然,如果整个网络中大多数的节点都联合起来作恶,可以导致整个系统无法正常工作。要做到这一点,往往意味着付出很大的代价,跟通过作恶得到的收益相比,往往得不偿失。
| 项目 | 说明 |
|---|---|
| 共识机制 | PoW(工作量证明) |
| 判断主链 | 以“累计工作量最大”的链为主链 |
| 原因 | 避免分叉、达成全网共识 |
| 安全性 | 通过算力成本抵抗攻击 |