Скажем, у меня есть что-то вроде этого:
bytes32 person;
function registerPerson(address _person) public {
bytes32 x;
x = sha256(abi.encodePacked(_person));
person = x;
}
Из соображений конфиденциальности я хочу сохранить этот элемент «_person» в виде хэша, чтобы люди не знали, что это за адрес. Я знаю, что значение bytes32 можно просмотреть, но теперь мне интересно, есть ли способ, которым люди могут увидеть необработанный ввод «_person»?
На мой взгляд, ответ отрицательный, но с помощью Remix он показывает входные данные, сделанные в функцию, и теперь мне интересно, это просто функциональность компилятора для отладки или необработанный ввод действительно где-то виден.
Большое спасибо.
Да, _person
значение будет видно через данные транзакции, которые создаются для вызова этой функции. Это было бы полностью общедоступно для всех и каждого, кто видел вашу транзакцию в сети.
Вы даже сможете использовать такой сервис, как Etherscan, для просмотра входных данных транзакции, которые будут содержать версию вашего ввода в шестнадцатеричном коде, которую можно легко превратить обратно в необработанные данные.
Если вы хотите хешировать адресные данные, чтобы сохранить их в «секрете», вы должны сделать это до того, как они будут отправлены в контракт.
Например, посмотрите на эту транзакцию к контракту, который позволяет вам хранить некоторый текст в смарт-контракте:
https://etherscan.io/tx/0xecd6399f05410c8c3d64dcacccce647c55df135f24a1632fb9bc3665e02dbf5a
Если вы посмотрите Input Data
и выберите «Просмотреть ввод как: UTF-8», вы сможете прочитать сохраненное сообщение:
латте с медовыми булочками и тыквой 14.03.2016
Это справедливо для всех входных данных.
Якко Маджури
Шон Табризи