Solidity

作為智能合約功能的參數輸入的數據是否可見?

  • October 15, 2018

假設我有這樣的事情:

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”,您將能夠閱讀已保存的消息:

蜂蜜麵包和南瓜五香拿鐵 3.14.2016

這適用於所有輸入數據。

引用自:https://ethereum.stackexchange.com/questions/60631