时光飞逝!新一代的程序员们的目光正由比特币转向以太坊。这些程序员们可能从没有对加密货币产生兴趣,但是他们被以太坊的无需信用的交易以及图灵完备性所吸引。
然而我不能因为他们转向以太坊而责怪他们,因为以太坊的大部分底层技术都源自比特币。这篇文章将讲述比特币的相关技术,以让以太坊开发员更好地理解它是如何工作的,从而使新的以太坊开发员可以开发一些面向合约的应用,就像过去他们开始着手面向对象的应用一样。
本文共分为两部分,这是第一部分。第一部分:比特币区块链(“Just Enough Bitcoin for Ethereum”),这部分重点讲理解比特币的机制。第二部分:“以太坊:比特币加上一切”(Ethereum: Bitcoin Plus Everything),这部分重点讲以太坊是怎样延伸比特币的区块链技术。
区块链
从根本上讲,一个区块链就是状态迁移中的一个公共记录。任何人都可以查询区块链上过去的状态迁移,它们通过数学方法确保正确,这些交易是按照区块链的规则形成的。在比特币中,它的规则很简单,是这样的:比特币不能被双重支付,这些币的出现必须能追溯到某一个有效块的挖矿。在正式开始介绍区块链之前,我先推荐阅读比特币白皮书,及时你一点都不了解密码学。我们随后将讲解密码学的一些基础知识。比特币白皮书内容不多,推荐你可以先阅读它的前六节。
Satoshi Nakamoto's bitcoin whitepaper: https://bitcoin.org/bitcoin.pdf【阅读前六节】
区块链交易的密码学基础
正如有些人一点也不了解密码学,我发现我自己在开始阅读白皮书中关于交易的描述时也感到困惑。其实我们只要理解这是一种能追溯一个人过去到现在的资产的设计模式。但是什么是公钥?什么是哈希?这些密码学中的东西怎样证明资产属于某人?如果你从没有上过密码学的课,可以在网上观看Khan Academy的视频,他从高层来讲解这些重要的函数是如何运行的。
现在我们来看看白皮书中的交易框图。这里我们对Owner2的公钥和之前的交易(Owner1的财产在里面)进行哈希散列,形成一个摘要(哈希函数的输出)。接着用Owner1的私钥对这个摘要进行加密。将来,任何人都可以通过数字签名验证算法验证这笔交易:通过Owner2的公钥可以证明这笔交易的收款人是Owner2,通过Owner1的公钥可以证明这笔交易的付款人是Owner1,这个摘要在区块链上是公开的,里面还记录了这笔交易发生的时间。
通过Owner1的私钥加密的这笔交易,只有Owner1的公钥才能解密,故能证明其有效性。不断地递归这个过程直至到比特币的初始块,就能证明整个区块链的有效性。
你现在可能会想到很多问题,并且考虑可能发生的边缘情况。比如:比特币是如何开始产生的?一笔具体数目的比特币是如何交易的?为了更好地讲解,这里不具体讲解比特币的这些过程。接下来我们将覆盖比特币白皮书六个章节中的三个,讲解这几种边缘情况是如何解决的。
挖矿:在区块链上创造网络共识
所有的比特币交易都会通过全网广播,并且这些交易都会由矿工来验证它的有效性,最后把一段时间内所有有效的交易放进一个区块中。接着这个区块中的内容被散列成一个不断增长的随机数(nonce),直到产生的结果包含一定数目的leading zeroes(困难度)。整个网络会动态地调整难度,以控制区块每十分钟一个产生一个。由于哈希算法的结果是不可预测的,所以找到一个有效的哈希值需要一定的计算能力和运气。一个人拥有越多的计算资源,他就有更大机会在其他人之前找到这个有效的哈希值。当一个区块被挖出,就会广播全网,在接受这个区块成为整个网络的下一个区块之前,其他节点会验证这个区块中的所有交易是否有效,提供的随机哈希值是否有效。最后这个通过验证的区块会添加进区块链中,并同步进每个节点的本地数据库。
比特币的所有权链条是如何开始的呢?比特币协议规定了每个区块可以包括一笔发送给矿工,数额为25个比特币的交易,这25个比特币是凭空生成的。这样的设计将激励矿工支持比特币网络。如果一个比特币的所有权可以被追溯到这样的一笔特殊交易,那么这个比特币就可以被认证为是非伪造的。这是创造增加新的比特币的唯一方式。
只要超过51%的计算资源掌握在诚实节点手中,比特币就是安全的。但是如果一个恶意的用户控制了51%的网络计算资源,他就可以伪造交易记录,即使一开始诚实节点领先他一些区块,他最终也会不可避免地追上。因为在比特币协议中规定最长的区块链是有效的。
额外练习:比特币中的UTXO。在比特币中, 比特币用户持有的不是一个可无限可分的货币单位集合。与此相反,比特币用户使用 “未花费交易输出”(unspent transaction outputs,UTXO)。如果一个矿工想用刚刚挖矿的25个比特币购买标价为1个比特币的咖啡,他必须指定这25个比特币(UTXO)为这笔交易的输入,并为这笔交易指定两个输出:第一个输出发送1个比特币到咖啡卖家,第二个输出发送24个比特币到自己的地址,作为找零。如果再次购买咖啡,这24个比特币将构成一个单一UTXO。购买更加昂贵的商品时,一笔交易输入中的多个UTXOs,它将被作为一个新的、单一的UTXO被商家接收。以太坊没有使用UTXO机制,它的账户余额是可分的。
现在,你了解了比特币区块链的基本原理。如果你没有完全了解它,先别觉得它不好。试着深入了解它,你会开始产生一个梦想。一旦如此,你会开始设想如比特币区块链一样的许多东西,当它们的输入和程序代码也一样被公开,是否也可以通过复杂计算来验证公共输出。事实上,这就是本文第二部分讲介绍的。再见!
本文来自以太坊爱好者
网友评论