Solidity
實現以安全方式在鏈上保存號碼
有很多這樣的問題,但在你關閉這個之前仔細看看。
請看一下這個智能合約
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)); } }
這樣它就保持隱藏狀態,因為:
- 數為
private
。- 沒有一種方法可以
secretNumber
使用任何功能進行閱讀。意思是你沒有那個功能return secretNumber;
。