本期重点解读比特币的白皮书,对此有一定了解的读者可略过。
上期最后讲到中本聪在2008年发明了比特币(后一年正式启动了创世区块),那么比特币到底是什么呢?我们先看中本聪自己在白皮书中的说法:一种完全通过点对点技术实现的电子现金系统,它使得在线支付能够直接由一方发起并支付给另外一方,中间不需要通过任何的金融机构。
简单概括一下,比特币是一种去中心化的P2P支付系统。重点来了,点对点电子支付系统已存在许久,比特币相对传统的P2P支付系统的核心区别正是“去中心化”。
传统金融体系下都是由值得信任的第三方机构进行记账,比如你在银行存100块钱,你存钱这个数据,只记录在银行的数据库里,仅由银行进行交易记录的维护,这是典型的中心化记账。那么比特币是如何在支付过程中实现去中心化的呢?中本聪巧妙的利用了分布式存储、链式数据结构、密码学(非对称加密)和POS工作量证明机制(共识算法)等技术,架构出一套全新的运行体系,从而实现了“去中心化记账”;简单来说比特币中产生的每笔交易,所有节点都会记录下来,即每个人都拥有一本完整的账本。然而这也引申出了一连串的问题:怎么确保交易记录的真实性?怎么确保交易记录的先后顺序(防止双花)?怎么确保所有账本的一致性?怎么确保账本不会被篡改?
要解决记账的真实性,必须要对所有节点公开交易记录且每个节点都能对任何一笔交易进行反向验证。中本聪通过引入非对称加密解决了这个问题。系统中的每笔交易都被定义为一条加密数据(记录)。交易过程中需要用收款人的公钥(准确的说是基于公钥生成的钱包地址) 创建一条新的交易记录(里面包含了从上个付款人那里收到这条记录的信息),并用付款人的私钥对该条记录加上数字签名(其他人可以通过付款人的公钥来验证签名),这样比特币的所有权便转移给了收款人(因为收款人的私钥可以解开这条加密数据),如此循环往复形成了一个交易链条。
白皮书原图那么交易完成的先后顺序又如何确定呢,中本聪给出的解决方案是利用“时间戳服务器”对以区块(block)形式存在的一组数据进行随机散列再盖上时间戳,每个区块的时间戳会将上一个区块的时间戳纳入其随机散列值,这样就形成了一个按时间序列的数据链条(Chain)。从而保证了交易之间明确的先后顺序。
白皮书原图同时在发起交易过程中会对全网进行广播(基于P2P网络协议),每个节点都会将收到的交易信息纳入一个区块中,那么谁有权利记录这个数据呢?这里就要用到前面提过的工作量证明机制(POS)了,简单来说就是在进行随机散列运算时,引入一个数学求解问题(例如SHA256,进行SHA256运算需要消耗大量的CPU时间和电力),最先找到这个解的节点获得记账权。这个解需要通过很多次运算求得,但是验证却只需要一次。而且还在区块中补增一个随机数(Nonce),可以通过这个随机数来自动调整求解的难度。
白皮书原图一旦这个解得到大多数节点的确认后,该区块的信息就不可更改。由于之后的区块是链接在该区块之后的,所以想要更改该区块中的信息,就必须将后面所有的区块都改掉,这需要消耗巨大的算力(但是如果只是修改最后一个区块难度相对会小很多,所以一笔交易只有在连续得到6个区块确认后才被认为基本不可逆),从而提高了节点作恶的成本,很大程度上降低了账本被篡改的风险。然而这样也不能保证绝对的安全,如果某个人掌握了全网51%的算力,从概率学角度来说他就更容易优先计算成功,因此他可以伪造出一条假链来替代主链,交易就被篡改了。也就是传说中的“51%攻击”,攻击者算力占比越高,攻击成功的概率就越大。
因为网络环境的复杂性,总会出现有多个节点同时广播不同版本的新区块,那么其他节点在接收到该区块的时间上将存在先后差别。这时他们将在率先收到的区块基础上进行工作,但也会保留其它的链条(分叉),直到下一个工作量证明被发现,而其中的一条链被证实为是较长的一条,那么在分支链条上工作的节点将切换到较长的链上继续工作(合并),其它分叉则被抛弃。比特币中的区块链条就是在不停的进行分叉、合并、又分叉、又合并的过程,其中最长的那条才是系统认可的区块链。
网络图片上面说到获得记账权需要消耗大量算力,而且整个系统还有被“51%攻击”的风险,那么如何保证比特币系统能够安全有效的运行呢?不得不说中本聪是个真正的天才,他通过设计独特奖励机制,从经济学角度很好的解决了这些问题。记账(挖矿)成功可以获得大量比特币奖励(相对于转账时极少的手续费),这让节点有动力去争夺记账权,保证交易的正常进行。同时对51%攻击者来说,即使算力攻击达成,但是整个系统的价值会崩溃掉,那么从攻击中获取的比特币也没有任何意义了,攻击过程中付出的大量硬件资源和电费会变成巨额亏损。对超级算力拥有者(主要是矿池)来说,攻击从经济成本角度来说是完全不划算的,他们有更好的方式获利:通过对比特币进行硬分叉来凭空创造财富(分叉币)。而且这个奖励机制还巧妙的解决了代币生成并流入市场的问题,谁付出资源,谁获得代币,这或许也是对全球央行货币制度的一种反击吧。
中本聪一直认为超发货币是一种对大众财富的“掠夺”,所以他将比特币的数量设为恒定的2100万个(由此带来了系统性通缩),同时为了使得价值易于组合与分割,交易被设计为可以纳入多个输入和输出。一般而言是某次价值较大的前次交易构成的单一输入,或者由某几个价值较小的前次交易共同构成的并行输入,但是输出最多只有两个:一个用于支付,另一个用于找零(假如有)。需要指出的是,大量交易之间存在依赖关系,但上文提到的技术方案(链式结构、时间戳、公私钥签名、POW等)保证了当前交易数据的真实性,因而并不需要展开检验之前发生的所有交易历史。
白皮书原图随着比特币交易的日益频繁,累积下来的交易信息也越来越多,显然这带来数据存储方面的压力,因此中本聪设计了一种存储空间回收机制。当最近的交易被纳入足够多的区块中后,就可以丢弃该交易之前的数据,以回收存储空间;同时为了确保不损害区块的随机散列值,交易信息被随机散列时,被构建成一种默克尔树(Merkle Tree是存储hash值的树形结构。区块中每个交易都计算一个Hash值,然后两两连接再次计算Hash,一直到最顶层的根哈希),使得只有根哈希(root hash)被纳入了区块的随机散列值。通过将该树的分支拔除的方法(仅保留最后一笔交易和其它非叶子节点的Hash即可),老区块就能被压缩,从而大大减少系统占用的存储空间。
白皮书原图因为Merkle算法的特性,使得轻节点(SPV节点,不用存储整个区块链的数据,无法进行记账)也能够对支付进行检验。轻节点只需要保留最长的工作量证明链条的区块头的数据(不含交易信息的区块头大小仅有80字节),它可以不断向网络发起询问,直到它确信自己拥有最长的链条,并能够通过Merkle Tree的分支通向它被加上时间戳并纳入区块的那次交易。这样就能看到某个节点曾经接受过它,并且于其后追加的区块也进一步证明全网曾经接受了它,以此来快速检验该交易的有效性。
白皮书原图由于交易是对全网广播的,为了保护使用者就必须采用特殊的隐私策略:通过将公钥保持为匿名,这样公众只能知道一笔数量的比特币从付款地址转移到了收款地址,而无法得知具体的收付款人,从而保证使用者的隐私安全。作为额外的预防措施,使用者可以让每次交易都生成一个新的地址,以确保这些交易不被追溯到一个共同的所有者。但是由于并行输入的存在,一定程度上的追溯还是不可避免的,因为并行输入表明这些货币都属于同一个所有者。此时的风险在于,如果某个人的某一个公钥被确认属于他,那么就可以追溯出此人的其它很多交易。
白皮书原图坚持看到这里的读者应该对比特币系统有了基本的认知,我简单总结一下:比特币通过使用分布式存储、链式数据结构、非对称加密、POW共识机制、P2P组网等一系列的技术组合,实现了数字货币的自主发行、匿名交易和公开记账,是一个去中心化的自我运行的金融系统。本期的内容比较多,之后我会带着大家逐渐深入了解比特币及其底层技术-区块链,敬请期待。
下期预告:《“比特币”的价值及其流通》
网友评论