天天看點

242-solidity之僞随機數

solidity之僞随機數





我們怎麼擷取一個随機的uint?
Ethereum内部有一個散列函數keccak256
它用了SHA3版本
一個散列函數基本上就是把一個字元串轉換為一個
256位的16進制數字
字元串的微小變化也會引起散列資料極大的變化

這個在Ethereum中有很多的應用
我們現在用它來創造一個僞随機數




其實在區塊鍊中産生一個随機數一個很難的問題
我們這裡使用的方法實際上并不安全
但是如果我們隻是用來做一些簡單的功能
那麼這樣做其實可以滿足我們的需要





再說一下類型轉換
例如

uint8 a = 5;
uint b = 6;

如果我們這樣寫
uint8 c = a * b;
這樣是會報錯的
因為a*b傳回的是uint,而不是uint8
是以我們需要進行類型轉換
uint8 c = a * (uint8)b;




現在我們來寫簡單的生成僞随機數的方法

uint modulus = 10**16;

function _generateRandom(string _str) private view returns (uint){

uint rand = uint( keccak256(_str) );

return rand % modulus;

}





           

繼續閱讀