From 005a29c1d5e38f9bfb92081c5aae24bc7ac7b17f Mon Sep 17 00:00:00 2001 From: unknownunknown1 Date: Mon, 29 Aug 2022 00:23:02 +1000 Subject: [PATCH 1/2] fix(RNG): add lookahead of 132 blocks --- contracts/standard/rng/BeaconRNGFallback.sol | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/contracts/standard/rng/BeaconRNGFallback.sol b/contracts/standard/rng/BeaconRNGFallback.sol index bdc130b9..35fd7a24 100644 --- a/contracts/standard/rng/BeaconRNGFallback.sol +++ b/contracts/standard/rng/BeaconRNGFallback.sol @@ -1,6 +1,6 @@ /** - * @authors: [@shalzz] - * @reviewers: [@jaybuidl*, @geaxed] + * @authors: [@shalzz, @unknownunknown1] + * @reviewers: [@jaybuidl*, @geaxed*] * @auditors: [] * @bounties: [] * @deployments: [] @@ -18,6 +18,8 @@ contract BeaconRNGFallBack is RNG { RNG public beaconRNG; RNG public blockhashRNG; + uint public constant LOOKAHEAD = 132; // Number of blocks that has to pass before obtaining the random number. 4 epochs + 4 slots, according to EIP-4399. + /** @dev Constructor. * @param _beaconRNG The beacon chain RNG deployed contract address * @param _blockhashRNG The blockhash RNG deployed contract address @@ -65,6 +67,10 @@ contract BeaconRNGFallBack is RNG { // fallback to blockhash RNG if (RN == 0) { RN = blockhashRNG.getRN(_block); + } else if (block.number < _block + LOOKAHEAD) { + // Beacon chain returns the random number, but sufficient number of blocks hasn't been mined yet. + // In this case signal to the court that RN isn't ready. + RN = 0; } } } From b845c79a66b454ff71521c90c5baa9f6f7e5004e Mon Sep 17 00:00:00 2001 From: jaybuidl Date: Mon, 29 Aug 2022 11:46:51 +0100 Subject: [PATCH 2/2] docs: rab update --- contracts/standard/rng/BeaconRNGFallback.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/standard/rng/BeaconRNGFallback.sol b/contracts/standard/rng/BeaconRNGFallback.sol index 35fd7a24..54c5f9df 100644 --- a/contracts/standard/rng/BeaconRNGFallback.sol +++ b/contracts/standard/rng/BeaconRNGFallback.sol @@ -1,6 +1,6 @@ /** * @authors: [@shalzz, @unknownunknown1] - * @reviewers: [@jaybuidl*, @geaxed*] + * @reviewers: [@jaybuidl, @geaxed*] * @auditors: [] * @bounties: [] * @deployments: []