solidity語言中提供了內置的哈希函數keccak256來產生隨機數。
由于哈希函數的特點,產生的哈希值隨著傳遞參數值與數量的不同而不同。
1、可以傳遞多了參數,多種類型的值例如:keccak256(1,2,“jonson”,0x32);
2、keccak256的返回值是bytes32類型,意味著其返回值是一個256位的隨機數。
3、一般,我們使用全局屬性,例如時間now,msg.sender,block.number等全局屬性來構造隨機數。
構造一個游戲,有70%的概率贏下游戲。
如下函數,通過時間來構造隨機數。首先將bytes32類型強制的轉換為uint256類型。
取模操作,uint256(keccak256(now,msg.sender)) % 100在0-100之間均勻分布,因此小于70的概率位70%。 從而有70%的可能性會返回正確結果。
1 | function test() returns(bool){ |
事件 是dapp程序和區塊鏈通訊的一種機制。你的前端應用“監聽”某些事件,并做出反應。
例子:
1 | // 這里建立事件 |
如上面的游戲合約中,贏下游戲就會觸發事件
1 | pragma solidity ^0.4.23; |
觸發后的事件記錄會存儲在區塊鏈上。
當觸發事件后,在remix控制臺之上會出現事件的記錄。
from:代表合約地址
topic:代表的是事件的唯一標示,其本質也是hash函數,如在此例子中,為keccak256(eve(string))的結果。
event:代表事件的名字
args:參數以及長度
1 | [ |
1 | pragma solidity ^0.4.23; |
本文鏈接: https://dreamerjonson.com/2018/11/23/solidity-46-random/
版權聲明: 本博客所有文章除特別聲明外,均采用 CC BY 4.0 CN協議 許可協議。轉載請注明出處!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。