Contract 0x6e1954da37fad279114035a45da49ca30ea5a988

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x8218938275956ddf6c8cc8f79405e6432010ff9774d5b9e817e8aa311938ac58Claim All285283792022-10-05 14:24:501 day 15 hrs ago0xc8c0342dbe53cf8b12d46edca7b77cd71d6884d8 IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.00001446
0x595c6d93272fd8ee707daa265ddd8bf8795ebb05365826643fbcf35a6f37baa1Retrieve199684112022-08-11 3:52:1157 days 2 hrs agoPlutusDAO: Deployer IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000137363558 ETH
0x0ff528d7be107a40eecfcdeaff62ae461025d3d6328b276a39a9de0c320d30e7Retrieve199683822022-08-11 3:52:1157 days 2 hrs agoPlutusDAO: Deployer IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.00013737066 ETH
0xf5b811e69c0071c44ed39899be3694a22551efff9b12352dbd986c749822e078Claim All199615392022-08-11 2:12:1357 days 3 hrs ago0xff8db8afb5da4a676534f3a31659ca2f0fb2adc0 IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000128761199 ETH
0x8b7f7e2d256765154c578eea3201ca61b16d54971342a4b58bcee925b960cd67Claim All198456142022-08-09 19:40:5858 days 10 hrs ago0x880e14298dd46418806f7b5e12b92aa9873bb5d4 IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.00009335352 ETH
0x656fdc7c4bcfed0df92aa094d87efa7dc9f2de2e8f07cbcce0a23f7a062ee3eaClaim All198346932022-08-09 16:54:2158 days 13 hrs ago0x8c0558485e37ff142255d5c9556d832b5dd251a1 IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000103630842 ETH
0x6a4fde0680bcde6c2065503aafca4211860246afc888e8b04737bb49f4923d5aClaim All198159322022-08-09 14:01:4858 days 16 hrs ago0xbe1e5a07c3af9b648b2dec7f193bc0835646725e IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000076339148 ETH
0x792889ac38acb76d32f0b10300a303b1303a4f9eea8ee6600bd9871253874452Claim All198067602022-08-09 12:58:1158 days 17 hrs ago0x126ce873371c15a664306a387cc2329f67cc515b IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000061449262 ETH
0x6abc9b1c8709ffb2a747f695fb929bb1c88aa4c26792f6336d4773b039c2abc5Claim All197730662022-08-09 5:04:5659 days 1 hr ago0x80af73feef1b9d0f2ef230a548d752e7dc984646 IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000095492991 ETH
0xc0c75709c5c3e913a754b730472c833959148cc63824f1e37bfdacc9c77768e6Claim All197369822022-08-08 16:51:4259 days 13 hrs ago0x441ace24afb1d17621d3ec78d3911ee2297d993d IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000085687212 ETH
0x7ab76458d54f6964ee609b996fb9c6fbe0fa7ebfdcb1c0d587bbea5b7588fc4cClaim All197247392022-08-08 14:22:2559 days 15 hrs ago0xc8c0342dbe53cf8b12d46edca7b77cd71d6884d8 IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000047158464 ETH
0xeba822d043ca4a112fe30acf77af152ea3467650f2d2384366b941e379e854b4Claim All197113812022-08-08 11:56:0959 days 18 hrs ago0x435b7d470767cb121f37dd296b2ac7913fdf5427 IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000048069793 ETH
0xc7aaf547f94ba2d57f5ea95b79f547f1973eb7a549e8a97894793f9c9a130e05Claim All196747282022-08-08 3:22:0860 days 2 hrs ago0xaf79312eb821871208ac76a80c8e282f8796964e IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.00004523936 ETH
0x14d3f63bbceea7ed5a8ccdc5674bb1c6ccf369e9c1311dd7a379cf545bdf38c0Claim All196621482022-08-07 23:26:4860 days 6 hrs ago0xb19be18a7d279432f607676acd34c62ff932daba IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.00005847246 ETH
0xb2b35657bbce300857a934afa1d371efccf33be5dce84275316d1d5aa37e5391Claim All196591112022-08-07 22:24:4460 days 7 hrs ago0xf540ea05395bf05d4b686ddb69da04037e01ab73 IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000057191461 ETH
0x3e34a484bc1ea959ac186ecdad41a585f7523f9410ae915b4683b48787bde977Claim All196564392022-08-07 21:23:1160 days 8 hrs ago0x766c64d809056fbb492fdb410a6b4857c015619a IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000058717205 ETH
0x24ad83f0cb3a542f39f5aae9d18cdade03c34b2bc76408789290040b900a86c8Claim All196541782022-08-07 20:34:4560 days 9 hrs ago0xe4709a6bc622d60ee15a29880561c85c7fdac46d IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.00005292118 ETH
0x104c09a7a5703b3e6f93ed7268bbb5eb6d47ffa1b9d263906af6fadaee92ee28Claim All196466792022-08-07 17:48:3460 days 12 hrs ago0x133d93566f9699b3af46fe150daa8a67a9563ed6 IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000044587996 ETH
0x506c7599038bd51fffdf1bbd67f3dfae4964183cb3c49c3b6fbf9681b7417bd6Claim All196268272022-08-07 12:59:3060 days 17 hrs ago0x2336ad6e57b46579e16bbea66d6539dbb8e38eca IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000027881184 ETH
0xff01d348578317dffe798e61874d94a6e4ee0d858558519827d081de66fcadbeClaim All196061472022-08-07 8:17:3060 days 21 hrs ago0x5bc005465ac8ec09e005781bd3968eb23ed22ec1 IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000040556197 ETH
0x41de3f87b7916b5f740a96957c753d1b75df96cd0eba2b50a0c9c6a04c47fcf2Claim All196003422022-08-07 6:48:5760 days 23 hrs ago0xe03e5a23c93d7bfc98755db641c2321ea8555314 IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000031686423 ETH
0xea4cfbd38a35aa7c1ac182f66a077efd2bde6f8d6e454ef7a2a96831112128cbClaim All195799252022-08-07 0:40:1961 days 5 hrs ago0x134f06a09dd9a16b3597810c3990b28447017f49 IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000033945098 ETH
0x7d8e3715bcf0aa30b34fd24bad248d25d4ea41ca02c24e4cdca5990bc0b69dc0Claim All195739172022-08-06 22:24:5561 days 7 hrs ago0x775469c32c277dbe5351c3210a795885c7a4f17b IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000046682747 ETH
0x0cad7532c408e1b50bfba55807bc763bf93abdd531185ccebfbfb2f9ec0e5762Claim All195562152022-08-06 17:12:5961 days 12 hrs ago0xaf79312eb821871208ac76a80c8e282f8796964e IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.00004906702 ETH
0xb26e88bdcce3a7dae84bb2064a40536eaeccd1219525ed3fc39c8c294e290badClaim All194992462022-08-06 1:06:5562 days 5 hrs ago0x39a9218c92aad4137282ada39e254aa346af16ae IN  0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH0.000058363923 ETH
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x412e6dc71d3ca68ad2c2f133cfb8cd376d221f98ee2319d358a08ddc9bb0fc1d287377082022-10-06 17:35:5312 hrs 33 mins ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0x412e6dc71d3ca68ad2c2f133cfb8cd376d221f98ee2319d358a08ddc9bb0fc1d287377082022-10-06 17:35:5312 hrs 33 mins ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0x412e6dc71d3ca68ad2c2f133cfb8cd376d221f98ee2319d358a08ddc9bb0fc1d287377082022-10-06 17:35:5312 hrs 33 mins ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0x412e6dc71d3ca68ad2c2f133cfb8cd376d221f98ee2319d358a08ddc9bb0fc1d287377082022-10-06 17:35:5312 hrs 33 mins ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0x8218938275956ddf6c8cc8f79405e6432010ff9774d5b9e817e8aa311938ac58285283792022-10-05 14:24:501 day 15 hrs ago 0x6e1954da37fad279114035a45da49ca30ea5a988 Plutus DAO: plsDPX Token0 ETH
0x8218938275956ddf6c8cc8f79405e6432010ff9774d5b9e817e8aa311938ac58285283792022-10-05 14:24:501 day 15 hrs ago 0x6e1954da37fad279114035a45da49ca30ea5a988 Plutus DAO: Plutus Epoch Staking (6 Month)0 ETH
0x8218938275956ddf6c8cc8f79405e6432010ff9774d5b9e817e8aa311938ac58285283792022-10-05 14:24:501 day 15 hrs ago 0x6e1954da37fad279114035a45da49ca30ea5a988 Plutus DAO: Plutus Epoch Staking (6 Month)0 ETH
0x8218938275956ddf6c8cc8f79405e6432010ff9774d5b9e817e8aa311938ac58285283792022-10-05 14:24:501 day 15 hrs ago 0x6e1954da37fad279114035a45da49ca30ea5a988 Plutus DAO: Plutus Epoch Staking (6 Month)0 ETH
0x8218938275956ddf6c8cc8f79405e6432010ff9774d5b9e817e8aa311938ac58285283792022-10-05 14:24:501 day 15 hrs ago 0x6e1954da37fad279114035a45da49ca30ea5a988 Plutus DAO: Plutus Epoch Staking (6 Month)0 ETH
0x64375430500883c0ee1e50c35be3e0d94a7079d7a0ba58a6e9321d14f4b7b4f4284645982022-10-05 8:05:011 day 22 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0x64375430500883c0ee1e50c35be3e0d94a7079d7a0ba58a6e9321d14f4b7b4f4284645982022-10-05 8:05:011 day 22 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0x64375430500883c0ee1e50c35be3e0d94a7079d7a0ba58a6e9321d14f4b7b4f4284645982022-10-05 8:05:011 day 22 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0x64375430500883c0ee1e50c35be3e0d94a7079d7a0ba58a6e9321d14f4b7b4f4284645982022-10-05 8:05:011 day 22 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0x7370cd146617222c1889aff963bab196f673b467e38828c6d6291b77775fbb7d283882592022-10-04 20:36:212 days 9 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0x7370cd146617222c1889aff963bab196f673b467e38828c6d6291b77775fbb7d283882592022-10-04 20:36:212 days 9 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0x7370cd146617222c1889aff963bab196f673b467e38828c6d6291b77775fbb7d283882592022-10-04 20:36:212 days 9 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0x7370cd146617222c1889aff963bab196f673b467e38828c6d6291b77775fbb7d283882592022-10-04 20:36:212 days 9 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0xf15f4704753cf83309953d18b42185a31ac8daec110d1971ea52469053652323278579922022-10-01 21:36:195 days 8 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0xf15f4704753cf83309953d18b42185a31ac8daec110d1971ea52469053652323278579922022-10-01 21:36:195 days 8 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0xf15f4704753cf83309953d18b42185a31ac8daec110d1971ea52469053652323278579922022-10-01 21:36:195 days 8 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0xf15f4704753cf83309953d18b42185a31ac8daec110d1971ea52469053652323278579922022-10-01 21:36:195 days 8 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0x0356ef15b1a2cfb3e94b1dfb2e83d4690139bdc7f85f8773d90a3d1a67cec1a0278402112022-10-01 18:50:255 days 11 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0x0356ef15b1a2cfb3e94b1dfb2e83d4690139bdc7f85f8773d90a3d1a67cec1a0278402112022-10-01 18:50:255 days 11 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0x0356ef15b1a2cfb3e94b1dfb2e83d4690139bdc7f85f8773d90a3d1a67cec1a0278402112022-10-01 18:50:255 days 11 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
0x0356ef15b1a2cfb3e94b1dfb2e83d4690139bdc7f85f8773d90a3d1a67cec1a0278402112022-10-01 18:50:255 days 11 hrs ago 0x60c0a5d66cbc9fc795a95bb2e0960c8adac74f9f 0x6e1954da37fad279114035a45da49ca30ea5a9880 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EpochStakingRewards

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 4 : EpochStakingRewards.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
import '@openzeppelin/contracts/access/Ownable.sol';

interface IPlutusEpochStaking {
  function stakedDetails(address _user) external view returns (uint112 amount, uint32 lastCheckpoint);

  function epochCheckpoints(uint32 _epoch)
    external
    view
    returns (
      uint32 startedAt,
      uint32 endedAt,
      uint112 totalStaked
    );

  function currentTotalStaked() external view returns (uint112);
}

contract EpochStakingRewards is Ownable {
  uint256 constant EPOCH_DURATION = 2_628_000 seconds;

  IERC20 public immutable plsDPX;
  IERC20 public immutable plsJONES;
  IPlutusEpochStaking public immutable staking;

  struct Reward {
    uint32 addedAtTimestamp;
    uint96 plsDpx;
    uint96 plsJones;
  }

  struct ClaimDetails {
    bool fullyClaimed;
    uint32 lastClaimedTimestamp;
    uint96 plsDpxClaimedAmt;
    uint96 plsJonesClaimedAmt;
  }

  uint32 public epoch;
  uint96 public totalPlsDpxRewards;
  uint96 public totalPlsJonesRewards;

  // Address => Epoch => Claim Details
  mapping(address => mapping(uint32 => ClaimDetails)) public claimDetails;

  // Epoch => Reward
  mapping(uint32 => Reward) public epochRewards;

  constructor(
    address _governance,
    address _plsDpx,
    address _plsJones,
    address _staking
  ) {
    transferOwnership(_governance);
    plsDPX = IERC20(_plsDpx);
    plsJONES = IERC20(_plsJones);
    staking = IPlutusEpochStaking(_staking);
  }

  function claimRewards(uint32 _epoch) public {
    ClaimDetails memory _claimDetails = claimDetails[msg.sender][_epoch];
    Reward memory rewardsForEpoch = epochRewards[_epoch];

    // User rewards for epoch
    uint256 userPlsDpxShare = calculateShare(msg.sender, _epoch, rewardsForEpoch.plsDpx);
    uint256 userPlsJonesShare = calculateShare(msg.sender, _epoch, rewardsForEpoch.plsJones);

    require(userPlsDpxShare > 0 || userPlsJonesShare > 0, 'No rewards');

    uint256 claimablePlsDpx; // user portion claimable
    uint256 claimablePlsJones; // user portion claimable

    // Claim prorated amount for current epoch
    uint256 vestedDuration;

    unchecked {
      if (_claimDetails.lastClaimedTimestamp > rewardsForEpoch.addedAtTimestamp) {
        vestedDuration = block.timestamp - _claimDetails.lastClaimedTimestamp;
      } else {
        vestedDuration = block.timestamp - rewardsForEpoch.addedAtTimestamp;
      }

      claimablePlsDpx += (userPlsDpxShare * vestedDuration) / EPOCH_DURATION;
      claimablePlsJones += (userPlsJonesShare * vestedDuration) / EPOCH_DURATION;
    }

    bool _fullyClaimed;

    if (claimablePlsDpx > userPlsDpxShare - _claimDetails.plsDpxClaimedAmt) {
      // if claimable asset calculated is > claimable amt
      claimablePlsDpx = uint96(userPlsDpxShare - _claimDetails.plsDpxClaimedAmt);
      _fullyClaimed = true;
    } else {
      claimablePlsDpx = uint96(claimablePlsDpx);
    }

    if (claimablePlsJones > userPlsJonesShare - _claimDetails.plsJonesClaimedAmt) {
      // if claimable asset calculated is > claimable amt
      claimablePlsJones = uint96(userPlsJonesShare - _claimDetails.plsJonesClaimedAmt);
    } else {
      claimablePlsJones = uint96(claimablePlsJones);
    }

    // Update user claim details
    unchecked {
      claimDetails[msg.sender][_epoch] = ClaimDetails({
        fullyClaimed: _fullyClaimed,
        plsDpxClaimedAmt: _claimDetails.plsDpxClaimedAmt + uint96(claimablePlsDpx),
        plsJonesClaimedAmt: _claimDetails.plsJonesClaimedAmt + uint96(claimablePlsJones),
        lastClaimedTimestamp: uint32(block.timestamp)
      });
    }

    plsDPX.transfer(msg.sender, claimablePlsDpx);
    plsJONES.transfer(msg.sender, claimablePlsJones);

    emit ClaimRewards(msg.sender);
  }

  function claimAll() external {
    uint32 _epoch = epoch;

    unchecked {
      for (uint32 i = 0; i <= _epoch; i++) {
        if (!claimDetails[msg.sender][i].fullyClaimed) {
          claimRewards(i);
        }
      }
    }
  }

  /** VIEWS */
  /// @dev Calculate share of rewards for epoch
  function calculateShare(
    address _addr,
    uint32 _epoch,
    uint256 _rewardAmt
  ) public view returns (uint256) {
    (uint112 amount, ) = staking.stakedDetails(_addr);
    (, , uint112 totalStaked) = staking.epochCheckpoints(_epoch);
    return (amount * _rewardAmt) / totalStaked;
  }

  function pendingRewardsFor(uint32 _epoch) public view returns (uint256 _plsDpx, uint256 _plsJones) {
    ClaimDetails memory _claimDetails = claimDetails[msg.sender][_epoch];
    Reward memory rewardsForEpoch = epochRewards[_epoch];

    // User rewards for epoch
    uint256 userPlsDpxShare = calculateShare(msg.sender, _epoch, rewardsForEpoch.plsDpx);
    uint256 userPlsJonesShare = calculateShare(msg.sender, _epoch, rewardsForEpoch.plsJones);

    require(userPlsDpxShare > 0 || userPlsJonesShare > 0, 'No rewards');

    uint256 claimablePlsDpx; // user portion claimable
    uint256 claimablePlsJones; // user portion claimable

    // Claim prorated amount for current epoch
    uint256 vestedDuration;

    unchecked {
      if (_claimDetails.lastClaimedTimestamp > rewardsForEpoch.addedAtTimestamp) {
        vestedDuration = block.timestamp - _claimDetails.lastClaimedTimestamp;
      } else {
        vestedDuration = block.timestamp - rewardsForEpoch.addedAtTimestamp;
      }

      claimablePlsDpx += (userPlsDpxShare * vestedDuration) / EPOCH_DURATION;
      claimablePlsJones += (userPlsJonesShare * vestedDuration) / EPOCH_DURATION;
    }

    bool _fullyClaimed;

    if (claimablePlsDpx > userPlsDpxShare - _claimDetails.plsDpxClaimedAmt) {
      // if claimable asset calculated is > claimable amt
      claimablePlsDpx = uint96(userPlsDpxShare - _claimDetails.plsDpxClaimedAmt);
      _fullyClaimed = true;
    } else {
      claimablePlsDpx = uint96(claimablePlsDpx);
    }

    if (claimablePlsJones > userPlsJonesShare - _claimDetails.plsJonesClaimedAmt) {
      // if claimable asset calculated is > claimable amt
      claimablePlsJones = uint96(userPlsJonesShare - _claimDetails.plsJonesClaimedAmt);
    } else {
      claimablePlsJones = uint96(claimablePlsJones);
    }

    _plsDpx = claimablePlsDpx;
    _plsJones = claimablePlsJones;
  }

  function pendingRewards() external view returns (uint256 _pendingDpx, uint256 _pendingJones) {
    uint32 _epoch = epoch;

    for (uint32 i = 0; i <= _epoch; i++) {
      if (!claimDetails[msg.sender][i].fullyClaimed) {
        (uint256 d, uint256 j) = pendingRewardsFor(i);
        _pendingDpx += d;
        _pendingJones += j;
      }
    }
  }

  /** OWNER */
  /// @dev deposit to rewards contract
  function depositRewards(uint96 _plsDpx, uint96 _plsJones) external onlyOwner {
    if (totalPlsDpxRewards == 0 && totalPlsJonesRewards == 0) {
      // No op - Don't increment it for very first deposit
    } else {
      epoch += 1;
    }

    epochRewards[epoch] = Reward({ addedAtTimestamp: uint32(block.timestamp), plsDpx: _plsDpx, plsJones: _plsJones });
    totalPlsJonesRewards += _plsJones;
    totalPlsDpxRewards += _plsDpx;

    plsDPX.transferFrom(msg.sender, address(this), _plsDpx);
    plsJONES.transferFrom(msg.sender, address(this), _plsJones);

    emit DepositRewards(epoch);
  }

  /**
    Retrieve stuck funds or new reward tokens
   */
  function retrieve(IERC20 token) external onlyOwner {
    if ((address(this).balance) != 0) {
      payable(owner()).transfer(address(this).balance);
    }

    token.transfer(owner(), token.balanceOf(address(this)));
  }

  event DepositRewards(uint32 epoch);
  event ClaimRewards(address indexed _recipient);
}

File 2 of 4 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 4 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 4 of 4 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_plsDpx","type":"address"},{"internalType":"address","name":"_plsJones","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_recipient","type":"address"}],"name":"ClaimRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"epoch","type":"uint32"}],"name":"DepositRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint32","name":"_epoch","type":"uint32"},{"internalType":"uint256","name":"_rewardAmt","type":"uint256"}],"name":"calculateShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"claimDetails","outputs":[{"internalType":"bool","name":"fullyClaimed","type":"bool"},{"internalType":"uint32","name":"lastClaimedTimestamp","type":"uint32"},{"internalType":"uint96","name":"plsDpxClaimedAmt","type":"uint96"},{"internalType":"uint96","name":"plsJonesClaimedAmt","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_epoch","type":"uint32"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint96","name":"_plsDpx","type":"uint96"},{"internalType":"uint96","name":"_plsJones","type":"uint96"}],"name":"depositRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"epoch","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"epochRewards","outputs":[{"internalType":"uint32","name":"addedAtTimestamp","type":"uint32"},{"internalType":"uint96","name":"plsDpx","type":"uint96"},{"internalType":"uint96","name":"plsJones","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"_pendingDpx","type":"uint256"},{"internalType":"uint256","name":"_pendingJones","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_epoch","type":"uint32"}],"name":"pendingRewardsFor","outputs":[{"internalType":"uint256","name":"_plsDpx","type":"uint256"},{"internalType":"uint256","name":"_plsJones","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"plsDPX","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"plsJONES","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"retrieve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"contract IPlutusEpochStaking","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPlsDpxRewards","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPlsJonesRewards","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e06040523480156200001157600080fd5b5060405162001ae138038062001ae18339810160408190526200003491620001ab565b6200003f3362000069565b6200004a84620000b9565b6001600160a01b0392831660805290821660a0521660c0525062000208565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620001195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620001805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000110565b6200018b8162000069565b50565b80516001600160a01b0381168114620001a657600080fd5b919050565b60008060008060808587031215620001c257600080fd5b620001cd856200018e565b9350620001dd602086016200018e565b9250620001ed604086016200018e565b9150620001fd606086016200018e565b905092959194509250565b60805160a05160c05161187f620002626000396000818161023a01528181610f4901526110050152600081816102b7015281816108da0152610deb0152600081816101550152818161082a0152610d03015261187f6000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806386012bfd116100b2578063b4559c7411610081578063eded3fda11610066578063eded3fda146103c1578063ef99e12b146103de578063f2fde38b146103f157600080fd5b8063b4559c741461034a578063d1058e59146103b957600080fd5b806386012bfd146102d95780638da5cb5b146102fa578063900cf0cf1461030b5780639409927a1461033757600080fd5b80634cf088d9116101095780636f47999b116100ee5780636f47999b14610297578063715018a6146102aa57806375aff88f146102b257600080fd5b80634cf088d914610235578063590c2be91461025c57600080fd5b80630a79309b1461013b5780630c913b34146101505780631e6ad350146101945780631fb18797146101a7575b600080fd5b61014e610149366004611556565b610404565b005b6101777f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61014e6101a2366004611596565b6105f0565b6101ff6101b53660046115db565b600260209081526000928352604080842090915290825290205460ff81169063ffffffff610100820416906001600160601b03650100000000008204811691600160881b90041684565b60408051941515855263ffffffff90931660208501526001600160601b039182169284019290925216606082015260800161018b565b6101777f000000000000000000000000000000000000000000000000000000000000000081565b60015461027f906c0100000000000000000000000090046001600160601b031681565b6040516001600160601b03909116815260200161018b565b61014e6102a5366004611614565b6109a6565b61014e610ea6565b6101777f000000000000000000000000000000000000000000000000000000000000000081565b6102ec6102e7366004611631565b610f0c565b60405190815260200161018b565b6000546001600160a01b0316610177565b60005461032290600160a01b900463ffffffff1681565b60405163ffffffff909116815260200161018b565b60015461027f906001600160601b031681565b61038d610358366004611614565b60036020526000908152604090205463ffffffff8116906001600160601b036401000000008204811691600160801b90041683565b6040805163ffffffff90941684526001600160601b03928316602085015291169082015260600161018b565b61014e6110c4565b6103c9611123565b6040805192835260208301919091520161018b565b6103c96103ec366004611614565b6111b7565b61014e6103ff366004611556565b6113f7565b6000546001600160a01b031633146104635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b47156104a557600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156104a3573d6000803e3d6000fd5b505b806001600160a01b031663a9059cbb6104c66000546001600160a01b031690565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038516906370a082319060240160206040518083038186803b15801561051e57600080fd5b505afa158015610532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105569190611672565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156105b457600080fd5b505af11580156105c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ec919061168b565b5050565b6000546001600160a01b0316331461064a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161045a565b6001546001600160601b031615801561067c57506001546c0100000000000000000000000090046001600160601b0316155b15610686576106c7565b6001600060148282829054906101000a900463ffffffff166106a891906116c3565b92506101000a81548163ffffffff021916908363ffffffff1602179055505b6040805160608101825263ffffffff42811682526001600160601b03808616602080850191825286831685870190815260008054600160a01b900486168152600390925295902093518454915195518316600160801b027fffffffff000000000000000000000000ffffffffffffffffffffffffffffffff968416640100000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090931691909416171793909316179055600180548392600c9161079f9185916c010000000000000000000000009004166116eb565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555081600160008282829054906101000a90046001600160601b03166107e791906116eb565b82546101009290920a6001600160601b038181021990931691831602179091556040516323b872dd60e01b815233600482015230602482015290841660448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506323b872dd90606401602060405180830381600087803b15801561087757600080fd5b505af115801561088b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108af919061168b565b506040516323b872dd60e01b81523360048201523060248201526001600160601b03821660448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd90606401602060405180830381600087803b15801561092657600080fd5b505af115801561093a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095e919061168b565b50600054604051600160a01b90910463ffffffff1681527fabccf803841244f7fef97d8d38bdf09763ebee3f13639f30d1a1b1cf79c937989060200160405180910390a15050565b33600081815260026020908152604080832063ffffffff8087168086529184528285208351608081018552905460ff81161515825261010081048316828701526001600160601b03650100000000008204811683870152600160881b9091048116606080840191909152938752600386528487208551948501865254928316845264010000000083048116958401869052600160801b909204909116928201929092529093909291610a5a91908690610f0c565b90506000610a76338685604001516001600160601b0316610f0c565b90506000821180610a875750600081115b610ac05760405162461bcd60e51b815260206004820152600a6024820152694e6f207265776172647360b01b604482015260640161045a565b6000806000856000015163ffffffff16876020015163ffffffff161115610af45750602086015163ffffffff164203610b00565b50845163ffffffff1642035b622819a08582020483019250622819a081850281610b2057610b2061170d565b0482019150600087604001516001600160601b031686610b409190611723565b841115610b73576040880151610b5f906001600160601b031687611723565b6001600160601b0316935060019050610b80565b836001600160601b031693505b6060880151610b98906001600160601b031686611723565b831115610bc7576060880151610bb7906001600160601b031686611723565b6001600160601b03169250610bd4565b826001600160601b031692505b604051806080016040528082151581526020014263ffffffff168152602001858a60400151016001600160601b03168152602001848a60600151016001600160601b031681525060026000336001600160a01b03166001600160a01b0316815260200190815260200160002060008b63ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160056101000a8154816001600160601b0302191690836001600160601b0316021790555060608201518160000160116101000a8154816001600160601b0302191690836001600160601b031602179055509050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb33866040518363ffffffff1660e01b8152600401610d639291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015610d7d57600080fd5b505af1158015610d91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db5919061168b565b506040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb90604401602060405180830381600087803b158015610e3757600080fd5b505af1158015610e4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6f919061168b565b5060405133907f0178be5ff07ff0255343266c94130c9a7c518cf8ba70cbf6198cfb3572ab9d3f90600090a2505050505050505050565b6000546001600160a01b03163314610f005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161045a565b610f0a60006114d9565b565b6040517f7b7ce6510000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260009182917f00000000000000000000000000000000000000000000000000000000000000001690637b7ce65190602401604080518083038186803b158015610f8a57600080fd5b505afa158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc29190611758565b506040517f446b0d3400000000000000000000000000000000000000000000000000000000815263ffffffff861660048201529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063446b0d349060240160606040518083038186803b15801561104757600080fd5b505afa15801561105b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107f9190611784565b92505050806dffffffffffffffffffffffffffff1684836dffffffffffffffffffffffffffff166110b091906117cc565b6110ba91906117eb565b9695505050505050565b60008054600160a01b900463ffffffff16905b8163ffffffff168163ffffffff16116105ec5733600090815260026020908152604080832063ffffffff8516845290915290205460ff1661111b5761111b816109a6565b6001016110d7565b600080548190600160a01b900463ffffffff16815b8163ffffffff168163ffffffff16116111b15733600090815260026020908152604080832063ffffffff8516845290915290205460ff1661119f5760008061117f836111b7565b909250905061118e828761180d565b955061119a818661180d565b945050505b806111a981611825565b915050611138565b50509091565b33600081815260026020908152604080832063ffffffff8087168086529184528285208351608081018552905460ff81161515825261010081048316828701526001600160601b03650100000000008204811683870152600160881b9091048116606080840191909152938752600386528487208551948501865254928316845264010000000083048116958401869052600160801b90920490911692820192909252929384939192849161126d918890610f0c565b90506000611289338885604001516001600160601b0316610f0c565b9050600082118061129a5750600081115b6112d35760405162461bcd60e51b815260206004820152600a6024820152694e6f207265776172647360b01b604482015260640161045a565b6000806000856000015163ffffffff16876020015163ffffffff1611156113075750602086015163ffffffff164203611313565b50845163ffffffff1642035b622819a08582020483019250622819a0818502816113335761133361170d565b0482019150600087604001516001600160601b0316866113539190611723565b841115611386576040880151611372906001600160601b031687611723565b6001600160601b0316935060019050611393565b836001600160601b031693505b60608801516113ab906001600160601b031686611723565b8311156113da5760608801516113ca906001600160601b031686611723565b6001600160601b031692506113e7565b826001600160601b031692505b5091999098509650505050505050565b6000546001600160a01b031633146114515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161045a565b6001600160a01b0381166114cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161045a565b6114d6816114d9565b50565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146114d657600080fd5b60006020828403121561156857600080fd5b813561157381611541565b9392505050565b80356001600160601b038116811461159157600080fd5b919050565b600080604083850312156115a957600080fd5b6115b28361157a565b91506115c06020840161157a565b90509250929050565b63ffffffff811681146114d657600080fd5b600080604083850312156115ee57600080fd5b82356115f981611541565b91506020830135611609816115c9565b809150509250929050565b60006020828403121561162657600080fd5b8135611573816115c9565b60008060006060848603121561164657600080fd5b833561165181611541565b92506020840135611661816115c9565b929592945050506040919091013590565b60006020828403121561168457600080fd5b5051919050565b60006020828403121561169d57600080fd5b8151801515811461157357600080fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8083168185168083038211156116e2576116e26116ad565b01949350505050565b60006001600160601b038083168185168083038211156116e2576116e26116ad565b634e487b7160e01b600052601260045260246000fd5b600082821015611735576117356116ad565b500390565b80516dffffffffffffffffffffffffffff8116811461159157600080fd5b6000806040838503121561176b57600080fd5b6117748361173a565b91506020830151611609816115c9565b60008060006060848603121561179957600080fd5b83516117a4816115c9565b60208501519093506117b5816115c9565b91506117c36040850161173a565b90509250925092565b60008160001904831182151516156117e6576117e66116ad565b500290565b60008261180857634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115611820576118206116ad565b500190565b600063ffffffff8083168181141561183f5761183f6116ad565b600101939250505056fea26469706673582212205ee76719273471b0284e9fa9a924bab6f8b4ec84863dd08391ad1ab0fde63c6c64736f6c634300080900330000000000000000000000002e9ee89099ee816eacb7301bcdb57a6375a1c6e1000000000000000000000000f236ea74b515ef96a9898f5a4ed4aa591f253ce1000000000000000000000000e7f6c3c1f0018e4c08acc52965e5cbff99e34a44000000000000000000000000beb981021ed9c85aa51d96c0c2eda10ee4404a2e

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000002e9ee89099ee816eacb7301bcdb57a6375a1c6e1000000000000000000000000f236ea74b515ef96a9898f5a4ed4aa591f253ce1000000000000000000000000e7f6c3c1f0018e4c08acc52965e5cbff99e34a44000000000000000000000000beb981021ed9c85aa51d96c0c2eda10ee4404a2e

-----Decoded View---------------
Arg [0] : _governance (address): 0x2e9ee89099ee816eacb7301bcdb57a6375a1c6e1
Arg [1] : _plsDpx (address): 0xf236ea74b515ef96a9898f5a4ed4aa591f253ce1
Arg [2] : _plsJones (address): 0xe7f6c3c1f0018e4c08acc52965e5cbff99e34a44
Arg [3] : _staking (address): 0xbeb981021ed9c85aa51d96c0c2eda10ee4404a2e

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000002e9ee89099ee816eacb7301bcdb57a6375a1c6e1
Arg [1] : 000000000000000000000000f236ea74b515ef96a9898f5a4ed4aa591f253ce1
Arg [2] : 000000000000000000000000e7f6c3c1f0018e4c08acc52965e5cbff99e34a44
Arg [3] : 000000000000000000000000beb981021ed9c85aa51d96c0c2eda10ee4404a2e


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.