Является ли следующий параметр функции (имя строки) видимым только для самого контракта владельца?
function myFunction(string name) private returns (bool)
{
return true;
}
Значит, никто не может прочитать/увидеть имя строки? Сюда входят все наблюдатели за блокчейном и майнеры.
Или нет возможности скрыть значения переменных в функциях, даже если они приватные?
Я ищу информацию о том, можно ли запретить людям читать значения параметров функций и локальных переменных.
поиск информации о том, можно ли запретить людям читать значения параметров функций и локальных переменных
Есть 2 мира:
Спрашивать о людях — это случай № 2, и все данные в блокчейне в настоящее время видны всем. Кто-то может взять вашу транзакцию и проанализировать ее, чтобы увидеть, какие контракты вызываются, а также параметры функции и локальные переменные. (Это может включать в себя выполнение input
части транзакции, передачу ее через EVM и проверку значений по мере выполнения EVM.) В настоящее время нет способа предотвратить это; дальнейшая интеграция передовой криптографии в платформу Ethereum — вот как эта проблема будет решена для всех.
Для № 1 другие контракты не могут напрямую считывать значение параметров функции или локальных переменных другого контракта.
Конкретную информацию о private
ключевом слове, используемом в function myFunction(string name) private
, см. в разделе Видимость и средства доступа :
Частные функции и переменные состояния видны только для контракта, в котором они определены, а не для производных контрактов.
Вопрос не столько в наглядности, сколько в доступности. Контракты в блокчейне доступны для просмотра всем в байт-коде (но не в Solidity).
С точки зрения доступности — у кого есть разрешение на вызовы вашей функции, вы можете использовать модификаторы. В этом случае вы должны определить onlyOwner
модификатор ранее в контракте следующим образом:
modifier onlyOwner { if(msg.sender != owner) throw; _ }
При создании контракта вы можете определить владельца как переменную состояния и назначить его в конструкторе контракта (функция, которая реализуется при создании контракта).
Чтобы ограничить доступ к myFunction
вам, нужно добавить onlyOwner
модификатор после входных параметров, так что если кто- то вызовет myFunction
контракт без вызова с адреса, определенного в owner
адресной переменной, он потерпит неудачу.
function myFunction(string name) onlyOwner private returns(bool) { return true; }
У вас также могут быть модификаторы для ограничения доступа к другим доверенным адресам в вашем контракте.
Прашант Прабхакар Сингх
public
, означает ли это, что другие контракты имеют полный доступ к переменной, т.е. могут ли другие контракты получить доступ к переменной и даже изменить ее значение?эт