Contract 0x548c30b0af3ce6d96f1a63afc05f0fb66495179f 14

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x0014a911abf946aa84c809a07241ca71d9911ba43452e6fe77b9a7c49fac6eedDeposit1829588852024-02-21 9:29:281 day 16 hrs ago0x3172aee5e0b47bb23e87db93327f58e06e6a73b6 IN  PlutusDAO: DPX Depositor0 ETH0.000099850.1
0x46a9c28145a3d3c6d3bad708fe83111b39a66ebe57626089ac7fe1223f2bd03dDeposit1813585262024-02-16 14:13:546 days 12 hrs ago0xf69cfdcfff8893086d26a0aaf6c1c55b144339bc IN  PlutusDAO: DPX Depositor0 ETH0.000082160.1
0x5580e7f0ead834ea9381c0fee2223a79635cc26e66acbe6494311013be92daa5Deposit1804461402024-02-13 20:54:089 days 5 hrs ago0x559b55c8c681e223efdf2516e9813d0874eac9d0 IN  PlutusDAO: DPX Depositor0 ETH0.00009193 0.1
0xa3287d1484522dba52ed59854e31b0c129aa57851cf248453e59ab74a6b28286Deposit1784741082024-02-07 21:58:1715 days 4 hrs ago0xb65c76c67f6cccb00c3b39e294e19d05c48d9b81 IN  PlutusDAO: DPX Depositor0 ETH0.000093340.1
0xe8329e4923f651ff7555fbd5fb5ddc57e20778eb84f3476eed0ab9156334cd28Deposit1781328992024-02-06 21:35:0816 days 4 hrs ago0xb65c76c67f6cccb00c3b39e294e19d05c48d9b81 IN  PlutusDAO: DPX Depositor0 ETH0.000079240.1
0x6f35adf76f06380db73d546685f51b177e0859c470b3a3078b3a3d295611ad3dDeposit1780367752024-02-06 14:38:4316 days 11 hrs ago0x5bcb719c0742adcb4c5616bb9191291db533a16e IN  PlutusDAO: DPX Depositor0 ETH0.00010937 0.1
0x3c9e82498d9db82092e60c43b2de83c70f73237577164d9e815f22443a932021Deposit1779901242024-02-06 11:18:0716 days 15 hrs ago0x4b3278f510e680cdd74cc875e436acd63fc96681 IN  PlutusDAO: DPX Depositor0 ETH0.0000719 0.1
0x0b6957dab9b1529d72047025a6292629cb29c342d5a94f7b955e6945e7b73ea2Deposit1778032012024-02-05 21:18:2117 days 5 hrs ago0xb65c76c67f6cccb00c3b39e294e19d05c48d9b81 IN  PlutusDAO: DPX Depositor0 ETH0.000114270.1
0xce2aafbda82a0a182acc62b2442cf189d4fa726d826704089d5db0d608203567Deposit1766690992024-02-02 9:24:1920 days 16 hrs ago0x5fbba747380988e85b38cf443b215f536d32ef05 IN  PlutusDAO: DPX Depositor0 ETH0.000069690.1
0xabd953a5b460ea4fa50746d117c17c8fdffa02965718ab1076ada91ba3ec1d35Deposit1751270992024-01-28 18:29:1925 days 7 hrs ago0x55903905196221a4cd2a3e3c392be532fce8bf17 IN  PlutusDAO: DPX Depositor0 ETH0.00006709 0.1
0x1ee5fad23080032597fa4080b0c872739d90fe22b28c0c7361d5abdc1b5ff488Deposit1731432852024-01-22 21:40:4931 days 4 hrs ago0x5fbba747380988e85b38cf443b215f536d32ef05 IN  PlutusDAO: DPX Depositor0 ETH0.000075850.1
0x639900093ccb1af18f0114c2e9247e51a71eb467adf42b83c2c53b55aa79442aDeposit1722074942024-01-20 2:42:1833 days 23 hrs ago0xb65c76c67f6cccb00c3b39e294e19d05c48d9b81 IN  PlutusDAO: DPX Depositor0 ETH0.000061270.1
0x6f67bd879c00473afd8f519342c93066cc4b8585cb918cdac02f2a1decc78ca7Deposit1719401792024-01-19 7:43:0034 days 18 hrs ago0xf69cfdcfff8893086d26a0aaf6c1c55b144339bc IN  PlutusDAO: DPX Depositor0 ETH0.00007610.1
0x1383dac257a274e98224dc7a626a68e5576154a6dd6e08ca58ba3bd2ca6b59b0Deposit1717644252024-01-18 18:46:3435 days 7 hrs ago0x844cc44a61aa550705ea977a8234927141cac39c IN  PlutusDAO: DPX Depositor0 ETH0.000129630.1
0x225508ccdcddebf89513f545bcd9d7a064883663fc1f82feea2b6a7d4b07d28cDeposit1710535782024-01-16 14:50:3937 days 11 hrs ago0x5fbba747380988e85b38cf443b215f536d32ef05 IN  PlutusDAO: DPX Depositor0 ETH0.000116720.1
0x34ffd440556cddebc1c1d031a986f76b9e4034b2ed255d1ea11bad99251ec5abDeposit1707968852024-01-15 19:43:1838 days 6 hrs ago0x9c2bdc7ff2b43d8d7ec21a3c5aaeb35c9fb5abc2 IN  PlutusDAO: DPX Depositor0 ETH0.000089940.1
0xced9cc2e2d387607e7a93dc49dd7b93e83510bcf52404a032931be9c53c49e41Deposit1705549602024-01-15 2:19:0939 days 2 mins ago0xe36068efbaec93934bd4e2815e999b7509fe4152 IN  PlutusDAO: DPX Depositor0 ETH0.000066530.1
0x433346805d36faed4585f4942e378bde03361ecd265226253a97947c264b79eeDeposit1703798772024-01-14 13:31:0339 days 12 hrs ago0x52c00593d54bc829ba9b44712ec70191b730744b IN  PlutusDAO: DPX Depositor0 ETH0.00012010.1
0xbdd14498fd2b3d10fe87c036bb618fe8e4219bc00166497a97c0f153cfdfa706Deposit1692126992024-01-11 1:48:5943 days 32 mins ago0xea63ac94a7ffab1a8a82e3b76da5dfeade80c4d5 IN  PlutusDAO: DPX Depositor0 ETH0.000104410.1
0x8f7fd866c0a0bc5204fe6506d837589bbfecb5ee6e400dea738ff769d0262aa6Deposit1691880502024-01-11 0:05:0943 days 2 hrs ago0x55903905196221a4cd2a3e3c392be532fce8bf17 IN  PlutusDAO: DPX Depositor0 ETH0.00016473 0.1
0x8062e449494d7f85743f0869f9220490b48092b972e35f708365a687c148f288Deposit1690948732024-01-10 17:34:0943 days 8 hrs ago0xb65c76c67f6cccb00c3b39e294e19d05c48d9b81 IN  PlutusDAO: DPX Depositor0 ETH0.000090350.1
0x57167fff46a48b63a2ec537ff82f3ebd75030caba4c26d7030a2a3d1b05570abDeposit1686216762024-01-09 8:28:5244 days 17 hrs ago0x844cc44a61aa550705ea977a8234927141cac39c IN  PlutusDAO: DPX Depositor0 ETH0.000059810.1
0x07ed72873b2c65b06a7dfdc569e5a2f522f80e86c90978c79b1e3968127339d8Deposit1685212822024-01-09 1:28:1045 days 53 mins ago0x36821b28f15057158f5cf48a4a42a535afdf5bd7 IN  PlutusDAO: DPX Depositor0 ETH0.000064460.1
0xca707a89836170b806e2a7e8d5738e779dfe84eec72e5692ab2c111acb46e676Deposit1678876912024-01-07 3:51:0746 days 22 hrs ago0x5fbba747380988e85b38cf443b215f536d32ef05 IN  PlutusDAO: DPX Depositor0 ETH0.00008930.1
0xf599c00b4ad5e0628c0ba73fec6321d8fb4b44df99d0d2364ecc8bcceab905d7Deposit1673054642024-01-05 9:49:4348 days 16 hrs ago0xae7a90bcd5b5f484f24fe964c32954fd2dacb2e2 IN  PlutusDAO: DPX Depositor0 ETH0.000060360.1
[ Download CSV Export 

OVERVIEW

Plutus DPX Depositor.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x939a2be05a467e8c2d943168f02577724a1e0bdc349aa8905a68eea43f029b7c720823062023-03-21 10:00:43338 days 16 hrs ago PlutusDAO: DPX Depositor Plutus DAO: plsDPX Token0 ETH
0x939a2be05a467e8c2d943168f02577724a1e0bdc349aa8905a68eea43f029b7c720823062023-03-21 10:00:43338 days 16 hrs ago PlutusDAO: DPX Depositor 0x6de5bec59ed2575a799f2ac0a0aeaaaf59e61c3d0 ETH
0x939a2be05a467e8c2d943168f02577724a1e0bdc349aa8905a68eea43f029b7c720823062023-03-21 10:00:43338 days 16 hrs ago PlutusDAO: DPX Depositor Dopex: DPX Token0 ETH
0xdaf35f8b5251f37bc7b2f3a96eaacf4dbdb74088ff778e4d9eab45c92f833358720488982023-03-21 7:43:48338 days 18 hrs ago PlutusDAO: DPX Depositor Plutus DAO: plsDPX Token0 ETH
0xdaf35f8b5251f37bc7b2f3a96eaacf4dbdb74088ff778e4d9eab45c92f833358720488982023-03-21 7:43:48338 days 18 hrs ago PlutusDAO: DPX Depositor 0x6de5bec59ed2575a799f2ac0a0aeaaaf59e61c3d0 ETH
0xdaf35f8b5251f37bc7b2f3a96eaacf4dbdb74088ff778e4d9eab45c92f833358720488982023-03-21 7:43:48338 days 18 hrs ago PlutusDAO: DPX Depositor Dopex: DPX Token0 ETH
0x7404b57b99aaf4eb55895268519f861c8e955102684e8b6ad5c3fc5bfc47618d719932892023-03-21 3:54:18338 days 22 hrs ago PlutusDAO: DPX Depositor Plutus DAO: plsDPX Token0 ETH
0x7404b57b99aaf4eb55895268519f861c8e955102684e8b6ad5c3fc5bfc47618d719932892023-03-21 3:54:18338 days 22 hrs ago PlutusDAO: DPX Depositor 0x6de5bec59ed2575a799f2ac0a0aeaaaf59e61c3d0 ETH
0x7404b57b99aaf4eb55895268519f861c8e955102684e8b6ad5c3fc5bfc47618d719932892023-03-21 3:54:18338 days 22 hrs ago PlutusDAO: DPX Depositor Dopex: DPX Token0 ETH
0xe389234ea62b3a1a7d07c7957350b897319e678b18b2c20b03d717b533258fa9719052762023-03-20 21:41:22339 days 4 hrs ago PlutusDAO: DPX Depositor Plutus DAO: plsDPX Token0 ETH
0xe389234ea62b3a1a7d07c7957350b897319e678b18b2c20b03d717b533258fa9719052762023-03-20 21:41:22339 days 4 hrs ago PlutusDAO: DPX Depositor 0x6de5bec59ed2575a799f2ac0a0aeaaaf59e61c3d0 ETH
0xe389234ea62b3a1a7d07c7957350b897319e678b18b2c20b03d717b533258fa9719052762023-03-20 21:41:22339 days 4 hrs ago PlutusDAO: DPX Depositor Dopex: DPX Token0 ETH
0xb56f4e9383b16000122408695f51b3b6ec2064726b3253a56db1dc032005c185718931482023-03-20 20:49:18339 days 5 hrs ago PlutusDAO: DPX Depositor Plutus DAO: plsDPX Token0 ETH
0xb56f4e9383b16000122408695f51b3b6ec2064726b3253a56db1dc032005c185718931482023-03-20 20:49:18339 days 5 hrs ago PlutusDAO: DPX Depositor 0x6de5bec59ed2575a799f2ac0a0aeaaaf59e61c3d0 ETH
0xb56f4e9383b16000122408695f51b3b6ec2064726b3253a56db1dc032005c185718931482023-03-20 20:49:18339 days 5 hrs ago PlutusDAO: DPX Depositor Dopex: DPX Token0 ETH
0xb3680d439de68ae8f393dfd4fc374320d25a53bc884fdf3f784a73ab3cc12be9718810932023-03-20 19:58:32339 days 6 hrs ago PlutusDAO: DPX Depositor Plutus DAO: plsDPX Token0 ETH
0xb3680d439de68ae8f393dfd4fc374320d25a53bc884fdf3f784a73ab3cc12be9718810932023-03-20 19:58:32339 days 6 hrs ago PlutusDAO: DPX Depositor 0x6de5bec59ed2575a799f2ac0a0aeaaaf59e61c3d0 ETH
0xb3680d439de68ae8f393dfd4fc374320d25a53bc884fdf3f784a73ab3cc12be9718810932023-03-20 19:58:32339 days 6 hrs ago PlutusDAO: DPX Depositor Dopex: DPX Token0 ETH
0x18492629cea39926799917cf2d4aca9bef1a86c35883603fc84c2fa40ec72a9a718765772023-03-20 19:39:32339 days 6 hrs ago PlutusDAO: DPX Depositor Plutus DAO: plsDPX Token0 ETH
0x18492629cea39926799917cf2d4aca9bef1a86c35883603fc84c2fa40ec72a9a718765772023-03-20 19:39:32339 days 6 hrs ago PlutusDAO: DPX Depositor 0x6de5bec59ed2575a799f2ac0a0aeaaaf59e61c3d0 ETH
0x18492629cea39926799917cf2d4aca9bef1a86c35883603fc84c2fa40ec72a9a718765772023-03-20 19:39:32339 days 6 hrs ago PlutusDAO: DPX Depositor Dopex: DPX Token0 ETH
0x92f99fb13f4999fe9a9f60c25ab39df996ec9ebe21d8dc2273f81e67ede3a085718371362023-03-20 16:55:36339 days 9 hrs ago PlutusDAO: DPX Depositor Plutus DAO: plsDPX Token0 ETH
0x92f99fb13f4999fe9a9f60c25ab39df996ec9ebe21d8dc2273f81e67ede3a085718371362023-03-20 16:55:36339 days 9 hrs ago PlutusDAO: DPX Depositor 0x6de5bec59ed2575a799f2ac0a0aeaaaf59e61c3d0 ETH
0x92f99fb13f4999fe9a9f60c25ab39df996ec9ebe21d8dc2273f81e67ede3a085718371362023-03-20 16:55:36339 days 9 hrs ago PlutusDAO: DPX Depositor Dopex: DPX Token0 ETH
0xf3fc37c47deecdd3bf70e60db93064b17723b1daa64450c3882968102f4f919b718264352023-03-20 16:11:44339 days 10 hrs ago PlutusDAO: DPX Depositor Plutus DAO: plsDPX Token0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DpxDepositorV2

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
File 1 of 11 : DpxDepositorV2.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import '@openzeppelin/contracts/security/Pausable.sol';
import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
import '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';
import '@openzeppelin/contracts/access/Ownable.sol';
import { IStaker } from './interfaces.sol';
import '../interfaces/ITokenMinter.sol';
import { IWhitelist } from '../Whitelist.sol';

contract DpxDepositorV2 is Ownable, Pausable {
  using SafeERC20 for IERC20;

  IERC20 public immutable dpx;
  IERC20 public immutable escrow;
  address public immutable minter; // plsDPX
  address public immutable staker;

  IWhitelist public whitelist;

  constructor(
    address _dpx,
    address _escrow,
    address _staker,
    address _minter
  ) {
    dpx = IERC20(_dpx);
    escrow = IERC20(_escrow);
    staker = _staker;
    minter = _minter;
    _pause();
  }

  /**
   * Deposit asset for plsAsset
   */
  function deposit(uint256 _amount) public whenNotPaused {
    _isEligibleSender();
    _deposit(msg.sender, _amount);
  }

  function depositAll() external {
    deposit(dpx.balanceOf(msg.sender));
  }

  /** PRIVATE FUNCTIONS */
  function _deposit(address _user, uint256 _amount) private {
    if (_amount == 0) revert ZERO_AMOUNT();

    dpx.safeTransferFrom(_user, staker, _amount);
    IStaker(staker).stake(_amount);
    ITokenMinter(minter).mint(_user, _amount);

    emit Deposited(_user, _amount);
  }

  function _isEligibleSender() private view {
    if (msg.sender != tx.origin && whitelist.isWhitelisted(msg.sender) == false) revert UNAUTHORIZED();
  }

  /** OWNER FUNCTIONS */
  function setWhitelist(address _whitelist) external onlyOwner {
    emit WhitelistUpdated(_whitelist, address(whitelist));
    whitelist = IWhitelist(_whitelist);
  }

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

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

  function setPaused(bool _pauseContract) external onlyOwner {
    if (_pauseContract) {
      _pause();
    } else {
      _unpause();
    }
  }

  event WhitelistUpdated(address _new, address _old);
  event Deposited(address indexed _user, uint256 _amount);

  error ZERO_AMOUNT();
  error UNAUTHORIZED();
}

File 2 of 11 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 3 of 11 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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);
}

File 4 of 11 : SafeERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";
import "../extensions/draft-IERC20Permit.sol";
import "../../../utils/Address.sol";

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

File 5 of 11 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 6 of 11 : interfaces.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

// IDPXVotingEscrow v1.0.0
interface IDPXVotingEscrow {
  function get_last_user_slope(address addr) external view returns (int128);

  function user_point_history__ts(address _addr, uint256 _idx) external view returns (uint256);

  function locked__end(address _addr) external view returns (uint256);

  function checkpoint() external;

  function deposit_for(address _addr, uint256 _value) external;

  function create_lock(uint256 _value, uint256 _unlock_time) external;

  function increase_amount(uint256 _value) external;

  function increase_unlock_time(uint256 _unlock_time) external;

  function withdraw() external;

  function balanceOf(address addr) external view returns (uint256);

  function balanceOfAtT(address addr, uint256 _t) external view returns (uint256);

  function balanceOfAt(address addr, uint256 _block) external view returns (uint256);

  function totalSupply() external view returns (uint256);

  function totalSupplyAtT(uint256 t) external view returns (uint256);

  function totalSupplyAt(uint256 _block) external view returns (uint256);

  function token() external view returns (address);

  function supply() external view returns (uint256);

  function locked(address addr) external view returns (int128 amount, uint256 end);

  function epoch() external view returns (uint256);

  function point_history(uint256 arg0)
    external
    view
    returns (
      int128 bias,
      int128 slope,
      uint256 ts,
      uint256 blk
    );

  function user_point_history(address arg0, uint256 arg1)
    external
    view
    returns (
      int128 bias,
      int128 slope,
      uint256 ts,
      uint256 blk
    );

  function user_point_epoch(address arg0) external view returns (uint256);

  function slope_changes(uint256 arg0) external view returns (int128);

  function controller() external view returns (address);

  function transfersEnabled() external view returns (bool);

  function name() external view returns (string memory);

  function symbol() external view returns (string memory);

  function version() external view returns (string memory);

  function decimals() external view returns (uint8);
}

interface IFeeDistro {
  function checkpoint() external;

  function getYield() external;

  function earned(address _account) external view returns (uint256);
}

interface IStaker {
  function stake(uint256) external;

  function release() external;

  function claimFees(
    address _distroContract,
    address _token,
    address _claimTo
  ) external returns (uint256);
}

interface IVoting {
  function vote_for_gauge_weights(address, uint256) external;
}

interface IFeeClaimer {
  function calcRewards(uint256 yield) external view returns (uint256 pendingRewardsLessFee, uint256 protocolFee);
}

File 7 of 11 : ITokenMinter.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

interface ITokenMinter {
  function mint(address, uint256) external;

  function burn(address, uint256) external;
}

File 8 of 11 : Whitelist.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;
import '@openzeppelin/contracts/access/Ownable.sol';

interface IWhitelist {
  function isWhitelisted(address) external view returns (bool);
}

contract Whitelist is IWhitelist, Ownable {
  mapping(address => bool) public isWhitelisted;

  constructor(address _gov) {
    transferOwnership(_gov);
  }

  function whitelistAdd(address _addr) external onlyOwner {
    isWhitelisted[_addr] = true;
    emit AddedToWhitelist(_addr);
  }

  function whitelistRemove(address _addr) external onlyOwner {
    isWhitelisted[_addr] = false;
    emit RemovedFromWhitelist(_addr);
  }

  event RemovedFromWhitelist(address indexed _addr);
  event AddedToWhitelist(address indexed _addr);
}

File 9 of 11 : 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;
    }
}

File 10 of 11 : draft-IERC20Permit.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 */
interface IERC20Permit {
    /**
     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
     * given ``owner``'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

File 11 of 11 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dpx","type":"address"},{"internalType":"address","name":"_escrow","type":"address"},{"internalType":"address","name":"_staker","type":"address"},{"internalType":"address","name":"_minter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"UNAUTHORIZED","type":"error"},{"inputs":[],"name":"ZERO_AMOUNT","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Deposited","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_new","type":"address"},{"indexed":false,"internalType":"address","name":"_old","type":"address"}],"name":"WhitelistUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dpx","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"escrow","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"_pauseContract","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelist","type":"address"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelist","outputs":[{"internalType":"contract IWhitelist","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6101006040523480156200001257600080fd5b5060405162001182380380620011828339810160408190526200003591620001ab565b620000403362000080565b6000805460ff60a01b191690556001600160a01b0380851660805283811660a05282811660e052811660c05262000076620000d0565b5050505062000208565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000da62000133565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620001163390565b6040516001600160a01b03909116815260200160405180910390a1565b62000147600054600160a01b900460ff1690565b156200018c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640160405180910390fd5b565b80516001600160a01b0381168114620001a657600080fd5b919050565b60008060008060808587031215620001c257600080fd5b620001cd856200018e565b9350620001dd602086016200018e565b9250620001ed604086016200018e565b9150620001fd606086016200018e565b905092959194509250565b60805160a05160c05160e051610f1e62000264600039600081816101a4015281816108bc015261091001526000818160f401526109b101526000610225015260008181610160015281816104bc01526108990152610f1e6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063854cff2f1161008c578063b6b55f2511610066578063b6b55f2514610205578063de5f626814610218578063e2fdcc1714610220578063f2fde38b1461024757600080fd5b8063854cff2f146101ce5780638da5cb5b146101e157806393e59dc1146101f257600080fd5b806343365f8c116100c857806343365f8c1461015b5780635c975abb146101825780635ebaf1db1461019f578063715018a6146101c657600080fd5b806307546172146100ef5780630a79309b1461013357806316c38b3c14610148575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004610dd6565b61025a565b005b610146610156366004610e01565b6103d6565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b600054600160a01b900460ff16604051901515815260200161012a565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6101466103f7565b6101466101dc366004610dd6565b61040b565b6000546001600160a01b0316610116565b600154610116906001600160a01b031681565b610146610213366004610e1e565b610489565b6101466104a3565b6101167f000000000000000000000000000000000000000000000000000000000000000081565b610146610255366004610dd6565b61053e565b6102626105d0565b47156102a457600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156102a2573d6000803e3d6000fd5b505b806001600160a01b031663a9059cbb6102c56000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b15801561030457600080fd5b505afa158015610318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033c9190610e37565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561039a57600080fd5b505af11580156103ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d29190610e50565b5050565b6103de6105d0565b80156103ef576103ec61062a565b50565b6103ec61068a565b6103ff6105d0565b61040960006106c6565b565b6104136105d0565b600154604080516001600160a01b03808516825290921660208301527f0b00a1112524b562c52fd702a5b927f07a0b1bafa6243b83cf3b78a9316bb1a7910160405180910390a16001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b610491610723565b61049961077d565b6103ec3382610855565b6040516370a0823160e01b8152336004820152610409907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561050657600080fd5b505afa15801561051a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102139190610e37565b6105466105d0565b6001600160a01b0381166105c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103ec816106c6565b6000546001600160a01b031633146104095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105be565b610632610723565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861066d3390565b6040516001600160a01b03909116815260200160405180910390a1565b610692610a56565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361066d565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600054600160a01b900460ff16156104095760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105be565b33321480159061081e57506001546040517f3af32abf0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690633af32abf9060240160206040518083038186803b1580156107e457600080fd5b505afa1580156107f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081c9190610e50565b155b15610409576040517f075fd2b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061088c576040517ff6fa545000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108e16001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016837f000000000000000000000000000000000000000000000000000000000000000084610aaf565b6040517fa694fc3a000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a694fc3a90602401600060405180830381600087803b15801561095c57600080fd5b505af1158015610970573d6000803e3d6000fd5b50506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590527f00000000000000000000000000000000000000000000000000000000000000001692506340c10f199150604401600060405180830381600087803b1580156109f757600080fd5b505af1158015610a0b573d6000803e3d6000fd5b50505050816001600160a01b03167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c482604051610a4a91815260200190565b60405180910390a25050565b600054600160a01b900460ff166104095760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016105be565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610b37908590610b3d565b50505050565b6000610b92826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c279092919063ffffffff16565b805190915015610c225780806020019051810190610bb09190610e50565b610c225760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016105be565b505050565b6060610c368484600085610c40565b90505b9392505050565b606082471015610cb85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016105be565b6001600160a01b0385163b610d0f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105be565b600080866001600160a01b03168587604051610d2b9190610e99565b60006040518083038185875af1925050503d8060008114610d68576040519150601f19603f3d011682016040523d82523d6000602084013e610d6d565b606091505b5091509150610d7d828286610d88565b979650505050505050565b60608315610d97575081610c39565b825115610da75782518084602001fd5b8160405162461bcd60e51b81526004016105be9190610eb5565b6001600160a01b03811681146103ec57600080fd5b600060208284031215610de857600080fd5b8135610c3981610dc1565b80151581146103ec57600080fd5b600060208284031215610e1357600080fd5b8135610c3981610df3565b600060208284031215610e3057600080fd5b5035919050565b600060208284031215610e4957600080fd5b5051919050565b600060208284031215610e6257600080fd5b8151610c3981610df3565b60005b83811015610e88578181015183820152602001610e70565b83811115610b375750506000910152565b60008251610eab818460208701610e6d565b9190910192915050565b6020815260008251806020840152610ed4816040850160208701610e6d565b601f01601f1916919091016040019291505056fea2646970667358221220a8f2c9baf7c04e2388e00eed1169f9de2a1c384f72677b6e0ec0bb1bd040f00e64736f6c634300080900330000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee5500000000000000000000000080789d252a288e93b01d82373d767d71a75d9f160000000000000000000000006de5bec59ed2575a799f2ac0a0aeaaaf59e61c3d000000000000000000000000f236ea74b515ef96a9898f5a4ed4aa591f253ce1

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063854cff2f1161008c578063b6b55f2511610066578063b6b55f2514610205578063de5f626814610218578063e2fdcc1714610220578063f2fde38b1461024757600080fd5b8063854cff2f146101ce5780638da5cb5b146101e157806393e59dc1146101f257600080fd5b806343365f8c116100c857806343365f8c1461015b5780635c975abb146101825780635ebaf1db1461019f578063715018a6146101c657600080fd5b806307546172146100ef5780630a79309b1461013357806316c38b3c14610148575b600080fd5b6101167f000000000000000000000000f236ea74b515ef96a9898f5a4ed4aa591f253ce181565b6040516001600160a01b0390911681526020015b60405180910390f35b610146610141366004610dd6565b61025a565b005b610146610156366004610e01565b6103d6565b6101167f0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee5581565b600054600160a01b900460ff16604051901515815260200161012a565b6101167f0000000000000000000000006de5bec59ed2575a799f2ac0a0aeaaaf59e61c3d81565b6101466103f7565b6101466101dc366004610dd6565b61040b565b6000546001600160a01b0316610116565b600154610116906001600160a01b031681565b610146610213366004610e1e565b610489565b6101466104a3565b6101167f00000000000000000000000080789d252a288e93b01d82373d767d71a75d9f1681565b610146610255366004610dd6565b61053e565b6102626105d0565b47156102a457600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156102a2573d6000803e3d6000fd5b505b806001600160a01b031663a9059cbb6102c56000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b15801561030457600080fd5b505afa158015610318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033c9190610e37565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561039a57600080fd5b505af11580156103ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d29190610e50565b5050565b6103de6105d0565b80156103ef576103ec61062a565b50565b6103ec61068a565b6103ff6105d0565b61040960006106c6565b565b6104136105d0565b600154604080516001600160a01b03808516825290921660208301527f0b00a1112524b562c52fd702a5b927f07a0b1bafa6243b83cf3b78a9316bb1a7910160405180910390a16001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b610491610723565b61049961077d565b6103ec3382610855565b6040516370a0823160e01b8152336004820152610409907f0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee556001600160a01b0316906370a082319060240160206040518083038186803b15801561050657600080fd5b505afa15801561051a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102139190610e37565b6105466105d0565b6001600160a01b0381166105c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103ec816106c6565b6000546001600160a01b031633146104095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105be565b610632610723565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861066d3390565b6040516001600160a01b03909116815260200160405180910390a1565b610692610a56565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361066d565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600054600160a01b900460ff16156104095760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105be565b33321480159061081e57506001546040517f3af32abf0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690633af32abf9060240160206040518083038186803b1580156107e457600080fd5b505afa1580156107f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081c9190610e50565b155b15610409576040517f075fd2b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061088c576040517ff6fa545000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108e16001600160a01b037f0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee5516837f0000000000000000000000006de5bec59ed2575a799f2ac0a0aeaaaf59e61c3d84610aaf565b6040517fa694fc3a000000000000000000000000000000000000000000000000000000008152600481018290527f0000000000000000000000006de5bec59ed2575a799f2ac0a0aeaaaf59e61c3d6001600160a01b03169063a694fc3a90602401600060405180830381600087803b15801561095c57600080fd5b505af1158015610970573d6000803e3d6000fd5b50506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590527f000000000000000000000000f236ea74b515ef96a9898f5a4ed4aa591f253ce11692506340c10f199150604401600060405180830381600087803b1580156109f757600080fd5b505af1158015610a0b573d6000803e3d6000fd5b50505050816001600160a01b03167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c482604051610a4a91815260200190565b60405180910390a25050565b600054600160a01b900460ff166104095760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016105be565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610b37908590610b3d565b50505050565b6000610b92826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c279092919063ffffffff16565b805190915015610c225780806020019051810190610bb09190610e50565b610c225760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016105be565b505050565b6060610c368484600085610c40565b90505b9392505050565b606082471015610cb85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016105be565b6001600160a01b0385163b610d0f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105be565b600080866001600160a01b03168587604051610d2b9190610e99565b60006040518083038185875af1925050503d8060008114610d68576040519150601f19603f3d011682016040523d82523d6000602084013e610d6d565b606091505b5091509150610d7d828286610d88565b979650505050505050565b60608315610d97575081610c39565b825115610da75782518084602001fd5b8160405162461bcd60e51b81526004016105be9190610eb5565b6001600160a01b03811681146103ec57600080fd5b600060208284031215610de857600080fd5b8135610c3981610dc1565b80151581146103ec57600080fd5b600060208284031215610e1357600080fd5b8135610c3981610df3565b600060208284031215610e3057600080fd5b5035919050565b600060208284031215610e4957600080fd5b5051919050565b600060208284031215610e6257600080fd5b8151610c3981610df3565b60005b83811015610e88578181015183820152602001610e70565b83811115610b375750506000910152565b60008251610eab818460208701610e6d565b9190910192915050565b6020815260008251806020840152610ed4816040850160208701610e6d565b601f01601f1916919091016040019291505056fea2646970667358221220a8f2c9baf7c04e2388e00eed1169f9de2a1c384f72677b6e0ec0bb1bd040f00e64736f6c63430008090033

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

0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee5500000000000000000000000080789d252a288e93b01d82373d767d71a75d9f160000000000000000000000006de5bec59ed2575a799f2ac0a0aeaaaf59e61c3d000000000000000000000000f236ea74b515ef96a9898f5a4ed4aa591f253ce1

-----Decoded View---------------
Arg [0] : _dpx (address): 0x6C2C06790b3E3E3c38e12Ee22F8183b37a13EE55
Arg [1] : _escrow (address): 0x80789D252A288E93b01D82373d767D71a75D9F16
Arg [2] : _staker (address): 0x6dE5BEc59ed2575a799f2aC0A0AeaAaf59E61c3D
Arg [3] : _minter (address): 0xF236ea74B515eF96a9898F5a4ed4Aa591f253Ce1

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000006c2c06790b3e3e3c38e12ee22f8183b37a13ee55
Arg [1] : 00000000000000000000000080789d252a288e93b01d82373d767d71a75d9f16
Arg [2] : 0000000000000000000000006de5bec59ed2575a799f2ac0a0aeaaaf59e61c3d
Arg [3] : 000000000000000000000000f236ea74b515ef96a9898f5a4ed4aa591f253ce1


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.