Keccak
隨機數安全嗎?
我的想法是我們在一個塊中提出一個隨機數並將其設為私有,這樣任何人都看不到它。計時器將允許探勘幾個塊,然後revealNumber 函式允許知道秘密數字,然後生成另一個隨機數。我認為這將消除塊操作的可能性?有什麼方法可以讓某人看到私人的東西?
pragma solidity ^0.5.4; contract SKYLotto { uint256 private secretNumber; uint256 public releasedNumber; uint256 public time; function randomGen() public { secretNumber = uint(keccak256(abi.encodePacked(now, msg.sender))) % 10; time = now + 30 seconds; } function revealNumber() public { enter code here require(now > time); releasedNumber = secretNumber; randomGen(); } }
是的,有人可以看到私有值。Private 只是告訴合約他們能讀什麼和不能讀什麼。人們可以從私有值中提取數據。
請看這個執行緒。並且在api for solidity 中還聲明:“您在智能合約中使用的所有內容都是公開可見的,甚至局部變數和狀態變數標記為私有。”