Означает ли развертывание контракта, что он перезапишет последний экземпляр?

Я, должно быть, что-то пропустил о развертывании контрактов, но чтобы быть уверенным:

Я использую Truffle. Означает ли развертывание контракта, что он перезапишет последний экземпляр? Так как я вижу, что он получает новый адрес каждый раз, когда я его развертываю. Но при этом вызов контракта в webUI всегда будет идти только на один конкретный контракт.

Это зависит от того, какой я пользователь? Должен ли я быть тем, кто его развернул, или, по крайней мере, иметь к нему доступ? И если да, то как лучше всего определить доступ к контракту на продажу?

Ответы (3)

Нет, после развертывания контракта его нельзя перезаписать.

Ваш веб-интерфейс должен быть обновлен адресом любого контракта, с которым вы хотите взаимодействовать.

Любой может вызвать контракт. Функция контракта может проверить msg.senderи немедленно вернуть (или throw), если отправитель не должен иметь доступ к контракту. Модификатор может помочь изолировать эту логику:

modifier onlyowner {
    if (isOwner(msg.sender))
        _
}

Затем функция может быть помечена этим модификатором, например:

function foo() onlyowner returns (bytes32 r)

См. пример контракта кошелькаisOwner и то, как его можно определить.

можете объяснить, как Truffleразрешается вызов контрактов, т.е. название метода? Как он определяет, какой адрес .. адрес?
Вам может понадобиться еще один вопрос, если вам нужно объяснить больше. Truffle помещает данные о скомпилированных и развернутых контрактах в environmentдиректорию: такие данные содержат адрес контракта и его методы.

Развернутый контракт имеет один адрес, и его содержимое нельзя изменить. Если вы развернете тот же контракт во второй раз, у него будет другой адрес.

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

Итак, если вы развертываете контракт и планируете изменить его в будущем, вам необходимо подготовить процесс миграции. Не забывайте, что контракт может использовать контракты! И у многих контрактов есть функция уничтожения, которая их отключает.

Вы должны искать шаблоны проектирования для ethereum/Dapps, такие как DOUG/Name Registry. http://fr.slideshare.net/mids106/dapp-design-patterns .

Повторный запуск миграции приведет к повторному развертыванию в блокчейне по новому адресу. Он также перезапишет ABI внутри /build/contracts/. Я случайно сделал это, когда пробовал свой контракт в другой тестовой сети, так что будьте осторожны.

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