书名:区块链 通住资产数字化之路 Mastering Bitcoin: Unlocking Digital Cryptocurrencies
作者:Andreas M. Antonopoulos
这书以比特币 (Bitcoin) 为例说明区块链 (Blockchain) 技术。区块链技术可说是分散式、去中心化系统之突破。它不旦可用于比特币,也可用于其他加密货币,和其他用途的分散式系统。
什么是比特币
比特币是开源的、去中心化分散式加密货币系统。去中心化的好处是没有人能干预比特币的发展,不再依赖银行、政府机构结算,不再有单点故障 (Singe point of failure)。比特币发行量每4年减半,再过几年发行量便到达 2000 万,而整个比币系统只会有 2100 万个比特币,不会有通货膨脤问题。
如何使用比特币
比特币是基于现代密码学 (Cryptography) 的基础,对密码学有一定认识之读者,应该明白什么是Public key、Private key、Hash 函数、电子签署 Digital signature 等基本概念,这里不会详述。
用户必须有一比特币地址,来接收比特币。比特币钱包可生成Public key (K)、Private key (k),和用一Hash函数 (Hash160) 生成一比特币地址 (A)。
比特币地址 A = Hash160(K)
任何人如有这地址 A 和它对应的 Private key,便有使用的该地址内比特币的权利。
钱包会保留你未花费的比特币余额,即使没有保留,也可以在比特币网络中查看到。当要支付时,你从自己的多个自己的地址查看到未花费余额,然后输入支付目标地址和支付量。钱包会创建一个交易,然后发送到比特币网络。钱包的安全,全是基于加密,只要有 Private key,便有使用权。
比特币网络 (P2P 网络)
比特币网络有多种不同类型的节点。
- 钱包 (轻量级客户端)
- 区块链数据库 (分散式区块链条 / 帐本)
- 矿工
- 路由节点等
客户端可分为轻量级客户端和标准客户端。轻量级客户端,即一般没有包括交易帐本的钱包,必须依赖其他节点验证交易。标准客户端包括全部交易帐本,能自主验证交易。全部交易帐本数据量庞大,以数十GB计。比特币网络同一时间约有 7000 到 10000 个标准客户端同时运行 (按书当时的资料),因而没有单点故障的问题。
为什么有那么多节点
当交易上传到比特币网络,会被放到交易池中,等候处理。每约十分钟,各个矿工节点便会同时把几百个交易从池中拿出来,创建一候选区块。候选区块包括这些已验証的交易、交易费用、新发行之比特币,和指向主区块链的指针。早前提及比特币发行量每 4 年减半,当中的发行过程就在这里。交易费用和新币都是给矿工的奖励。但是要赚取这些奖励并不容易,矿工要通过一个名为“挖矿”的竞争性过程,才能得到奖励。如果全网同时有一万个矿工在工作,每约十分钟只有一名矿工幸运儿能够全取候选区块中的奖励。
挖矿:处理交易、建立分散式帐本
在候选区块中,除了包含几百个已验正的交易外,亦含有交易费和新发行的比特币。还记得比特币发行量每 4 年减半吗?比特币就是在挖矿时发行的。矿工只有在自己的候选区块成功被挖时,才会赢得交易费和新发行的比特币作为奖励。
如何才算成功挖矿
挖矿是竞争性过程,胜者全取奖励,负者一无所有,白付电费。全网有多个矿工同时工作,各自创建候选区块,各自挖矿。
通过工作证明算法,可以确定候选区块是否成功被挖。一个区块实际上是一堆包含交易、和区块链最顶层区块的指针的资料。区块链网络会提出一个数学难题,在比特币的中,是基于 Hash 值的计算,在其他应用也可能会使用其他不同的算法。
Hash 函数的特点是计算很容易,但有不可逆性。矿工除了乖乖试错以外,难以作弊。
系统会给出一个目标值,只要矿工在候选区块附加一个随机数,然后使用 Hash 函数计算候选区块的 Hash 值。只要该 Hash 值小于系统的目标值,便算成功挖矿,同时该矿工取得候选区块内之奖励。如果 Hash 值是大于目标值,矿工必须修改随机数,再次计算 Hash 值,直至全网有一个或多于一个矿工成功挖矿,全部矿工都会废弃自己没胜出的候选区块。
比特币网络会适时调节难度,使平均约10分钟便有一矿工找到答案。但这完全是个全网随机过程,个别矿工可能很快便可以成功挖矿,有的矿工可能整个月也没有收获。挖矿成本是矿机和电费,如果有硬件优势和电费优势,便会有更好之竞争力。
区块链
新的区块挖矿成功后,该矿工的候选区块便会加到区块链的最顶端。区块链的首个区块称为”创世区块”,以后所有的区块都是基于最顶的区块。候选区块含有指向最顶层区块的指针。往后不段有区块加到该旧区块之上,旧区块便会更难推翻。当旧区块之上有新区块覆蓋在其上层,这称为一个确认。如果一个旧区块被 6 个新区块覆蓋,即有 6 个确认,那便不能再被推翻。每约十分钟生成一个区块,即是说约一个小时后,交易便不可能被推翻。
同时有多于一个矿工成功挖矿
区块链容许有分叉,多于一个候选区块会被接纳到区块链,累计最大难度的称为主链。以后生增区块时,只会选择主链。
缺点
比特币网络是区块链首个成功之应用。给我的印象是区块链方案既优雅又浪费。现在比特币网络,存在太多资源冗余。每个标准节点都有整个区块链帐本,那是数以几千计的重复。
由于比特币价格上升,吸引了很多矿工挖矿。挖矿是胜者全取,有大量都算力都是被浪费掉,而非花在有意义的事情上。此外,矿工为取得算力优势,矿机很快便会淘汰。这也许是我见过最浪费的集体现象之一。
Libra
Facebook 最近称会自行开发新的加密货币 Libra,现在还是处于很初步之阶段。Libra 没有挖矿的概念,只有 Libra 协会的会员能够处理交易。协会成员将会各自出资,以支持 Libra 的发行。Libra 不是完全开放,只会开放给付得起钱的会员。私链的好坏现时还难以评论,但没有挖矿,至少会减少资源的浪费。
它和比特币似乎有很大的分别。比特币最重要的特色是去中心化,减少对一些金融机构或实体之依赖。现在 Libra 则由 Facebook 主导,即使物理或网络上仍然是分散式设计,但管理上就是由 Libra协会这个中心控制。