5分钟看懂比特币
本文是我参加大华ShareOrOut俱乐部发布的原创文章,本文不为大而全,只为了让读者更快速的理解比特币的一些基本原理。由于能力知识有限,如果有错误之处,还请指出,谢谢!
何为比特币
比特币作为一种虚拟货币,是由一个个的交易和对这些交易的数字签名组成的。
简单来说,你是否拥有一个比特币,并不是你保存了一个叫做比特币的数据,而是由于在整个比特币系统中,记录了从你得到这枚比特币以来的所有交易信息,如果系统中只有别人发给你比特币的交易,没有你发给别人比特币的交易,那么你就拥有这枚比特币。
比特币系统是由一个点对点的网络,维护者一个分布式记账本。当进行交易时,币的接收者可以通过查找账本中的历史交易记录,确定该比特币是属于币的发送者,且该比特币没有被发送者多次支付,从而验证该笔交易的有效性。
如何保证交易历史的可信度呢?需要对交易打上的时间戳,说明在该时刻该交易是存在的,且该交易是不能随意被更改的。而这些是由区块链完成的。
区块链
比特币将所有的交易都保存在一个个的区块(Block)里面,区块和区块之间互相关联,形成一个链式结构,叫做区块链(BlockChain)。如下图:
每个区块的时间戳证明是由一个hash值来表示的。后一个区块包含了前一个区块的hash值,因此后一个区块对前一个区块进行了增强。但是在分布式系统中,存在拜占庭将军问题,也即相同地位的结点,谁也不信任谁,谁也不服谁。那么比特币如何完成整个hash计算呢?如何保证区块中交易信息不被修改?先了解下工作量证明机制。
工作量证明
对一个区块的hash计算是这样完成的:
在区块中存在一个随机数Nonce,运行比特币矿机的结点对区块整体数据不断的进行一个hash运算(具体算法为SHA256),得到hash值,如果hash值不是以N个0开头的,就增加Nonce的值,重新再进行hash运算,直至找到这个解为止。
由hash运算的非对称性可知,得到正确的hash是需要运气的,往往需要经过大量多次不断的尝试;但是要验证一个hash值是否正确,只需要一次运算即可。
整个工作量证明的难易程度是由hash值0的个数N来决定的,比特币系统会根据当前整体的运算速率来进行调整N,从而保证平均每10分钟生成一个新的区块。
当某个矿机结点找到了一个解,那么即可以将hash值和该区块广播到整个比特币网络,证明自己创建了一个新的区块,这个过程就是一个工作量证明(俗称挖矿)。
比特币挖矿
矿工是运行hash运算的计算机结点,挖矿即是通过运算工作量证明生成新的区块。其特点如下:
每个比特币矿工结点都在自己本地维持了一个未完成的区块。
每个比特币矿工结点都不断的尝试对未完成区块找到一个工作量证明。
当有比特币交易产生时,比特币钱包将交易广播到比特币网络。
比特币结点将收到的比特币交易加入到未完成区块中。
比特币矿工结点完成一个工作量证明的时候,它将此区块和工作量证明广播到比特币网络,说明它完成了一个比特币区块的创建。
当比特币结点收到其他结点发来的新区块时,只有当新区块里面所有的交易都验证有效时,才会接受它,并将停止自己当前的区块创建,在新区块的后面尝试创建更新的区块(使用新区块的hash值)。
矿工的付出:CPU时间,电费等
矿工的奖励:
区块的第一个交易是特殊交易,它将奖励一定数量的比特币给区块的创建者。
区块中交易的手续费,如果某笔交易想要快速被确认,可以在交易中增加手续费,而保存该交易的区块的创建者将得到该手续费。
比特币安全
某个黑客想修改某个区块,一般情况下这是很难做到的,因为诚实的矿工会在最长的区块链上不断的增加新的区块,而整个比特币网络只认可最长的区块链。当黑客想修改某个区块时,由于后一个区块里面包含了前一个区块的hash值,因此会生成一个新的分支,只有当他在新的分支上面生产区块的速度,超过诚实旷工生产区块的速度时,才能真正做到记录的修改。
因此,该黑客需要有超过诚实矿工的运算速度,也即至少需要拥有全网51%的算力,这就是比特币51%攻击。我们可以认为比特币是安全的,以下几点可以看出:
得到全网51%以上的算力在现实社会是不太可能发生的。
即使某些黑客拥有全网51%以上的算力,它也只能修改自己的交易记录从而把自己刚付给别人的钱拿回来。因为交易是有比特币发送方的数字签名的,他很难伪造别人的数字签名从而把别人的比特币发送给自己。
它会发现更改交易记录是得不偿失的,相比修改交易记录把自己付给别人的钱拿回来,作为一个诚实的矿工要挣得更多。
参考文献:
中本聪 Bitcoin: A Peer-to-Peer Electronic Cash System