Solidity

如何以安全的方式將電子郵件保存在契約中?

  • June 29, 2021

我試圖將我的使用者的電子郵件保存在契約中,但我可以在呼叫契約方法時模擬。

契約.sol

contract Test {
   ...
   mapping (address => string) private _emails;

   function getEmail(address from) public view returns (string memory) {
       require(msg.sender == from, 'No!');
       return _emails[msg.sender];
   }
}

應用程序.js (web3js)

let email = await Contract.methods.getEmail(any_other_address).call({from: any_other_address});
console.log(email);

輸出

email@blablabla.com

我認為 msg.sender 不能被 web3.js 中的 from 操作。有沒有一種安全的方法可以在契約中保存電子郵件?

你在區塊鏈上寫的所有東西都是開放的,世界上任何人都可以閱讀它。另外,它會讓你的使用者付出類似的代價 $ 1 to $ 10 向世界放棄他的資訊。

為什麼要安全地儲存它?沒有安全保障,一切都會公開。

如果以後只有契約之外的一個人可以閱讀,您實際上可以將私人資訊保存在契約中。您可以使用在瀏覽器中執行的私鑰加密技術將使用者的電子郵件加密為您自己的公鑰,然後再將其發送到區塊鏈。稍後,您可以使用您的私鑰讀取電子郵件地址。

一般來說,如果你只是從使用者那裡發送資訊的一種方式,只能在區塊鏈之外讀取,而不是在鏈上,那麼使用日誌來儲存數據要比將其寫入鏈上儲存要便宜得多。

同樣一般來說,如果您有大量數據,最好將其寫入 IPFS 之類的東西,然後僅將雜湊儲存到鏈上的數據中。為了獲得這種安全且一種方式,您可以在將數據儲存到 IPFS 之前將數據加密為您的公鑰。

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