BIP300-Hashrate Escrows 算力托管
作者:Paul Sztorc & CryptAxe
譯者:Jack3.14
來源:https://github.com/bitcoin/BIPs/blob/master/BIP-0301.mediawiki
BIP: 300
Layer: Consensus (soft fork)
Title: Hashrate Escrows (Consensus layer)
Author: Paul Sztorc
CryptAxe
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/BIPs/wiki/Comments:BIP-0300
Status: Draft
Type: Standards Track
Created: 2017–08–14
License: BSD-2-Clause
Post-History:https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-May/014364.html
摘要
在BIP300中,txns不通過加密密鑰籤名。相反,隨着時間的推移,它們由hashpower“籤名”。就像一個大的多重籤名,13150-of-26300,其中每個塊都是一個新的“籤名”。
BIP300強調緩慢、透明、可審計的交易,誠實的用戶很容易做對,不誠實的用戶很難濫用。BIP300的主要設計目標是分區 — — 如果用戶愿意(或完全忽略BIP300),他們可以安全地忽略BIP300 txns。
查看本網站了解更多信息。
動機
正如裏德·霍夫曼在2014年寫道的那樣:“側鏈允許开發人員在不實際修改比特幣核心代碼的情況下為比特幣世界添加特性和功能…因此,創新可以更快、更靈活和分布式的方式發生,而不會失去單一貨幣共同平臺的協同作用。”
如今,Namecoin、Monero、ZCash和Sia等硬幣提供了比特幣使用者無法訪問的功能 — — 除非出售他們的BTC以投資於競爭對手的貨幣單位。根據coinmarketcap.com,現在BTC協議之外的價值比其內部更大。根據cryptofees.info,BTC協議之外支付的txn費用是其內部的15倍。
比特幣的軟件改進依賴於开發者的共識 — — 如果一個好主意有一點點爭議,BTC就會把它傳遞出去。开發很慢:我們現在平均每5年开發一個主要功能。
側鏈允許競爭性的“仁慈獨裁者”隨時創建新的側鏈。這些獨裁者只對他們的用戶負責,而且(至關重要的)他們受到保護,免受競爭獨裁者的侵害。用戶可以在這些不同的軟件之間移動他們自己認為合適的BTC。
BTC可以復制每一種有用的技術,一旦它被發明出來;scamcoin失去了它們的正當性,變得過時了;社區可以支持創造力,知道Layer1受到保護,免受有害變化的影響。
規格說明
概述
BIP300允許六個新的區塊鏈消息(這些具有共識意義):
M1. 提出新的側鏈
M2. 確認字符提案
M3. 提案包
M4. 確認字符包
M5. 存款 — — BTC從主鏈到側鏈的轉移
M6. 取款 — — BTC從側鏈到主鏈的轉移
節點將這些消息組織到兩個緩存中:
D1. 側鏈列表,跟蹤256個哈希率托管(托管是側鏈所在的插槽)。
D2. 提款列表,跟蹤提款捆綁包(離开側鏈的 Coins )。
D1(側鏈列表)
D1是活躍的側鏈的列表。D1通過M1和M2更新。
D2(提款名單)
D2列出了提款嘗試。如果這些嘗試成功,他們將“從”一個鎖定BIP300的UTXO向提款用戶控制的新UTXO支付 coins 。每次嘗試都會支付許多用戶,因此我們將這些提款嘗試稱為“捆綁包”。
D2由M3、M4、M5和M6驅動。這些消息遵循以下原則:
捆綁包有一個規範的順序(先到先得)。
從一個塊到下一個塊,每個“剩余塊”字段減少1。
當“剩余塊”達到零時,捆綁包被移除。
從一個塊到下一個塊,ACK中的值可以增加或減少,最多為1(參見M4)。
如果Bundle的“ACK”達到13150或更高,則它“成功”並且其對應的M6消息可以包含在一個塊中。
如果Bundle的M6被支付,它也會被移除。
如果捆綁包不可能成功(13500-”ACK”>”Block Remaining”),則立即將其刪除。
六個新的BIP300消息
首先,新的側鏈是如何創建的?
它們首先被-Proposed/提出(使用M1),然後被-Acked/使用(使用M2)。這個過程類似於BIP9軟分叉激活。
M1 — 提出側鏈
M1是一個coinbase OP返回輸出,包含以下內容:
1字節-OP_RETURN(0x6a)
4字節-消息頭(0xD5E0C4AF)
N-byte-側鏈的序列化
1字節nSidechain
4字節nVersion
x字節strKeyID
x字節strPrivate Key
x字節腳本PubKey
x字節標題
x字節描述
32字節hashID1
20字節hashID2
例子
M2 — 確認側鏈請求
M2是一個coinbase OP返回輸出,包含以下內容:
1字節-OP_RETURN(0x6a)
4字節-消息頭(0xD6E1C5BF)
32字節-sha256D側鏈序列化的哈希
注釋
新的M1/M2驗證規則是:
任何礦工都可以隨時提出新的側鏈(M1)。這個過程類似於BIP 9軟分叉激活:網絡必須看到格式正確的M1,然後在接下來的2016個區塊的90%中“確認”側鏈(M2)。
BIP300只有256個側鏈插槽。如果全部使用,則可以“覆蓋”側鏈。這需要更多的M2 ACK — — 以下26300個區塊中的50%必須包含M2。覆蓋的可能性不會改變BIP300的安全假設(因為我們已經假設側鏈容易受到礦工的攻擊,每13150個區塊發生1次災難)。
提取硬幣注意事項
BIP300提款(“M6”)非常重要。
要使M6有效,它必須首先由一個M3“准備”,然後是13,150+M4。M3和M4大約是“捆綁包”。
什么是捆綁包?
側鏈提款採用“Bundles。捆綁”的形式 — — 之所以命名,是因為它們將許多單獨的提款請求“捆綁”到一個罕見的第1層事務中。
側鏈全節點將提款請求聚合成一個大集合。側鏈計算M6的樣子,以支付所有這些提款請求。最後,側鏈計算這個M6的哈希值。這個32字節的哈希標識Bundle。
這個32字節的哈希是礦工將在3–6個月內慢慢ACKing的,而不是M6本身(當然也不是任何側鏈數據)。
捆綁包要么支付所有提款(通過M6),要么失敗(並且不支付任何費用)。
捆綁哈希=M6的盲TxID
Bundle哈希是靜態的,因為它被ACKed。不幸的是,M6 TxID將不斷變化 — — 隨着用戶存入側鏈,M6的輸入將發生變化。
為了解決這個問題,我們做了一些概念上類似於AnyPrevOut(BIP 118)的事情。我們將“盲TxID”定義為對txn進行散列的一種方式,其中一些字節首先用零覆蓋。這些是:第一個輸入和第一個輸出。通過前者,側鏈可以接受存款,即使我們正在ack一個稍後從中支出的TxID。通過後者,我們可以強制將所有未提取的硬幣返回給側鏈(即使我們還不知道這將是多少硬幣)。
M3 — 提案包 Bundle(s)
M3是一個coinbase OP返回輸出,包含以下內容:
1字節-OP_RETURN(0x6a)
4字節-承諾標頭(0xD45AA943)
32字節-Bundle哈希,用於填充新的D2條目
與M3相關的新驗證規則是:
如果網絡檢測到格式正確的M3,它必須在下一個塊中向D2添加一個條目。起始“剩余塊”值為26,299。起始ACK計數為1。
每個塊每個側鏈只能包含一個M3。
一旦Bundle在D2中,我們如何給它足夠的ACK來使其有效?
M4 — 確認包 Bundle(s)
M4是一個coinbase OP返回輸出,包含以下內容:
1字節-OP_RETURN(0x6a)
4字節-承諾標頭(0xD77D1776)
1字節-版本
n-byte-描述每個側鏈的“上投票”捆綁選擇的向量。
版本0x01每個側鏈使用一個字節,適用於大多數情況。版本0x02每個側鏈使用兩個字節,適用於至少一個側鏈同時進行超過256個不同的提款包的異常情況。其他有趣的版本是可能的:0x03可能會說“完全按照前一個塊中的操作執行”(這可能總共消耗固定的6個字節,無論有多少側鏈)。0x04可能會說“支持所有明顯領先的人”(這也只需要6個字節),等等。
如果側鏈沒有掛起的包,則在創建和解析M4時跳過它。
贊成向量將把“abstain/棄權”編碼為0xFF(或0xFFFF);它將把“alarm/警報”編碼為0xFE(或0xFFFE)。否則,它只是指示列表中的哪個提款包是要“贊成”的。例如,如果有兩個側鏈,我們希望對側鏈#1上的第7個包和側鏈#2上的第4個包進行贊成,那么向量將是0x0704。
M4消息將無效(並使塊無效),如果它嘗試對一個不存在的Bundle進行投票(例如,嘗試對側鏈#2上的第7個Bundle進行投票,而側鏈#2只有三個Bundle)。如果根本沒有Bundles(沒有人試圖從任何側鏈中取款),那么存在於coinbase中的任何M4消息都將無效。如果M4不存在於一個塊中,那么它被視為“abstain/棄權”。
ACKed提款將為其確認字符字段獲得一分。因此,任何Bundle的確認字符計數器只能更改(-1,0,+1)。
在側鏈組中,對一個Bundle(”+1")投贊成票要求您對該組中的所有其他Bundle投反對票。但是,最小確認字符計數器為零。雖然一次只能對一個Bundle投贊成票;整個組可以同時保持不變(“abstain/棄權”),也可以一次全部投反對票(“alarm/警報”)。
最後,我們描述了存款和取款。
M5-將BTC存入側鏈
M5和M6都是常規比特幣txns。當它們選擇一種特殊的BIP300 CTIP UTXO作為其輸入時,它們與常規txns(non-M5 non-M6 txns)區分开來(參見D1)。
所有側鏈的 Coins 都存儲在一個UTXO中,稱為“CTIP”。每次存款或取款時,CTIP都會發生變化。每次存款/取款都會選擇側鏈CTIP,並生成一個新的CTIP。(存款/取款永遠不會導致UTXO膨脹。)當前的CTIP緩存在D1中(上圖)。
如果從CTIP到CTIP交易中的 Coins 數量上升,(即,如果用戶正在添加 Coins ),則txn被視為存款(M5)。否則它被視為提款(M6)。見這裏。
就主鏈共識而言,側鏈的所有存款始終有效。
M6 — 從側鏈中提取BTC
最後,我們來到了關鍵問題:用戶可以從側鏈中取出他們的錢。
首先,M6必須遵守與M5相同的CTIP規則(見上文)。
其次,如果M6的盲TxID與“批准的”Bundle哈希(即確認字符分數為13150+的哈希)匹配,則M6僅對包含在區塊中有效。換句話說,在3個多月(13150塊)儀式之後,M6只能包含在一個區塊中。
第三,M6必須滿足兩個會計准則,以免無效:
“將零錢返還給托管” — — 第一個輸出TxOut0必須返還給側鏈的BIP300腳本。換句話說,所有未提取的硬幣都必須返還給側鏈。
“沒有傳統的txn費用” — — 對於這個txn,所有輸入的總和必須等於所有輸出的總和。沒有傳統的tx費用是可能的。(當然,礦工仍然有txn費用:它是通過捆綁包中的OP TRUE輸出支付的。)我們希望提款者在捆綁包“內部”設置費用,並像其他事情一樣在3個月內確認字符。
向後兼容
作為軟分叉,舊軟件將繼續運行而無需修改。未升級的節點將看到許多他們不理解的現象 — — 帶有non-txn 數據的coinbase txn,任何人都可以使用的UTXO中的價值,一次累積數月,然後隨機金額以單次、不頻繁的爆發離开這些UTXO。然而,這些現象不會影響他們,也不會影響他們收到的錢的有效性。
(作為一個很好的獎勵,請注意側鏈本身繼承了對硬分叉的抵抗。保證所有不同側鏈節點始終報告相同Bundle的唯一方法是通過自身的軟分叉升級側鏈。)
部署
此BIP將通過UASF-style 的塊高度激活進行部署。塊高度TBD。
參考實施
見:https://github.com/drivechain-project/mainchain
另外,有關興趣,請參閱此處的示例側鏈:https://github.com/drivechain-project/sidechains/tree/testchain
參考文獻
https://github.com/drivechain-project/mainchain https://github.com/drivechain-project/sidechains/tree/testchain看http://www.drivechain.info/literature/index.html
貢獻者
感謝所有為討論做出貢獻的人,特別是:ZmnSCPxj, Adam Back, Peter Todd, Dan Anderson, Sergio Demian Lerner, Chris Stewart, Matt Corallo, Sjors Provoost, Tier Nolan, Erik Aronesty, Jason Dreyzehner, Joe Miyamoto, Ben Goldhaber.
版權
該BIP根據BSD2條款許可證獲得許可。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC
7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC一個引...
悅盈:比特幣68000的空完美落地反彈繼續看跌 以太坊破前高看回撤
一個人的自律中,藏着無限的可能性,你自律的程度,決定着你人生的高度。 人生沒有近路可走,但你走的每...