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