側鏈作為比特幣的擴展和功能擴展機制的想法是一個非常古老的概念。側鏈的一種基本“祖先”思想, 合併開採鏈,甚至可以追溯到中本聰消失之前。
該提議只是由同一組礦工開採兩條完全獨立且不相關的鏈的想法,無法在鏈之間移動任何東西。這 原始側鏈提案 它是在2014 年由許多人在論文發表一周左右後繼續創建Blockstream 的。基本思想是能夠讓硬幣在主比特幣區塊鍊和其他側鏈之間來回移動,當你將硬幣從一條鏈發送到另一條鏈時,使用簡單的支付驗證(SPV) 證明來證明事情是有效的。由於圍繞鏈重組實施的複雜性、盜竊的可能性和採礦中心化的風險,這從未實現(所有這些都可以在第4 節中閱讀 比特幣白皮書)。
側鏈的Peg 機制可以有兩種方式,一種方式和兩種方式。含義應該很明顯——在雙向錨定中,硬幣可以在母鍊和側鏈之間來回移動,而在單向錨定中,它們只能從母鏈移動到側鏈而不能向後移動。目前,在比特幣上實施的雙向側鏈掛鉤的唯一形式是通過聯合共識,這意味著掛鉤由一組受信任的“保管人”保證,他們控制著多簽錢包中掛鉤到側鏈的資金,直到它們被撤回。
然而,人們繼續致力於其他非聯合側鏈釘的設計。在這裡,我將以Ruben Somsen 的Spacechain 提案為例。它是一種使用盲合礦設計的單向掛鉤機制,類似於 保羅·斯托克的。這意味著硬幣只能進入側鏈而永遠不會離開,並且礦工不必運行新軟件來獲得挖掘側鏈的補償(但是,正如我稍後將介紹的那樣,他們可以通過這樣做獲得更多收益)。
空間鏈提案
合併挖掘要求礦工運行比特幣鍊和他們正在挖掘的任何其他鏈的節點,以便為兩條鏈編譯塊並在他們正在挖掘的比特幣塊頭中提交它們。盲目合併挖掘利用了這樣一個事實,即在現實中,比特幣礦工只需要在他們的比特幣區塊中提交另一條鏈的區塊頭,其他人實際上可以不厭其煩地為另一條鏈拼湊區塊。
索姆森為此提出的機制可以利用 ANYPREVOUT (APO) 允許任何人進行公開競爭,以競爭構建下一個側鏈區塊,同時保證每個比特幣主鏈區塊只能提交一個區塊。魯本提議的另一個好處是它不需要特定的軟分叉來實現部署空間鏈的可能性。 Eltoo/ANYPREVOUT 被提議為閃電網絡帶來好處,支持靈活的狀態鏈以及通道工廠。空間鏈只是啟用ANYPREVOUT 鋪平道路的許多事情的另一種可能性。
他的盲目合併挖掘提議的總體思路是,通過使用APO,您可以預定義一長串交易,這些交易將相同的初始UTXO 輸入其中並承諾始終重新創建它。因此,想像一個單一的satoshi UTXO,每個預先創建的交易保證在確認時重新創建相同的UTXO 作為輸出。可以把它想像成一種標記,這個特殊的UTXO 是一個標識符,任何查看比特幣主區塊鏈的人都可以知道,“這是我找到對側鏈X 塊的承諾的地方。” 但是,這留下了一個問題:礦工費。如果必須以相同的數量重新創建該UTXO,則沒有資金來支付費用。
這可以通過利用 SIGHASH_SINGLE (來自輸入的簽名僅對單個輸入和相應的輸出進行簽名)和 SIGHASH_ANYONECANPAY (只要使用SIGHASH_SINGLE 的輸入/輸出保持原樣,人們就可以自由地添加額外的輸入和輸出,而不會使簽名無效,以免使簽名無效)。然後任何人都可以添加輸入並更改輸出以支付交易的礦工費用。
這也是用於提交到側鏈塊的塊頭的機制。與Taproot 通過使用樹的Merkle 根調整普通公鑰來提交不同支出條件的樹的方式相同,任何人都可以使用側鏈塊的塊頭哈希調整普通公鑰。然後,側鏈節點可以通過指向主鏈中交易的指針來顯示和中繼該區塊頭,以證明它實際上是被開采的。從那裡,側鏈節點將進行所有正常驗證,以確保側鏈塊遵循適當的共識規則,並像在主鏈上一樣在側鍊網絡上中繼實際塊。
如果主鏈上用於提交側鏈區塊的交易之一被用於提交無效區塊,甚至完全是垃圾數據,那麼當側鏈節點看到鏈上使用的提交交易時,可能會發生兩種情況:一,無效塊將在側鍊網絡中傳播,當它未能通過驗證檢查時,它將被孤立; 或者二,數據永遠不會被洩露,在這種情況下,下一個側鏈區塊將建立在最後一個實際洩露的區塊之上並提交,未洩露的提交將被忽略。第二種可能性遵循與主鏈相同的最長鏈邏輯,因此即使後來透露了一些東西,它仍然會因為未來的區塊沒有建立在它之上而成為孤兒。
但仍然存在雙重支出的問題。任何擁有用於生成標記UTXO 的私鑰的人都可能雙花任何一個用於提交到側鏈塊的預定義交易,並從那時起使整個集合失效。
這是通過將簽名實際插入到UTXO 本身的鎖定腳本中來解決的。這鎖定了輸入和輸出的簽名,保證在使用它的下一個交易中重新創建標記UTXO。因為該簽名將在使用UTXO 時自動傳遞和檢查,所以不可能簡單地將其替換為另一個並將其花費到不同的目的地。
這留下了最後一個懸而未決的問題。理論上,將多個交易連續提交到一個比特幣區塊中是可能的,這樣大量的側鏈區塊就被礦工確認在一個主鏈區塊中。這可能被濫用來拒絕服務攻擊側鍊網絡。
為了解決這個問題,可以在標記UTXO 腳本中插入一個CHECKSEQUENCEVERIFY (CSV) 相對時間鎖,以保證在單個給定主鏈塊內只能確認使用標記UTXO 的一個交易。
總而言之,它看起來像這樣:
還值得注意的是,可以使用CHECKTEMPLATEVERIFY (CTV) 或根本不進行任何更改來實現此設計的兩種變體。這兩種設計變體只是有次優的權衡。
CTV 變體將使用該功能來提交使用CTV 而不是APO 的交易鏈,其中包括UTXO 鎖定腳本中的簽名。 CTV 承諾花費CTV UTXO 的交易的所有輸出,但它不承諾除自身之外的任何輸入。
這意味著您可以向CTV 交易添加輸入,但不能添加輸出。所以你可以像在APO 設計中一樣帶上自己的費用,但你不能在側鏈區塊頭中添加承諾。
所以,我們這裡需要做的是創建一個完全在CTV 交易鏈之外的交易,用於側鏈承諾創建一個剛好足以支付CTV 交易費用的UTXO(因為你不能在該交易,您添加的輸入的100% 用於費用),並且在準備費用的交易中UTXO 是我們承諾側鏈區塊頭的地方。因此,第一步:創建付費輸出的交易和對側鏈區塊頭的承諾。第二步:我們將費用輸出添加為CTV 交易的輸入,確認後,“挖掘”我們特定的側鏈區塊。此變體如下所示:
下一個變體簡單地使用預簽名交易。它可以在今天部署,但由於腳本可以做的限制,它需要由創建空間鏈的人預先支付所有交易費用。
交易鏈從單個UTXO 開始,並在鏈中創建兩個輸出。第一個輸出是標記UTXO,它表示交易鏈與特定的空間鏈相關,第二個輸出是一個小價值UTXO,任何人都可以公開使用它,允許附加另一個輸入/輸出。第二筆交易是任何人都可以公開承諾成為第一個花費空間鏈交易鏈的第二個輸出的人,並使用它來提交他們的側鏈區塊頭。
在CTV 變體中,必須在二級交易中提交側鏈塊,因為CTV 不允許在花費CTV 鎖定的輸入的交易中添加新輸出。此變體需要使用輔助交易,因為如果您向預簽名鏈添加任何新的輸入或輸出,您將更改交易的TXID 並使之後的所有預簽名交易無效。此變體如下所示:
最後一個變體的一個缺點是,如果預先簽署所有交易以用於側鏈區塊承諾的人沒有刪除用於這樣做的私鑰,他們可以通過在任何時候將當前標記UTXO 加倍來有效地停止鏈。時間。
你有它。這是關於比特幣側鏈設計的最新提議,它可以通過三種不同的方式實現,但明顯需要注意的是,現在可以完成的實現路徑存在要求某人刪除私鑰的問題。
本文只是自2014 年最初設計以來針對比特幣發布的主要側鏈設計提案系列中的第一篇。留意其餘的。
這是Shinobi 的客座帖子。所表達的觀點完全是他們自己的觀點,不一定反映BTC Inc 或比特幣雜誌的觀點。