ETH Remix编译器调用硬件随机数案例

2021-09-17 14

开发者可以在ETH 最新的Remix上编写普通合约,调用这个硬件随机数合约进行访问随机数。

说明:
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区块链技术交流群,共同推动区块链技术普及和发展~