Contract-Development
ABI 和 Bytecode 儲存在 Contract 中
我在乙太坊 StackExchange 上滾動,我遇到了一個有趣的想法,我從未讀過或見過任何人談論過。我完全了解合約是如何工作和編譯的,生成 ABI 和字節碼。我在想,有沒有辦法將 ABI 結構和字節碼(編譯的輸出)儲存為智能合約本身的變數?
我在論文中畫了一個方案,似乎我最終得出了“先有雞還是先有蛋?”的範式。因為要獲得 ABI 和字節碼,我需要進行編譯……而要進行編譯,我需要之前儲存在變數中的 ABI 和字節碼。所以我的結論是這是不可能的。我搜尋了一下,找不到任何關於此的內容。有人問過這個嗎?知道這是否真的可以實現嗎?
不幸的是,您不能將部署合約的字節碼作為變數直接儲存在合約中,因為這會創建循環引用。從文件:
此屬性不能在合約本身或任何派生合約中訪問。它導致字節碼包含在呼叫站點的字節碼中,因此不可能進行這樣的循環引用。
您可以做的一件事是分別使用and從導入的(但不是 繼承的)合約中獲取字節碼(the
creationCode
或 the )(請參閱此處的差異)。實際上,我們使用Authereum合約來執行此操作,因為我們使用為每個新使用者部署合約。runtimeCode``type(C).creationCode``type(C).runtimeCode``create2