説明:
HPB目前自定義的remix solidity編譯器只支持到0.5.7的版本,導致不能使用最新的合約代碼來編譯。
目前的解決方案是,使用HPB remix發佈一個硬件隨機數合約代碼到HPB主網。然後開發者可以在ETH 最新的Remix上編寫普通合約,調用這個硬件隨機數合約進行訪問隨機數。
具體案例如下:
合約中獲取隨機數的方法如下,隨機數的合約代碼如下:
pragma solidity ^0.5.1;
contract HRNG {
function hrand() public view returns (bytes32){
return block.random;
}
}
但是這種用法受限於必須使用 hpb-remix 以及 solidity 0.5.7 版本編譯器。
為了讓開發者能夠使用任意版本編譯器以及其他合約開發工具,現在將上面的合約部署到了測試網和主網上面,開發者可通過合約調用合約的方式獲取隨機數。
已部署合約地址:
testnet:0x4fe7d9b3b0b639ccad9c394aa81bc6cbe6acc7f5
mainnet:0x60db1959cc9813c5912c66e66d2299e681ea7764
調用示例:
pragma solidity ^0.6.3;
abstract contract HRNG { // step 1. add HRNG contract declare
function hrand() public view virtual returns (bytes32);
}
contract Demo {
address hrngAddr;
HRNG hrng;
constructor (address hrngaddr) public { // step 2. set hrng contract addr by testnet or mainnet.
hrngAddr = hrngaddr;
hrng = HRNG(hrngAddr);
}
function lastr(int p) public view returns (int) {
bytes32 r = hrng.hrand(); // step 3. call hrand to get hardware random.
int q = p + int(r)%10;
return q;
}
}
測試結果:
注意:使用不同版本的 solidity 開發時,step 1 位置處的寫法會有所不同,這裏不一一贅述。
作者:Sagar、Jason
歡迎區塊鏈行業志同道合的小夥伴添加小極微信,加入blockgeek區塊鏈技術交流羣,共同推動區塊鏈技術普及和發展~