Evm

什麼是預編譯合約,它們與原生操作碼有何不同?

  • October 14, 2017

黃皮書指出:

這是四個所謂的“預編譯”合約,作為初步架構,以後可能會成為本地擴展。地址 1、2、3、4 中的四個合約分別執行橢圓曲線公鑰恢復函式、SHA2 256 位雜湊方案、RIPEMD 160 位雜湊方案和恆等函式。

什麼是預編譯合約,它們與原生操作碼有何不同?如果預編譯的合約成為原生擴展,它會獲得什麼?鑑於 SHA2-256 的廣泛使用,為什麼它沒有原生實現?

儘管我不知道真正的原因,但我會嘗試猜測。會有以下考慮:

  1. 命名空間的大小。可能的操作碼並不多,因此需要非常謹慎地分配這些操作碼。另一方面,合約地址的空間對於所有實際目的實際上是無限的。
  2. 名稱重複使用的風險。不重用名稱(或操作碼)是一個很好的軟體工程原則,尤其是在無法控制升級的系統中。
  3. 實用程序。有些操作總是有用的,例如算術運算、位旋轉、流控制等。另一方面,密碼原語可能在未來被證明是不夠的,並且將使用其他東西來代替。將這些原語變成操作碼是冒著將寶貴的命名空間花費在可能過時的東西上的風險。
  4. 溫和推廣流行/有用的程式碼。如果某些事情,例如 zkSNARKs 操作或 Dogecoin PoW 驗證,從 Solidity 程式碼開始,然後進行部分優化,變得非常有用和流行,它們可能會成為預編譯合約。與引入新的操作碼相比,這種提升對網路的改變要溫和得多。

不是權威,但我知道有人…

來自 Vitalik 的文章,乙太坊協議的史前史

第二個是“預編譯”的想法,解決了允許在 EVM 中使用複雜的加密計算而無需處理 EVM 成本的問題。我們還提出了許多關於“原生合約”的更雄心勃勃的想法,如果礦工對某些合約進行了優化實施,他們可以“投票”降低這些合約的 gasprice,因此大多數礦工可以更快執行的合約自然會有較低的汽油價格;然而,所有這些想法都被拒絕了,因為我們無法想出一種加密經濟安全的方式來實現這樣的事情。攻擊者總是可以創建一個執行一些陷門密碼操作的合約,將陷門分發給他們自己和他們的朋友,讓他們更快地執行這個合約,然後投票給gasprice並使用它來拒絕網路。相反,我們選擇了一種不那麼雄心勃勃的方法,即在協議中簡單地指定較少數量的預編譯,用於雜湊和簽名方案等常見操作。

對於任何給定的功能是否必須是預編譯或本機,我認為沒有“正確答案”。由於前面所述的所有原因,它似乎歸結為設計判斷。除非 VB 或 gavofyork 自己參與進來,否則我們永遠無法確定…

引用自:https://ethereum.stackexchange.com/questions/440