Как воспроизвести адрес развёртывания CREATE2

Если фабрика предсказывает один адрес, а тест ожидает другой, сначала сверьте адрес фабрики, соль и точные байты кода инициализации.

Проверьте алгоритм на известном примере

Возьмите Keccak-256 от кода инициализации, соедините четыре поля ниже как байты и снова вычислите хеш. Оставьте младшие 20 байт результата. При нулевом адресе фабрики, нулевой соли и единственном байте init code 00 ожидается 0x4D1A2e2bB4F88F0250f26Ffff098B0b30B26BF38.

0xff || factory[20] || salt[32] || keccak256(init_code)[32]

В формуле участвует аккаунт, выполняющий CREATE2. Адрес кошелька, вызвавшего фабрику, подставлять нельзя. Соль всегда кодируют 32 байтами, в том числе при нулевом значении.

Сверьте аргументы конструктора и адрес назначения

Аргументы конструктора входят в код инициализации и меняют предсказанный адрес. Совпадение результата даёт лишь адрес назначения. Создание всё ещё может завершиться ошибкой, например если там уже находится аккаунт с кодом или ненулевым nonce. eips.ethereum.org EIP-1014