作者:Jude Nelson (Stacks基金會首席科學家)

對Stacks的幾個常見誤解,說它是一個側鏈、一個合併挖礦鏈、一個權益證明鍊或layer-2系統。這些都不對。 Stacks區塊鏈layer-1區塊鏈,它使用一種被稱為傳輸證明(PoX) 的新穎獨特的挖礦協議。 PoX區塊鏈與另一個區塊鏈(此處為BTC)並行運行,後者用作其區塊頭部的可靠廣播媒體。 Stacks礦工使用存儲的元數據執行自己的領袖選舉,實現獨立於BTC的中本共識變體,方法是選擇一個獲勝區塊,其概率與BTC鏈上記錄該區塊花費的BTC成比例。

是什麼讓Stacks與其他方法不同?  

- Stacks不是一個PoS鏈。產生區塊的行為需要外在支出- 它與在PoS中必需擁有的原生代幣無關。在Stacks鏈中產生區塊的唯一方法是將BTC轉移到預先確定的BTC地址隨機列表中。此外,Stacks區塊鏈可以進行分叉,並且存在一個協議,可以根據質量對分叉進行排序,而與礦工和他們持有的代幣無關。這兩個屬性進一步將其與PoS鏈區分開來,PoS 鏈無法分叉,因為沒有信任第3方判定特定分叉有效去識別規範分叉。分叉的能力使Stacks區塊鏈能夠在會導致PoS鏈崩潰的故障模式下倖存下來。  

- Stacks不是側鏈,主要有兩個原因。首先,產生所有Stacks塊的歷史記錄都記錄到BTC中。這意味著產生私有Stacks分叉的行為至少與重組BTC鏈一樣困難。這反過來又使得依賴於創建私有分叉的鏈上的攻擊(例如私挖和雙花)更難以盈利,因為所有誠實的參與者都可以在攻擊發生之前看到攻擊並有機會採取對策。側鏈沒有提供這樣的安全優勢。其次,Stacks區塊鏈有自己的代幣;它不與BTC相掛鉤。這意味著Stacks區塊鏈規範分叉的安全性由其整個代幣經濟的價值支撐,而側鏈規範分叉的安全性只有通過任何系統特定的措施來支撐,這些措施激勵驗證方誠實地生成塊,或者BTC礦工願意處理釘住的請求(以較弱的保證為準)。  

- Stacks不是BTC的layer-2系統- 它本身就是一個主權系統。 Stacks區塊鏈狀態與BTC不同,完全由Stacks節點維護。 Stacks交易與BTC交易是分開的。像閃電網絡這樣的Layer-2系統旨在幫助擴展BTC支付交易,而Stacks旨在通過智能合約為BTC帶來新的用例。 Stacks並非被設計為BTC layer-2可擴展性解決方案。  

- Stacks不是一個合併挖礦鏈。 Stacks鏈上唯一的區塊生產者是Stacks礦工。 BTC礦工不參與Stacks區塊驗證,也不獲得Stacks區塊獎勵。此外,Stacks不是一個不可視合併挖礦鏈,因為STX區塊獲勝者是公開的和隨機選擇的(而不是出價最高的獲勝),並且它的代幣是根據一個獨立於礦主承諾度或BTC轉讓度的時間表鑄造的(而不是只通過BTC的單向掛鉤鑄造)。這確保了Stacks能夠在沒有BTC礦工選擇加入的情況下取得進展,並確保Stacks礦工得到足夠的補償,以保持系統活躍,而不管交易量如何。  

Stacks僅將BTC區塊鏈用作可靠的存儲和廣播介質,用於記錄曾經生成的所有Stacks塊的集合,以及它們之間的父/子鏈接。系統的狀態以BTC結算- 創建一個新的Stacks區塊的行為需要發送一個格式良好的BTC交易,該交易記錄一個Stacks區塊的哈希值及其它附加到區塊鏈的位置。在BTC上建立系統賦予Stacks在其他區塊鏈中看不到的新穎安全屬性- 它利用BTC的安全性來保證所有Stacks分叉都是公開的,並幫助引導Stacks節點識別規範的Stacks分叉並找到他們還沒有下載的Stacks塊。  

概述 

Stacks 2.0是第一個使用傳輸證明(PoX) 來挖礦的區塊鏈。 PoX是一種新穎的挖礦協議,通過將另一個區塊鏈上的另一種加密貨幣傳輸到預定的地址列表來選擇區塊生產者。在PoX 的Stacks 2.0執行中,它將BTC傳輸到BTC地址,這些地址由STX代幣持有者定期設置。  

PoX挖礦是一種單領袖挖礦,和PoW一樣。每個區塊僅有一個礦工產出,每個礦工可以選擇任何現有區塊作為其區塊的父區塊。由此產生具有以下屬性的區塊鏈:  

- 開放式挖礦。生產區塊的方式與將另一個加密貨幣(BTC) 傳輸給STX持有者相關。成為區塊生產者的唯一准入屏障是獲取和使用BTC。礦工不需要持有STX(不像PoS),礦工也不需要配備專門的硬件(不像PoW)。  

- 分叉是一種故障恢復機制。因為任何人都可以僅通過花費BTC成為礦工,所以區塊鏈可能會分叉。礦工在經濟上受到激勵,在一個規範的鏈分叉上構建網絡,但這不是必需的。這是一個理想的屬性,因為這意味著誠實的礦工可以在災難性的網絡劃分或不誠實的挖礦活動期間恢復鏈。 Stacks區塊鍊為節點提供了一種無需諮詢其他節點即可獨立識別規範分叉的方法。這個分叉就是擁有最多塊的Stacks分叉,因為這代表了礦工花費最多時間工作的分叉,用BTC塊的數量來衡量。  

- 所有分叉上的區塊產生歷史都是公開的。通過基於在另一個區塊鏈(BTC)上發送交易來選擇礦工,所有礦工的活動都在所有的Stacks分叉中公開。這意味著所有對BTC鏈具有相同視野的Stacks節點將了解所有存在的Stacks分叉;改變這種視野的行為就是改變BTC鏈本身狀態的行為。

那麼,這些屬性將Stacks區塊鏈置於類似區塊鏈中的什麼位置?  

Stacks區塊是通過在分叉上挖礦產生的

成為Stacks鏈上礦工的唯一障礙就是獲取和花費BTC。此外,礦工甚至不需要擁有鏈狀態的完整副本就可以開始挖礦- 他們可以自由選擇在任何現有的Stacks區塊上來構建他們的區塊,這允許了區塊鏈分叉。  

分叉是Stacks中的故障恢復機制,就像它們在PoW區塊鏈中一樣。如果發生系統性網絡或礦工故障,甚至系統性區塊丟失,其他節點可以隨時成為礦工並繼續生產新區塊。所有Stacks區塊的歷史都被編碼在BTC鏈中這一事實意味著所有節點都可以枚舉所有曾經存在過的Stacks區塊,並確定哪些Stacks區塊在其本地鏈狀態中丟失。  

由於挖礦是一個單一領袖過程,因此生產區塊不需要法定人數。為了挖一個塊,Stacks礦工在BTC鏈上提交“區塊提交”交易,在BTC區塊內的所有競爭“區塊提交”中,將通過加密抽籤過程來選擇其中一個。獲勝的礦工有權在他們選擇的分叉上將他們的區塊加到其他誠實節點的鏈狀態中。  

為了選擇獲勝者,礦工通過他們的BTC區塊提交交易共同維護共享隨機數生成器的狀態。他們使用可驗證隨機函數(VRF) 來確定地隨機抽取每次抽籤的獲勝礦工,並證明抽樣區塊是根據協議指定的隨機數生成器選擇的。贏得一個區塊的概率是每個礦工提交的BTC比例的函數- 所有礦工都提交了BTC,但是如果一個礦工比其他礦工提交的更多,那麼他獲勝的機會就更高。這在大多數情況下引用了PoW區塊生產的激勵模型:所有礦工以接近預期獎勵率(STX) 的速度消耗資源(BTC)。  

每個礦工都被激勵在Stacks規範分叉之上構建自己的區塊,因為這個分叉是其他礦工(以及用戶和交易所)花費最多時間競爭構建的地方。規範分叉始終是附加連續塊數量最長的分叉。挖礦過程和鏈構建過程的詳細描述可以在SIP-001SIP-007中找到。  

規範分叉可以由每個節點獨立識別- 只要Stacks節點能夠識別規範BTC分叉,它就可以識別規規範Stacks分叉。為此,用戶運行BTC節點(或連接到受信任的節點)以同步BTC鏈狀態。 Stacks節點從每個BTC塊中提取出區塊提交交易,運行加密抽籤來確定每個BTC塊中選擇了哪個Stacks塊,然後找到贏得Stacks塊最多的Stacks分叉。與PoS不同,節點不需要信任第3方來告訴他們哪個分叉是規範的- 節點通過首先確定規範BTC分叉來獨立確定規範Stacks分叉,並且它通過選擇具有最多累積工作量證明的BTC分叉來確定規範BTC分叉。  

用戶和交易所只接受規範分叉上的交易是有效的,並且他們只認為區塊獎勵在得到充分確認的情況下是可以使用的。這使得礦工需要在規範分叉上進行構建,因為獲取和出售區塊獎勵將使他們能夠收回他們支出的BTC。反過來,這又激勵所有單一領袖區塊鏈(包括Stacks和BTC)中的礦工廣泛複製他們的區塊,並採取措施使他們對鏈狀態的視角與他們的同行礦工保持同步。這還激勵他們建立在彼此的區塊之上,而不是挖採相互競爭的分叉。這些複製區塊和建立在規範鏈之上的雙重需求都確保礦工努力保持鏈的活躍性和安全性- 規範鏈上的構建塊保持鏈處理交易,並阻止礦工構建分叉以改變已經確認的塊。  

由於這三個特性-礦工只需要花費BTC來挖礦,Stack區塊鏈可以分叉,並且存在一種計算規範分叉的方法- Stacks區塊鏈不是PoS區塊鏈。沒有任何東西被抵押或削減;礦工花費資源(BTC)換取代幣(STX),其消耗率隨著時間的推移接近所獲得代幣的預期價值;每個鏈分叉代表資源的累計支出(BTC和時間),這作為經濟活動量的代理指標。

Stacks區塊鏈實現了中本聰共識的變體 

在Stacks區塊鏈中,活躍度和安全性是通過激勵礦工用他們確認的所有區塊充斥網絡並建立在彼此的區塊上來獲得的。與PoW鏈一樣, Stacks鏈實現了一種形式的中本聰共識:對於一個區塊是否在規範分叉中被接受,沒有達成不可逆轉的協議; 相反,隨著上面構建的區塊越來越多,改變某塊是否被接受變得越來越難。這在實踐中是有效的,因為對於大多數交易,只有很小的確認深度,在這個深度上,惡意礦工嘗試恢復交易塊的成本比簡單地接受它現在是規範的成本更高。  

選擇在Stacks中實現中本聰共識是為了在不利的網絡條件下賦予鏈高度的彈性。例如,只要惡意礦工永遠不會超過誠實礦工,PoX鏈就可以從安全故障(51%攻擊)中恢復。再舉一個例子,PoX鏈可以從長期存在的網絡分區甚至系統性塊丟失中恢復- 最長的分叉將成為規範分叉,丟失的塊將被“分叉”以從之前的交易中產生新的規範鏈。事實上,多虧中本聰共識,Stacks鏈已經通過在運行早期分叉錯誤引起的網絡分區和塊丟失來自動恢復。如果Stacks是一個PoS鏈,它就會因為仲裁失敗而崩潰。  

PoX的中本聰共識與PoW的中本聰共識的不同之處在於,它在兩種額外的PoX特定形式的降級挖礦下具有彈性:折扣挖礦和外部礦工壟斷。在這些挖礦模式中,鏈的安全性和活性得以保留,但我們將它們歸類為“退化”,因為它們仍然不利於鏈的整體健康。 PoX的中本聰共識與PoW的中本聰共識的其他降級挖礦形式相同,例如私挖、區塊扣留和51%攻擊,但這些降級形式的破壞程度在PoX中被減輕,因為所有礦工活動是公開的。  

當PoX礦工使用他們累積的區塊獎勵從其他礦工(包括他們自己)接收PoX代幣轉移時,就會發生折扣挖礦。隨著時間的推移,這將使折扣礦工在競爭中勝過非折扣礦工,因為他們的真實支出低於他們在鏈上的支出。然而,這種退化的挖礦形式仍然以(BTC)交易費的形式存在持續的資本成本,這會阻止系統完全崩潰到PoS。具體到Stacks,少數STX代幣持有者有權投票迫使PoX礦工銷毀BTC而不是轉移BTC,如果發現礦工系統性地進行折扣挖礦,從而消除優勢。因為這樣做的好處受到警惕的STX持有者的限制,而且由於折扣採礦要求礦工長期放棄出售他們的STX以收回他們的BTC支出,所以這在實踐中不太可能成為問題。此外,除了將它們鎖定用於PoX之外,STX的一系列蓬勃發展的用例的存在進一步使折扣挖礦成為利潤較低且風險較高的STX使用方式。

 

當BTC礦工成為Stacks礦工並繼續審查競爭性區塊提交交易以贏得STX代幣時,就會發生外部礦工壟斷。如果完全實現,這種退化的挖礦形式相當於礦工100%參與的合併挖礦(迄今為止,合併挖礦鏈從未實現過這一點)。它仍然不會降級為PoS,因為新的BTC礦工可以繼續加入BTC網絡,消費電力,並繼續開採BTC和STX(即STX生產的實際手段將成為消費電力而不是BTC)。具體到Stacks,如果BTC礦工壟斷發生在BTC礦工的參與率低於100%的情況下,那麼STX持有者有權投票支持網絡升級,這將在預定的塊高度殺死當前的Stacks鏈,並將其替換為可能會懲罰礦工壟斷的不兼容版本(例如,通過要求STX 礦工根據最後一個BTC區塊的總交易費用來代替燃燒最低數量的BTC)。因為存在投票升級鏈以使用新的挖礦規則的選項,並且因為壟斷行為是破壞BTC作為抗審查貨幣的聲譽的行為,所以預計維持這種退化的挖礦形式的行為將是不利於BTC礦工的利潤。

 

除了這兩種新的降級挖礦形式外,PoX的中本聰共識在與PoW相同的原則和限制下運作。投入更多資源(BTC)的礦工贏得區塊的機會更高。所有礦工都提交資源,但只有一個人會贏得給定的區塊競賽。礦工可以選擇從哪個區塊挖出,且機制鼓勵(但不要求)礦工及時復制他們的區塊並在規範分叉上進行構建。即使這些退化的挖礦模式在實踐中出現,Stacks區塊鏈也將繼續保持活力和安全。

安全性取決於STX的價值和挖掘它所花費的時間

僅在規範的Stacks鏈分叉上導致安全故障(即通過重組造成的雙花)有多難?任何人都可以通過花費BTC成為礦工,因此在不失一般性的情況下,恢復規範鏈上的最後一個區塊至少與花費比其他礦工為該區塊加起來的BTC多的BTC一樣困難。因為每個BTC區塊最多選擇一個Stacks區塊,所以將規範Stacks鏈重組回N個區塊的行為是贏得至少N + 1個區塊的行為,這些區塊由N個區塊深的共同祖先塊構建。這是需要進行重組的BTC區塊數量的下限- 在實踐中,誠實的礦工將繼續在規範鏈上工作,並將贏得他們自己的一些Stacks塊,這反過來又增加了重新排序礦工必須贏得的Stacks塊的數量。  

對N 個塊進行重組的成本是多少?這取決於STX 相對於BTC 的價值——STX 的價值越高,BTC 誠實礦工致力於挖礦的數量就越多(這在實踐中得到了證實),因此重組礦工必須投入的BTC 也就越多。因此,重組的成本取決於STX 的價值。  

這類似於PoW 區塊鏈的經濟安全性。就像在PoW中一樣,Stacks鏈的每個分叉都有自己獨立的“安全預算” - 攻擊者必須花費安全預算才能進行重組,而安全預算是區塊獎勵的函數。在PoX中,唯一的區別是礦工使用另一個區塊鏈的代幣(在Stacks的案例中為BTC)而不是能源。因此,Stacks不能是側鏈、驅動鍊或合併挖礦鏈,因為這些其他系統的安全預算都不是其代幣價值的函數。側鏈、驅動鍊和合併開採鏈的安全都依賴於外部礦工,因為它們的安全部分是由外部礦工驗證其區塊來保證的。這些系統的責任是讓外部礦工願意這樣做,在側鏈、驅動鍊和不可視合併開採鏈的情況下,還有一個額外的責任來鼓勵他們的節點完全挖掘區塊(因為他們這樣做不會獲得鏈上獎勵)。相比之下,BTC礦工既不會幫助也不會阻止PoX中的重組- 他們只記錄所有Stacks分叉的歷史。  

PoX在PoW之上提供了兩個額外的、獨特的安全屬性。首先,無論重組礦工可以投入多少BTC,執行重組的行為都將非常耗時。除非攻擊者可以通過快速產生更好的BTC分叉來攻擊BTC鏈本身,否則重組礦工必須至少在N + 1個BTC區塊內承受攻擊。這讓誠實的礦工和用戶有足夠的時間注意到重組嘗試並做出反應。

 

其次,所有Stacks分叉中出塊的歷史都嵌入在BTC中。這允許系統利用BTC的安全預算,以確保所有分叉都是公開的。這是因為產生隱藏的Stacks分叉的行為,其中分叉的區塊哈希值不為誠實的礦工所知,是產生隱藏的規範BTC分叉的行為。因此,製造一個隱藏的Stacks分叉的行為至少與重組BTC鏈一樣困難。 PoX鏈利用這一特性不是為了防止重組,而是為了使重組無利可圖

 

通過將區塊錨定到現有區塊鏈,PoX鏈迫使重組在公開場合發生,從而在發生時向所有誠實的網絡參與者發出預警。誠實的礦工、用戶和交易所將看到現有區塊鏈上重組嘗試的PoX 交易,並相應地調整他們的行為:誠實的礦工將增加他們的晉標,用戶和交易所將需要更多的交易確認。這使得在進行重組同時賺取利潤的行為更具挑戰性,因為惡意重組- 比如私挖和雙花- 依靠保密才能有效運作。具體到Stacks,礦工還有需要挖掘兩個區塊的“預熱”期,在此期間他們必須在目標提交水平上花費BTC,但不會贏得任何Stacks區塊。因此,高預算的重組嘗試不僅代價高昂,而且還會在損失發生之前提醒網絡中的其他人。

Stacks回收比特幣的能量消耗以提高安全性 

PoX中的挖礦過程與PoW密切相關。 PoX和PoW 都是允許區塊鏈分叉的單一領袖挖礦算法,並且都通過激勵礦工發佈區塊並在規範鏈上構建來提供活躍度和安全性。兩者的主要區別在於PoX不需要能量消耗;相反,它“回收”了生產PoW鏈代幣所需的能量。運行Stacks本身消耗的能量可以忽略不計;比特幣稀缺代幣的支出擴展了比特幣的能源使用,以確保兩條鏈的安全。  

將所有Stacks區塊的哈希值和父/子鏈接記錄到比特幣鏈上,礦工不僅可以計算規範分叉,還可以識別丟失的區塊。特別是,Stacks節點可以在獲得區塊之前學習規範分叉的區塊頭哈希。這使得進行eclipse攻擊變得困難——節點會注意到一串不可用的塊,如果它們碰巧落在從比特幣計算的規範分叉上,它將能夠推斷出eclipse攻擊正在進行並警告它的用戶

Stacks區塊鏈狀態有自主主權

僅僅因為Stacks區塊鏈將區塊生產的歷史存儲在另一個區塊鏈中,並不意味著其他區塊鏈了解Stacks。比特幣礦工在設計上與Stacks無關- 他們對待Stacks礦工的區塊提交交易就像任何其他比特幣交易一樣。雖然Stacks區塊鏈允許將某些Stacks交易嵌入到比特幣交易中(例如PoX鎖定和代幣傳輸),但比特幣礦工對待這些交易就像對待任何其他比特幣交易一樣。 Stacks節點僅使用比特幣區塊鏈作為發現區塊數據的共享廣播媒體,這就是所有給比特幣礦工提供的報酬。  

STX代幣和合約狀態是使用Stacks節點而非比特幣節點已知和應用的規則來挖掘和驗證的。通過對每個塊進行散列,並通過OP_RETURN 輸出將散列寫入比特幣區塊鏈,鏈的狀態在每個塊提交交易中以比特幣結算。 Stacks區塊鏈節點和礦工,而不是比特幣節點和礦工,管理Stacks狀態並維護鏈狀態副本。比特幣節點是不在乎的- 它們扮演的唯一角色是挖掘區塊提交交易,就像這些交易是任何其他比特幣交易一樣。

雖然Stacks的Clarity智能合約可以驗證任意比特幣交易並確定它們在比特幣鏈中的哪個位置被挖採,但首先必須有人將它們轉發到Clarity 合約中。類似地,雖然比特幣交易的scriptSig執行可能依賴於Stacks區塊鏈中存儲的狀態(例如HTLC 哈希原像),但有人必須明確地發送帶有來自Clarity 合約的狀態的比特幣交易。這就是Stacks區塊鏈與Layer2系統的區別- 它不是為擴展比特幣的交易容量而設計的,甚至不代表比特幣的狀態。這是一個單獨的系統,由於每個Stacks區塊被錨定到一個比特幣塊,它恰好能夠從比特幣讀取狀態,並使用規範的比特幣分叉作為其自己發現塊的廣播媒體。 Stacks狀態本身獨立於比特幣狀態。

比特幣礦工是Stacks區塊鏈中的無利害關係方這一事實進一步將Stacks與合併挖掘鏈、側鍊和驅動鏈區分開來。比特幣礦工在Stacks區塊提交交易中獲得的唯一補償是BTC交易費,該費用僅用於支付交易中比特幣特定部分的存儲和驗證(因為這是比特幣礦工為Stacks挖礦過程做出的唯一貢獻)。沒有強制性的比特幣掛鉤,比特幣礦工不開採Stacks區塊- stacks鏈通過自己的礦工保持活力和安全。

那麼Stacks是什麼樣的區塊鏈?

Stacks是Layer-1區塊鏈,具有獨特的挖礦算法,可確保所有區塊的歷史記錄都在比特幣上結算。每個比特幣區塊最多挖出一個Stacks區塊,如果存在競爭,則通過加密抽籤過程隨機選擇獲勝的Stacks區塊。如果某Stacks礦工相對於其他礦工發送更多BTC,則他有更高的獲勝機會。因此,像Stacks這樣的PoX鏈實現了中本聰共識的變體,其自身的安全性和活性保證與比特幣分開。這些屬性將其與Layer-2系統、合併挖礦鏈、側鍊和PoS鏈區分開來。

Stacks利用比特幣的安全性為其提供一些其他地方沒有的額外功能。其中包括公開所有分叉的能力(使誠實節點更容易檢測待處理的重組),以及通過分叉長度衡量鏈質量的能力(使重組耗時)。此外,所有開采的區塊都記錄在比特幣上這一事實意味著任何引導節點都可以確定網絡中缺少哪些區塊,並確定即使缺少區塊,哪個分叉將成為規範鏈分叉。  

下表總結了主要區別:

Stacks和其他類型鏈的主要區別 [1] https://github.com/stickfigure/blog/wiki/Proof-Of-Stake-Wears-No-Clothes

Stacks和其他類型鏈的主要區別

[1]   https://github.com/stickfigure/blog/wiki/Proof-Of-Stake-Wears-No-Clothes

作者

Jude Nelson從普林斯頓大學獲得計算機科學博士學位,曾作為PlanetLab的核心成員,該實驗室因實現行星級試驗和部署而獲得ACM時間測試獎。他的研究涵蓋廣域存儲系統和CDN。有超過10年的Vim使用經驗。

原文鏈接: https://www.stackschina.com/news/what-kind-of-blockchain-is-stacks