bit幣挖礦演算法
1. 比特幣是怎麼挖出來的
從比特幣的本質說起,比特幣的本質其實就是一堆復雜演算法所生成的特解。特解是指方程組所能得到無限個(其實比特幣是有限個)解中的一組。而每一個特解都能解開方程並且是唯一的。
以人民幣來比喻的話,比特幣就是人民幣的序列號,你知道了某張鈔票上的序列號,你就擁有了這張鈔票。而挖礦的過程就是通過龐大的計算量不斷的去尋求這個方程組的特解,這個方程組被設計成了只有 2100 萬個特解,所以比特幣的上限就是 2100 萬。
要挖掘比特幣可以下載專用的比特幣運算工具,然後注冊各種合作網站,把注冊來的用戶名和密碼填入計算程序中,再點擊運算就正式開始。
完成Bitcoin客戶端安裝後,可以直接獲得一個Bitcoin地址,當別人付錢的時候,只需要自己把地址貼給別人,就能通過同樣的客戶端進行付款。在安裝好比特幣客戶端後,它將會分配一個私有密鑰和一個公開密鑰。需要備份你包含私有密鑰的錢包數據,才能保證財產不丟失。如果不幸完全格式化硬碟,個人的比特幣將會完全丟失。
2. 挖比特幣是什麼意思
挖比特幣就是比特幣挖礦,是一種獲得比特幣的方式,簡單來說就是全網礦工一起來做一道題目,誰先做出來,誰就能得到比特幣獎勵,「礦工」需要在區塊努力工作,就是消耗計算資源來處理交易,挖礦對於設備的配置要求是相當高的,提高設備配置,可以加強運算能力,也能夠更快的獲得比特幣。比特幣是一種電子貨幣,是由開源的P2P軟體產生的,可以用來交易,也可以通過交易來獲利,比特幣挖礦運用的是哈希演算法,在比特幣系統裡面,需要進行大量哈希運算,計算的值需要符合規定,誰運算的快,誰能夠挖到的比特幣就越多。比特幣又叫做「比特金」,是一種網路虛擬貨幣,網民可以使用比特幣購買一些虛擬物品,比如網路游戲當中的衣服、帽子或者裝備等,網民之間也有用來購買現實物品的情況。挖比特幣又被稱為挖礦,從比特幣的本質說起,比特幣的本質其實就是一堆復雜演算法所生成的特解。特解指的是方程組所能得到無限個(其實比特幣是有限個)解中的一組。而每一個特解都可以解開方程並且是唯一的。以人民幣來比喻的話,比特幣就是人民幣的序列號,如果你知道了某張鈔票上的序列號,你就擁有了這張鈔票。而挖礦的過程就是通過龐大的計算量不斷的去尋求這個方程組的特解,這個方程組被設計成了只有2100萬個的特解,所以比特幣的上限就是2100萬了。
比特幣的缺點
一、交易平台具有脆弱性。比特幣網路很健壯,但是比特幣交易平台很脆弱。交易平台通常是一個網站,而網站會遭到黑客的攻擊,或者是遭到主管部門的關閉。
二、交易確認時間比較長。比特幣錢包初次安裝的時候,會消耗大量時間下載歷史交易數據塊。而比特幣交易時,為了確認數據准確性,會消耗一些時間,與p2p網路進行交互,得到全網確認以後,交易才算完成。
三、價格波動極大。由於大量炒家的介入,導致比特幣兌換現金的價格如過山車一般起伏。使得比特幣更適合投機,而不是匿名的交易。
四、大眾對原理不理解,以及傳統金融從業人員的抵制。活躍的網民了解p2p網路的原理,知道比特幣無法人為操縱和控制。但是大眾並不理解,很多人甚至無法分清比特幣和Q幣的區別。「沒有發行者」是比特幣的優點,但是在傳統金融從業人員看來,「沒有發行者」的貨幣是毫無價值的。
3. 比特幣如何算出來的
要想了解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
4. 詳解比特幣挖礦原理
可以將區塊鏈看作一本記錄所有交易的公開總帳簿(列表),比特幣網路中的每個參與者都把它看作一本所有權的權威記錄。
比特幣沒有中心機構,幾乎所有的完整節點都有一份公共總帳的備份,這份總帳可以被視為認證過的記錄。
至今為止,在主幹區塊鏈上,沒有發生一起成功的攻擊,一次都沒有。
通過創造出新區塊,比特幣以一個確定的但不斷減慢的速率被鑄造出來。大約每十分鍾產生一個新區塊,每一個新區塊都伴隨著一定數量從無到有的全新比特幣。每開采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分鍾,是在更快速的交易確認和更低的分叉概率間作出的妥協。更短的區塊產生間隔會讓交易清算更快地完成,也會導致更加頻繁地區塊鏈分叉。與之相對地,更長的間隔會減少分叉數量,卻會導致更長的清算時間。
5. 什麼叫比特幣挖礦
比特幣挖礦是消耗計算資源來處理交易,確保網路安全以及保持網路中每個人的信息同步的過程。它可以理解為是比特幣的數據中心,區別在於其完全去中心化的設計,礦工在世界各國進行操作,沒有人可以對網路具有控制權。這個過程因為同淘金類似而被稱為「挖礦」,因為它也是一種用於發行新比特幣的臨時機制。然而,與淘金不同的是,比特幣挖礦對那些確保安全支付網路運行的服務提供獎勵。在最後一個比特幣發行之後,挖礦仍然是必須的。
簡而言之,比特幣挖礦計算的是基於SHA256演算法的數學難題,確認網路交易,比特幣網路會根據礦工貢獻算力的大小給予的等分的比特幣獎勵。目前,比特幣挖礦經歷了三個階段,CPU、GPU、ASIC,目前,以ASIC礦機挖礦一家獨大,其中,阿瓦隆礦機尤其突出,阿瓦隆礦機一直走在礦機行業的前列,是比特幣挖礦行業的領頭羊,目前,搭乘三代晶元的礦機已進入市場,第四代晶元據說正在研發中。
【拓展資料】
任何人均可以在專門的硬體上運行軟體而成為比特幣礦工。挖礦軟體通過P2P網路監聽交易廣播,執行恰當的任務以處理並確認這些交易。比特幣礦工完成這些工作能賺取用戶支付的用於加速交易處理的交易手續費以及按固定公式增發的比特幣。
新的交易需要被包含在一個具有數學工作量證明的區塊中才能被確認。這種證明很難生成因為它只能通過每秒嘗試數十億次的計算來產生。礦工們需要在他們的區塊被接受並拿到獎勵前運行這些計算。隨著更多的人開始挖礦,尋找有效區塊的難度就會由網路自動增加以確保找到區塊的平均時間保持在10分鍾。因此,挖礦的競爭非常激烈,沒有一個個體礦工能夠控制塊鏈里所包含的內容。
工作量證明還被設計成必須依賴以往的區塊,這樣便強制了塊鏈的時間順序。這種設計使得撤銷以往的交易變得極其困難,因為需要重新計算所有後續區塊的工作量證明。當兩個區塊同時被找到,礦工會處理接收到的*9個區塊,一旦找到下一個區塊便將其轉至最長的塊鏈。這樣就確保采礦過程維持一個基於處理能力的全局一致性。
比特幣礦工既不能通過作弊增加自己的報酬,也不能處理那些破壞比特幣網路的欺詐交易,因為所有的比特幣節點都會拒絕含有違反比特幣協議規則的無效數據的區塊。因此,即使不是所有比特幣礦工都可以信任,比特幣網路仍然是安全的。
6. 比特幣挖礦原理是什麼
比特幣挖礦就是通過挖礦節點,然後比特幣挖礦機(電腦)不斷消耗自身的算力,來換取比特幣。在比特幣系統,通過自身的演算法可以動態調整全網節點的挖礦難度,保證每過大約10分鍾,就會有一個節點挖礦成功,這時比特幣系統就會獎勵此人一定數量的比特幣。挖比特幣是一個比較復雜的過程,不過挖比特幣一般會經過這幾個步驟,分別是准備工作、找到礦池、注冊礦池賬號、礦池賬號設置、下載比特幣挖礦器(軟體)、比特幣挖礦機配置;經過以上步驟就可以挖礦了。
本條內容來源於:中國法律出版社《中華人民共和國金融法典:應用版》
7. 比特幣為什麼要挖礦
眾所周知,「區塊鏈」最顯著的一個特徵就是「去中心化」,那什麼叫「去中心化」呢?比如說比特幣,比特幣是沒有任何權威性機構發行的貨幣,那比特幣的交易行為如何產生記錄呢?這就得益於區塊鏈的「節點」,每一次單一的「節點」都會記錄這些交易記錄,再傳播到下一個「節點」上,這樣一傳十,十傳百最終就形成了一張網狀的結構,所有的節點都會記錄這筆交易。由於這種傳播的手段是點對點的,每一個點都是一樣大的,沒有權威的大點,所以這種方式就做到了「去中心化」。
我們接下來開始分析為什麼比特幣要通過運算的手法來挖礦。首先,上面我們說到了每筆交易都是由一個點和另一個點產生的,那這兩個點交易完成後會向所有點擴散此次交易行為,讓所有的點都記錄此次交易的發生。但是問題是什麼呢?
由於比特幣長時間的積累,交易量信息就會爆炸,點對點之間的信息核對數據量就會越來越大。就好比說車多了,如何保證馬路上不堵車呢?
所以中本聰就發明了「區塊鏈」這一技術解決了這個問題。什麼意思?就是將這些信息進行標准規范的打包,形成一個大的壓縮包,以壓縮包的形式來進行傳遞,就保證了在運送的路上不會堵車。
好,那麼問題又來了,誰來給這些數據打包呢?所以就出現了「挖礦」,也就是說第一個將一堆信息進行規范化打包的人就會得到獎勵,獎勵是什麼呢?就是比特幣。而打包的過程就叫做「算力」,「算力」越高,打包速度就越快。
只有通過運算挖礦的方式才能保證每個點都記錄在案,不會出現很大的點來控制局面,從而實現真正的去中心化。
獲取比特幣的方法有兩種,一種是直接購買幣,一種就是挖礦。挖礦又分為三種,個人挖礦,託管挖礦,雲算力挖礦。
直接挖礦劃算還是買幣劃算呢?
假如幣價漲,短期看,挖礦收益直觀遞增,長期看回本後,每天產出的都是凈利潤,收益高於炒幣。
假如幣價跌,短期看,沒有本金風險,挖礦每天到賬,安心囤幣,長期看,挖礦陸續收回成本,本金沒有風險,有足夠的底氣等待幣價上升賣出盈利。
不是說比特幣為什麼要挖礦
是因為挖礦能得到比特幣
這是一種獲取比特幣的最直接的一種手段
當然,你也可以直接買。
而挖礦源於比特幣的演算法,因為比特幣相當於2100萬個難題,需要「礦機」來計算解答。
答出來,你就會獲得相應的比特幣獎勵。
因為比特幣的價值升值,所以會有很多人趨之若鶩的去挖礦。
這是一種形式,要是為什麼獲取比特幣非要挖礦的話,就像在問
掙錢為什麼要上班?
當然,你不上班也可以掙錢,同理,你不挖礦也可以獲得比特幣,比方說直接買。
就這么簡單。
不是比特幣叫挖礦,只不過比特幣在大家的心目中已然成為了一個代名詞,而挖礦就是用一個最低成本來獲取數字貨幣,不需要買賣,來炒現貨,挖礦是最穩定的辦法。第一枚比特幣的發掘就是中本聰在09年以一台最基礎的電腦挖掘出來的,目前比特幣市值一枚已經高達二十五萬。挖礦就是要以最低價格來獲取數字加密貨幣來賺取收益。
1、挖礦指的是礦工投入計算算力競爭區塊打包權,因為獲得打包權的礦工會獲得區塊獎勵,也就是比特幣獎勵。這一形式和傳統意義上的「挖金礦」類似—-通過投入人力設備來開採金礦,所以稱這為挖礦。
2、挖礦的一個作用是維護整個比特幣網路的安全,挖礦需要投入算力到網路中,這能保證整個網路不會輕易遭受攻擊,保證網路的安全。
3、挖礦更重要的價值是通過競爭的方式來分發新的比特幣,保證比特幣按照白皮書所說的穩定的產生新的比特幣。
你是外行,要麼就是操盤手忽悠韭菜,比特幣挖什麼礦?噱頭,哪些是已經編好的程序,哪些礦機一個小盒子,堆放在一個屋子裡,一天耗電運行,挖操盤手設計的虛擬礦,按你投資礦機的錢,礦機的大小來決定你挖幣的多少,跟融資沒有區別,
8. 比特幣怎麼挖出來的原理
通俗來講,在區塊鏈網路里,每隔一個時間點,比特幣系統會在系統節點上生成一個隨機代碼,互聯網中的所有計算機都可以去尋找此代碼,誰找到此代碼,就會產生一個區塊,也就得到一個比特幣,這個過程就是人們常說的「挖礦」。而比特幣就是這么被挖出來的。
拓展資料:
比特幣(Bitcoin)的概念最初由中本聰在2008年11月1日提出,並於2009年1月3日正式誕生。
根據中本聰的思路設計發布的開源軟體以及建構其上的P2P網路。比特幣是一種P2P形式的數字貨幣。比特幣的交易記錄公開透明。點對點的傳輸意味著一個去中心化的支付系統。
與大多數貨幣不同,比特幣不依靠特定貨幣機構發行,它依據特定演算法,通過大量的計算產生,比特幣經濟使用整個P2P網路中眾多節點構成的分布式資料庫來確認並記錄所有的交易行為,並使用密碼學的設計來確保貨幣流通各個環節安全性。P2P的去中心化特性與演算法本身可以確保無法通過大量製造比特幣來人為操控幣值。基於密碼學的設計可以使比特幣只能被真實的擁有者轉移或支付。這同樣確保了貨幣所有權與流通交易的匿名性。比特幣其總數量有限,該貨幣系統曾在4年內只有不超過1050萬個,之後的總數量將被永久限制在2100萬個。
2021年6月,薩爾瓦多通過了比特幣在該國成為法定貨幣的《薩爾瓦多比特幣法》法案。9月7日,比特幣正式成為了薩爾瓦多的法定貨幣,成為世界上第一個賦予數字貨幣法定地位的國家。
2021年9月24日,中國人民銀行發布進一步防範和處置虛擬貨幣交易炒作風險的通知。通知指出,虛擬貨幣不具有與法定貨幣等同的法律地位。
2021年11月10日,比特幣價格再創歷史新高,首次逼近6.9萬美元/枚。
2022年1月,比特幣繼續下跌,跌破42000美元,觸及去年9月以來未見水平。
9. 比特幣挖礦原理
比特幣的挖礦原理,實際上就是一個 數據記錄的過程。
區塊鏈是- -個人人都可以參與數據處理的資料庫,每隔一段時間, 就需要礦工將之前沒有經過大家確認的交易數據收集起來,進行處理。
但問題就來了,礦工那麼多,到底用誰處理的數據?所以,系統就有了一個特殊的機制。
所有參與的礦工,把數據打包的時候,必須加入一個叫做「哈希值」的東西,而且這個哈希值必須滿足一定的條件,系統才會認可你處理的數據。誰能最先完成這件事,並把自己的工作成果廣播給其他的礦工確認,_部分認為沒問題,誰就能獲得記錄數據的權利,以及很多的比特幣作為獎勵。
這就有點像一個海賊王留下了大筆的金銀珠寶,然後跟所有人說,尋找吧,誰能找到開啟我寶藏大i ]的鑰匙,誰就能獲得我的全部財富。
當然,礦工挖礦不僅僅是為了比特幣,因為這是維護整個區塊鏈網路的重要環節,挖礦的人越多,參與數據確認的人也就越多,我們的數據也就越安全。所以,不要小瞧礦工,真的到了數據爆炸的那天,礦工拯救世界,可不是說說而已
拓展資料
一、比特幣的原理:
與現實貨幣不同,比特幣不依靠特定貨幣機構發行,它依據特定演算法,通過大量的計算產生。從比特幣的本質來看,是一些_雜演算法所生成的特解。每-個特解都能解開方程並且是唯一 的,破解之後就相當於擁有了這個特殊貨幣。
2、虛擬貨幣定義非常簡單,就是指非真實的貨幣。
虛擬貨幣有以下幾類:
1. 游戲貨幣。對,你沒聽錯,可以在網路游戲里進行交易的貨幣也能叫虛擬貨幣。不過單機游戲里的貨幣不能叫虛擬貨幣,因為其不能聯網與其它玩家進行市場交易。
2. 網站貨幣。一些網站推出的可以購買網站增值服務的貨幣。比如騰訊的Q幣。
3. 電子錢包。大家平時常用的微信支付,支付寶等等。
4. 區塊鏈貨幣。大家比較熟悉的區塊鏈,以太坊和我經常說的 FIL。
3、那上面這些貨幣都合法嗎?
答案是都是合法貨幣。不過先別急著蓋棺定論,雖然它們都是合法貨幣,但是離「法定貨幣」還有十萬八千里。就拿區塊鏈貨幣來說,國家已經將區塊鏈貨幣列為法定財產,2019年9月28日,海南成立了區塊中心。區塊中心是由火幣集團牽頭成立的。據報道稱,數字貨幣也是我國經濟增長的主要動力,國家也肯定了區塊產業的技術,這次區塊中心的成立,是央視首次報道虛擬貨幣的進展。
雖然當前國內能夠交易得到的數字貨幣有非常多,但其中絕大多數都是打著區塊鏈的幌子進行圈錢的代幣。如果對於數字貨幣投資比較感興趣的話,那麼還是盡可能地去選擇投資市值排名前20的幣種。
10. 比特幣挖礦到底在計算什麼
要知道挖礦到底在計算什麼,首先得知道比特幣的本質及產生的過程。比特幣是基於網路的電子貨幣,實際是互聯網的一串代碼,依靠演算法計算得出。挖礦是完成演算法的過程,也是生產比特幣的唯一方式。而且由於演算法規定,比特幣目前只有2100萬個。
1、挖礦既能生產比特幣,又能保障交易信息
類似於,一個數學系統包含2100萬個數學題,需要通過龐大的計算量不斷的去尋求這個每個數學題的特解。另外,特解是唯一的。
下面來具體解釋挖礦,從作用來說,挖礦不僅可以增加比特幣貨幣供應,而且還可以保護比特幣交易安全、防止欺詐交易。從過程來說,比特幣網路是一個點對點的支付系統,任何人都可以通過交易程序進行交易。
為了確保交易過程被如實記錄,就需要「礦工」這個角色來負責記錄比特幣交易信息,這個時間間隔是10分鍾,礦工中記賬最好的交易記錄就會被打包存儲到一個新的區塊中,相應的礦工也會得到一定數量的比特幣獎勵。
2、挖礦過程極其復雜,非人力所能為
具體的流程如下,當某一個礦工監聽到這筆交易時,首先會對交易信息進行驗證。通過驗證的交易則會被礦工記錄下來,保存在自己的資料庫裡面。全世界可能有成千上萬個礦工在進行同一件事,但在每十分鍾內,只有一個礦工有權創建新的區塊,使自己記錄的交易信息被大家所承認並永久地存儲下來。
接下來,礦工們就需要爭奪記賬權,這是一場算力競賽的比拼,其核心是用計算機完成大量的計算任務,找到一個超難的隨機數,這個隨機數就是第一段所說的方程特解,最先算出正確隨機數的礦工勝出。根據游戲規律,一個礦工獲得記賬權的幾率與其算力佔全網算力之和的比例成正比。換句話說,找到該隨機數的概率相當於將一億個骰子扔出,最後骰子總和小於1億零50。因此,挖礦需要大量的計算機,安裝特定的演算法軟體,日夜重復運行,非人力所能為。
3、比特幣挖礦其實就是「村民記賬」
可能還是有網友不懂,那就舉個例子。在一個村裡,村民之間經常會發生借款行為,哪怕寫了字據也有違約的風險。那麼,在每次村裡有借款行為發生的時候,就用村裡的大喇叭告知大家,所有的村民(礦工)就在自己的賬簿里記下所有交易記錄。