Доступность публичных переменных

Если у меня есть publicпеременная состояния, означает ли это, что другие контракты могут получить доступ или даже изменить ее значение?

Я сделал криптомонету отсюда, и все переменные объявлены как public, поэтому меня беспокоит, могут ли другие контракты только просматривать эти переменные или они также могут изменять значения?

Ответы (1)

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

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

Функции могут быть указаны как external, или public, где по умолчанию .internalprivatepublic

external : внешние функции являются частью интерфейса контракта, что означает, что их можно вызывать из других контрактов и через транзакции. Внешняя функция f не может быть вызвана внутри (т.е. f()не работает, но this.f()работает). Внешние функции иногда более эффективны, когда они получают большие массивы данных.

public : общедоступные функции являются частью интерфейса контракта и могут быть вызваны либо внутри, либо через сообщения. Для общедоступных переменных состояния генерируется функция автоматического доступа (см. ниже).

internal : доступ к этим функциям и переменным состояния возможен только внутри (т.е. из текущего контракта или контрактов, производных от него), без использования this.

private : частные функции и переменные состояния видны только для контракта, в котором они определены, а не для производных контрактов.