При разработке смарт-контрактов в Solidity одним из ключевых моментов является выбор подходящего модификатора видимости для функций и переменных. В этой статье блога мы углубимся в два часто используемых модификатора видимости: внешний и общедоступный. Мы обсудим их различия, варианты использования и предоставим примеры кода, которые помогут вам понять, когда эффективно использовать каждый модификатор.
Понимание внешнего и общедоступного:
И внешний, и общедоступный являются модификаторами видимости в Solidity, которые определяют, как функции и переменные могут быть доступны другим контрактам или внешним учетным записям. Давайте подробнее рассмотрим каждый модификатор:
- Внешний:
Модификатор external используется для указания того, что к функции или переменной можно получить доступ только извне, т. е. вне контракта. Внешние функции недоступны для других функций в контракте или производных контрактах. Этот модификатор обычно используется для функций, которые предназначены для вызова другими контрактами или внешними учетными записями.
Пример:
contract MyContract {
uint public myVariable;
function setMyVariable(uint _value) external {
myVariable = _value;
}
}
В приведенном выше примере функция setMyVariable
может вызываться другими контрактами или внешними учетными записями для обновления значения myVariable
. Однако к нему нельзя получить доступ внутри MyContract
или его производных контрактов.
- Public:
Модификатор public, с другой стороны, разрешает как внутренний, так и внешний доступ к функции или переменной. Публичные функции генерируют автоматическую функцию получения, которая позволяет считывать значение переменной вне контракта. Этот модификатор обычно используется для функций, доступ к которым необходим как внутри, так и снаружи.
Пример:
contract MyContract {
uint public myVariable;
function setMyVariable(uint _value) public {
myVariable = _value;
}
}
В этом примере функция setMyVariable
может вызываться как внутри контракта, так и извне другими контрактами или внешними учетными записями. Кроме того, myVariable
можно прочитать извне, используя автоматически созданную функцию получения.
Выбор правильного модификатора:
Выбор между внешним и общедоступным зависит от предполагаемого использования функции или переменной. Вот несколько рекомендаций, которые помогут вам принять правильное решение:
- Используйте внешний, когда функцию следует вызывать только вне контракта.
- Используйте public, когда к функции требуется доступ как внутри, так и снаружи.
- Учитывайте последствия затрат на газ, поскольку внешние функции обычно потребляют меньше газа, чем общедоступные функции.
В Solidity модификаторы внешней и общедоступной видимости играют решающую роль в определении способа доступа к функциям и переменным. Понимание их различий и вариантов использования имеет важное значение для написания безопасных и эффективных смарт-контрактов. Используя соответствующий модификатор, вы можете эффективно контролировать доступность функций и переменных вашего контракта.