Могут ли другие узлы в системе видеть состояние моего контракта?

Я создал простой контракт, который имеет простое состояние с одним целым.

введите описание изображения здесь

Я дал ему значение 90 во время развертывания (конструктор).

Теперь я пошел к определенному блоку в Ринкеби и увидел байт-код моего кода контракта.

Но я не уверен, увидят ли другие узлы, что я установил значение 90.

Или его можно увидеть, только если для него есть геттер?

Извините, если мой вопрос очень простой. Я только что посмотрел на Ethereum.

Ответы (2)

Чтобы добавить к ответу @Andrey, ваш контракт делает неудобным доступ к данным. Если вы намерены сделать это легко доступным для других контрактов и наблюдателей, вы можете сделать видимость publicс помощью

uint public value

Это даст всем полезную функцию, которая функционально эквивалентна:

function value() public view returns(uint) { return value; }

Когда этого не делаешь, наблюдателям тяжелее, но...

Все данные доступны всем полным узлам, которые независимо проверяют транзакции, отправленные в ваш контракт. Все они делают независимое заключение 90. Подразумевается, что любой, у кого есть ноу-хау для работы на уровне программного обеспечения майнера/узла или как рыться в необработанном хранилище в Solidity, может найти свой путь к этому числу.

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

Главный вывод? Очень сложно сохранить секрет в блокчейне. privateможет ввести в заблуждение.

Надеюсь, поможет.

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