如何在 Rinkeby、Ehereum、Polygon 和 Fantom 中部署相同地址的合約?
我通過一些測試注意到,當我在不同的網路上發布相同的合約時,地址是相同的。然後,每個網路的“Etherscan”會顯示一個指向blockscan.com的連結,其中顯示具有相同地址的所有 EVM 網路。
但我找不到它是如何發生的模式……
如何在多個 EVM 網路中部署合約並確保所有網路都具有相同的地址?
CREATE
這個問題的完整答案應該詳細說明, opcodes之間的區別CREATE2
,它們是 EVM 中用於創建新合約的兩個操作碼;只要CREATE
您在所有鏈中使用相同的密鑰對,並且在所有鏈上具有相同的隨機數,就應該可以使用其中任何一種來執行此操作。本文還詳細介紹瞭如何CREATE2
用於相同的任務(假設 initcode 在所有鏈中都是一致的),考慮到所有因素,這應該更容易。不過,由於 CREATE3,我將掩蓋這一切。最近有一些工作被稱為 CREATE3。這不是 EVM 中的實際操作碼(尚未),而是為製作本身是合約工廠的合約所做的一些工作,這使得確定性地生成地址變得更容易一些。我知道的第一個實現是 0xsequence’s here,儘管 Rari 也在Solmate中提供了一個實現。
0xsequence 的 repo 中有一個 README 解釋如何使用合約。基本的吸收是你可以導入這個庫,只要合約字節碼在所有鏈中都是相同的,只需在
create3
函式(或deploy
Solmate)中使用相同的鹽就可以確保所有部署的地址相同。
如果您使用相同的 nonce 部署合約,您的合約也將具有相同的地址。假設你拿了一個新錢包,裡面有 0 筆交易。您使用每個網路中的第一筆交易來部署您的合約,然後您還將在所有網路中擁有相同的合約地址。傳入交易不使用隨機數,因此您可以向新錢包發送一些 ETH 或其他任何東西來為部署提供資金。但是什麼也不做……只是部署。然後您將擁有相同的地址。