Script

在未來的軟分叉中啟用潛在的次優或未使用的操作碼有什麼缺點?

  • June 10, 2021

在我看來,有多種方法可以使用比特幣中尚未啟用的操作碼和 sighash 標誌(例如OP_CHECKTEMPLATEVERIFYSIGHASH_ANYPREVOUTOP_CAT)來建構契約和保險庫。

假設這些被考慮用於比特幣的下一個軟分叉,那麼僅啟用所有這些並查看人們用它們建構的東西有什麼缺點?

顯然,使用可能次優的操作碼佔用保留的OP_SUCCESSx是一個缺點。在最壞的情況下,一個拙劣的操作碼可能意味著一個 UTXO 可能無法使用(或對完整節點施加不可接受的驗證成本)。還有其他潛在的不利因素嗎?

我想這部分是由促使中本聰在 2010 年禁用許多我不清楚的操作碼的原因所回答的。動機似乎是安全性,但我也不清楚使用哪些操作碼可能進行的確切攻擊以及這些攻擊的嚴重性。

每一條額外的共識邏輯都有實施和持續的維護成本,這是永久性的,如果沒有可能沒收一些使用者的資產,就永遠無法刪除。

當中本聰禁用這些操作碼時,他冒著這樣做會破壞一些使用者資金的風險,但比特幣還很年輕,它們的使用顯然不存在,這些操作碼都可以用來導致有效的無限記憶體使用或記憶體損壞和崩潰節點. 我不知道中本聰是否一定意識到他可能正在破壞人們的資金,但考慮到比特幣生命中那個時候的威脅(雖然比特幣價值很小),這可能是正確的選擇。不會了。

任何新引入的功能不僅對使用者構成風險,而且對整個網路都是潛在風險——因為其中的缺陷可能導致共識不一致、節點崩潰、最壞情況處理時間增加,甚至遠端程式碼執行漏洞. 防止這種情況需要審查和測試資源,否則這些資源可能會花費在其他功能上。成本也不是一次性成本,因為必須維護程式碼並且以後可能會引入錯誤。

額外的複雜性也使替代節點的實現變得更加困難,因為它們還必須實現每一個共識規則,並且它不利於使用者修改自己的節點(或實現自己的節點)的自由。由於這些成本,“也許有人會發現它有用”並不是一個真正令人信服的論點。

成本還意味著,一旦實現了某些功能,就有理由不實現部分冗餘的其他功能,因此,如果功能中的缺陷殺死了某些用途但不是全部,則很難獲得涵蓋所有用途的改進替代方案部署的用途。

至於提供簡化且大部分正交指令集的優勢,我認為這本身並不重要。雖然操作的激增對於任何創作分析工具的人來說都是一件麻煩事,但人們通常可以根據自己的喜好對腳本進行子集化。即使需要共同建構策略的使用者必須就他們的分析工具滿意的公共子集達成一致會造成負擔,我認為這種成本很容易被添加的功能所抵消。

如果 OP_BAR 是一支步槍,並且它與 OP_BAZ 冗餘,後者少一個 - 只需將 OP_BAR 列入黑名單並僅使用 OP_BAZ。但是,如果首先實施 OP_BAR,可能很難證明 OP_BAZ 的邊際改進值得其額外成本。因此,以這種方式,弱功能的實現可能會妨礙更強大的替代方案,如果已經付出了適當的努力,那麼這種替代方案本來可以完成。如果您將“footgun”替換​​為“inefficient”,則同樣的說法也是正確的。

有時,設計不佳的功能可能會產生負面的系統激勵效應。例如,基於時間的 nlocktime 的最初構造為礦工創造了對目前時間撒謊的激勵,推動它向前發展,以便能夠收集以後的 nlocktime 交易及其費用。如果基於時間的 nlocktime 交易變得非常普遍,這最終可能會引發一場競底競賽,所有礦工都盡可能地提前設定時間以最大限度地提高費用,甚至可能危及網路的穩定性不使用鎖定時間的使用者。幸運的是,nlocktime 可以以兼容的方式修復。同樣,建構不良的功能可能會不必要地分割匿名集或激勵使用者減少每個人的隱私。

很容易想像會產生負面系統影響的人為功能:例如,OP_BOBSIG 使用它的 txout 可以不受限制地使用,只要 Bob 簽署了整個塊——對於那些信任 Bob 的人來說,這是一個非常有效的選擇。對於不使用它的人來說,它似乎是無害的,直到你認為它給了 bob 信任者一個不公平的優勢,給了 bob 的挖礦一個不公平的優勢,並最終可能有效地將整個系統的控制權交給了 Bob。但是系統效應是一個不太常見的問題,因為它們需要一個足夠吸引人們選擇使用它但對整個系統沒有吸引力的特性。這仍然是一個需要考慮的因素。

除了在系統效應的極端情況下,大多數比特幣專家都同意基金的所有者應該完全自由地選擇如何管理它們——即使這意味著他們有時可能會選擇效率低下或個人安全性較低的基金。最佳實踐可以在系統本身之外解決。但由於共識規則必須由所有節點執行,無法刪除,因此存在成本。這些成本造成了這樣一種情況,即在一個糟糕的操作和一個良好的操作之間進行選擇——或者只是在兩個完全不同的操作之間——在某種程度上是相互排斥的。因此,一個新功能不僅需要對網路安全,還應該明顯有用,

引用自:https://bitcoin.stackexchange.com/questions/106851