如何基于单个随机种子生成随机数集合



我正在开发一个通过使用Oracle利用随机数的稳固性合约。(链接(。显然,考虑到获得随机数所需的价格和时间,我正在寻找重用该种子以生成1个以上随机数的最佳方法。

我有下面的代码,它应该在每个循环中生成2个随机数1在0和99之间,另一个在0和2之间。在这个例子中总共有20个随机数。

uint256 randomness = 78076127350936886139585537764964110448646985064549445555744769369952641998556;
for (uint256 i = 0; i < 10; i++) {
uint8 random1 = SafeCast.toUint8((randomness % (100 + i)) % 100)
uint8 random2 = SafeCast.toUint8((randomness % (100 + i)) % 3)
}

看起来还可以,但想确定这在数学方面是否有意义,或者是否有更好的方法。

找到了关于如何做到这一点的文档。

https://docs.chain.link/docs/chainlink-vrf-best-practices/#getting-多重随机数

function expand(uint256 randomValue, uint256 n) public pure returns (uint256[] memory expandedValues) {
expandedValues = new uint256[](n);
for (uint256 i = 0; i < n; i++) {
expandedValues[i] = uint256(keccak256(abi.encode(randomValue, i)));
}
return expandedValues;
}

最新更新