共计 1030 个字符,预计需要花费 3 分钟才能阅读完成。
阐明:
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 区块链技术交换群,独特推动区块链技术遍及和倒退~
正文完