Столкновение адреса контракта - PullRequest
0 голосов
/ 24 мая 2018

Итак, насколько я понимаю, при создании контракта две переменные, которые используются при определении адреса контракта, - это msg.sender и значение nonce.Поэтому, если я создаю два контракта в одной транзакции, как я сделал с этим кодом https://ropsten.etherscan.io/address/0xcb7d7e99e56406a675173f0ddbde7d8cc3392e5e#code

Почему он генерировал два контракта по двум разным адресам, я бы сказал, что они будут генерироваться по одному и тому же адресу.адрес, и один будет просто перезаписать другой или что-то в этом роде.

1 Ответ

0 голосов
/ 24 мая 2018

Вы понимаете адрес контракта, определенный адресом создателя сообщения, и одноразовый номер является правильным.Однако в приведенном вами примере msg.sender является адресом договора Test.

Произошли следующие шаги:

  1. Вы инициировали транзакцию для развертывания Test с вашего внешнего аккаунта (0x98081ce968e5643c15de9c024de96b18be8e5ace).Согласно информации о транзакции, одноразовый номер учетной записи на тот момент был 639.
  2. В результате контракт Test имел адрес 0xcb7d7e99e56406a675173f0ddbde7d8cc3392e5e.
  3. Во время развертывания Test, конструктор затем создает два новых контракта через «внутренние транзакции».Divert развертывается с адреса контракта по адресу 0xcb7d7e99e56406a675173f0ddbde7d8cc3392e5e с nonce=1.OverRide развертывается с того же адреса с nonce=2.

Вы можете просмотреть детали внутренней транзакции здесь .

...