Если я хочу создать смарт-контракт, выполнив необработанный tx, обязательно ли вычислять новый адрес контракта так, как он был определен , или я могу выбрать свой собственный адрес произвольно? Почему?
Контракты не могут быть развернуты на произвольный указанный пользователем адрес.
Новые контракты создаются опкодом CREATE в EVM, который реализует правила и не имеет параметра для адреса нового контракта.
Вероятно, основная причина такого поведения заключается в том, чтобы избежать конфликтов между адресами. Кто-то не должен иметь возможность перезаписать контракт, который уже развернут по адресу: довольно много проблем с пользовательским интерфейсом и безопасностью по этому поводу. (В действительности, как и в случае коллизии хэшей, крайне мала вероятность того, что две учетные записи в конечном итоге создадут контракт по одному и тому же адресу.)
Есть другие причины. Например, если бы люди могли размещать контракты на определенные «неиспользуемые» адреса, все могли бы использовать легко читаемые адреса, злоумышленники могли бы использовать адреса, похожие на такие адреса. И пользователи, распределяющие контракты по адресам, могут как случайно, так и злонамеренно разбалансировать базовые структуры данных в Ethereum (аналогично этой «атаке на хранилище» , которая смягчается ).
Томас Джей Раш
эт