Contract 0xe79232d0d8b551b2eea8736a3727ad12d64f21f9

Contract Overview

Balance:
0 MATIC
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0xb43647d5131c4daba2febb8b48092187cdffa7ff5e566a4ce1d506eefafeb1d5Set Perform Gas ...329012882023-03-09 13:48:5622 days 4 hrs ago0x8fa510072009e71cfd447169ab5a84cac394f58a IN  0xe79232d0d8b551b2eea8736a3727ad12d64f21f90 MATIC0.000079527 3.000000017
0x71894c76e128f21c8c9d92476b4e08fa517039480e59db192425e8a9feda6af6Set Perform Gas ...329012282023-03-09 13:46:4822 days 4 hrs ago0x8fa510072009e71cfd447169ab5a84cac394f58a IN  0xe79232d0d8b551b2eea8736a3727ad12d64f21f90 MATIC0.000079527 3.000000021
0xa78198caf7a9f5b58ea11dad134aa8298764280178514c5673b53172d0f62727Set Spread328971852023-03-09 11:23:3822 days 6 hrs ago0x8fa510072009e71cfd447169ab5a84cac394f58a IN  0xe79232d0d8b551b2eea8736a3727ad12d64f21f90 MATIC0.000085977 3.000000016
0x47f488dc7c4d290c1cd78e0374f3895696a554ae89c4ed0026b2d621e4d87b1aSet Perform Data...328971232023-03-09 11:21:2622 days 7 hrs ago0x8fa510072009e71cfd447169ab5a84cac394f58a IN  0xe79232d0d8b551b2eea8736a3727ad12d64f21f90 MATIC0.000130719 3.000000016
0x0d811b391897998e611c48edf44b5f223d71613978e36c7c64194a994418f533Set Perform Gas ...328971182023-03-09 11:21:1422 days 7 hrs ago0x8fa510072009e71cfd447169ab5a84cac394f58a IN  0xe79232d0d8b551b2eea8736a3727ad12d64f21f90 MATIC0.000130827 3.000000016
0x10e1798a9e4513a987e7207ac2dd726f01060b408eb73ee0109e7c19a5147b21Set Check Gas To...328971092023-03-09 11:20:5622 days 7 hrs ago0x8fa510072009e71cfd447169ab5a84cac394f58a IN  0xe79232d0d8b551b2eea8736a3727ad12d64f21f90 MATIC0.000130761 3.000000016
0xa2d2140416ff6931ec135143295774fd4ff20e0470a3e6c09ab8bd365556e13aSet Spread328971042023-03-09 11:20:4622 days 7 hrs ago0x8fa510072009e71cfd447169ab5a84cac394f58a IN  0xe79232d0d8b551b2eea8736a3727ad12d64f21f90 MATIC0.000084669 3.000000016
0x8ec1f887f5088de0b704916a75deb0f93fe0c421fed8dd05300ab4c9b72829080x60806040328970202023-03-09 11:17:4622 days 7 hrs ago0x8fa510072009e71cfd447169ab5a84cac394f58a IN  Create: UpkeepCounterStats0 MATIC0.001429982568 1.579672317
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

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)

File 1 of 1 : UpkeepCounterStats.sol
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);
  }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000000
  },
  "metadata": {
    "bytecodeHash": "none",
    "useLiteralContent": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

[{"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"}]

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


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading