Protocol
“濫用”合約初始化解釋
我在 Subtleties 頁面https://github.com/ethereum/wiki/wiki/Subtleties上找到了這個項目:
如果合約初始化返回一個空數組,則不會創建合約。這允許您將合約初始化“濫用”為原子多操作,這在您想要執行多項操作但不希望其中一些能夠在沒有其他操作的情況下處理的某些協議中可能很有用。
誰能解釋一下這是什麼意思?特別是第二句。
這篇文章Diving Into The Ethereum VM Part 5 — The Smart Contract Creation Process詳細解釋了創建合約的過程。
簡單來說:
- 使用合約地址創建一個空合約
- 建構子被執行,因為它是初始化它的合約
- 建構子返回合約程式碼
- 返回的程式碼儲存為未來呼叫的合約程式碼
合約的建構子可以執行 EVM 內部允許的任何操作,例如呼叫另一個合約、進行乙太幣轉賬等。
引用 wiki 頁面的“濫用”是您可以從建構子對外部契約進行兩次或多次呼叫。如果所有外部呼叫都成功,則事務將成功,因此您要確保如果任何呼叫失敗,則所有呼叫都將被撤消。這就是文章提到的原子性。