比特幣區塊頭結構
1. 什麼是數據區塊鏈(BlockChain)怎麼解釋讓人更容易理解
想了解區塊鏈應用,可以多參考很多書籍和觀點,有《圖說區塊鏈》《區塊鏈:重塑經濟與世界》《新經濟藍圖與導讀》,還有幣安社區的文章,包括對幣安社區這個平台也詳細了解,實力牛X。
一、區塊鏈是什麼
區塊鏈(Blockchain),顧名思義,是由區塊(Block)和鏈(chain)組成,它是分布式數據存儲、點對點傳輸、共識機制、加密演算法等計算機技術的新型應用模式。是一種按照時間順序將數據區塊以順序相連的方式組合成的一種鏈式數據結構,並以密碼學方式保證的不可篡改和不可偽造、安全可信的分布式賬本。
2008年,中本聰發表的論文《比特幣:一種點對點的電子現金系統》中第一次提出區塊鏈和加密數字貨幣的構想。從比特幣開始,區塊鏈成為各種各樣數字貨幣的底層技術。
二、區塊鏈的工作原理:
1、基本概念包括:(1)交易(Transaction):操作一次,會使賬本狀態改變一次,如添加一條記錄;(2)區塊(Block):記錄規定時間內發生的交易和狀態數據,是對當前賬本狀態的一次共識和保存;(3)鏈(Chain):由一個個區塊按照時間順序串聯而成,是整個狀態變化的日誌記錄。理解了區塊鏈的工作概念也就不難理解其工作原理,假設存在一個分布式的數據記錄本,這個記錄本只允許添加、不允許刪除和更改,其結構是由一個個「區塊」串聯而成的線性的鏈(這也是「區塊鏈」名字的來源),新的數據要加入,必須放到一個新的區塊中,維護節點可以提議一個新的區塊,但是必須經過一定的共識機制來對最終選擇的區塊達成一致。
2、以比特幣為例來看區塊鏈的工作原理。
比特幣的區塊分為區塊頭和區塊體兩部分。
三.區塊鏈的核心優勢和特點
1、去中心化區塊鏈數據的驗證、記賬、存儲、維護和傳輸等過程均是基於分布式系統結構,不存在中心化的硬體或管理機構,任意節點的權利和義務都是均等的,系統中的數據塊由整個系統中具有維護功能的節點來共同維護。2、開放透明系統是開放的,除了交易各方的私有信息被加密外,區塊鏈的數據對所有人公開,任何人都可以通過公開的介面查詢區塊鏈數據和開發相關應用,因此整個系統信息高度透明。3、安全性區塊鏈採用基於協商一致的規范和協議(比如一套公開透明的演算法)使得整個系統中的所有節點能夠在去信任的環境自由安全的交換數據,使得對「人」的信任改成了對機器的信任,任何人為的干預不起作用。4、信息不可篡改一旦信息經過驗證並添加至區塊鏈,就會永久的存儲起來,除非能夠同時控制住系統中超過51%(幾乎不可能)的節點,否則單個節點上對資料庫的修改是無效的,因此區塊鏈的數據穩定性和可靠性極高。5、匿名性由於節點之間的交換遵循固定的演算法,其數據交互是無需信任的(區塊鏈中的程序規則會自行判斷活動是否有效),因此交易對手無須通過公開身份的方式讓對方自己產生信任,對信用的累積非常有幫助。
四、區塊鏈的分類
目前來說,區塊鏈最主流的分類是根據參與者的不同,把區塊鏈分為公有鏈(Public Blockchain)、私有鏈(Private Blockchain)和聯盟鏈(Consortium Blockchain)。
1、公有鏈:任何人都可以參與使用和維護,並且能夠獲得該區塊鏈的有效確認,公有鏈是最早的區塊鏈,也是目前應用最廣泛的區塊鏈,典型的如比特幣區塊鏈,信息是完全公開的。
如果引入許可機制,包括私有鏈和聯盟鏈兩種。2、私有鏈:一個公司或者個人,僅使用區塊鏈的技術,獨享該區塊鏈的寫入許可權,信息不公開。目前保守的巨頭(傳統金融)都是想實驗嘗試私有區塊鏈,私鏈的應用產品還在摸索當中。3、聯盟鏈:是介於公有鏈和似有鏈之間,由多個組織共同控制的區塊鏈,該鏈的使用是有許可權的管理,可以受制於管理者,也根據管理者的意願開放給他人。除此之外,根據區塊鏈使用場景和目的的不同,分為以數字貨幣為目的的貨幣鏈,以記錄產權為目的的產權鏈,以眾籌為目的的眾籌鏈等。
五、區塊鏈的具體應用場景分析
1、信息防偽
5月28日,騰訊CEO馬化騰在貴陽數博會上就茅台酒打假問題提出了:基於雲端的綜合區塊鏈技術的防偽方法,其效率將遠高於傳統防偽方式。未來的防偽驗證場景可能只需用戶使用手機進行簡單的掃描,就可以得到大量的基於不同的維度的完整信息。
以茅台酒為例:
酒廠地址,製作車間,操作員工,檢驗員,出廠時間,運輸車輛信息及駕駛人員信息,
酒的年份原料來源,原料提供商,保存倉庫編號,原料運輸車輛及駕駛人員信息,
所有的信息都能夠精準溯源,被永久記錄且不可篡改。
綜合以上信息即可輕易驗證真偽。
2、食品安全問題
早在去年11月份沃爾瑪就已經和IBM進行合作,通過使用區塊鏈技術來追蹤食品來源,以此來確保食品的安全性及增加食品的而流通性以降低成本,對於沃爾瑪等大型超市來說,以往出現食品安全問題需要幾天時間進行問題食品的來源調查,使用了此項技術之後,只需要產品的一項信息就能夠做到精準溯源,食品產地、檢驗者、供應商、物流運輸等重要信息,幾分鍾之內就能快速發現問題。目前來說使用區塊鏈追蹤的產品有包括美國的包裝產品和中國的豬肉。
3、信息安全
區塊鏈技術正在推動一場信息安全技術變革。中間人攻擊、數據篡改、DDoS三大安全威脅
(1)身份保護
PKI是電子郵件、消息應用、網站等各種通訊應用中常見的公鑰加密技術。但是由於大多數PKI的實現以來集中式的可信第三方認證機構(CA)來發放、激活和存儲用戶證書,黑客可攻擊PKI假冒用戶身份或破解加密信息。
CertCoin是首個區塊鏈PKI實現,來自MIT,去除了中心化的認證中心,以區塊鏈作為於域名和公鑰的分布式賬本。
Pomcor公司:區塊鏈PKI實現路徑:保留認證中心,用區塊鏈存儲已經發放和激活的證書的hash值。用戶通過去中心化和透明的來源鑒別證書的真實性,同時還能通過本地基於區塊鏈拷貝進行秘鑰和簽名的認證來提高網路訪問性能。
(2)數據完整性保護
GuardTime開發了基於區塊鏈技術的無秘鑰簽名架構(KSI),取代基於秘鑰的數據認證技術。KSI在區塊鏈上存儲原始數據和文件的哈希表,運行哈希演算法來驗證其他拷貝,將結果與區塊鏈存儲的數據對比。任何數據的篡改都會被迅速發現,因為原始哈希表存儲在數以百萬計的節點。
(3)關鍵基礎設施保護
互聯網的「阿喀琉斯之踵」,DDoS進入TB時代,DDoS仍然是黑客低成本搞垮大目標的最簡單的武器,DNS服務是黑客進行大規模破壞的首要目標,但區塊鏈技術有望從根本上解決。
區塊鏈的分布式存儲,使黑客攻擊失去焦點,Nebulis正在開發一種分布式DNS系統,使用以太坊區塊鏈和星際互聯文件系統(IPFS,HTTP的分布式替代品)來注冊和解析域名。DNS最大弱點是緩存,緩存使DDoS攻擊成為可能,也是集權政府審查社交網路,操縱DNS注冊的禍根。一個高度透明的、分布式的DNS系統能夠有效杜絕任何實體,包括政府恣意操縱記錄。
四、金融行業
(1)數字貨幣:提高貨幣發行及使用的便利性
如國外的比特幣、以太幣,我國目前有果仁寶等等。
從使用實物交易,到物理貨幣和信用貨幣,再到比特幣網路的崛起,讓更多的人意識到其背後的分布式賬本區塊鏈技術,逐步在數字貨幣外的許多場景進行應用。
(2)跨境支付與結算:實現點到點交易,減少中間費用
轉賬與支付。目前,區塊鏈技術最成熟的應用便是支付與轉賬,區塊鏈技術能夠避免繁雜的系統,省卻銀行間對賬和審查的流程,加速結算速度;用虛擬貨幣無需清算所的介入,減少交易費用。各國家的清算程序不同,單筆匯款需2、3天才到帳,效率低,在途資金佔比極大。不再通過第三方,通過區塊鏈技術形成點對點的支付。省去第三方機構的環節,即可全天支付、實時到賬、提現快捷及降低隱形成本,有助於規避資金風險。具有及時性便利性。
(3)票據與供應鏈金融業務:減少人為介入,降低成本及操作風險
點對點之間的價值傳遞,實物票據或中心系統進行控制驗證;中介將被消除,減少人為介入。效率的提升,融資渠道更暢通,風險更低,多方受益。
(4)證券發行與交易:實現准實時資產轉移,加速交易清算速度
區塊鏈技術的應用可使證券交易的流程更簡潔、透明、快速,減少重復功能的IT系統,提高市場運轉的效率。對於股票,區塊鏈可以消除紙筆或電子表格記錄,減少交易的人為差錯,提高交易平台的透明度和可追蹤性。花旗與納斯達克合作推進區塊鏈應用。
(5)客戶徵信與反欺詐:降低法律合規成本,防止金融犯罪
記載於區塊鏈中的客戶信息與交易紀錄有助於銀行識別異常交易並有效防止欺詐。區塊鏈的技術特性可以改變現有的徵信體系,在銀行進行「認識你的客戶」(KYC)時,將不良紀錄客戶的數據儲存在區塊鏈中。
股權眾籌:建立在區塊鏈技術上的股權眾籌可以實現去中心化信任,投資者的回報也得到保證。
5、供應鏈管理
分布式分類帳系統,參與者全程跟蹤資產的所有權,可應用於國家和工廠之間移動時跟蹤汽車零件。
豐田為其核心零部件供應鏈運營,研發區塊鏈技術解決方案的前提。通過大量的數據幫助豐田更高效地確保記錄數據准確性,也能幫助管理供應鏈。同時,區塊鏈供應鏈能夠通過智能合同來控制保修,維修貨物相關成本和規格,整個產品生命周期內的交易不可撤銷。
航運業的第一個公共解決方案解決方案由海運國際(MTI)部署,使用區塊鏈供應鏈技術共享運輸集裝箱的驗證總量(VGM)信息。有關集裝箱VGM的信息對於確保船舶正確存放,防止在海上和港口事故發生是非常重要的。VGM數據存儲在區塊鏈供應鏈上,為港口官員,運輸公司,托運人和貨主提供永久記錄。這取代了麻煩的日誌,電子表格,數據中介和私人資料庫。
物流誠信體系 貨車幫貨車幫推出基於區塊鏈的物流企業金融解決方案,旨在為企業提供可靠的金融服務。不僅能幫助司機解決貸款難的問題,亦能改變行業誠信缺失的現狀,助力打造物流誠信體系。幫助構建物流企業身份鏈,打造物流企業可信數據生態。以透明、可監督、可追溯的演算法模型,篩選需要資金支持且可靠的企業,為其提供金融服務。另一方面,在技術層面將各執法部門鏈接起來,對失信企業進行聯合處罰。
6、政務管理
(1)選舉
基於區塊鏈技術特徵,聯想到現在選舉技術的弊端,我們將搭建一個開源的、針對選舉、投票和彩票的區塊鏈應用,我們稱之為選舉鏈(ElectionChain)。我們希望優化選舉和投票技術,使得投票更加公開透明,減少人為操控,讓選民可驗證自己的選舉結果。
包括身份認證、多鏈體系、閃投協議、共識演算法EDPOS、隱私保護、選票機制設計、去中心化ELC租借市場、存貯方案、智能合約等。
(2)政務服務
旨在實現基於區塊鏈技術的電子政務數字生態系統,向公民提供政務服務和政府各部門業務的自動化機制,必須將國家政務所有領域結合在一起,形成一個共有的信息空間,包含政府機構、經濟數據、金融交易和社會領域。這個生態系統還應包括注冊管理部門機構和對應軟體,用於構建基於智能合約的政府機構、企業和公共用戶的應用程序和平台。
2. 區塊鏈的去塊頭主要包含。
區塊鏈是隨著比特幣等數字加密貨幣的日益普及而逐漸興起的一種的技術,它提供了一種去中心化,無需信任積累的信用建立範式。區塊鏈本質上是一種對等網路(P2P)的分布式賬本資料庫,比特幣的底層就是區塊鏈技術架構,區塊鏈本身其實是一串鏈接的數據區塊,類似C裡面的鏈表結構,塊中有內容,指針指向下一個區塊,其鏈接指針是採用密碼學hash演算法對區塊頭進行處理所產生的區塊頭哈希值,每一個數據塊中記錄了一組採用哈希演算法組成的樹狀交易狀態信息,這樣保證每個區塊內的交易數據不可篡改,區塊鏈里鏈接的區塊也不可篡改。
3. HNT礦機一天挖幾個比
HNT礦機一天挖兩百到三百個比。HNT是氦網路的本地令牌。它的供應沒有上限,但是每月大約穩定發行500萬(5,000,000)HNT。大約30到60分鍾的采礦時間可解鎖獎勵,獎勵將根據不斷變化的增長計劃進行分配。
拓展資料:
1、什麼是氦氣(HNT)
氦氣(HNT)是用於物聯網(IoT)設備的分散式區塊鏈供電網路。Helium主網於2019年7月啟動,允許低功率無線設備相互通信並通過其節點網路發送數據。節點以所謂的熱點形式出現,它是無線網關和區塊鏈挖掘設備的組合。因此,操作節點的用戶可以通過Helium的本機加密貨幣令牌HNT挖掘並獲得獎勵。Helium的目標是為未來的物聯網通信做准備,從2013年誕生之初就確定當前基礎設施的不足之處。
2、比特幣
比特幣是一種加密貨幣,即一種電子現金。它是一種去中心化的數字貨幣,沒有中央銀行或單一管理員,可以在無需中介的情況下,在點對點比特幣網路上從一個用戶發送到另一個用戶。比特幣因其在非法交易中的使用、高耗電量、價格波動性、交易中存在的偷竊以及其成為經濟泡沫的可能性而受到批評。比特幣也被用作一種投資,盡管幾個監管機構已經就比特幣向投資者發出了警告。
3、比特幣是哪個國家的
比特幣是由一名刻意隱藏自己真實身份的化名為中本聰的神秘人士於2009年一月設計的一種數字貨幣。比特幣不是哪個國家的,是一種虛擬的,比特幣是一種P2P形式的數字代碼。 比特幣並不是一種貨幣,而是一種虛擬交易的存在,目前比特幣使用最多的國家有日本、韓國、中國。
4、比特幣原理
比特幣每個區塊的數據結構,每個區塊由區塊頭和區塊體兩部分組成。區塊頭中包含父區塊的哈希,版本號,當前時間戳,難度值,隨機數和上面提到的默克爾樹根。區塊體中包含了礦工搜集的若干交易信息,假設有8個交易被收錄在區塊中,所有的交易生成一顆默克爾樹,默克爾樹是一種數據結構。
4. 比特幣演算法原理
比特幣演算法主要有兩種,分別是橢圓曲線數字簽名演算法和SHA256哈希演算法。
橢圓曲線數字簽名演算法主要運用在比特幣公鑰和私鑰的生成過程中,該演算法是構成比特幣系統的基石。SHA-256哈希演算法主要是運用在比特幣的工作量證明機制中。
比特幣產生的原理是經過復雜的運演算法產生的特解,挖礦就是尋找特解的過程。不過比特幣的總數量只有2100萬個,而且隨著比特幣不斷被挖掘,越往後產生比特幣的難度會增加,可能獲得比特幣的成本要比比特幣本身的價格高。
比特幣的區塊由區塊頭及該區塊所包含的交易列表組成,區塊頭的大小為80位元組,由4位元組的版本號、32位元組的上一個區塊的散列值、32位元組的 Merkle Root Hash、4位元組的時間戳(當前時間)、4位元組的當前難度值、4位元組的隨機數組成。擁有80位元組固定長度的區塊頭,就是用於比特幣工作量證明的輸入字元串。不停的變更區塊頭中的隨機數即 nonce 的數值,並對每次變更後的的區塊頭做雙重 SHA256運算,將結果值與當前網路的目標值做對比,如果小於目標值,則解題成功,工作量證明完成。
比特幣的本質其實是一堆復雜演算法所生成的一組方程組的特解(該解具有唯一性)。比特幣是世界上第一種分布式的虛擬貨幣,其沒有特定的發行中心,比特幣的網路由所有用戶構成,因為沒有中心的存在能夠保證了數據的安全性。
5. 深入了解區塊鏈的共識機制及演算法原理
所謂「共識機制」,是通過特殊節點的投票,在很短的時間內完成對交易的驗證和確認;對一筆交易,如果利益不相乾的若干個節點能夠達成共識,我們就可以認為全網對此也能夠達成共識。再通俗一點來講,如果中國一名微博大V、美國一名虛擬幣玩家、一名非洲留學生和一名歐洲旅行者互不相識,但他們都一致認為你是個好人,那麼基本上就可以斷定你這人還不壞。
要想整個區塊鏈網路節點維持一份相同的數據,同時保證每個參與者的公平性,整個體系的所有參與者必須要有統一的協議,也就是我們這里要將的共識演算法。比特幣所有的節點都遵循統一的協議規范。協議規范(共識演算法)由相關的共識規則組成,這些規則可以分為兩個大的核心:工作量證明與最長鏈機制。所有規則(共識)的最終體現就是比特幣的最長鏈。共識演算法的目的就是保證比特幣不停地在最長鏈條上運轉,從而保證整個記賬系統的一致性和可靠性。
區塊鏈中的用戶進行交易時不需要考慮對方的信用、不需要信任對方,也無需一個可信的中介機構或中央機構,只需要依據區塊鏈協議即可實現交易。這種不需要可信第三方中介就可以順利交易的前提是區塊鏈的共識機制,即在互不了解、信任的市場環境中,參與交易的各節點出於對自身利益考慮,沒有任何違規作弊的動機、行為,因此各節點會主動自覺遵守預先設定的規則,來判斷每一筆交易的真實性和可靠性,並將檢驗通過的記錄寫入到區塊鏈中。各節點的利益各不相同,邏輯上將它們沒有合謀欺騙作弊的動機產生,而當網路中有的節點擁有公共信譽時,這一點尤為明顯。區塊鏈技術運用基於數學原理的共識演算法,在節點之間建立「信任」網路,利用技術手段從而實現一種創新式的信用網路。
目前區款連行業內主流的共識演算法機制包含:工作量證明機制、權益證明機制、股份授權證明機制和Pool驗證池這四大類。
工作量證明機制即對於工作量的證明,是生成要加入到區塊鏈中的一筆新的交易信息(即新區塊)時必須滿足的要求。在基於工作量證明機制構建的區塊鏈網路中,節點通過計算隨機哈希散列的數值解爭奪記賬權,求得正確的數值解以生成區塊的能力是節點算力的具體表現。工作量證明機制具有完全去中心化的優點,在以工作量證明機制為共識的區塊鏈中,節點可以自由進出。大家所熟知的比特幣網路就應用工作量證明機制來生產新的貨幣。然而,由於工作量證明機制在比特幣網路中的應用已經吸引了全球計算機大部分的算力,其他想嘗試使用該機制的區塊鏈應用很難獲得同樣規模的算力來維持自身的安全。同時,基於工作量證明機制的挖礦行為還造成了大量的資源浪費,達成共識所需要的周期也較長,因此該機制並不適合商業應用。
2012年,化名Sunny King的網友推出了Peercoin,該加密電子貨幣採用工作量證明機制發行新幣,採用權益證明機制維護網路安全,這是權益證明機制在加密電子貨幣中的首次應用。與要求證明人執行一定量的計算工作不同,權益證明要求證明人提供一定數量加密貨幣的所有權即可。權益證明機制的運作方式是,當創造一個新區塊時,礦工需要創建一個「幣權」交易,交易會按照預先設定的比例把一些幣發送給礦工本身。權益證明機制根據每個節點擁有代幣的比例和時間,依據演算法等比例地降低節點的挖礦難度,從而加快了尋找隨機數的速度。這種共識機制可以縮短達成共識所需的時間,但本質上仍然需要網路中的節點進行挖礦運算。因此,PoS機制並沒有從根本上解決PoW機制難以應用於商業領域的問題。
股份授權證明機制是一種新的保障網路安全的共識機制。它在嘗試解決傳統的PoW機制和PoS機制問題的同時,還能通過實施科技式的民主抵消中心化所帶來的負面效應。
股份授權證明機制與董事會投票類似,該機制擁有一個內置的實時股權人投票系統,就像系統隨時都在召開一個永不散場的股東大會,所有股東都在這里投票決定公司決策。基於DPoS機制建立的區塊鏈的去中心化依賴於一定數量的代表,而非全體用戶。在這樣的區塊鏈中,全體節點投票選舉出一定數量的節點代表,由他們來代理全體節點確認區塊、維持系統有序運行。同時,區塊鏈中的全體節點具有隨時罷免和任命代表的權力。如果必要,全體節點可以通過投票讓現任節點代表失去代表資格,重新選舉新的代表,實現實時的民主。
股份授權證明機制可以大大縮小參與驗證和記賬節點的數量,從而達到秒級的共識驗證。然而,該共識機制仍然不能完美解決區塊鏈在商業中的應用問題,因為該共識機制無法擺脫對於代幣的依賴,而在很多商業應用中並不需要代幣的存在。
Pool驗證池基於傳統的分布式一致性技術建立,並輔之以數據驗證機制,是目前區塊鏈中廣泛使用的一種共識機制。
Pool驗證池不需要依賴代幣就可以工作,在成熟的分布式一致性演算法(Pasox、Raft)基礎之上,可以實現秒級共識驗證,更適合有多方參與的多中心商業模式。不過,Pool驗證池也存在一些不足,例如該共識機制能夠實現的分布式程度不如PoW機制等
這里主要講解區塊鏈工作量證明機制的一些演算法原理以及比特幣網路是如何證明自己的工作量的,希望大家能夠對共識演算法有一個基本的認識。
工作量證明系統的主要特徵是客戶端要做一定難度的工作來得到一個結果,驗證方則很容易通過結果來檢查客戶端是不是做了相應的工作。這種方案的一個核心特徵是不對稱性:工作對於請求方是適中中的,對於驗證方是易於驗證的。它與驗證碼不同,驗證碼是易於被人類解決而不是易於被計算機解決。
下圖所示的為工作量證明流程。
舉個例子,給個一個基本的字元創「hello,world!」,我們給出的工作量要求是,可以在這個字元創後面添加一個叫做nonce(隨機數)的整數值,對變更後(添加nonce)的字元創進行SHA-256運算,如果得到的結果(一十六進制的形式表示)以「0000」開頭的,則驗證通過。為了達到這個工作量證明的目標,需要不停地遞增nonce值,對得到的字元創進行SHA-256哈希運算。按照這個規則,需要經過4251次運算,才能找到前導為4個0的哈希散列。
通過這個示例我們對工作量證明機制有了一個初步的理解。有人或許認為如果工作量證明只是這樣一個過程,那是不是只要記住nonce為4521使計算能通過驗證就行了,當然不是了,這只是一個例子。
下面我們將輸入簡單的變更為」Hello,World!+整數值」,整數值取1~1000,也就是說將輸入變成一個1~1000的數組:Hello,World!1;Hello,World!2;...;Hello,World!1000。然後對數組中的每一個輸入依次進行上面的工作量證明—找到前導為4個0的哈希散列。
由於哈希值偽隨機的特性,根據概率論的相關知識容易計算出,預計要進行2的16次方次數的嘗試,才能得到前導為4個0的哈希散列。而統計一下剛剛進行的1000次計算的實際結果會發現,進行計算的平均次數為66958次,十分接近2的16次方(65536)。在這個例子中,數學期望的計算次數實際就是要求的「工作量」,重復進行多次的工作量證明會是一個符合統計學規律的概率事件。
統計輸入的字元創與得到對應目標結果實際使用的計算次數如下:
對於比特幣網路中的任何節點,如果想生成一個新的區塊加入到區塊鏈中,則必須解決出比特幣網路出的這道謎題。這道題的關鍵要素是工作量證明函數、區塊及難度值。工作量證明函數是這道題的計算方法,區塊是這道題的輸入數據,難度值決定了解這道題的所需要的計算量。
比特幣網路中使用的工作量證明函數正是上文提及的SHA-256。區塊其實就是在工作量證明環節產生的。曠工通過不停地構造區塊數據,檢驗每次計算出的結果是否滿足要求的工作量,從而判斷該區塊是不是符合網路難度。區塊頭即比特幣工作量證明函數的輸入數據。
難度值是礦工們挖掘的重要參考指標,它決定了曠工需要經過多少次哈希運算才能產生一個合法的區塊。比特幣網路大約每10分鍾生成一個區塊,如果在不同的全網算力條件下,新區塊的產生基本都保持這個速度,難度值必須根據全網算力的變化進行調整。總的原則即為無論挖礦能力如何,使得網路始終保持10分鍾產生一個新區塊。
難度值的調整是在每個完整節點中獨立自動發生的。每隔2016個區塊,所有節點都會按照統一的格式自動調整難度值,這個公式是由最新產生的2016個區塊的花費時長與期望時長(按每10分鍾產生一個取款,則期望時長為20160分鍾)比較得出來的,根據實際時長一期望時長的比值進行調整。也就是說,如果區塊產生的速度比10分鍾快,則增加難度值;反正,則降低難度值。用公式來表達如下:
新難度值=舊難度值*(20160分鍾/過去2016個區塊花費時長)。
工作量證明需要有一個目標值。比特幣工作量證明的目標值(Target)的計算公式如下:
目標值=最大目標值/難度值,其中最大目標值為一個恆定值
目標值的大小與難度值成反比,比特幣工作量證明的達成就是礦中計算出來的區塊哈希值必須小於目標值。
我們也可以將比特幣工作量的過程簡單的理解成,通過不停變更區塊頭(即嘗試不同nonce值)並將其作為輸入,進行SHA-256哈希運算,找出一個有特定格式哈希值的過程(即要求有一定數量的前導0),而要求的前導0個數越多,難度越大。
可以把比特幣將這道工作量證明謎題的步驟大致歸納如下:
該過程可以用下圖表示:
比特幣的工作量證明,就是我們俗稱「挖礦」所做的主要工作。理解工作量證明機制,將為我們進一步理解比特幣區塊鏈的共識機制奠定基礎。
6. 挖比特幣的原理
比特幣每個區塊的數據結構,每個區塊由區塊頭和區塊體兩部分組成。區塊頭中包含父區塊的哈希,版本號,當前時間戳,難度值,隨機數和上面提到的默克爾樹根。區塊體中包含了礦工搜集的若干交易信息,假設有8個交易被收錄在區塊中,所有的交易生成一顆默克爾樹,默克爾樹是一種數據結構,它將葉子節點兩兩哈希,生成上一層節點,上層節點再哈希,生成上一層,直到最後生成一個樹根。
7. 比特幣挖礦究竟在計算一個什麼問題手動驗證區塊鏈給出答案
簡單回顧下挖礦的流程。
首先先要對所有的交易做驗證,剔除有問題的,然後通過一套自定義的標准來選擇哪些交易希望打包進區塊,比如說提供的交易費與交易佔用的位元組大小的比值超過某個門檻,這樣的交易才被認為有利可圖。當然,節點也可以特意選擇要加入某條交易,或者故意忽略某些交易。如果是通過礦池挖礦的話,礦池的伺服器會去篩選交易,然後分配給每個參與的礦機一個獨立的任務。
一旦篩選好交易數據,層層約減,通過這些交易就可以計算出一棵Merkle樹,可以確定一個唯一的摘要,這就是Merkl樹的根。
然後我們再依次獲取挖礦需要的其他信息,這些信息組成一個區塊的頭。
區塊頭的位元組分配
區塊頭只有80個位元組,挖礦只需要對區塊頭進行運算即可。交易數據都通過merkle樹固定了下來,不需要再包含進來。
這些信息中大部分已經是固定下來的,或者是可計算的。
我們以區塊277316為例,其信息來自網站 http://blockchain.info
Bitcoin Block #277316blockchain.info
選擇這個區塊的原因是在《Mastering Bitcoin》一書中,中文社區譯本和英文原版在介紹這部分內容時有出入,而且作者Antonopoulos並沒有提到一個關鍵點,就是位元組順序的問題,相信很多人可能會踩這個坑。這里還原的細節可以幫助讀者與書籍做相互參考。
請大家注意下面的每個步驟,注意每一個變化,這是比特幣最核心的演算法。
轉換時間,記住,一定要轉為utc的時間戳,此處遇到過坑,小心。
這一步的發現異常艱辛,耗費了大量的查詢,大坑,大坑,謹記。發明人中本聰可能為了讓機器計算更快,而變為了更接近機器的編碼方式little-endian.
最終得到的結果就是
16進制下前面15個0,然後是1; 而難度目標對應的數字是
16進制下前面15個0,然後是3. 計算結果小於難度目標,符合要求。這個結果與網站上公布的數字一致。
在挖礦時,nonce隨機數是未知的,要從0試到2^32,但是這個數字其實不大,只有4294967296,以現在的礦機動輒14T每秒的算力,全部算完到上限也不需要一秒。剛才提到在這種情況下,需要使用創幣交易中的附帶信息,額外的字元串成為extra nonce。
另外,創世區塊也可以通過上面的方法來驗證,有好奇的朋友可以嘗試下。
提示:
8. 區塊鏈技術中的區塊頭包含的三組元數據是什麼
1、前區塊哈希值。用於索引前區塊
2、挖礦難度、隨機值(用於工作量證明計算)、時間戳
3、梅克爾樹,能夠總結並迅速歸納校驗區塊中全部交易數據的樹根數據。
9. 比特幣礦池的協議stratum
轉自: https://zhuanlan.hu.com/p/23558268
getblocktemplate協議誕生於2012年中葉,此時礦池已經出現。礦池採用getblocktemplate協議與節點客戶端交互,採用stratum協議與礦工交互,這是最典型的礦池搭建模式。
與getwork相比,getblocktemplate協議最大的不同點是:getblocktemplate協議讓礦工自行構造區塊。如此一來,節點和挖礦完全分離。對於getwork來說,區塊鏈是黑暗的,getwork對區塊鏈一無所知,他只知道修改data欄位的4個位元組。對於getblocktemplate來說,整個區塊鏈是透明的,getblocktemplate掌握區塊鏈上與挖礦有關的所有信息,包括待確認交易池,getblocktemplate可以自己選擇包含進區塊的交易。
挖礦有兩種方式,一種叫SOLO挖礦,另一種是去礦池挖礦。前文所述的在節點客戶端直接啟動CPU挖礦,以及依靠getwork+cgminer驅動顯卡直接連接節點客戶端挖礦,都是SOLO挖礦,SOLO好比自己獨資買彩票,不輕易中獎,中獎則收益全部歸自己所有。去礦池挖礦好比合買彩票,大家一起出錢,能買一堆彩票,中獎後按出資比率分配收益。理論上,礦機可以藉助getblocktemplate協議鏈接節點客戶端SOLO挖礦,但其實早已沒有礦工會那麼做,在寫這篇文章時,比特幣全網算力1600P+,而當前最先進的礦機算力10T左右,如此算來,單台礦機SOLO挖到一個塊的概率不到16萬分之一,礦工(人)投入真金白銀購買礦機、交付電費,不會做風險那麼高的投資,顯然投入礦池抱團挖礦以降低風險,獲得穩定收益更加適合。因此礦池的出現是必然,也不可消除,無論是否破壞系統的去中心化原則。
礦池的核心工作是給礦工分配任務,統計工作量並分發收益。礦池將區塊難度分成很多難度更小的任務下發給礦工計算,礦工完成一個任務後將工作量提交給礦池,叫提交一個share。假如全網區塊難度要求Hash運算結果的前70個比特位都是0,那麼礦池給礦工分配的任務可能只要求前30位是0(根據礦工算力調節),礦工完成指定難度任務後上交share,礦池再檢測在滿足前30位為0的基礎上,看看是否碰巧前70位都是0。
礦池會根據每個礦工的算力情況分配不同難度的任務,礦池是如何判斷礦工算力大小以分配合適的任務難度呢?調節思路和比特幣區塊難度一樣,礦池需要藉助礦工的share率,礦池希望給每個礦工分配的任務都足夠讓礦工運算一定時間,比如說1秒,如果礦工在一秒之內完成了幾次任務,說明礦池當前給到的難度低了,需要調高,反之。如此下來,經過一段時間調節,礦池能給礦工分配合理難度,並計算出礦工的算力。
礦池通過getblocktemplate協議與網路節點交互,以獲得區塊鏈的最新信息,通過stratum協議與礦工交互。此外,為了讓之前用getwork協議挖礦的軟體也可以連接到礦池挖礦,礦池一般也支持getwork協議,通過階層挖礦代理機制實現(Stratum mining proxy)。須知在礦池剛出現時,顯卡挖礦還是主力,getwork用起來非常方便,另外早期的FPGA礦機有些是用getwork實現的,stratum與礦池採用TCP方式通信,數據使用JSON封裝格式。
先來說一下getblocktemplate遺留下來的幾個問題:
礦工驅動:在getblocktemplate協議里,依然是由礦工主動通過HTTP方式調用RPC介面向節點申請挖礦數據,這就意味著,網路最新區塊的變動無法及時告知礦工,造成算力損失。
數據負載:如上所述,如今正常的一次getblocktemplate調用節點都會反饋回1.5M左右的數據,其中主要數據是交易列表,礦工與礦池需頻繁交互數據,顯然不能每次分配工作都要給礦工附帶那麼多信息。再者巨大的內存需求將大大影響礦機性能,增加成本。
Stratum協議徹底解決了以上問題。
Stratum協議採用主動分配任務的方式,也就是說,礦池任何時候都可以給礦工指派新任務,對於礦工來說,如果收到礦池指派的新任務,應立即無條件轉向新任務;礦工也可以主動跟礦池申請新任務。
現在最核心的問題是如何讓礦工獲得更大的搜索空間,如果參照getwork協議,僅僅給礦工可以改變nNonce和nTime欄位,則交互的數據量很少,但這點搜索空間肯定是不夠的。想增加搜索空間,只能在hashMerkleroot下功夫,如果讓礦工自己構造coinbase,那麼搜索空間的問題將迎刃而解,但代價是必要要把區塊包含的所有交易都交給礦工,礦工才能構造交易列表的Merkleroot,這對於礦工來說壓力更大,對於礦池帶寬要求也更高。
Stratum協議巧妙解決了這個問題,成功實現既可以給礦工增加足夠的搜索空間,又只需要交互很少的數據量,這也是Stratum協議最具創新的地方。
再來回顧一下區塊頭的6個欄位80位元組,這個很關鍵,nVersion,nBits,hashPrevBlock這3個欄位是固定的,nNonce,nTime這兩個欄位是礦工現在就可以改變的。增加搜索空間只能從hashMerkleroot下手,這個繞不過去。Stratum協議讓礦工自己構造coinbase交易,coinbase的scriptSig欄位有很多位元組可以讓礦工自由填充,而coinbase的改動意味著hashMerkleroot的改變。從coinbase構造hashMerkleroot無需全部交易,
如上圖所示,假如區塊將包含13筆交易,礦池先對這13筆交易進行處理,最後只要把圖中的4個黑點(Hash值)交付給礦工,同時將構造coinbase需要的信息交付給礦工,礦工就可以自己構造hashMerkleroot(圖中的綠點都是礦工自行計算獲得,兩兩合並Hash時,規定下一個黑點代表的hash值總是放在右邊)
。按照這種方式,假如區塊包含N筆交易,礦池可以濃縮成log2(N)個hash值交付給礦工,這大大降低了礦池和礦工交互的數據量。
Stratum協議嚴格規定了礦工和礦池交互的介面數據結構和交互邏輯,具體如下:
1. 礦工訂閱任務
啟動挖礦機器,使用mining.subscribe方法鏈接礦池
返回數據很重要,礦工需本地記錄,在整個挖礦過程中都用到,其中:
Extranonce1,和 Extranonce2對於挖礦很重要,增加的搜索空間就在這里,現在,我們至少有了8個位元組的搜索空間,即nNonce的4個位元組,以及 Extranonce2的4個位元組。
2. 礦池授權
在礦池注冊一個賬號 ,添加礦工,礦池允許每個賬號任意添加礦工數,並取不同名字以區分。礦工使用mining.authorize方法申請授權,只有被礦池授權的礦工才能收到礦池指派任務。
3. 礦池分配任務
以上每個欄位信息都是必不可少,其中:
有了以上信息,再加上之前拿到的Extranonce1 和Extranonce2_size,就可以挖礦了。
4. 挖礦
1) 構造coinbase交易
用到的信息包括Coinb1, Extranonce1, Extranonce2_size 以及Coinb2,構造很簡單:
為啥可以這樣,因為礦池幫礦工做了很多工作,礦池已經構建了coinbase交易,系列化後在指定位置分割成coinb1和coinb2,coinb1和coinb2包含指定信息,比如coinb1包含區塊高度,coinb2包含了礦工的收益地址和收益額等信息,但是這些信息對於礦工來說無關緊要,礦工挖礦的地方只是Extranonce2 的4個位元組。另外Extranonce1是礦池寫入區塊的指定信息,一般來說,每個礦池會寫入自己礦池的信息,比如礦池名字或者域名,我們就是根據這個信息統計每個礦池在全網的算力比重。
2) 構建Merkleroot
利用coinbase和merkle_branch,按照上圖方式構造hashMerkleroot欄位。
3) 構建區塊頭
填充餘下的5個欄位,現在,礦池可以在nNonce和Extranonce2 里搜索進行挖礦,如果嫌搜索空間還不夠,只要增加Extranonce2_size為多幾個位元組就可輕而易舉解決。
5. 礦工提交工作量
當礦工找到一個符合難度的shares時,提交給礦池,提交的信息量很少,都是必不可少的欄位:
礦池拿到以上5個欄位後,首先根據任務號ID找出之前分配任務前存儲的信息(主要是構建的coinbase交易以及包含的交易列表等),然後重構區塊,再驗證shares難度,對於符合難度要求的shares,再檢測是否符合全網難度。
6. 礦池給礦工調節難度
礦池記錄每個礦工的難度,並根據shares率不斷調節以指定合適難度。礦池可以隨時通過mining.set_difficulty方法給礦工發消息另其改變難度。
如上,Stratum協議核心理念基本解析清楚,在getblocktemplate協議和Stratum協議的配合下,礦池終於可以大聲的對礦工說,讓算力來的更猛烈些吧。
10. 比特幣和區塊鏈是什麼原理
比特幣是一種利用點對點技術實現的電子現金系統,它允許一個組織直接與另外一個組織進行在線支付,而不需要中間的權威的清算機構。
在比特幣的世界裡,如果你想擁有比特幣,你需要申請一個比特幣地址,就像你到銀行存款,需要開立一個賬戶,然後,你就擁有這個賬號,有了自己的賬號,你可以向你的賬號存款,別人也可以給你的賬號轉賬,當你需要提款的時候或者給別人轉賬的時候,你需要出示一個能夠打開這個地址的鑰匙,也就是你的私鑰,就像你在ATM上取款的時候需要提供密碼一樣。
與銀行發行的法定貨幣不同,法定貨幣的發行是由各國央行來統一管理的,大家都相信央行是靠譜的,不會記錯賬,也不會被人攻擊。然而,比特幣的發行並不需要央行這樣的權威機構,它允許一筆交易從一個組織直接結算給另外一個組織,省去了權威機構結算的環節,提高了交易和結算的效率,節省了交易的成本,尤其是跨境交易的成本。
區塊鏈是由多個區塊組成,每個區塊是由區塊頭和區塊體組成的,每一個區塊頭包含著區塊的元信息,同時也包含一個指向前一個區塊頭哈希值的指針,這個指針是防止區塊鏈被篡改的關鍵信息。區塊體包含比特幣的交易信息,第一個交易是特殊交易,是獎勵給挖礦節點的酬勞,這也是唯一一種可以產生比特幣的方式,也就是發行比特幣的方式,其餘的交易都是轉賬交易,比特幣從一個地址支付給另外一個地址,這也是實現比特幣價值轉移的唯一方式。總結來看,比特幣只有挖礦和轉賬兩種方式,比特幣產生以後只能從一個人轉賬給另一個人,而不能憑空消失,而且比特幣的發行總量是恆定的,一共有2100萬,是一種通索性貨幣。