一个比特币多少hash解
170Mhash/s速度挖24小时的产出只有0.1个比特币而已,58.5~~~~自己算算吧。。。。
㈡ 比特币如何算出来的
要想了解bitcoin的技术原理,首先需要了解两个重要的密码技术: HASH码:将一个长字符串转换成固定长度的字符串,并且其转换不可逆,即不太可能从HASH码猜出原字符串。bitcoin协议里使用的主要是SHA256。
公钥体系:对应一个公钥和私钥,在应用中自己保留私钥,并公开公钥。当甲向乙传递信息时,可使用甲的私钥加密信息,乙可用甲的公钥进行解密,这样可确保第三方无法冒充甲发送信息;同时,甲向乙传递信息时,用乙的公钥加密后发给乙,乙再用自己的私钥进行解密,这样可确保第三者无法偷听两人之间的通信。最常见的公钥体系为RSA,但bitcoin协议里使用的是lliptic Curve Digital Signature Algorithm。 和现金、银行账户的区别? bitcoin为电子货币,单位为BTC。在这篇文章里也用来指代整个bitcoin系统。 和在银行开立账户一样,bitcoin里的对应概念为地址。每个人都可以有1个或若干个bitcoin地址,该地址用来付账和收钱。每个地址都是一串以1开头的字符串,比如我有两个bitcoin账户,和。一个bitcoin账户由一对公钥和私钥唯一确定,要保存账户,只需要保存好私钥文件即可。 和银行账户不一样的地方在于,银行会保存所有的交易记录和维护各个账户的账面余额,而bitcoin的交易记录则由整个P2P网络通过事先约定的协议共同维护。 我的账户地址里到底有多少钱? 虽然使用bitcoin的软件可以看到当前账户的余额,但和银行不一样,并没有一个地方维护每个地址的账面余额。它只能通过所有历史交易记录去实时推算账户余额。 我如何付账? 当我从地址A向对方的地址B付账时,付账额为e,此时双方将向各个网络节点公告交易信息,告诉地址A向地址B付账,付账额为e。为了防止有第三方伪造该交易信息,该交易信息将使用地址A的私钥进行加密,此时接受到该交易信息的网络节点可以使用地址A的公钥进行验证该交易信息的确由A发出。当然交易软件会帮我们做这些事情,我们只需要在软件中输入相关参数即可。 网络节点后收到交易信息后会做什么? 这个是整个bitcoin系统里最重要的部分,需要详细阐述。为了简单起见,这里只使用目前已经实现的bitcoin协议,在当前版本中,每个网络节点都会通过同步保存所有的交易信息。 历史上发生过的所有交易信息分为两类,一类为"验证过"的交易信息,即已经被验证过的交易信息,它保存在一连串的“blocks”里面。每个"block"的信息为前一个"bock"的ID(每个block的ID为该block的HASH码的HASH码)和新增的交易信息(参见一个实际的block)。另外一类指那些还"未验证"的交易信息,上面刚刚付账的交易信息就属于此类。 当一个网络节点接收到新的未验证的交易信息之后(可能不止一条),由于该节点保存了历史上所有的交易信息,它可以推算中在当时每个地址的账面余额,从而可以推算出该交易信息是否有效,即付款的账户里是否有足够余额。在剔除掉无效的交易信息后,它首先取出最后一个"block"的ID,然后将这些未验证的交易信息和该ID组合在一起,再加上一个验证码,形成一个新的“block”。 上面构建一个新的block需要大量的计算工作,因为它需要计算验证码,使得上面的组合成为一个block,即该block的HASH码的HASH码的前若干位为1。目前需要前13位为1(大致如此,不确定具体方式),此意味着如果通过枚举法生成block的话,平均枚举次数为16^13次。使用CPU资源生成block被称为“挖金矿”,因为生产该block将得到一定的奖励,该奖励信息已经被包含在这个block里面。 当一个网络节点生成一个新的block时,它将广播给其它的网络节点。但这个网络block并不一定会被网络接受,因为有可能有别的网络节点更早生产出了block,只有最早产生的那个block或者后续block最多的那个block有效,其余block不再作为下一个block的初始block。 对方如何确认支付成功? 当该笔支付信息分发到网络节点后,网络节点开始计算该交易是否有效(即账户余额是否足够支付),并试图生成包含该笔交易信息的blocks。当累计有6个blocks(1个直接blocks和5个后续blocks)包含该笔交易信息时,该交易信息被认为“验证过”,从而该交易被正式确认,对方可确认支付成功。 一个可能的问题为,我将地址A里面的余额都支付给地址B,同时又支付给地址C,如果只验证单比交易都是有效的。此时,我的作弊的方式为在真相大白之前产生6个仅包括B的block发给B,以及产生6个仅包含C的block发给C。由于我产生block所需要的CPU时间非常长,与全网络相比,我这样作弊成功的概率微乎其微。 网络节点生产block的动机是什么? 从上面描述可以看出,为了让交易信息有效,需要网络节点生成1个和5个后续block包含该交易信息,并且这样的block生成非常耗费CPU。那怎么样让其它网络节点尽快帮忙生产block呢?答案很简单,协议规定对生产出block的地址奖励BTC,以及交易双方承诺的手续费。目前生产出一个block的奖励为50BTC,未来每隔四年减半,比如2013年到2016年之间奖励为25BTC。 交易是匿名的吗? 是,也不是。所有BITCOIN的交易都是可见的,我们可以查到每个账户的所有交易记录,比如我的。但与银行货币体系不一样的地方在于,每个人的账户本身是匿名的,并且每个人可以开很多个账户。总的说来,所谓的匿名性没有宣称的那么好。 但bitcoin用来做黑市交易的还有一个好处,它无法冻结。即便警方追踪到了某个bitcoin地址,除非根据网络地址追踪到交易所使用的电脑,否则还是毫无办法。 如何保证bitcoin不贬值? 一般来说,在交易活动相当的情况下,货币的价值反比于货币的发行量。不像传统货币市场,央行可以决定货币发行量,bitcoin里没有一个中央的发行机构。只有通过生产block,才能获得一定数量的BTC货币。所以bitcoin货币新增量决定于: 1、生产block的速度:bitcoin的协议里规定了生产block的难度固定在平均2016个每两个星期,大约10分钟生产一个。CPU速度每18个月速度加倍的摩尔定律,并不会加快生产block的速度。 2、生产block的奖励数量:目前每生产一个block奖励50BTC,每四年减半,2013年开始奖励25BTC,2017年开始奖励额为12.5BTC。 综合上面两个因素,bitcoin货币发行速度并不由网络节点中任何单个节点所控制,其协议使得货币的存量是事先已知的,并且最高存量只有2100万BTC
㈢ 绠楀姏鏄骞蹭粈涔堢殑
1. 绠楀姏鏄姣旂壒甯佺綉缁滃勭悊鑳藉姏鐨勫害閲忓崟浣嶏紝閫氬父琛ㄧず涓烘瘡绉掑彲浠ヨ$畻鐨勫搱甯屽嚱鏁版℃暟銆
2. 绠楀姏锛堟垨绉板搱甯岀巼锛夋槸姣旂壒甯佺綉缁滃勭悊鑳藉姏鐨勫害閲忓崟浣嶏紝鎸囩殑鏄璁$畻鏈烘瘡绉掕$畻鍝堝笇鍑芥暟杈撳嚭鐨勬℃暟銆
3. 姣旂壒甯佺綉缁滀负淇濊瘉瀹夊叏锛屽繀椤绘墽琛屽ぇ閲忕殑鏁板﹀拰鍔犲瘑鎿嶄綔銆
4. 渚嬪傦紝缃戠粶鐨勫搱甯岀巼杈惧埌10Th/s锛屾剰鍛崇潃姣忕掑彲浠ヨ繘琛10涓囦嚎娆¤$畻銆
5. 鍦ㄦ瘮鐗瑰竵鐨勬寲鐭胯繃绋嬩腑锛屾垜浠闇瑕佹壘鍒版弧瓒崇壒瀹氭潯浠剁殑瑙m锛岃屽逛簬鍏鍗佸洓浣嶇殑鍝堝笇鍊硷紝鎵惧埌鍏惰Вm娌℃湁鍥哄畾鐨勭畻娉曪紝鍙鑳介氳繃璁$畻鏈鸿繘琛岄殢鏈虹殑鍝堝笇纰版挒銆
6. 鎸栫熆鏈烘瘡绉掕兘杩涜岀殑鍝堝笇纰版挒娆℃暟锛屼唬琛ㄤ簡鍏剁畻鍔涳紝閫氬父浠hash/s琛ㄧず锛岃繖鏄宸ヤ綔閲忚瘉鏄庢満鍒禤OW锛圥roof Of Work锛夌殑鍩虹銆
7. 鐩鍓嶏紝姣旂壒甯佸叏缃戠畻鍔涘凡缁忚繘鍏P绠楀姏鏃朵唬锛1P=1024T锛1T=1024G锛1G=1024M锛1M=1024k锛夛紝杩欐爣蹇楃潃姣旂壒甯佽繘鍏ヤ簡涓涓鏂扮殑绔炰簤闃舵点
8. 绠楀姏琛¢噺浜嗗湪涓瀹氱殑缃戠粶娑堣椾笅锛岀敓鎴愭柊鍧楃殑鎬昏$畻鑳藉姏銆
9. 姣忎釜纭甯佺殑鍖哄潡閾剧敓鎴愭柊鐨勪氦鏄撳潡鎵闇鐨勬椂闂翠笉鍚岋紝杩欏彇鍐充簬鍗曚釜鍖哄潡閾剧殑绠楀姏銆
㈣ 姣旂壒甯佺畻鍔涙槸浠涔
1銆佺畻鍔涗篃绉板搱甯岀巼锛屾槸姣旂壒甯佺綉缁滃勭悊鑳藉姏鐨勫害閲忓崟浣嶃傚嵆涓鸿$畻鏈猴紙CPU锛夎$畻鍝堝笇鍑芥暟杈撳嚭鐨勯熷害銆
2銆佹瘮鐗瑰竵缃戠粶蹇呴』涓轰簡瀹夊叏鐩鐨勮岃繘琛屽瘑闆嗙殑鏁板﹀拰鍔犲瘑鐩稿叧鎿嶄綔銆備緥濡傦紝褰撶綉缁滆揪鍒10Th/s鐨勫搱甯岀巼鏃讹紝鎰忓懗鐫瀹冨彲浠ユ瘡绉掕繘琛10涓囦嚎娆¤$畻銆
3銆佸湪閫氳繃鈥滄寲鐭库濆緱鍒版瘮鐗瑰竵鐨勮繃绋嬩腑锛屾垜浠闇瑕佹壘鍒板叾鐩稿簲鐨勮Вm锛岃屽逛簬浠讳綍涓涓鍏鍗佸洓浣嶇殑鍝堝笇鍊硷紝瑕佹壘鍒板叾瑙m锛岄兘娌℃湁鍥哄畾绠楁硶锛屽彧鑳介潬璁$畻鏈洪殢鏈虹殑hash纰版挒锛岃屼竴涓鎸栫熆鏈烘瘡绉掗挓鑳藉仛澶氬皯娆hash纰版挒锛屽氨鏄鍏垛滅畻鍔涒濈殑浠h〃锛屽崟浣嶅啓鎴恏ash/s锛岃繖灏辨槸鎵璋撳伐浣滈噺璇佹槑鏈哄埗POW銆
4銆佹棩鍓嶏紝姣旂壒甯佸叏缃戠畻鍔涘凡缁忓叏闈㈣繘鍏P绠楀姏鏃朵唬锛1P=1024T锛1T=1024G锛1G=1024M锛1M=1024k锛夛紝鍦ㄤ笉鏂椋欏崌鐨勭畻鍔涚幆澧冧腑锛孭鏃朵唬鐨勫埌鏉ユ剰鍛崇潃姣旂壒甯佽繘鍏ヤ簡涓涓鏂扮殑鍐涘囩珵璧涢樁娈点
5銆佺畻鍔涙槸琛¢噺鍦ㄤ竴瀹氱殑缃戠粶娑堣椾笅鐢熸垚鏂板潡鐨勫崟浣嶇殑鎬昏$畻鑳藉姏銆傛瘡涓纭甯佺殑鍗曚釜鍖哄潡閾鹃殢鐢熸垚鏂扮殑浜ゆ槗鍧楁墍闇鐨勬椂闂磋屽彉鍖栥
㈤ 算力是什么意思
算力是比特币网络处理能力的衡量标准,它表示计算机执行哈希函数输出的速度。在比特币网络中,为了确保安全,需要进行大量的数学和加密操作。例如,网络的哈希率达到10Th/s,意味着每秒可以进行10万亿次计算。在比特币挖矿过程中,我们需要找到与特定哈希值相对应的解m。对于任何一个六十四位的哈希值,找到其解m没有固定的算法,只能通过计算机的随机哈希碰撞来实现。挖矿机每秒能进行的哈希碰撞次数,就是其算力的体现,单位为hash/s,这构成了比特币的工作量证明机制POW(Proof Of Work)。
目前,比特币全网算力已经进入P算力时代(1P=1024T,1T=1024G,1G=1024M,1M=1024k)。随着算力的不断增长,P时代的到来标志着比特币进入了一个新的竞争阶段,类似于一场军备竞赛。算力是衡量在特定网络消耗下生成新块的单位总计算能力。它为大数据的发展提供了坚实的基础,因为大数据的快速增长给现有的算力带来了巨大的挑战。在互联网时代,大数据的迅速积累导致全球数据总量呈几何级增长,现有的计算能力已无法满足需求。根据IDC的报告,全球信息数据的90%是在最近几年产生的。
㈥ 比特币算法原理
比特币算法主要有两种,分别是椭圆曲线数字签名算法和SHA256哈希算法。
椭圆曲线数字签名算法主要运用在比特币公钥和私钥的生成过程中,该算法是构成比特币系统的基石。SHA-256哈希算法主要是运用在比特币的工作量证明机制中。
比特币产生的原理是经过复杂的运算法产生的特解,挖矿就是寻找特解的过程。不过比特币的总数量只有2100万个,而且随着比特币不断被挖掘,越往后产生比特币的难度会增加,可能获得比特币的成本要比比特币本身的价格高。
比特币的区块由区块头及该区块所包含的交易列表组成,区块头的大小为80字节,由4字节的版本号、32字节的上一个区块的散列值、32字节的 Merkle Root Hash、4字节的时间戳(当前时间)、4字节的当前难度值、4字节的随机数组成。拥有80字节固定长度的区块头,就是用于比特币工作量证明的输入字符串。不停的变更区块头中的随机数即 nonce 的数值,并对每次变更后的的区块头做双重 SHA256运算,将结果值与当前网络的目标值做对比,如果小于目标值,则解题成功,工作量证明完成。
比特币的本质其实是一堆复杂算法所生成的一组方程组的特解(该解具有唯一性)。比特币是世界上第一种分布式的虚拟货币,其没有特定的发行中心,比特币的网络由所有用户构成,因为没有中心的存在能够保证了数据的安全性。
㈦ 姣旂壒甯佺畻鍔涚殑鍗曚綅鏈夊摢浜涙渶灏忓崟浣嶆槸浠涔
涓浜涙渶甯哥敤鐨勬瘮鐗瑰竵绠楀姏鍗曚綅濡備笅鎵绀猴細棣栧厛鏄疕/s 锛屽畠鏄鏈灏忕殑鍗曚綅锛屾瘡绉掑仛涓娆¤$畻鏈洪殢鏈虹殑hash纰版挒锛岀敱姝ょО涓篐ash/s 鍗曚綅鍙浠ョ畝鍗曞啓鎴 H/sKH/s : 1KH/s=1000H/s 涓鑸鎯呭喌涓 K灏辨槸鍗冿紝姣忕1,000娆″搱甯孧H/s 锛1MH/s=1000KH/s M鏄鍏嗭紝1M=1000鍗 锛1MH/s=姣忕1,000,000娆″搱甯孏H/s锛1GH/s =1000MH/s 姣忕1,000,000,000娆″搱甯屻俆H/s 锛1 TH/s =1000GH/s 姣忕1,000,000,000,000娆″搱甯屻侾H/s锛1 PH/s =1000TH/s 姣忕1,000,000,000,000,000娆″搱甯屻侲H/s锛1 EH/s =1000PH/s 姣忕1,000,000,000,000,000,000娆″搱甯屻備妇涓渚嬪瓙锛屽傛灉绠楀姏鍐欐垚鈥50EH/S鈥濓紝閭d箞绠楀姏灏辨槸5涔樹互10鐨19娆℃柟锛19涓0锛
鎴戜滑閫氳繃浠ヤ笂鍏充簬姣旂壒甯佺畻鍔涚殑鍗曚綅鏈夊摢浜涙渶灏忓崟浣嶆槸浠涔堝唴瀹逛粙缁嶅悗,鐩镐俊澶у朵細瀵规瘮鐗瑰竵绠楀姏鐨勫崟浣嶆湁鍝浜涙渶灏忓崟浣嶆槸浠涔堟湁涓瀹氱殑浜嗚В,鏇村笇鏈涘彲浠ュ逛綘鏈夋墍甯鍔┿
㈧ 一个比特币要挖多久
比特币是一种网络虚拟货币。比特币网络通过“挖矿”来生成新的比特币。所谓“挖矿”实质上是用计算机解决一项复杂的数学问题,来保证比特币网络分布式记账系统的一致性。假设挖矿计算能力为100Mhash/s,每天总计算力为4000Ghash/s,那么每24小时可以挖出3600个比特币。
中国的算力已经占到了全世界的75%以上,也就是说全世界有75%的比特币都是made in China。 那么一个比特币要挖多久?
曾经的比特币非常好“挖”,普通电脑CPU就能完成,只需下载软件就可以自动“解题”。但是随着币价上涨,想要“解题”的人越来越多,挖矿的难度也越来越大。现在挖一个比特币需要消耗的计算量普通人根本无力承担,普通电脑就别想了。
业内人士表示,在2014年,每天50万元电费产出100个比特币,仅电费成本每枚就要5000元。但是到了现在,同样的成本已经翻了一倍以上,每枚比特币电费成本高达万元。
在比特币的产生机制里,挖矿奖励是递减的。比特币诞生之初,每记一页账本,矿工就能拿到50个比特币,后来记一页奖励25个,依次递减。就像挖金子一样,一开始挖得多,后来越来越少。每次新增奖励减少一半的时间点,就叫做比特币产量减半。
假设挖矿计算能力为100Mhash/s,在2014年每天总计算力为4000Ghash/s,每24小时挖出3600个比特币。
现在,我们可以这样来理解挖比特币的难度,相当于1亿个骰子扔出小于1亿零50的数字,谁先扔出来,谁就获得记账权。此时,1亿零50就是个哈希值,扔骰子的过程叫做哈希碰撞,而挖矿算力的单位就是每秒钟多少次哈希碰撞。
目前比特币全网算力达到236万万亿次哈希碰撞每秒,相当于20多万个50米长的标准游泳池里面水滴的数目。但即便是这么大的算力,也需要10分钟左右才能碰撞到一个符合要求的哈希值。
2012年比特币进行了第一次产量减半,2016年7月,比特币进行了第二次产量减半,目前记一页账本获得的奖励是12.5个比特币。下一次减半会发生在2020年左右,而到2040年比特币总数不会再增加,总量是2100万枚。
相关视频:一个比特币要挖多久
㈨ 详解比特币挖矿原理
可以将区块链看作一本记录所有交易的公开总帐簿(列表),比特币网络中的每个参与者都把它看作一本所有权的权威记录。
比特币没有中心机构,几乎所有的完整节点都有一份公共总帐的备份,这份总帐可以被视为认证过的记录。
至今为止,在主干区块链上,没有发生一起成功的攻击,一次都没有。
通过创造出新区块,比特币以一个确定的但不断减慢的速率被铸造出来。大约每十分钟产生一个新区块,每一个新区块都伴随着一定数量从无到有的全新比特币。每开采210,000个块,大约耗时4年,货币发行速率降低50%。
在2016年的某个时刻,在第420,000个区块被“挖掘”出来之后降低到12.5比特币/区块。在第13,230,000个区块(大概在2137年被挖出)之前,新币的发行速度会以指数形式进行64次“二等分”。到那时每区块发行比特币数量变为比特币的最小货币单位——1聪。最终,在经过1,344万个区块之后,所有的共20,999,999.9769亿聪比特币将全部发行完毕。换句话说, 到2140年左右,会存在接近2,100万比特币。在那之后,新的区块不再包含比特币奖励,矿工的收益全部来自交易费。
在收到交易后,每一个节点都会在全网广播前对这些交易进行校验,并以接收时的相应顺序,为有效的新交易建立一个池(交易池)。
每一个节点在校验每一笔交易时,都需要对照一个长长的标准列表:
交易的语法和数据结构必须正确。
输入与输出列表都不能为空。
交易的字节大小是小于MAX_BLOCK_SIZE的。
每一个输出值,以及总量,必须在规定值的范围内 (小于2,100万个币,大于0)。
没有哈希等于0,N等于-1的输入(coinbase交易不应当被中继)。
nLockTime是小于或等于INT_MAX的。
交易的字节大小是大于或等于100的。
交易中的签名数量应小于签名操作数量上限。
解锁脚本(Sig)只能够将数字压入栈中,并且锁定脚本(Pubkey)必须要符合isStandard的格式 (该格式将会拒绝非标准交易)。
池中或位于主分支区块中的一个匹配交易必须是存在的。
对于每一个输入,如果引用的输出存在于池中任何的交易,该交易将被拒绝。
对于每一个输入,在主分支和交易池中寻找引用的输出交易。如果输出交易缺少任何一个输入,该交易将成为一个孤立的交易。如果与其匹配的交易还没有出现在池中,那么将被加入到孤立交易池中。
对于每一个输入,如果引用的输出交易是一个coinbase输出,该输入必须至少获得COINBASE_MATURITY (100)个确认。
对于每一个输入,引用的输出是必须存在的,并且没有被花费。
使用引用的输出交易获得输入值,并检查每一个输入值和总值是否在规定值的范围内 (小于2100万个币,大于0)。
如果输入值的总和小于输出值的总和,交易将被中止。
如果交易费用太低以至于无法进入一个空的区块,交易将被拒绝。
每一个输入的解锁脚本必须依据相应输出的锁定脚本来验证。
以下挖矿节点取名为 A挖矿节点
挖矿节点时刻监听着传播到比特币网络的新区块。而这些新加入的区块对挖矿节点有着特殊的意义。矿工间的竞争以新区块的传播而结束,如同宣布谁是最后的赢家。对于矿工们来说,获得一个新区块意味着某个参与者赢了,而他们则输了这场竞争。然而,一轮竞争的结束也代表着下一轮竞争的开始。
验证交易后,比特币节点会将这些交易添加到自己的内存池中。内存池也称作交易池,用来暂存尚未被加入到区块的交易记录。
A节点需要为内存池中的每笔交易分配一个优先级,并选择较高优先级的交易记录来构建候选区块。
一个交易想要成为“较高优先级”,需满足的条件:优先值大于57,600,000,这个值的生成依赖于3个参数:一个比特币(即1亿聪),年龄为一天(144个区块),交易的大小为250个字节:
High Priority > 100,000,000 satoshis * 144 blocks / 250 bytes = 57,600,000
区块中用来存储交易的前50K字节是保留给较高优先级交易的。 节点在填充这50K字节的时候,会优先考虑这些最高优先级的交易,不管它们是否包含了矿工费。这种机制使得高优先级交易即便是零矿工费,也可以优先被处理。
然后,A挖矿节点会选出那些包含最小矿工费的交易,并按照“每千字节矿工费”进行排序,优先选择矿工费高的交易来填充剩下的区块。
如区块中仍有剩余空间,A挖矿节点可以选择那些不含矿工费的交易。有些矿工会竭尽全力将那些不含矿工费的交易整合到区块中,而其他矿工也许会选择忽略这些交易。
在区块被填满后,内存池中的剩余交易会成为下一个区块的候选交易。因为这些交易还留在内存池中,所以随着新的区块被加到链上,这些交易输入时所引用UTXO的深度(即交易“块龄”)也会随着变大。由于交易的优先值取决于它交易输入的“块龄”,所以这个交易的优先值也就随之增长了。最后,一个零矿工费交易的优先值就有可能会满足高优先级的门槛,被免费地打包进区块。
UTXO(Unspent Transaction Output) : 每笔交易都有若干交易输入,也就是资金来源,也都有若干笔交易输出,也就是资金去向。一般来说,每一笔交易都要花费(spend)一笔输入,产生一笔输出,而其所产生的输出,就是“未花费过的交易输出”,也就是 UTXO。
块龄:UTXO的“块龄”是自该UTXO被记录到区块链为止所经历过的区块数,即这个UTXO在区块链中的深度。
区块中的第一笔交易是笔特殊交易,称为创币交易或者coinbase交易。这个交易是由挖矿节点构造并用来奖励矿工们所做的贡献的。假设此时一个区块的奖励是25比特币,A挖矿的节点会创建“向A的地址支付25.1个比特币(包含矿工费0.1个比特币)”这样一个交易,把生成交易的奖励发送到自己的钱包。A挖出区块获得的奖励金额是coinbase奖励(25个全新的比特币)和区块中全部交易矿工费的总和。
A节点已经构建了一个候选区块,那么就轮到A的矿机对这个新区块进行“挖掘”,求解工作量证明算法以使这个区块有效。比特币挖矿过程使用的是SHA256哈希函数。
用最简单的术语来说, 挖矿节点不断重复进行尝试,直到它找到的随机调整数使得产生的哈希值低于某个特定的目标。 哈希函数的结果无法提前得知,也没有能得到一个特定哈希值的模式。举个例子,你一个人在屋里打台球,白球从A点到达B点,但是一个人推门进来看到白球在B点,却无论如何是不知道如何从A到B的。哈希函数的这个特性意味着:得到哈希值的唯一方法是不断的尝试,每次随机修改输入,直到出现适当的哈希值。
需要以下参数
• block的版本 version
• 上一个block的hash值: prev_hash
• 需要写入的交易记录的hash树的值: merkle_root
• 更新时间: ntime
• 当前难度: nbits
挖矿的过程就是找到x使得
SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET
上式的x的范围是0~2^32, TARGET可以根据当前难度求出的。
简单打个比方,想象人们不断扔一对色子以得到小于一个特定点数的游戏。第一局,目标是12。只要你不扔出两个6,你就会赢。然后下一局目标为11。玩家只能扔10或更小的点数才能赢,不过也很简单。假如几局之后目标降低为了5。现在有一半机率以上扔出来的色子加起来点数会超过5,因此无效。随着目标越来越小,要想赢的话,扔色子的次数会指数级的上升。最终当目标为2时(最小可能点数),只有一个人平均扔36次或2%扔的次数中,他才能赢。
如前所述,目标决定了难度,进而影响求解工作量证明算法所需要的时间。那么问题来了:为什么这个难度值是可调整的?由谁来调整?如何调整?
比特币的区块平均每10分钟生成一个。这就是比特币的心跳,是货币发行速率和交易达成速度的基础。不仅是在短期内,而是在几十年内它都必须要保持恒定。在此期间,计算机性能将飞速提升。此外,参与挖矿的人和计算机也会不断变化。为了能让新区块的保持10分钟一个的产生速率,挖矿的难度必须根据这些变化进行调整。事实上,难度是一个动态的参数,会定期调整以达到每10分钟一个新区块的目标。简单地说,难度被设定在,无论挖矿能力如何,新区块产生速率都保持在10分钟一个。
那么,在一个完全去中心化的网络中,这样的调整是如何做到的呢?难度的调整是在每个完整节点中独立自动发生的。每2,016个区块(2周产生的区块)中的所有节点都会调整难度。难度的调整公式是由最新2,016个区块的花费时长与20,160分钟(两周,即这些区块以10分钟一个速率所期望花费的时长)比较得出的。难度是根据实际时长与期望时长的比值进行相应调整的(或变难或变易)。简单来说,如果网络发现区块产生速率比10分钟要快时会增加难度。如果发现比10分钟慢时则降低难度。
为了防止难度的变化过快,每个周期的调整幅度必须小于一个因子(值为4)。如果要调整的幅度大于4倍,则按4倍调整。由于在下一个2,016区块的周期不平衡的情况会继续存在,所以进一步的难度调整会在下一周期进行。因此平衡哈希计算能力和难度的巨大差异有可能需要花费几个2,016区块周期才会完成。
举个例子,当前A节点在挖277,316个区块,A挖矿节点一旦完成计算,立刻将这个区块发给它的所有相邻节点。这些节点在接收并验证这个新区块后,也会继续传播此区块。当这个新区块在网络中扩散时,每个节点都会将它作为第277,316个区块(父区块为277,315)加到自身节点的区块链副本中。当挖矿节点收到并验证了这个新区块后,它们会放弃之前对构建这个相同高度区块的计算,并立即开始计算区块链中下一个区块的工作。
比特币共识机制的第三步是通过网络中的每个节点独立校验每个新区块。当新区块在网络中传播时,每一个节点在将它转发到其节点之前,会进行一系列的测试去验证它。这确保了只有有效的区块会在网络中传播。
每一个节点对每一个新区块的独立校验,确保了矿工无法欺诈。在前面的章节中,我们看到了矿工们如何去记录一笔交易,以获得在此区块中创造的新比特币和交易费。为什么矿工不为他们自己记录一笔交易去获得数以千计的比特币?这是因为每一个节点根据相同的规则对区块进行校验。一个无效的coinbase交易将使整个区块无效,这将导致该区块被拒绝,因此,该交易就不会成为总账的一部分。
比特币去中心化的共识机制的最后一步是将区块集合至有最大工作量证明的链中。一旦一个节点验证了一个新的区块,它将尝试将新的区块连接到到现存的区块链,将它们组装起来。
节点维护三种区块:
· 第一种是连接到主链上的,
· 第二种是从主链上产生分支的(备用链),
· 第三种是在已知链中没有找到已知父区块的。
有时候,新区块所延长的区块链并不是主链,这一点我们将在下面“ 区块链分叉”中看到。
如果节点收到了一个有效的区块,而在现有的区块链中却未找到它的父区块,那么这个区块被认为是“孤块”。孤块会被保存在孤块池中,直到它们的父区块被节点收到。一旦收到了父区块并且将其连接到现有区块链上,节点就会将孤块从孤块池中取出,并且连接到它的父区块,让它作为区块链的一部分。当两个区块在很短的时间间隔内被挖出来,节点有可能会以相反的顺序接收到它们,这个时候孤块现象就会出现。
选择了最大难度的区块链后,所有的节点最终在全网范围内达成共识。随着更多的工作量证明被添加到链中,链的暂时性差异最终会得到解决。挖矿节点通过“投票”来选择它们想要延长的区块链,当它们挖出一个新块并且延长了一个链,新块本身就代表它们的投票。
因为区块链是去中心化的数据结构,所以不同副本之间不能总是保持一致。区块有可能在不同时间到达不同节点,导致节点有不同的区块链视角。解决的办法是, 每一个节点总是选择并尝试延长代表累计了最大工作量证明的区块链,也就是最长的或最大累计难度的链。
当有两个候选区块同时想要延长最长区块链时,分叉事件就会发生。正常情况下,分叉发生在两名矿工在较短的时间内,各自都算得了工作量证明解的时候。两个矿工在各自的候选区块一发现解,便立即传播自己的“获胜”区块到网络中,先是传播给邻近的节点而后传播到整个网络。每个收到有效区块的节点都会将其并入并延长区块链。如果该节点在随后又收到了另一个候选区块,而这个区块又拥有同样父区块,那么节点会将这个区块连接到候选链上。其结果是,一些节点收到了一个候选区块,而另一些节点收到了另一个候选区块,这时两个不同版本的区块链就出现了。
分叉之前
分叉开始
我们看到两个矿工几乎同时挖到了两个不同的区块。为了便于跟踪这个分叉事件,我们设定有一个被标记为红色的、来自加拿大的区块,还有一个被标记为绿色的、来自澳大利亚的区块。
假设有这样一种情况,一个在加拿大的矿工发现了“红色”区块的工作量证明解,在“蓝色”的父区块上延长了块链。几乎同一时刻,一个澳大利亚的矿工找到了“绿色”区块的解,也延长了“蓝色”区块。那么现在我们就有了两个区块:一个是源于加拿大的“红色”区块;另一个是源于澳大利亚的“绿色”。这两个区块都是有效的,均包含有效的工作量证明解并延长同一个父区块。这个两个区块可能包含了几乎相同的交易,只是在交易的排序上有些许不同。
比特币网络中邻近(网络拓扑上的邻近,而非地理上的)加拿大的节点会首先收到“红色”区块,并建立一个最大累计难度的区块,“红色”区块为这个链的最后一个区块(蓝色-红色),同时忽略晚一些到达的“绿色”区块。相比之下,离澳大利亚更近的节点会判定“绿色”区块胜出,并以它为最后一个区块来延长区块链(蓝色-绿色),忽略晚几秒到达的“红色”区块。那些首先收到“红色”区块的节点,会即刻以这个区块为父区块来产生新的候选区块,并尝试寻找这个候选区块的工作量证明解。同样地,接受“绿色”区块的节点会以这个区块为链的顶点开始生成新块,延长这个链。
分叉问题几乎总是在一个区块内就被解决了。网络中的一部分算力专注于“红色”区块为父区块,在其之上建立新的区块;另一部分算力则专注在“绿色”区块上。即便算力在这两个阵营中平均分配,也总有一个阵营抢在另一个阵营前发现工作量证明解并将其传播出去。在这个例子中我们可以打个比方,假如工作在“绿色”区块上的矿工找到了一个“粉色”区块延长了区块链(蓝色-绿色-粉色),他们会立刻传播这个新区块,整个网络会都会认为这个区块是有效的,如上图所示。
所有在上一轮选择“绿色”区块为胜出者的节点会直接将这条链延长一个区块。然而,那些选择“红色”区块为胜出者的节点现在会看到两个链: “蓝色-绿色-粉色”和“蓝色-红色”。 如上图所示,这些节点会根据结果将 “蓝色-绿色-粉色” 这条链设置为主链,将 “蓝色-红色” 这条链设置为备用链。 这些节点接纳了新的更长的链,被迫改变了原有对区块链的观点,这就叫做链的重新共识 。因为“红”区块做为父区块已经不在最长链上,导致了他们的候选区块已经成为了“孤块”,所以现在任何原本想要在“蓝色-红色”链上延长区块链的矿工都会停下来。全网将 “蓝色-绿色-粉色” 这条链识别为主链,“粉色”区块为这条链的最后一个区块。全部矿工立刻将他们产生的候选区块的父区块切换为“粉色”,来延长“蓝色-绿色-粉色”这条链。
从理论上来说,两个区块的分叉是有可能的,这种情况发生在因先前分叉而相互对立起来的矿工,又几乎同时发现了两个不同区块的解。然而,这种情况发生的几率是很低的。单区块分叉每周都会发生,而双块分叉则非常罕见。
比特币将区块间隔设计为10分钟,是在更快速的交易确认和更低的分叉概率间作出的妥协。更短的区块产生间隔会让交易清算更快地完成,也会导致更加频繁地区块链分叉。与之相对地,更长的间隔会减少分叉数量,却会导致更长的清算时间。
㈩ 什么是算力
算力(也称哈希率)是比特币网络处理能力的度量单位。即为计算机(CPU)计算哈希函数输出的速度。比特币网络必须为了安全目的而进行密集的数学和加密相关操作。 例如,当网络达到10Th/s的哈希率时,意味着它可以每秒进行10万亿次计算。
在通过“挖矿”得到比特币的过程中,我们需要找到其相应的解m,而对于任何一个六十四位的哈希值,要找到其解m,都没有固定算法,只能靠计算机随机的hash碰撞,而一个挖矿机每秒钟能做多少次hash碰撞,就是其“算力”的代表,单位写成hash/s,这就是所谓工作量证明机制POW(Proof Of Work)。
日前,比特币全网算力已经全面进入P算力时代(1P=1024T,1T=1024G,1G=1024M,1M=1024k),在不断飙升的算力环境中,P时代的到来意味着比特币进入了一个新的军备竞赛阶段。
算力是衡量在一定的网络消耗下生成新块的单位的总计算能力。每个硬币的单个区块链随生成新的交易块所需的时间而变化。