Contract Overview
Balance:
0 MATIC
My Name Tag:
Not Available
[ Download CSV Export ]
Contract Name:
UpkeepCounterStats
Compiler Version
v0.8.13+commit.abaa5c0e
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.8.6; contract UpkeepCounterStats { event PerformingUpkeep( uint256 initialBlock, uint256 lastBlock, uint256 previousBlock, uint256 counter, bytes performData ); uint256 public interval; uint256 public lastBlock; uint256 public previousPerformBlock; uint256 public initialBlock; uint256 public counter; uint256 public performGasToBurn; uint256 public checkGasToBurn; mapping(bytes32 => bool) public dummyMap; // used to force storage lookup uint256 public performDataSize; uint256[] private delays; constructor(uint256 _interval) { interval = _interval; previousPerformBlock = 0; lastBlock = block.number; initialBlock = 0; counter = 0; performGasToBurn = 0; checkGasToBurn = 0; } function checkUpkeep(bytes calldata) external returns (bool, bytes memory) { uint256 startGas = gasleft(); bytes memory pData = new bytes(performDataSize); uint256 blockNum = block.number; bool needed = eligible(); while (startGas - gasleft() + 10000 < checkGasToBurn) { // 10K margin over gas to burn // Hard coded check gas to burn dummyMap[blockhash(blockNum)] = false; // arbitrary storage writes blockNum--; } return (needed, pData); } function performUpkeep(bytes calldata performData) external { uint256 startGas = gasleft(); if (initialBlock == 0) { initialBlock = block.number; } else { // Calculate and append delay uint256 delay = block.number - previousPerformBlock - interval; delays.push(delay); } lastBlock = block.number; counter = counter + 1; emit PerformingUpkeep(initialBlock, lastBlock, previousPerformBlock, counter, performData); previousPerformBlock = lastBlock; uint256 blockNum = block.number; while (startGas - gasleft() + 10000 < performGasToBurn) { // 10K margin over gas to burn dummyMap[blockhash(blockNum)] = false; // arbitrary storage writes blockNum--; } } function eligible() public view returns (bool) { if (initialBlock == 0) { return true; } return (block.number - lastBlock) >= interval; } function setPerformGasToBurn(uint256 value) public { performGasToBurn = value; } function setCheckGasToBurn(uint256 value) public { checkGasToBurn = value; } function setPerformDataSize(uint256 value) public { performDataSize = value; } function setSpread(uint256 _interval) external { interval = _interval; initialBlock = 0; counter = 0; uint256 n = delays.length; uint256 i; for (i = 0; i < n; i++) delays.pop(); } function getDelaysLength() public view returns (uint256) { return delays.length; } function getDelays() public view returns (uint256[] memory) { return delays; } function getSumDelayLastNPerforms(uint256 n) public view returns (uint256, uint256) { uint256 i; uint256 len = delays.length; if (n == 0 || n >= len) { n = len; } uint256 sum = 0; for (i = 0; i < n; i++) sum = sum + delays[len - i - 1]; return (sum, n); } function getPxDelayLastNPerforms(uint256 p, uint256 n) public view returns (uint256) { uint256 i; uint256 len = delays.length; if (n == 0 || n >= len) { n = len; } uint256[] memory subArr = new uint256[](n); for (i = 0; i < n; i++) subArr[i] = (delays[len - i - 1]); quickSort(subArr, int256(0), int256(subArr.length - 1)); uint256 index = (p * subArr.length) / 100; return subArr[index]; } function quickSort( uint256[] memory arr, int256 left, int256 right ) private pure { int256 i = left; int256 j = right; if (i == j) return; uint256 pivot = arr[uint256(left + (right - left) / 2)]; while (i <= j) { while (arr[uint256(i)] < pivot) i++; while (pivot < arr[uint256(j)]) j--; if (i <= j) { (arr[uint256(i)], arr[uint256(j)]) = (arr[uint256(j)], arr[uint256(i)]); i++; j--; } } if (left < j) quickSort(arr, left, j); if (i < right) quickSort(arr, i, right); } }
{ "optimizer": { "enabled": true, "runs": 1000000 }, "metadata": { "bytecodeHash": "none", "useLiteralContent": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[{"internalType":"uint256","name":"_interval","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"initialBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"counter","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"performData","type":"bytes"}],"name":"PerformingUpkeep","type":"event"},{"inputs":[],"name":"checkGasToBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"checkUpkeep","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"counter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"dummyMap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDelays","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDelaysLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"p","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"getPxDelayLastNPerforms","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"getSumDelayLastNPerforms","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"interval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performDataSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performGasToBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"performData","type":"bytes"}],"name":"performUpkeep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"previousPerformBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setCheckGasToBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setPerformDataSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setPerformGasToBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"setSpread","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051610eec380380610eec83398101604081905261002f91610054565b600090815560028190554360015560038190556004819055600581905560065561006d565b60006020828403121561006657600080fd5b5051919050565b610e708061007c6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636e04ff0d116100cd578063a12a45c511610081578063b66a261c11610066578063b66a261c1461029a578063d832d92f146102ad578063dae467db146102b557600080fd5b8063a12a45c51461027e578063b30566b41461029157600080fd5b8063806b984f116100b2578063806b984f14610263578063917d895f1461026c578063947a36fb1461027557600080fd5b80636e04ff0d1461020f5780637145f11b1461023057600080fd5b80634585e33b1161012457806352bd22651161010957806352bd2265146101de57806361bc221a146101f15780636bc07b2b146101fa57600080fd5b80634585e33b146101c25780635254e83b146101d557600080fd5b80632aefc7c5116101555780632aefc7c5146101995780632cb15864146101b05780632ff3617d146101b957600080fd5b806313bda75b146101715780632555d2cf14610186575b600080fd5b61018461017f366004610902565b600655565b005b610184610194366004610902565b600555565b6009545b6040519081526020015b60405180910390f35b61019d60035481565b61019d60065481565b6101846101d036600461091b565b6102dd565b61019d60085481565b6101846101ec366004610902565b600855565b61019d60045481565b610202610418565b6040516101a7919061098d565b61022261021d36600461091b565b610470565b6040516101a79291906109d1565b61025361023e366004610902565b60076020526000908152604090205460ff1681565b60405190151581526020016101a7565b61019d60015481565b61019d60025481565b61019d60005481565b61019d61028c366004610a4e565b610546565b61019d60055481565b6101846102a8366004610902565b610676565b6102536106d1565b6102c86102c3366004610902565b6106fa565b604080519283526020830191909152016101a7565b60005a90506003546000036102f55743600355610345565b600080546002546103069043610a9f565b6103109190610a9f565b600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155505b43600190815560045461035791610ab6565b60048190556003546001546002546040517f0411341c5ec676ec0182789e9e8abbf746db6d49e5016ace9ca31d45900ee3a59461039a9493929189908990610ace565b60405180910390a1600154600255435b6005545a6103b89084610a9f565b6103c490612710610ab6565b1015610412578040600090815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558061040a81610b37565b9150506103aa565b50505050565b6060600980548060200260200160405190810160405280929190818152602001828054801561046657602002820191906000526020600020905b815481526020019060010190808311610452575b5050505050905090565b6000606060005a9050600060085467ffffffffffffffff81111561049657610496610b6c565b6040519080825280601f01601f1916602001820160405280156104c0576020820181803683370190505b5090504360006104ce6106d1565b90505b6006545a6104df9086610a9f565b6104eb90612710610ab6565b1015610539578140600090815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558161053181610b37565b9250506104d1565b9791965090945050505050565b600954600090819083158061055b5750808410155b15610564578093505b60008467ffffffffffffffff81111561057f5761057f610b6c565b6040519080825280602002602001820160405280156105a8578160200160208202803683370190505b509050600092505b8483101561061a57600960016105c68585610a9f565b6105d09190610a9f565b815481106105e0576105e0610b9b565b90600052602060002001548184815181106105fd576105fd610b9b565b60209081029190910101528261061281610bca565b9350506105b0565b6106338160006001845161062e9190610a9f565b610782565b600060648251886106449190610c02565b61064e9190610c6e565b905081818151811061066257610662610b9b565b602002602001015194505050505092915050565b600081815560038190556004819055600954905b818110156106cc5760098054806106a3576106a3610c82565b6001900381819060005260206000200160009055905580806106c490610bca565b91505061068a565b505050565b60006003546000036106e35750600190565b6000546001546106f39043610a9f565b1015905090565b600954600090819081908415806107115750808510155b1561071a578094505b60008092505b8583101561077a57600960016107368585610a9f565b6107409190610a9f565b8154811061075057610750610b9b565b9060005260206000200154816107669190610ab6565b90508261077281610bca565b935050610720565b959350505050565b8181808203610792575050505050565b60008560026107a18787610cb1565b6107ab9190610d25565b6107b59087610d8d565b815181106107c5576107c5610b9b565b602002602001015190505b8183136108d4575b808684815181106107eb576107eb610b9b565b6020026020010151101561080b578261080381610e01565b9350506107d8565b85828151811061081d5761081d610b9b565b602002602001015181101561083e578161083681610e32565b92505061080b565b8183136108cf5785828151811061085757610857610b9b565b602002602001015186848151811061087157610871610b9b565b602002602001015187858151811061088b5761088b610b9b565b602002602001018885815181106108a4576108a4610b9b565b602090810291909101019190915252826108bd81610e01565b93505081806108cb90610e32565b9250505b6107d0565b818512156108e7576108e7868684610782565b838312156108fa576108fa868486610782565b505050505050565b60006020828403121561091457600080fd5b5035919050565b6000806020838503121561092e57600080fd5b823567ffffffffffffffff8082111561094657600080fd5b818501915085601f83011261095a57600080fd5b81358181111561096957600080fd5b86602082850101111561097b57600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156109c5578351835292840192918401916001016109a9565b50909695505050505050565b821515815260006020604081840152835180604085015260005b81811015610a07578581018301518582016060015282016109eb565b81811115610a19576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201606001949350505050565b60008060408385031215610a6157600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015610ab157610ab1610a70565b500390565b60008219821115610ac957610ac9610a70565b500190565b86815285602082015284604082015283606082015260a060808201528160a0820152818360c0830137600081830160c090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010195945050505050565b600081610b4657610b46610a70565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610bfb57610bfb610a70565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610c3a57610c3a610a70565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610c7d57610c7d610c3f565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615610ceb57610ceb610a70565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615610d1f57610d1f610a70565b50500390565b600082610d3457610d34610c3f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615610d8857610d88610a70565b500590565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615610dc757610dc7610a70565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615610dfb57610dfb610a70565b50500190565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610bfb57610bfb610a70565b60007f80000000000000000000000000000000000000000000000000000000000000008203610b4657610b46610a7056fea164736f6c634300080d000a0000000000000000000000000000000000000000000000000000000000000005
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000005
-----Decoded View---------------
Arg [0] : _interval (uint256): 5
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000005
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|