Solidity

實現以安全方式在鏈上保存號碼

  • November 30, 2021

有很多這樣的問題,但在你關閉這個之前仔細看看。

請看一下這個智能合約

contract StoreWithSecret {
   
   uint256 private secretNumber; 

   constructor(uint256 num) {
       secretNumber = num;
   }

   function isEqual(uint256 num) public view returns (bool) {
       return secretNumber == num;
   }
}

我對這樣一個契約的目標是有一個數字或一個字元串,除了創建契約的人之外,每個人都不知道。這份合約很簡單,當然你想對它和所有東西進行雜湊處理,但這是我所看到的細節。是否有可能在區塊鏈環境中實現這樣的行為?一些答案說我應該在鏈下對其進行加密,然後將密鑰儲存在鏈下,但如果你能提供一個具體的例子來說明如何做到這一點,它可以解決問題。謝謝你!

由於您只需要保存它並證明發送isEqual的那個是相同的,您可以像這樣在鏈上加密它:

contract StoreWithSecret {
   
   bytes32 private secretNumber; 

   constructor(uint256 num) {
       secretNumber = keccak256(abi.encode(num));
   }

   function isEqual(uint256 num) public view returns (bool) {
       return secretNumber == keccak256(abi.encode(num));
   }
}

這樣它就保持隱藏狀態,因為:

  1. 數為private
  2. 沒有一種方法可以secretNumber使用任何功能進行閱讀。意思是你沒有那個功能return secretNumber;

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