Функции Solidity — частная видимость

Является ли следующий параметр функции (имя строки) видимым только для самого контракта владельца?

function myFunction(string name) private returns (bool) 
{ 
    return true;
}

Значит, никто не может прочитать/увидеть имя строки? Сюда входят все наблюдатели за блокчейном и майнеры.

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

Я ищу информацию о том, можно ли запретить людям читать значения параметров функций и локальных переменных.

Ответы (2)

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

Есть 2 мира:

  1. внутри Solidity, контрактов и EVM
  2. вне

Спрашивать о людях — это случай № 2, и все данные в блокчейне в настоящее время видны всем. Кто-то может взять вашу транзакцию и проанализировать ее, чтобы увидеть, какие контракты вызываются, а также параметры функции и локальные переменные. (Это может включать в себя выполнение inputчасти транзакции, передачу ее через EVM и проверку значений по мере выполнения EVM.) В настоящее время нет способа предотвратить это; дальнейшая интеграция передовой криптографии в платформу Ethereum — вот как эта проблема будет решена для всех.


Для № 1 другие контракты не могут напрямую считывать значение параметров функции или локальных переменных другого контракта.

Конкретную информацию о privateключевом слове, используемом в function myFunction(string name) private, см. в разделе Видимость и средства доступа :

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

Я был обеспокоен тем, что если я объявлю переменную состояния public, означает ли это, что другие контракты имеют полный доступ к переменной, т.е. могут ли другие контракты получить доступ к переменной и даже изменить ее значение?
@PrashantPrabhakarSingh Другие контракты могут читаться, но обычно они не могут изменить значение, если вы не предоставите им для этого функцию. Я ответил на ваш вопрос немного подробнее :)

Вопрос не столько в наглядности, сколько в доступности. Контракты в блокчейне доступны для просмотра всем в байт-коде (но не в Solidity).

С точки зрения доступности — у кого есть разрешение на вызовы вашей функции, вы можете использовать модификаторы. В этом случае вы должны определить onlyOwnerмодификатор ранее в контракте следующим образом:

modifier onlyOwner { if(msg.sender != owner) throw; _ } При создании контракта вы можете определить владельца как переменную состояния и назначить его в конструкторе контракта (функция, которая реализуется при создании контракта).

Чтобы ограничить доступ к myFunctionвам, нужно добавить onlyOwnerмодификатор после входных параметров, так что если кто- то вызовет myFunctionконтракт без вызова с адреса, определенного в ownerадресной переменной, он потерпит неудачу.

function myFunction(string name) onlyOwner private returns(bool) { return true; }

У вас также могут быть модификаторы для ограничения доступа к другим доверенным адресам в вашем контракте.

Спасибо, но я уже понимаю про доступность в контрактах. Я искал информацию о том, можно ли запретить людям читать значения параметров функций и локальных переменных.
Невозможно запретить людям читать какую-либо информацию о смарт-контракте: «Все, что вы используете в смарт-контракте, общедоступно, даже локальные переменные и переменные состояния, помеченные как частные». Solidity.readthedocs.io/en/v0.4.24/security-considerations.html