Как извлечь адрес реализации из клона ERC-1167

Множество коротких контрактов могут делегировать вызовы общей реализации. У стандартного минимального клона адрес назначения зашит прямо в исполняемый байткод.

Разберите каноническую последовательность

Прочитайте развёрнутый код методом eth_getCode. В каноническом 45-байтовом коде ERC-1167 между приведёнными префиксом и суффиксом находится ровно 20 байт адреса реализации.

363d3d373d3d3d363d73
<20 bytes>
5af43d82803e903d91602b57fd5bf3

Извлеките средние байты и запросите код по полученному адресу на том же блоке. Образец относится к развёрнутому коду. Во входных данных транзакции создания также присутствует код инициализации, поэтому сравнение будет другим.

Читайте состояние у конкретного клона

При делегировании код реализации работает с хранилищем клона. Два клона с одинаковыми байтами могут иметь разных владельцев и балансы. Для чтения геттера вызывайте адрес клона. Несовпадение с шаблоном требует разбора: встречаются оптимизированные варианты. eips.ethereum.org EIP-1167