2018 年 8 月
第 33 卷 8
本文章是由機器翻譯。
區塊鍊-區塊鏈基本法則:一頭栽進交易雜湊鏈結
藉由Jonathan Waldman |2018 年 8 月
在這一系列的第一篇文章中 (msdn.com/magazine/mt845650),我大致了解現代區塊鏈,所需的基本概念使用呈現高階範例來說明基本概念。在本文中討論的部分來自先前的文章主題移到更多詳細資料交易雜湊鏈結 」、 「 交易集區的角色和 「 如何最長的區塊鏈一律會使用。本文章最易讀的項目至前一篇文章,並包含適用於新的區塊鏈技術的開發人員簡介資料。
順帶一提,雖然在這一系列文章根據比特幣區塊鏈,我不多提倡採用特定的區塊鏈產品或技術。相反地,我的目標是探索基礎上的受歡迎的區塊鏈技術都建立,而您手邊有知識,您可以套用應該決定要利用現有的區塊鏈或設計您自己。因為您先研究區塊鏈,您很快就會發現實作詳細資料和它們之間大幅不同。如果您決定在特定的區塊鏈實作特製化,您要跟上它的修正和更新維持專業知識。但我會警告您,這些通常新興技術的動態本質表示該可用書籍、 影片、 部落格、 論壇和其他落後,有時候將必要參考最新部署的原始碼,為特定的文件資源 fall區塊鏈實作完整的參考。
第二次接觸的交易雜湊鏈結
我的前一篇文章討論追蹤數位資產的擁有權交易雜湊鏈結資料結構。在本文中,我會深入探討更深入的雜湊鏈結的運作方式。
若要支付對區塊鏈的根目錄,首先我要將焦點放在 Satoshi Nakamoto 開創性有關白皮書比特幣 (bitcoin.org/bitcoin.pdf) 發佈於 2008 年 10 月 31 日 — 比特幣推出,2009 年 1 月 3 日之前的幾個月。雖然比特幣相當以來變更的實作詳細資料則白皮書會保留一個實用的參考,特別是 p 2 表示原始交易雜湊鏈結上的圖表來設計概念。
該圖表的目的是要傳達交易雜湊鏈結的建構方式以及數位簽章授權的擁有權序列傳輸。不過,它強烈抽象化,而且,因此有點令人困惑。若要新增清楚起見,我已建構描述新交易的雜湊鏈結實際工作的詳細的資訊 (請參閱**[圖 1**)。
[圖 1 更新的版本 Satoshi Nakamoto 原始交易雜湊鏈結圖表
我修改過的圖表會顯示三筆交易 (0 為基礎,與原始文件):Transaction0 alice,交易1 Bob 和交易2 針對 Charlie。第一筆交易建立 Alice 原始的擁有者的數位資產;其第二筆交易將擁有權轉移給 Bob;其第三個交易將擁有權轉移到 Charlie。每個交易組成 (顯示實心外框) 的這些欄位: 交易雜湊、 數位資產識別碼、 選擇性資料、 公開金鑰和簽章。其他欄位所使用,但不是會儲存在 (顯示為虛線外框) 的交易: 私用金鑰和新的交易雜湊。圖表中表示註標的混合大小寫名稱的欄位值 — 例如,交易的交易雜湊值0 是 TransactionHash0 與交易的公用金鑰值2 是 PublicKey2。
[圖 1是簡化的交易雜湊鏈結,因為它會追蹤只有單一數位資產 (DigitalAssetID0),它會變更擁有權 (相較之下,加密貨幣交易雜湊鏈結通常有多個數位資產的輸入和輸出)。此外,請勿混淆的區塊鏈,這會彙總已驗證的交易分成區塊之交易雜湊鏈結。最後,交易雜湊鏈結不通常會儲存為單一連結清單的資料結構描述。相反地,它可以建構 (速度快,使用索引的 aid) 從儲存的區塊鏈的交易資料。
如我在前一篇文章中所述的因為每個新擁有者的交易包含上一步] 連結至先前的擁有者的交易雜湊值,則會保留的交易序列。在 [ [圖 1,先前的交易的交易雜湊會儲存在目前交易時,會形成返回連結。比方說,Bob 的交易包含含有 Alice TransactionHash 的交易雜湊欄位0 值,同樣地,Charlie 的交易包含交易雜湊欄位包含 Bob 的 TransactionHash1 值,以此類推。
返回連結是其中一個交易雜湊鏈結的數個資料整合性元件。鏈結也會強制執行傳送擁有權的授權。若要遵循範例,假設 Alice 是 purveyor 的世界頂尖的課程,而且想要維護會追蹤每個 bottle 她所擁有的命運分類帳。一天內,Alice 會移至她 wine cellar,並決定她會先將自己她公司的區塊鏈上註冊,原始的擁有者的酒配備了,每個 bottle 有效植入每個的酒她 cherished bottles 交易雜湊鏈結。若要開始,她執意操作抓取 Cheval Blanc 1947 聖 Émilion 的 bottle 和標記使用 QR 代碼,包含唯一識別碼。然後,她會掃描 QR 標籤到她在網路上執行做為節點的區塊鏈用戶端軟體。軟體會掃描程式碼轉譯成數位資產識別碼 (DigitalAssetID0) 再新增選擇性資料 (OptionalData0) 以及 Alice 的公開金鑰 (PublicKey0)。如您在中所見**[圖 1**,這些欄位位於它們自己外框的矩形,表示不帶正負號的交易。每一筆交易也會包含交易雜湊返回連結,以及簽章,但因為這是雜湊鏈結中的第一筆交易,這些欄位是空白 (顯示的灰色的欄位來交易0)。
顯示在每一筆交易是唯一的交易雜湊值,用戶端軟體會計算的 SHA-256-雜湊在一起的所有交易欄位 (交易雜湊、 數位資產識別碼、 選擇性資料、 擁有者的公開金鑰和簽章)。同樣地,它是用來作為下一個交易的返回連結 DigitalAssetID 此交易雜湊值0。
當 Bob,Alice 的曼哈頓餐廳,管理員想要取得 Alice bottle 的 Cheval Blanc 時,他會使用其用戶端軟體來產生新公用 / 私密金鑰組的交易。Bob 可以略過此步驟,並彙總在單一的先前使用的公用金鑰,他數位資產的所有但他會公開不必要的風險。相反地,他會產生新的金鑰組,並可讓 Alice 之前從未使用他的公開金鑰。如此一來,如果他曾失去配對的私密金鑰,他就會失去存取至只有單一的數位資產。
Bob 的要求回應,Alice 會啟動其用戶端軟體,並瀏覽其數位資產。她選取想 Cheval Blanc bottle Bob 相關聯的識別碼,並起始轉移要求,藉由提供 Bob 的公用金鑰,做為目的地位址的一種將增加一倍的交易。節點接著會建立新的交易 (交易1) 包含先前的交易雜湊 (TransactionHash 的返回連結值0),數位資產識別碼 (DigitalAssetID 的值0) (這是交易的數位資產識別碼相同的值 Cheval Blanc bottle0),任何自訂欄位的值相關的交易 (OptionalData1),與 Bob 的公開金鑰 (PublicKey 的值1) 因為 Bob 是此交易的擁有者。
到目前為止,節點已建構的不帶正負號的新交易1 bob。下一個步驟是登入使用 Alice 的私用金鑰的交易。這是一個重要的步驟:Alice 目前擁有的數位資產有問題,只她可以授權給 Bob 的數位資產傳輸。
橢圓曲線加密
在 [ [圖 1,標籤 1 和 2 指出交易帶正負號的位置,且其中它已經過驗證,分別。在其目前的版本中,比特幣區塊鏈會利用公開金鑰密碼編譯 (PKC) 呼叫橢圓曲線密碼編譯 (ECC) 的實作。ECC 提供更強的密碼編譯結果和常見的 RSA/Diffie-hellman 方法比短金鑰。區塊鏈節點會使用 ECC,來產生非對稱金鑰組,使用牽涉到在二維圖形上的隨機選取的點的公式。此配置可讓從私用金鑰重新產生遺失的公用金鑰 (但當然不允許從公用金鑰重新產生遺失的私人金鑰)。
區塊鏈建立模型之後比特幣也利用 ECC,說到數位簽章。不同於我在前一篇文章中所示的簡化 PKC Rivest-digital signature Standard-Adelman (RSA) 範例,比特幣現在使用 Elliptic Curve Digital Signature Algorithm (ECDSA) (具體而言,SHA256withECDSA) 進行簽署的交易。此演算法的運作方式稍有不同從其他簽章的技術:ECDSA,在中,您必須傳遞簽署者的私密金鑰,以及要使用的 ECDSA 簽章產生演算法建立的簽章的函式簽章訊息 (此步驟會以標記 1 中**[圖 1**)。若要稍後驗證該簽章,您必須傳遞簽署者的公開金鑰、 訊息和簽章函式的使用 ECDSA 驗證演算法來產生,則為 true 或 false 值,表示簽章有效 (此步驟會以標記 2在 [ [圖 1)。[圖 2摘要說明簽署和驗證使用 ECDSA。
[圖 2 橢圓曲線數位簽章演算法產生和簽章 (上方) 驗證演算法 (下方)
在建立時使用 PKC RSA 的數位簽章,您驗證簽章比較雜湊值,如我前一篇文章中所示。如想知道生,簽章驗證策略不可能有 ECDSA。RSA PKC 是具決定性的數位簽章演算法,因為每次時使用指定的私密金鑰簽署指定的訊息來產生相同的簽章。ECDSA,相反地,是不具決定性:您將傳遞訊息和私密金鑰至 ECDSA 簽章的函式每次您將取得不同的簽章。若要查看此動作,請前往bit.ly/2MCTuwI。
繼續我們的範例,Alice 即將登入將擁有權轉移 DigitalAsset 的交易0 給 Bob。節點軟體傳遞她的私密金鑰 (PrivateKey0) 以及一則訊息 (NewTransactionHash1) 至 ECDSA 簽章產生演算法函式,並取得做為輸出 (簽章的簽章1)。節點會將新的交易的簽章欄位中的這個簽章值。最後,在節點計算交易雜湊 (TransactionHash1) 是所有的交易欄位,包括簽章的 SHA-256 雜湊的值。此時,節點已成功產生的帶正負號的交易,可以傳送至交易集區。
帶正負號的交易視為未驗證之前已由 miner 節點驗證。當 miner 節點嘗試驗證 Bob 的交易時,會使用交易雜湊上一步] 連結來存取先前的交易公開金鑰,這會導致 Alice 的交易0。一旦節點可以存取先前的交易,它會傳遞該交易的公開金鑰 (PublicKey0) 以及新的交易雜湊 (NewTransactionHash1) 和 Bob 的交易 (簽章中的簽章1) 會傳回 true 或 false 的值,指出是否為有效的簽章的 ECDSA 驗證演算法。
順帶一提,Alice 的私用金鑰 (PrivateKey0) 和新的交易雜湊 (NewTransactionHash1) 不會儲存在交易中。私用金鑰的值應該不會儲存在區塊鏈,並不需要儲存新的交易雜湊值,因為可以在需要時計算。
Bob 抓取他 corkscrew,認為他將 savor Cheval Blanc,當他從 Charlie,其中 Alice 的其他餐廳的管理員接收 Skype 會議。提供酒類歡迎新進的 sommelier 特殊 bottle 要 Charlie。Bob regretfully 同意的 Cheval Blanc 的擁有權轉移給 Charlie。他會要求 Charlie 的公開金鑰,相同的程序一次執行才能傳送 DigitalAsset0 擁有權從 Bob Charlie。
有了存在 DigitalAsset 的三個交易0— 一個用於 Alice、 另一個用於 Bob 和 Charlie 的其中一個。每一筆交易已驗證,並合併到區塊鏈。額外的區塊數目有已進行資料採礦之上,包含的區塊之後要確認特定的交易,交易被視為項目 (這個 「 特定數字 」 是實作而定)。因此,特定的數位資產的官方的擁有者永遠是具有該數位資產的交易雜湊鏈結至最近已確認的交易的私用金鑰的人員。
需要達成共識
如您所見,交易雜湊鏈結就會是致力於強制執行數位資產的擁有權的資料結構。但是請記住,這些交易是儲存在容易遭受攻擊的分散式、 非集中式、 非同步的公用網路,而且公開給不一定要使用區塊鏈通訊協定規則 (所謂 「 不良執行者 」) 的節點。結果是不良執行者節點無法驗證實際上無效或無法舞弊破壞完整性的區塊鏈網路上的交易。
交易集區若要避免這些交易完整性問題,所有交易都通過驗證並確認程序。由單一節點網路上某處,會建立每個交易。例如,假設 Alice 是 Albuquerque 中,Bob 是於波士頓舉辦。當 Alice 將她的數位資產的擁有權轉移給 Bob,交易1 建構方式 Albuquerque 則網路上的其他節點的廣播中的節點。同時,其他節點積極地廣播他們所建立的交易。這些廣播散佈到其他節點上的全球網路,並需要時間才能傳播這些交易,因為網路延遲。不論來源位置的活動於全球網路交易的區塊鏈通訊協定會置於未驗證的交易的交易集區中所有新交易。
在工作的概念和證明利害關係在發出工作證明的報酬的區塊鏈,miner 節點積極地選取交易從交易集區。它 behooves miner 節點,以確認每一筆交易,因為記錄檔區塊內含任何不正確的交易將會立即拒絕其他節點所建構的候選項目區塊時,這表示節點所完成的工作是你和。
請記住,從我的前一篇文章中的每個節點是在尋找以便獲得財務 reward 並復原時示範概念的工作產生的能源成本,它已建構的候選項目區塊 nonce 競賽中。撰寫本文時,目前的財務 reward 比特幣區塊鏈上是 12.5 比特幣 (BTC),也要大致上得到 $100,000 USD。有時候財務 reward 是交易費用,而且有時候是財務 reward 加上交易費用。請務必了解相關概念的工作是節點必須耗費能源及產生設備和基礎結構成本才能有利的方式繼續採礦區塊;若要持續節點,這些成本必須偏移 [營收的影響。
它的難怪,然後,只要 miner 尋找 nonce 它立即會廣播其剛採礦區塊加入結尾的區塊鏈,希望在網路上的每個節點的該區塊。比特幣區塊鏈校準其 nonce 的困難度,以便新的 nonce 發現大約每隔 10 分鐘,因此即使是幾秒鐘的延遲可能表示另一個 miner 可能也尋找 nonce 和廣播其候選區塊。
若要感謝遺失採礦競爭的影響,請考慮時間中找不到 nonce 採礦節點:它們會耗用的全部能源被浪費。找不到 nonce 人員採礦者沒有任何選擇要停止處理目前的區塊,並從頭抓取,然後確認從交易集區的交易。只要他們了解該找到 nonce 的另一個 miner,它們必須停止採礦的原因是候選區塊具有區塊鏈的前一個區塊的雜湊的返回連結。當另一個 miner 地雷的已驗證連結至前一個區塊的區塊時,遺失採礦人員必須建立新的區塊所參考的新採礦到區塊的雜湊值。遺失採礦人員也必須捨棄它們先前選取並選擇一組新的交易集區,因為其他節點將會拒絕任何新的區塊,其中包含已經包含在前一個區塊中的交易的交易。
節點必須忍受所有以支援其採礦設備所需的成本。因為成長比特幣區塊鏈,這會導致另一種競爭-最強大的採礦設備的競爭。更多運算能力採礦節點可以存取,越有可能它可以贏得每 10 分鐘的比賽拼圖密碼編譯就能找到 nonce。
一個常見的批評的概念是電力的工作的,它可以鼓勵曾經-更多-功能強大的運算中心的建構和使用增加。證明的-工作-提供技術的區塊鏈網路上的功能最強大運算設備的擁有者都會在競爭優勢。比方說,multimillion 貨幣資料中心現在努力以獨佔方式採礦比特幣。根據digiconomist.net,比特幣的年度區塊鏈的能源耗量自 2018 年 6 月起為 71.12 TWh,類似於智利的年度的能源消耗 (bit.ly/2vAdzdl)。
另一種廣泛討論的共識演算法是證明-的-利害關係,這會獎勵示範經濟的利害關係網路中的節點。在論證上,證明-的-相關的最大受觀迎的方式是,很多能源效率。此外,它不會發出的加密貨幣報酬採礦區塊中,雖然它會作為報酬發出交易費用。它也不需要是為了比賽加入找到解決密碼編譯的謎題的 nonce。相反地,網路會隨機選擇已本身註冊為 「 forger 」 (類似於比特幣的"miner 」) 的總計值和其加密貨幣單位的時間為基礎的節點。各種不同的實作詳細資料,致力於確保公平性和隨機性 forgers 之間選取。比方說,一旦選取 forger,它通常不能參與另一回合的偽造至少 30 天。實際上,包含最舊的加密貨幣銅板的高價值 forger 節點會在其他 forger 節點有邊緣。
支援證明利害關係者請好執行節點的費用會比較低,鼓勵更多的參與和更高的層級的更是雪上加霜。諷刺,不過,概念的相關系統不鼓勵使用的加密貨幣該區塊鏈設計來交易因為消費降低的節點總數值,並減少獲選為 forger 的機會。
要思考的一點是區塊鏈專家 Andreas Antonopoulos 所做的點:「 工作概念也會的相關概念,但證明利害關係也不是工作證明 」。 他說明概念的工作提供藉由將點,而採礦人員參與證明的-工作-提供技術的網路未選取這兩種共識演算法的組合數目或基礎 miner 節點加密貨幣單位的時間有效資金加入所需的能源示範其經濟的投資,在網路中。「 玉 」 配置中的概念的工作,因此,他的論點是,是的節點是願意為了成功我區塊會產生的電力成本 (觀看 Antonopoulos 於 2016 年 13,說到在美國矽谷比特幣聚會: bit.ly/2MDfkA1).
最長的鏈結區塊鏈網路不斷地擴充、 分支和剪除本身。區塊鏈的整個檢視稱為 「 區塊樹狀目錄中;針對結束區塊樹狀結構的最長鏈結的區塊主動地雷 miner 的每個節點。您可能會認為所鏈結的最大的區塊數,定義最長的鏈結,但是它實際上指區塊發生區塊會產生最大的工作順序。您可以藉由加總 」 的困難度 」 每個區塊衍生總工作 — 是探索 nonce 候選區塊的方式不太可能的測量。網路通訊協定會維護該值,以比特幣區塊鏈調整每個 2,016 區塊,以便區塊需要大約 10 分鐘的處理時間探勘。困難值會儲存在每個區塊,讓工作可以計算節點,嘗試找出最長的鏈結。
有時候,它是不可避免的兩個節點,A 和 B,將示範概念的工作,藉由採礦幾秒或甚至是彼此的毫秒數內的新區塊。因為每個節點會將其新的區塊新增至其所看到的最長鏈結為廣播網路該區塊之前的結尾,則會出現在區塊的樹狀目錄中的 「 分叉 」 (分支)。根據這些節點位於何處和連接的節點上的網路和其他延遲考量的頻寬,會先看到做為新的區塊的區塊的一部分的網路,並會將它加入至鏈結的結尾。網路的其他部分將會看到新的區塊區塊 B,並會將它加入至鏈結的結尾。這會保留一些節點區塊的和其他項目以做為結束區塊的區塊 B (請參閱**[圖 3**)。
[圖 3 (上方) 的區塊樹狀目錄中顯示區塊的樹狀結構分岔和兩個等長鏈結 (下方);區塊樹狀結構顯示區塊的樹狀結構分岔和一個最長的鏈結
當 「 分叉 」,就會發生在頂端所示**[圖 3**,位於區塊樹狀目錄中的兩個鏈結 — 它們的長度相同,而且也都有效。您可以考慮先採礦原因是它們需要鏈結的結束區塊的雜湊的最長的鏈結看起來採礦節點時,清除的問題。
如果 miner 成功地雷區塊 C,而且原本正在處理的鏈結,它會將區塊 C 新增至鏈結具有作為其結束區塊的區塊的結尾 (請參閱中的底部區塊樹狀結構**[圖 3**)。一旦它這麼做時,它會封鎖 C 廣播網路和其他節點將會看到鏈結的是最長的鏈結。鏈結的長度超過鏈結 B,並停止的採礦及其目前封鎖,讓他們可以開始探勘擴充鏈結 a 上的區塊 C 的新區塊,會看到鏈結 B 上運作的節點一旦發生這種情況,網路會釋放所有區塊 B 中的交易回復到交易集區,讓他們可以取得採礦新回合中。
您可能會想知道所獲得的建立區塊 b: miner 比特幣會發生什麼事永遠不會發行其交易獎金與區塊獎賞。比特幣在網路上,這些獎勵不提供給 miner,直到 100 個區塊已成功探索之上的區塊有問題。
在本文中,我探討了更詳細地一些介紹我前一篇文章中的主題。在一起,兩篇文章涵蓋大部分的基本概念,您必須真正掌握了解區塊鏈如何運作。閱讀後兩者,您應該了解區塊鏈的分散式網路架構;SHA-256 雜湊;PKC 和 ECDSA 的基本概念;節點建構雜湊鏈結和數位交易如何簽章授權數位資產的擁有權; 的傳輸交易集區中的交易如何 await 選取和前先取得插入區塊中,確認驗證特製化的節點會採用特定的共識演算法 (例如 「 採礦者 」 使用證明的工作或 「 forgers 」 使用證明利害關係) 的方式來產生區塊;以及如何在網路上的節點則會將產生的最長鏈結的區塊。如果您想要更深入地鑽研區塊鏈,我強烈建議書籍和影片可用在 Safari 線上叢書 》 (safaribooksonline.com) 以及由 Andreas Antonopoulos 發佈 (antonopoulos.com).
Jonathan Waldman是微軟認證專家軟體工程師,各種產業和軟體保養專家的深度技術暴露的解決方案架構設計師。Waldman 是 Pluralsight 技術小組的成員,而且目前會導致機構和私用磁區的軟體開發專案。他可以在觸達jonathan.waldman@live.com且後面接著的 Twitter: @jwpulse。
感謝下列 Microsoft 技術專家檢閱這篇文章:James McCaffrey