// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; /** * @title Block library * * @author Stanisław Głogowski */ library BlockLib { struct BlockRelated { bool added; uint256 removedAtBlockNumber; } /** * @notice Verifies self struct at current block * @param self self struct * @return true on correct self struct */ function verifyAtCurrentBlock( BlockRelated memory self ) internal view returns (bool) { return verifyAtBlock(self, block.number); } /** * @notice Verifies self struct at any block * @param self self struct * @return true on correct self struct */ function verifyAtAnyBlock( BlockRelated memory self ) internal pure returns (bool) { return verifyAtBlock(self, 0); } /** * @notice Verifies self struct at specific block * @param self self struct * @param blockNumber block number to verify * @return true on correct self struct */ function verifyAtBlock( BlockRelated memory self, uint256 blockNumber ) internal pure returns (bool) { bool result = false; if (self.added) { if (self.removedAtBlockNumber == 0) { result = true; } else if (blockNumber == 0) { result = true; } else { result = self.removedAtBlockNumber > blockNumber; } } return result; } }