const format = require('../format-lines'); const VALUE_SIZES = [ 224, 160 ]; const header = `\ pragma solidity ^0.8.0; import "../utils/Checkpoints.sol"; `; const legacy = () => `\ contract CheckpointsMock { using Checkpoints for Checkpoints.History; Checkpoints.History private _totalCheckpoints; function latest() public view returns (uint256) { return _totalCheckpoints.latest(); } function push(uint256 value) public returns (uint256, uint256) { return _totalCheckpoints.push(value); } function getAtBlock(uint256 blockNumber) public view returns (uint256) { return _totalCheckpoints.getAtBlock(blockNumber); } function getAtProbablyRecentBlock(uint256 blockNumber) public view returns (uint256) { return _totalCheckpoints.getAtProbablyRecentBlock(blockNumber); } function length() public view returns (uint256) { return _totalCheckpoints._checkpoints.length; } } `; const checkpoint = length => `\ contract Checkpoints${length}Mock { using Checkpoints for Checkpoints.Trace${length}; Checkpoints.Trace${length} private _totalCheckpoints; function latest() public view returns (uint${length}) { return _totalCheckpoints.latest(); } function push(uint${256 - length} key, uint${length} value) public returns (uint${length}, uint${length}) { return _totalCheckpoints.push(key, value); } function lowerLookup(uint${256 - length} key) public view returns (uint${length}) { return _totalCheckpoints.lowerLookup(key); } function upperLookup(uint${256 - length} key) public view returns (uint${length}) { return _totalCheckpoints.upperLookup(key); } function length() public view returns (uint256) { return _totalCheckpoints._checkpoints.length; } } `; // GENERATE module.exports = format( header, legacy(), ...VALUE_SIZES.map(checkpoint), );