概述
区块是交易的集合,拥有将10分钟内产生的交易打包进一个区块并将这个区块追加到区块链上(也就是确认)这种能力的人就是矿工,矿工有什么好处?奖励一定数量的比特币,并获得这个区块内所有的交易费。这个奖励每四年递减一半,现在是12.5个,按现在的价格就是10分钟能赚得一二十万呢?不少了。。。但是矿工很多,如何证明你有这样的能力而别人不拥有,就是个问题。解决的办法就是工作量证明,意思就是谁在这10分钟内能证明自己工作量最大,谁就赢得这个权利。那么如何评定工作量呢?矿工们需要争相完成一种基于加密哈希算法的数学难题,这些难题的答案包括在新区块中,作为矿工的计算工作量的证明。
类比一下:
古代有一个国王有好多女儿,个个貌美如花,天下才子蜂拥而至,国王如何挑选呢?这样吧解题招亲,谁能解出一道题就把其中一个姑娘嫁给他。才子们疯狂竞争,想破脑袋去解题。只要其中一个才子解出一道题,就立马得意洋洋地昭告天下,示威全部才子,这个姑娘是我的啦,你们放弃吧。其他才子们即使不服也没有办法,惆怅懊恼也不是个事儿啊,还是麻溜地立马去解下一道题目吧。这只喜赢公主的幸运才子被国王入赘后还能得到25个货币单位的彩礼(还有彩礼钱:交易费),简直人生赢家。国王会通过解题的速率去调整题目的难度,有时候吧,出的太难了,好久没人有能力来上门提亲,这可不行,这女儿不能砸手里啊,得把题目难度降一点。有时候难度太简单,不到10个时间单位就嫁出去一个,这更不行,赶紧使用难度提升技能。随着时间的发展,每四年彩礼钱还会减半。。。
通货紧缩货币
比特币的货币是通过挖矿发行的,类似于中央银行通过印刷银行纸币来发行货币。矿工通过创造一个新区块得到的比特币数量大约每四年(或准确说是每210,000个块)减少一半。开始时为2009年1月每个区块奖励50个比特币,然后到2012年11月减半为每个区块奖励25个比特币。之后将在2016年的某个时刻再次减半为每个新区块奖励12.5个比特币。基于这个公式,比特币挖矿奖励以指数方式递减,直到2140年。届时所有的比特币(20,999,999.98)全部发行完毕。换句话说在2140年之后,不会再有新的比特币产生。
法币一般都是通涨货币,而比特币是通缩货币。通缩货币意味着货币的购买能力越来越强而导致消费意愿降低,需求减少甚至坍塌,就会被持有者长期囤积而降低流通性,从而导致经济滞涨。但是比特币不是因为需求坍塌导致的通缩,是比特币经济有意设计的一种预定且有节制的货币供应模型导致的。
挖矿和算力竞赛
比特币挖矿算力增长和难度增长是道高一尺魔高一丈,相互竞争的过程。未来量子计算机出现,会不会对算力突破性颠覆,难度增长可否跟得上,让我们拭目以待。
随机数(Nonce)存储空间有限问题解决办法
在比特币的早期,矿工可以通过遍历随机数(Nonce)获得符合要求的hash来挖出一个块。后期随着算力的提升,随机数(Nonce)存储空间不够,导致取出的随机数位数太少,矿工不得不借助通过读取块的时间戳并计算经过的时间来解决。
当出现ASIC矿机并很快达到了TH/秒的hash速率后,挖矿软件为了找到有效的块,需要更多的空间来储存nonce值。可以把时间戳延后一点,但将来如果把它移动得太远,会导致区块变为无效。区块头需要一个新的“差异性”的信息来源。解决方案是使用coinbase交易作为额外的随机值来源,因为coinbase脚本可以储存2-100字节的数据,矿工们开始使用这个空间作为额外随机值的来源,允许他们去探索一个大得多的区块头值范围来找到有效的块。
矿池
个体矿工独立工作(solo矿工)挖矿已经无法取得稳定的收入了,因此有了矿池。矿池就是多个矿工将算力集中起来,分享奖励。
托管矿池
中心化管理,拥有可以共享给所有矿池成员的全节点数据的维护更新。矿池管理员收取管理费。
参加矿池的矿工把搜寻候选区块的工作量分割,并根据他们挖矿的贡献赚取“份额”。矿池为赚取“份额”设置了一个低难度的目标,通常比比特币网络难度低1000倍以上。当矿池中有人成功挖出一块,矿池获得奖励,并和所有矿工按照他们做出贡献的“份额”数的比例分配。
矿工连接到矿池服务器使用一个采矿协议比如Stratum (STM)或者 GetBlockTemplate (GBT)。矿池服务器通过聚集交易,添加coinbase交易(和额外的随机值空间),计算MERKLE根,并连接到上一个块hash来建立一个候选区块。这个候选区块的头部作为模板分发给每个矿工。矿工用这个区块模板在低于比特币网络的难度下采矿,并发送成功的结果返回矿池服务器赚取份额。
P2Pool矿池
托管矿池的缺点:中心化,单点故障,管理员权力集中。
P2Pool通过将矿池服务器的功能去中心化,实现一个并行的类似区块链的系统,名叫份额链。一个份额链是一个难度低于比特币区块链的区块链系统。份额链允许池中矿工在一个去中心化的池中合作,以每30秒一个份额区块的速度在份额链上采矿,并获得份额。份额链上的区块记录了贡献工作的矿工的份额,并且继承了之前份额区块上的份额记录。当一个份额区块上还实现了比特币网络的难度目标时,它将被广播并包含到比特币的区块链上,并奖励所有已经在份额链区块中取得份额的池中矿工。本质上说,比起用一个矿池服务器记录矿工的份额和奖励,份额链允许所有矿工通过类似比特币区块链系统的去中心化的共识机制跟踪所有份额。
P2Pool矿池类似个人挖矿的优化版,在P2Pool中,单独的矿工创建自己的候选区块,聚合交易,非常类似于solo矿工,但是他们在份额链上合作采矿。P2Pool是一种比单独挖矿有更细粒度收入优势的混合方法。但是不需要像托管矿池那样给管理人太多权力。
共识攻击
拥有了大量算力的矿池有可能发起共识攻击。
共识攻击只能影响整个区块链未来的共识,或者说,最多能影响不久的过去几个区块的共识(最多影响过去10个块)。而且随着时间的推移,整个比特币块链被篡改的可能性越来越低。同时,共识攻击也不会影响用户的私钥以及加密算法(ECDSA)。共识攻击也不能从其他的钱包那里偷到比特币、不签名地支付比特币、重新分配比特币、改变过去的交易或者改变比特币持有纪录。共识攻击能够造成的唯一影响是影响最近的区块(最多10个)并且通过拒绝服务来影响未来区块的生成。
“51%攻击”
一群矿工控制了整个比特币网络51%的算力,他们联合起来打算攻击整个比特币系统。由于这群矿工可以生成绝大多数的块,他们就可以通过故意制造块链分叉来实现“双重支付”或者通过拒绝服务的方式来阻止特定的交易或者攻击特定的钱包地址。
区块链分叉/双重支付攻击指的是攻击者通过不承认最近的某个交易,并在这个交易之前重构新的块,从而生成新的分叉,继而实现双重支付。有了充足算力的保证,一个攻击者可以一次性篡改最近的6个或者更多的区块,从而使得这些区块包含的本应无法篡改的交易消失。值得注意的是,双重支付只能在攻击者拥有的钱包所发生的交易上进行,因为只有钱包的拥有者才能生成一个合法的签名用于双重支付交易。攻击者只能在自己的交易上进行双重支付攻击,当这笔交易对应的是不可逆转的购买行为的时候,这种攻击就是有利可图的。
区块链分叉/双重支付攻击一般不会发生在面额较小的交易中,因为发动攻击的成本较高,所以一般发生在大宗交易。实际上解决问题的办法也比较简单,就是等待6个以上的节点确认,确认的越多,篡改交易的可能性越小。
还有一种攻击场景就是拒绝对某个特定的比特币地址提供服务。51%算力拥有者故意分叉,然后从区块中删除某个地址的交易,导致交易不能成功。
“51%攻击”并不是一定拥有51%算力才可以发动攻击,而是说,51%算力能够保证攻击一定成功,实际上30%以上的算力都可以形成类似攻击。但是随着比特币网络的算力呈几何级数快速增长,上述这些理论上可行的攻击场景,实际操作起来已经越来越困难。
参考内容:
作者:玲珑邪僧
链接:https://www.zhihu.com/question/27687960/answer/84583016
《精通比特币》