Создание контракта B из контракта A, но адрес контракта B показывает контракт типа A на Remix

function _createB() public {
    address newB = new B();
    newB(newB); //Event logs the address of contract B
}

Когда я копирую и вставляю адрес, зарегистрированный из события newB, в «загрузить контракт по адресу» в Remix, я получаю другой контракт типа A.

Как мне создать отдельные контракты типа B?

Ответы (1)

При попытке получить контракт определенного типа по «адресу» этот контракт следует выбрать из выпадающего меню.

Что происходит в вашем случае, так это то, что вы получаете контракт типа «А», но он по-прежнему будет вести себя как контракт типа «Б».

Что делает «по адресу»:

Он просто предоставляет интерфейс для выбранного контракта, который, как ожидается, будет развернут по заданному адресу.

  • Находит, какой контракт выбран для операции «по адресу».
  • Затем он находит интерфейс (ABI) этого контракта из кода, записанного в текущем файле.
  • Генерирует хэши функций.
  • Отображает имя каждой функции.
  • Всякий раз, когда вызывается функция, данные транзакции подготавливаются в соответствии с хешем функции и отправляются в контракт.

Теперь, если у контракта есть возможность реагировать на эти данные, т. е. выполнять эту функцию, вы получаете правильный вывод в соответствии с контрактом по этому адресу.

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