Как воспроизвести адрес развёртывания 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