一個比特幣多少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時代的到來意味著比特幣進入了一個新的軍備競賽階段。
算力是衡量在一定的網路消耗下生成新塊的單位的總計算能力。每個硬幣的單個區塊鏈隨生成新的交易塊所需的時間而變化。