本文介绍工作量证明和权益证明如何决定由谁向区块链添加下一个区块、两者如何保障链的安全,以及各自如何产生新币。全文以 Blocknet 为例,它是一种可以用普通电脑挖矿的工作量证明币。
工作量证明和权益证明有什么区别?
工作量证明和权益证明是区块链决定由谁添加下一个区块的两种方式。在工作量证明中,矿工投入算力寻找有效的哈希。在权益证明中,验证者锁定币作为押金,并被选中来提议区块和对区块投票。两种方式都让作弊代价高昂。
每条区块链都要解决同一个问题:成千上万台互不信任的电脑,需要就同一份付款历史达成一致,这样任何人都无法把同一枚币花两次。每个新区块都要有人提议,其他人也需要一个接受它的理由。这套规则叫作共识机制,工作量证明和权益证明是其中最知名的两种设计。
| 工作量证明 | 权益证明 | |
|---|---|---|
| 谁来出块 | 最先找到不高于全网目标值的哈希的矿工 | 从锁定了币的参与者中选出的验证者 |
| 投入什么 | 硬件和电力 | 作为质押存入的币 |
| 哪条链胜出 | 累计工作量最多的链 | 获得最多验证者投票的链,并有最终确定检查点 |
| 新币归谁 | 区块奖励归找到该区块的矿工 | 奖励给提议区块和投票的验证者 |
| 参与需要什么 | 一台能计算哈希的电脑 | 用于质押的币(以太坊验证者需要 32 ETH) |
| 例子 | 比特币、Monero、Blocknet | 2022 年起的以太坊 |
工作量证明如何选出下一个区块?
在工作量证明中,矿工竞相求解一道难以求解、但很容易验证的题目。矿工取出想要发布的区块,加上一个叫作 nonce 的数字,然后计算哈希。如果把哈希当作数字来看,它不高于全网的目标值,这个区块就有效;如果不是,矿工就换一个 nonce 再试。获胜的唯一办法是尝试大量 nonce,所以矿工找到下一个区块的概率,等于它在全网算力中所占的份额。
中本聪 2008 年的 比特币论文这样表述:“工作量证明本质上是一个 CPU 一票。”节点跟随投入了最多工作量的链,而难度设置会上下调整目标值,无论有多少算力加入,区块都能以稳定的节奏产生。加密货币挖矿原理一文逐步讲解了哈希、难度和矿池。
Blocknet 的工作方式相同,具体数值写在它的共识代码中:
- 哈希函数是 Argon2id,使用 2 GiB 内存,所以每次哈希既需要处理器时间,也需要实实在在的内存。Argon2id 详解介绍了它的工作原理。
- 目标值等于 (2^256 − 1) 除以难度,因此难度大致等于全网找到一个区块所需的哈希次数。
- 大约每五分钟产生一个区块,每天 288 个。难度通过 60 个区块的加权移动平均(LWMA)跟随最近的出块时间。
- 节点跟随最重的链。 每个节点把一条链上所有区块的难度相加,只有当竞争链的总工作量更高时才会切换过去。
权益证明如何选出下一个区块?
权益证明用押金代替哈希计算。要参与,验证者需要把币锁定在协议中,再由协议选出验证者来提议和批准区块。Peercoin 于 2012 年上线,是第一个采用权益证明的加密货币;以太坊则在 2022 年 9 月 15 日通过名为“合并”的升级完成了转换。
以太坊的设计展示了其中的各个环节。根据 ethereum.org:
- 验证者向存款合约存入 32 ETH。
- 时间被划分为 12 秒的时隙(slot),每 32 个时隙组成一个周期(epoch)。
- 每个时隙随机选出一名验证者提议区块,其他验证者通过认证(attestation)对它投票。
- 当持有全部质押 ETH 至少三分之二的验证者为检查点投票后,检查点即获得最终确定。
- 如果验证者在同一时隙提议两个区块,或投出相互矛盾的票,就会被罚没(slashing):它的部分质押、最多全部质押会被销毁。
质押承担的作用,相当于工作量证明中电力承担的作用。违反规则,验证者就要损失自己已经持有的币。
工作量证明和权益证明如何保障安全?
两种设计都让攻击的成本高于攻击可能获得的收益,只是把成本放在了不同的地方。
在工作量证明中,成本是持续的计算。 要改写过去的某个区块,攻击者必须重新完成该区块及其后所有区块的工作量,然后超过诚实的网络。中本聪证明,较慢的攻击者追上的概率会随着每个新区块呈指数级下降。要控制此后的链,就意味着在攻击持续期间,一直运行比其他所有人加起来还多的算力。
在权益证明中,成本是押上的资本。 以太坊的文档指出,攻击者“需要 51% 的质押 ETH”才能控制链;三分之一的质押就足以阻止区块获得最终确定;而回滚一个已最终确定的区块,意味着至少有三分之一的质押 ETH 会因罚没而损失。
Blocknet 在工作量证明之上还设定了两个阈值。网络把 10 个确认(约 50 分钟)视为安全,节点会拒绝深度超过 100 个区块(约八小时)的任何链重组,所以深度达到 100 的区块即为最终确定。
两种模式如何发行新币?
工作量证明币把新币支付给找到每个区块的矿工,所以任何贡献算力的人都能在不先持有币的情况下赚到币。权益证明币按质押比例把新币支付给验证者,所以奖励归已经持有币的人。每个协议都有自己的发行计划。
在工作量证明中,每个区块的第一笔交易会为找到该区块的矿工创造新币。比特币论文把这描述为“一种最初把币分发到流通中的方式,因为没有中央机构来发行它们”。比特币的区块奖励每 210,000 个区块减半一次,大约每四年一次,总供应量始终略低于 2100 万。
在以太坊的权益证明中,奖励每个周期向验证者余额发放一次,用于奖励认证、区块提议和同步委员会职责。基础奖励会随着总质押量增长而减少,而总发行量会随着更多验证者加入而增加。
Blocknet 的发行完全通过挖矿进行。它的创世区块不包含任何交易,所以挖矿开始前没有任何币存在,共识中也没有预挖、国库或创始人输出。每个区块都把全部奖励以一个输出支付给找到它的矿工。区块奖励最初为每块 723.25 BNT,在 48 个月内按指数曲线每 30 天一个月逐级下调,之后永久保持每块 2 BNT。
Blocknet 为什么采用工作量证明?
Blocknet 选择工作量证明,是为了让任何拥有电脑的人从第一个区块起就能赚取新币,而无需先购买。它的守护进程把 Argon2id 描述为“抵御 ASIC、确保公平挖矿的内存密集型工作量证明”,并且“为了公平”让每个哈希只在单个线程上运行。
正是内存要求让挖矿保持开放。每个哈希要填满 2 GiB 内存,所以每个挖矿线程需要约 2 GB 内存,而人们已经拥有的电脑,包括台式机、笔记本电脑和服务器,都具备这样的内存以及为其供数的内存控制器。Blocknet 属于围绕通用硬件设计的工作量证明币家族:例如 Monero 自 2019 年 11 月起采用 RandomX,这种算法“针对通用 CPU 优化”。
工作量证明会继续留在 Blocknet 的规划中。根据 blocknetcrypto.com,计划于 2027 年 2 月前后进行的 Faraday 升级将带来“更轻量的工作量证明”,让新节点更快追上链。
如何开始挖工作量证明币?
挖 Blocknet,你需要一个钱包地址和 seine,这是一款免费的开源矿工软件:
seine 会根据你的内存选择线程数,在挖矿时比较各个 CPU 内核并保留最快的那个,在 Windows 和 Linux 上还会把 NVIDIA 显卡与处理器一起投入挖矿。挖矿指南详细介绍了硬件和收益支付。
常见问题
Blocknet 是工作量证明还是权益证明?
Blocknet 采用工作量证明。矿工计算 Argon2id 哈希,每个哈希需要 2 GiB 内存,大约每五分钟产生一个新区块,全部区块奖励归找到该区块的矿工。Blocknet 没有质押。你可以用普通电脑运行 seine,通过 bntpool.com 矿池挖矿。
以太坊什么时候从工作量证明转向权益证明?
以太坊通过名为“合并”(the Merge)的升级转向权益证明,该升级于 2022 年 9 月 15 日执行。此后,由存入 32 ETH 的验证者代替矿工提议区块并投票。比特币、Monero 和 Blocknet 仍然采用工作量证明,新区块来自计算工作。
什么是 51% 攻击?
51% 攻击是指掌握决定区块的那种资源的大部分,从而试图控制一条链接受哪些区块。在工作量证明中,这意味着掌握全网大部分算力;在权益证明中,这意味着掌握大部分质押的币。无论哪种方式,攻击者都必须投入多数的真实资源。
权益证明的币可以挖矿吗?
不可以。纯权益证明的币没有挖矿。新币支付给锁定已有币作为质押的验证者,所以你必须先持有币才能赚到币。想用你现有的电脑赚取新币,需要选择 Blocknet 这样的工作量证明币。