Я, должно быть, что-то пропустил о развертывании контрактов, но чтобы быть уверенным:
Я использую Truffle
. Означает ли развертывание контракта, что он перезапишет последний экземпляр? Так как я вижу, что он получает новый адрес каждый раз, когда я его развертываю. Но при этом вызов контракта в webUI всегда будет идти только на один конкретный контракт.
Это зависит от того, какой я пользователь? Должен ли я быть тем, кто его развернул, или, по крайней мере, иметь к нему доступ? И если да, то как лучше всего определить доступ к контракту на продажу?
Нет, после развертывания контракта его нельзя перезаписать.
Ваш веб-интерфейс должен быть обновлен адресом любого контракта, с которым вы хотите взаимодействовать.
Любой может вызвать контракт. Функция контракта может проверить msg.sender
и немедленно вернуть (или throw
), если отправитель не должен иметь доступ к контракту. Модификатор может помочь изолировать эту логику:
modifier onlyowner {
if (isOwner(msg.sender))
_
}
Затем функция может быть помечена этим модификатором, например:
function foo() onlyowner returns (bytes32 r)
См. пример контракта кошелькаisOwner
и то, как его можно определить.
Развернутый контракт имеет один адрес, и его содержимое нельзя изменить. Если вы развернете тот же контракт во второй раз, у него будет другой адрес.
Представьте себе такой случай: ваш контракт дает токен для каждого пользователя, использующего его. Пользователи первого развернутого контракта и пользователи второго развернутого контракта будут иметь разные токены. Эти два токена несовместимы.
Итак, если вы развертываете контракт и планируете изменить его в будущем, вам необходимо подготовить процесс миграции. Не забывайте, что контракт может использовать контракты! И у многих контрактов есть функция уничтожения, которая их отключает.
Вы должны искать шаблоны проектирования для ethereum/Dapps, такие как DOUG/Name Registry. http://fr.slideshare.net/mids106/dapp-design-patterns .
Повторный запуск миграции приведет к повторному развертыванию в блокчейне по новому адресу. Он также перезапишет ABI внутри /build/contracts/. Я случайно сделал это, когда пробовал свой контракт в другой тестовой сети, так что будьте осторожны.
Попробуйте Space
Truffle
разрешается вызов контрактов, т.е. название метода? Как он определяет, какой адрес .. адрес?эт
environment
директорию: такие данные содержат адрес контракта и его методы.