interface IPOSDAORandom {
function collectRoundLength() external view returns(uint256);
function currentSeed() external view returns(uint256);
IPOSDAORandom private _posdaoRandomContract; // address of RandomAuRa contract
uint256 private _seedLastBlock;
uint256 private _updateInterval;
constructor(IPOSDAORandom _randomContract) public {
require(_randomContract != IPOSDAORandom(0));
_posdaoRandomContract = _randomContract;
_seed = _randomContract.currentSeed();
_seedLastBlock = block.number;
_updateInterval = _randomContract.collectRoundLength();
require(_updateInterval != 0);
function useSeed() public {
// using updated _seed ...
function _wasSeedUpdated() private returns(bool) {
if (block.number - _seedLastBlock <= _updateInterval) {
_updateInterval = _posdaoRandomContract.collectRoundLength();
uint256 remoteSeed = _posdaoRandomContract.currentSeed();
if (remoteSeed != _seed) {
_seedLastBlock = block.number;