這是由比特幣領域自學成才的教育家和麵向技術的比特幣播客主持人Shinobi 撰寫的一篇觀點社論。
這次我將分解並討論傳動鏈的工作原理; 它們最初是在2015 年提出的。在迄今為止討論的所有提案中,傳動鍊是最古老、最充實的具體實施細節和設計,記錄在BIP 300 和 301. 這個概念的創造者Paul Sztorc 有幾個主要的設計目標,雖然這並不全面,但這裡有一些:
- 隔離每個側鏈,這樣任何故障或問題只會影響使用它的人。
- 允許側鏈旋轉,而無需為每個側鏈創建新的分叉。
- 通過雙向掛鉤啟用比特幣進出側鏈的傳輸。
- 允許在設計中進行免費實驗,他希望這將淘汰對山寨幣的需求。
整個設計有兩個主要方面,這就是為什麼有兩個獨立的BIP。第一個是掛鉤機制(BIP300),它使雙向掛鉤能夠發揮作用。 Sztorc 設計了一種稱為哈希率託管的東西,用最基本的術語來說,它允許礦工作為一個無定形的群體共同保管所有側鏈中的代幣。第二種是“盲目”合併挖礦方案,其目標是讓比特幣礦工成為共識級別的區塊生產者,而無需驗證側鏈。這兩個部分共同呈現了一種雙向掛鉤機制,以及一種讓比特幣礦工參與挖掘側鏈同時試圖減輕其帶來的中心化風險的方式。
BIP300 規定了新側鏈的提議、新側鏈的激活、捆綁提款的提議、此類提款的批准、實際提款交易的驗證邏輯和存款交易的驗證的邏輯。
在驅動鏈提案下激活新的側鏈與通過礦工信號激活軟分叉的過程非常相似。當然,主要區別在於,它實際上並不是軟分叉——激活驅動鏈共識規則的單個分叉允許礦工在任何時候發出信號以激活新的側鏈 內 驅動鏈共識規則。為了提議激活一個新的側鏈,礦工必須在他們的coinbase 輸出中放置一個OP_RETURN 數據,其中包括該側鏈的唯一標識符、用於存款操作的公鑰、版本數據、人類可讀的描述和軟件客戶端的哈希值以及它的GitHub 歷史(這裡沒有共識強制執行,只是供人類參考的數據)。
當礦工提議激活一條新的側鏈並將所有必要的數據包含在他們的幣庫中時,從主鏈共識的角度來看,它就成為了一種關於是否創建這條新側鏈的“礦工信號”時期。礦工可以使用特殊格式將提案包含在他們的coinbase 輸出中,而其他礦工可以按照第二種格式創建另一個輸出以發出激活信號。一個新的側鏈提案需要在困難時期有90% 的塊發出激活信號,以便確認新的側鏈創建。這創建了peg 機制來啟用側鏈,但側鍊和主鏈之間的交互比這更微妙。
此時,任何人都可以將硬幣與側鏈掛鉤。要與側鏈掛鉤,用戶只需使用自己的輸入和與側鏈餘額相對應的UTXO 創建兩個輸入交易,並使用單個輸出將所有內容分配給側鏈。這保證了側鏈只有一個包含所有鎖定在其中的資金的UTXO。提款由礦工投票處理。主鏈不知道誰在側鏈上擁有什麼,主鏈會認為任何在投票機制內獲得礦工批准的提款都是有效的。正因為如此,提款過程有很長的延遲。從側鏈退出的過程有兩個階段:退出提案(捆綁),然後是退出投票階段。礦工必須在他們的coinbase 交易中創建一個OP_RETURN 輸出,其中包含提議的提款交易的哈希值,以提議提款。然而,這個散列與sighash 類似,標記只提交事務的一部分而不是整個事務。它不會提交代表鎖定在驅動鏈中的資金的輸入UTXO 或將未提取的所有內容返回到特殊側鏈UTXO 的輸出。這是因為在驅動鏈中的任何存款都會創建一個新的UTXO,因此當人們去驗證提款交易的承諾時,它就會失效。
從這裡開始,礦工對退出提案的投票期開始。在提出捆綁包後,礦工可以投票決定是否批准它們。開采的每個區塊都允許該礦工增加一個批准計數器,向上或向下增加一或二以放棄做任何事情。除此之外還有一些特定的限制,因為單個側鏈可能有多個捆綁包——如果礦工選擇為側鏈的提款捆綁包投票“是”(將計數器加一),他們 必須 為與該特定側鏈關聯的每個其他捆綁包投票“否”(將計數器降低一)。
這是為了保證不存在“雙重提款”,即有人在多個捆綁包中輸出,這將使他們在主鏈上支付的比特幣多於他們所欠的比特幣。
另一方面,礦工也可以對每個提議的捆綁包投反對票。這應該為每個人提供一種警報,即驗證這些提款的礦工(確保它們是被提款的側鏈上合法擁有的硬幣)注意到發生了一些無效的事情。請記住,這種設計的一個關鍵點是礦工不必驗證側鏈上的任何內容,因此除非他們選擇這樣做,否則許多礦工可能會支持他們未驗證的捆綁包。此警報功能旨在提醒他們應該驗證捆綁包以確保不會發生欺詐性提款。
一旦捆綁包達到所需的閾值(13,150 個區塊,或大約90 天),實際處理提款的交易就會生效並可以得到確認。但是,如果礦工批准從側鏈竊取資金的欺詐性提款,人們會怎麼做? Sztorc 的提議是進行用戶激活的軟分叉(UASF),以使無效的掛鉤交易無效。這給主鏈的共識帶來了巨大的風險。 2017 年的UASF 是一個高風險舉措,幾乎沒有成功,比特幣比現在小得多。比特幣越大,協調此類行動就越困難。
如果你從 關於空間鏈的文章,該設計基於盲合併挖掘(BMM)。 Ruben Somsen 的BMM 設計實際上是第二個變體,第一個是Sztorc 在BIP301 中的設計。驅動鏈中的BMM 規範由兩條消息組成:請求消息和接受消息。兩者分別通過主鏈上的特殊交易類型和礦工coinbase 交易中的特殊輸出進行協調。
請求交易由創建側鏈塊的人構建。 BMM 的全部意義在於,這個人可以是不挖礦的人,所以請求交易允許他們向礦工付款以確認他們提議的側鏈區塊。側鏈區塊提案構造了一個交易,其中包括側鏈區塊的哈希值、創建時分配給側鏈的ID 以及前一個主鏈區塊頭的最後四個字節。有三個額外的共識規則適用於這些類型的交易。首先,請求交易是無效的,除非該區塊的coinbase 交易中也有匹配的接受輸出。這是為了保證礦工在不接受和挖掘側鏈區塊的情況下不能從請求中收取費用。其次,對於每條側鏈,主鏈區塊中只允許包含一個請求交易。這是為了確保每個主鏈塊實際上只能從任何側鏈中開採一個塊。最後,前一個主鏈塊的最後四個字節必須匹配。這確保了請求僅在下一個塊中被挖掘有效,並且此類交易不能在以後被挖掘並在其他人的塊被挖掘後從側鏈塊提議者那裡竊取資金。
接受輸出非常簡單:消息頭數據和側鏈塊的哈希。如果礦工自己運行驅動鏈節點,他們可以簡單地忽略請求交易,並始終在他們的硬幣庫中包含他們自己的接受輸出來挖掘他們自己的側鏈塊。總之,這兩個方面允許礦工自己操作側鏈節點,或者由另一個非礦工來操作並支付礦工開採他們的區塊。這個想法是,如果礦工自己不運行側鏈並消耗額外的驗證成本,那麼其他人可以為他們做這件事。如果試圖在側鏈上賺取費用的非礦工存在競爭,他們可能會繼續競標他們願意在請求交易中支付給礦工的費用,直到它代表他們賺取的大部分費用,而非礦工只保留一小部分利潤,其餘的支付給礦工。
這就是傳動鏈功能背後的機制。接下來是聯合側鏈,然後是每個設計可能具有的所有負面和缺點的細分。
這是Shinobi 的客座帖子。所表達的觀點完全是他們自己的,不一定反映BTC Inc 或比特幣雜誌的觀點。