Contract 0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe 1

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x47d57cc763bcc9277ebd1434d53a569dbe1400b006576fe7a625730387a7446fPull Many367926692022-12-13 19:52:00107 days 10 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.06007829972333.574324819
0x631c3ac8730b42c9723c68d419fdda921f48b8eddde04aa856d83b909cf997c7Pull Many367924312022-12-13 19:43:48107 days 10 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.07395746220551.708163406
0xd9ebe37ea049fd273d6738e7d4faec1fde69ba4dc32f19a46fb6ba36e70fce20Pull Many367924162022-12-13 19:43:18107 days 10 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.07400063852151.708163406
0x9009bae5747a183e89856f2437906b5f3c6a699447cadb6718c6bdb6e45906d5Pull Many367628702022-12-13 2:00:07108 days 4 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.1124235 500
0x3528c4243ad7ee16ce5c11034026f741bac5f9d46c26648a3840ffad5e019811Add To367480492022-12-12 17:05:42108 days 12 hrs ago0x994a42f111645c33ff24926450ccab4cfc9a4770 IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.003922977518 51.438766392
0x292cfa907bb271bc32bd59f80cd36f71a471e1e20c0c018dc6911c56f2cb3cd4Add To367479872022-12-12 17:03:34108 days 12 hrs ago0x994a42f111645c33ff24926450ccab4cfc9a4770 IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.002397956452 39.140723948
0x888ef0cc5d117c68296a508f79168eade011afc8c3026fead1343d34614d7286Add367459082022-12-12 15:51:41108 days 14 hrs ago0x53e2d75180488a62926e7c21fae9006f23610be2 IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.002796940363 36.948669238
0x7bf5d90b22ca544e346e05bf51cdc89ea3a79f0a6179a4adfa1922673ebbc5cbRemove367307042022-12-12 6:58:16108 days 23 hrs ago0x8a97426c1a720a45b8d69e974631f01f1168232b IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.002356350
0x97fe44a8d3db17f420404d510a6c253eb342915d125968207ffc194b5ec1adb6Pull Many367220842022-12-12 2:00:07109 days 4 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.116842 500
0x433066d17ed9e63fce83ecd16f114ea35a37781fd7fe11552f4b93cd77000e8aPull Many366816872022-12-11 2:00:06110 days 4 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.038548 500
0xee953c7cce893b4f98968591909a011ff9cdafa4b60fb3183e3418fbc2b85313Add To366483892022-12-10 6:25:15110 days 23 hrs ago0xebf048ee69262a2aedb70146407fbfab4c4c758c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.001632663282 30.018262557
0x8abf25a1b04eb0cd9f3856e12addb3e6f77ef2538a66de502d43c0b7a3cabfabPull Many366407492022-12-10 2:00:07111 days 4 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.074869 500
0x473e10e2944a68189f15f3b526f0e78b9699667b91fec767c49ff08fc6cef31fAdd366332572022-12-09 21:26:10111 days 8 hrs ago0x888d35cda7a2e5df438b75b89e567c6ac6d36ab9 IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.002790670602 36.860000037
0x94d6bb4db9ddbe0736269b4c81763d50791ef63492247e2adee11c203d15c783Add366279092022-12-09 18:18:55111 days 11 hrs ago0x3f160211b347fd9885748f688416f69546b427f5 IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.002701149852 38.073321288
0x6b9de9c7f72e0aa1cd06aa8c70731b19dbc25e43df03924bfe1ba9de63901f49Add366274852022-12-09 18:04:19111 days 11 hrs ago0xb2a33ae0e07fd2ca8dbde9545f6ce0b3234dc4e8 IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.003924592491 55.318023453
0x838447df9e9dee076b3b2d76abb28a85c77e23528c87834b095aa15af7321621Add366253392022-12-09 16:48:19111 days 13 hrs ago0xc24e3c2e72f960fa1d54170fa03492dda4ce8256 IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.00332711111 61.830721242
0x81a0b23388291df1ba300a47c8cd98b59bdc9e79553ebdb271e7c809dd50cf8bAdd366148222022-12-09 10:36:05111 days 19 hrs ago0x381e80ae0febebee72b843d0af17afdfcb3ecfef IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.006641273636 93.626098008
0xbfd961c24c0680ab883e4ca1fc0a2e697c7d625316c40a1e1c7680549d12e5a2Pull Many366001542022-12-09 2:00:06112 days 4 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.105705 500
0x6f06aa87b7c63dd5f1df7de27ebb35c0253663898940f6c91ae72ef803218b54Add365753482022-12-08 11:14:12112 days 18 hrs ago0x290a9d8b33d91157d9a59fad6b0a1dc35862acf6 IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.002933886157 41.374787153
0xb46544c24d7b82ba0189f35a15954dc6fa538b85edc649b8dd88ab02b0863512Pull Many365707392022-12-08 8:35:05112 days 21 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0280225 500
0xac132696518c04c29ec65b052e69b826b0ad94e7e2c2b8d975d18cd7d6bcc47fAdd365706112022-12-08 8:30:41112 days 21 hrs ago0xa86bc839b490e7bde7aaed3588b5d0712e7dfcd9 IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.002175927396 30.685762189
0x5d8e4b18d302931a5d268d489b248523822d9b29054e92a3eaba20a13e2f9178Pull Many365595282022-12-08 2:00:07113 days 4 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.095098 500
0x9c8bacc93e1f1906370bd418d6dd19b27819bcb5b3ff444a965f98fdc5ccb6a6Add365517292022-12-07 21:16:52113 days 8 hrs ago0xc25c17dd6dfd2945e04c96f46ddb85401c332d01 IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.001912365167 35.52337125
0x33fa81d0425ca5a66d3221d4dcb5611a7b9003d8e6b981b9e74615e111f7f9a4Add365458892022-12-07 17:48:49113 days 12 hrs ago0xe3b71b1464129a60036653b4bb2f9db062d01e44 IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.002435910274 45.248546919
0xf21394f89d8b573ac68d6b0c7f4e5b7ceecd3d8bcf1359291f81f70d015c0e5cAdd365453402022-12-07 17:29:55113 days 12 hrs ago0xe3b71b1464129a60036653b4bb2f9db062d01e44 IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.005480270307 77.297953505
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Billing

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 5 : Billing.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/utils/math/Math.sol";
import "./IBilling.sol";
import "./Governed.sol";

/**
 * @title Billing Contract
 * @dev The billing contract allows for Graph Tokens to be added by a user. The token can then
 * be pulled by a permissioned user named 'gateway'. It is owned and controlled by the 'governor'.
 */

contract Billing is IBilling, Governed {
    // -- State --

    // The contract for interacting with The Graph Token
    IERC20 private immutable graphToken;
    // The gateway address
    address public gateway;

    // maps user address --> user billing balance
    mapping(address => uint256) public userBalances;

    // -- Events --

    /**
     * @dev User adds tokens
     */
    event TokensAdded(address indexed user, uint256 amount);
    /**
     * @dev User removes tokens
     */
    event TokensRemoved(address indexed user, address indexed to, uint256 amount);

    /**
     * @dev Gateway pulled tokens from a user
     */
    event TokensPulled(address indexed user, uint256 amount);

    /**
     * @dev Gateway address updated
     */
    event GatewayUpdated(address indexed newGateway);

    /**
     * @dev Tokens rescued by the gateway
     */
    event TokensRescued(address indexed to, address indexed token, uint256 amount);

    /**
     * @dev Constructor function
     * @param _gateway   Gateway address
     * @param _token     Graph Token address
     * @param _governor  Governor address
     */
    constructor(
        address _gateway,
        IERC20 _token,
        address _governor
    ) Governed(_governor) {
        _setGateway(_gateway);
        graphToken = _token;
    }

    /**
     * @dev Check if the caller is the gateway.
     */
    modifier onlyGateway() {
        require(msg.sender == gateway, "Caller must be gateway");
        _;
    }

    /**
     * @dev Set the new gateway address
     * @param _newGateway  New gateway address
     */
    function setGateway(address _newGateway) external override onlyGovernor {
        _setGateway(_newGateway);
    }

    /**
     * @dev Set the new gateway address
     * @param _newGateway  New gateway address
     */
    function _setGateway(address _newGateway) internal {
        require(_newGateway != address(0), "Gateway cannot be 0");
        gateway = _newGateway;
        emit GatewayUpdated(gateway);
    }

    /**
     * @dev Add tokens into the billing contract
     * Ensure graphToken.approve() is called on the billing contract first
     * @param _amount  Amount of tokens to add
     */
    function add(uint256 _amount) external override {
        _add(msg.sender, msg.sender, _amount);
    }

    /**
     * @dev Add tokens into the billing contract for any user
     * Ensure graphToken.approve() is called on the billing contract first
     * @param _to  Address that tokens are being added to
     * @param _amount  Amount of tokens to add
     */
    function addTo(address _to, uint256 _amount) external override {
        _add(msg.sender, _to, _amount);
    }

    /**
     * @dev Add tokens into the billing contract in bulk
     * Ensure graphToken.approve() is called on the billing contract first
     * @param _to  Array of addresses where to add tokens
     * @param _amount  Array of amount of tokens to add to each account
     */
    function addToMany(address[] calldata _to, uint256[] calldata _amount) external override {
        require(_to.length == _amount.length, "Lengths not equal");

        // Get total amount to add
        uint256 totalAmount = 0;
        for (uint256 i = 0; i < _amount.length; i++) {
            require(_amount[i] > 0, "Must add more than 0");
            totalAmount += _amount[i];
        }
        require(graphToken.transferFrom(msg.sender, address(this), totalAmount), "Add transfer failed");

        // Add each amount
        for (uint256 i = 0; i < _to.length; i++) {
            address user = _to[i];
            require(user != address(0), "user != 0");
            userBalances[user] += _amount[i];
            emit TokensAdded(user, _amount[i]);
        }
    }

    /**
     * @dev Add tokens into the billing contract
     * Ensure graphToken.approve() is called on the billing contract first
     * @param _from  Address that is sending tokens
     * @param _user  User that is adding tokens
     * @param _amount  Amount of tokens to add
     */
    function _add(
        address _from,
        address _user,
        uint256 _amount
    ) private {
        require(_amount != 0, "Must add more than 0");
        require(_user != address(0), "user != 0");
        require(graphToken.transferFrom(_from, address(this), _amount), "Add transfer failed");
        userBalances[_user] = userBalances[_user] + _amount;
        emit TokensAdded(_user, _amount);
    }

    /**
     * @dev Remove tokens from the billing contract
     * @param _user  Address that tokens are being removed from
     * @param _amount  Amount of tokens to remove
     */
    function remove(address _user, uint256 _amount) external override {
        require(_amount != 0, "Must remove more than 0");
        require(userBalances[msg.sender] >= _amount, "Too much removed");
        userBalances[msg.sender] = userBalances[msg.sender] - _amount;
        require(graphToken.transfer(_user, _amount), "Remove transfer failed");
        emit TokensRemoved(msg.sender, _user, _amount);
    }

    /**
     * @dev Gateway pulls tokens from the billing contract
     * @param _user  Address that tokens are being pulled from
     * @param _amount  Amount of tokens to pull
     * @param _to Destination to send pulled tokens
     */
    function pull(
        address _user,
        uint256 _amount,
        address _to
    ) external override onlyGateway {
        uint256 maxAmount = _pull(_user, _amount);
        _sendTokens(_to, maxAmount);
    }

    /**
     * @dev Gateway pulls tokens from many users in the billing contract
     * @param _users  Addresses that tokens are being pulled from
     * @param _amounts  Amounts of tokens to pull from each user
     * @param _to Destination to send pulled tokens
     */
    function pullMany(
        address[] calldata _users,
        uint256[] calldata _amounts,
        address _to
    ) external override onlyGateway {
        require(_users.length == _amounts.length, "Lengths not equal");
        uint256 totalPulled;
        for (uint256 i = 0; i < _users.length; i++) {
            uint256 userMax = _pull(_users[i], _amounts[i]);
            totalPulled = totalPulled + userMax;
        }
        _sendTokens(_to, totalPulled);
    }

    /**
     * @dev Gateway pulls tokens from the billing contract. Uses Math.min() so that it won't fail
     * in the event that a user removes in front of the gateway pulling
     * @param _user  Address that tokens are being pulled from
     * @param _amount  Amount of tokens to pull
     */
    function _pull(address _user, uint256 _amount) internal returns (uint256) {
        uint256 maxAmount = Math.min(_amount, userBalances[_user]);
        if (maxAmount > 0) {
            userBalances[_user] = userBalances[_user] - maxAmount;
            emit TokensPulled(_user, maxAmount);
        }
        return maxAmount;
    }

    /**
     * @dev Allows the Gateway to rescue any ERC20 tokens sent to this contract by accident
     * @param _to  Destination address to send the tokens
     * @param _token  Token address of the token that was accidentally sent to the contract
     * @param _amount  Amount of tokens to pull
     */
    function rescueTokens(
        address _to,
        address _token,
        uint256 _amount
    ) external onlyGateway {
        require(_to != address(0), "Cannot send to address(0)");
        require(_amount != 0, "Cannot rescue 0 tokens");
        IERC20 token = IERC20(_token);
        require(token.transfer(_to, _amount), "Rescue tokens failed");
        emit TokensRescued(_to, _token, _amount);
    }

    /**
     * @dev Send tokens to a destination account
     * @param _to Address where to send tokens
     * @param _amount Amount of tokens to send
     */
    function _sendTokens(address _to, uint256 _amount) internal {
        if (_amount > 0) {
            require(_to != address(0), "Cannot transfer to empty address");
            require(graphToken.transfer(_to, _amount), "Token transfer failed");
        }
    }
}

File 2 of 5 : IERC20.sol
// SPDX-License-Identifier: MIT

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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        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 5 : Math.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute.
        return (a / 2) + (b / 2) + (((a % 2) + (b % 2)) / 2);
    }

    /**
     * @dev Returns the ceiling of the division of two numbers.
     *
     * This differs from standard division with `/` in that it rounds up instead
     * of rounding down.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a / b + (a % b == 0 ? 0 : 1);
    }
}

File 4 of 5 : IBilling.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

interface IBilling {
    /**
     * @dev Set the new gateway address
     * @param _newGateway  New gateway address
     */
    function setGateway(address _newGateway) external; // onlyGateway or onlyGovernor, or something

    /**
     * @dev Add tokens into the billing contract
     * @param _amount  Amount of tokens to add
     */
    function add(uint256 _amount) external;

    /**
     * @dev Add tokens into the billing contract for any user
     * @param _to  Address that tokens are being added to
     * @param _amount  Amount of tokens to add
     */
    function addTo(address _to, uint256 _amount) external;

    /**
     * @dev Add tokens into the billing contract in bulk
     * Ensure graphToken.approve() is called on the billing contract first
     * @param _to  Array of addresses where to add tokens
     * @param _amount  Array of amount of tokens to add to each account
     */
    function addToMany(address[] calldata _to, uint256[] calldata _amount) external;

    /**
     * @dev Remove tokens from the billing contract
     * @param _to  Address that tokens are being removed from
     * @param _amount  Amount of tokens to remove
     */
    function remove(address _to, uint256 _amount) external;

    /**
     * @dev Gateway pulls tokens from the billing contract
     * @param _user  Address that tokens are being pulled from
     * @param _amount  Amount of tokens to pull
     * @param _to Destination to send pulled tokens
     */
    function pull(
        address _user,
        uint256 _amount,
        address _to
    ) external;

    /**
     * @dev Gateway pulls tokens from many users in the billing contract
     * @param _users  Addresses that tokens are being pulled from
     * @param _amounts  Amounts of tokens to pull from each user
     * @param _to Destination to send pulled tokens
     */
    function pullMany(
        address[] calldata _users,
        uint256[] calldata _amounts,
        address _to
    ) external;
}

File 5 of 5 : Governed.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

/**
 * @title Graph Governance contract
 * @dev Allows a contract to be owned and controlled by the 'governor'
 */
contract Governed {
    // -- State --

    // The address of the governor
    address public governor;
    // The address of the pending governor
    address public pendingGovernor;

    // -- Events --

    // Emit when the pendingGovernor state variable is updated
    event NewPendingOwnership(address indexed from, address indexed to);
    // Emit when the governor state variable is updated
    event NewOwnership(address indexed from, address indexed to);

    /**
     * @dev Check if the caller is the governor.
     */
    modifier onlyGovernor {
        require(msg.sender == governor, "Only Governor can call");
        _;
    }

    /**
     * @dev Initialize the governor with the _initGovernor param.
     * @param _initGovernor Governor address
     */
    constructor(address _initGovernor) {
        require(_initGovernor != address(0), "Governor must not be 0");
        governor = _initGovernor;
    }

    /**
     * @dev Admin function to begin change of governor. The `_newGovernor` must call
     * `acceptOwnership` to finalize the transfer.
     * @param _newGovernor Address of new `governor`
     */
    function transferOwnership(address _newGovernor) external onlyGovernor {
        require(_newGovernor != address(0), "Governor must be set");

        address oldPendingGovernor = pendingGovernor;
        pendingGovernor = _newGovernor;

        emit NewPendingOwnership(oldPendingGovernor, pendingGovernor);
    }

    /**
     * @dev Admin function for pending governor to accept role and update governor.
     * This function must called by the pending governor.
     */
    function acceptOwnership() external {
        require(pendingGovernor != address(0) && msg.sender == pendingGovernor, "Caller must be pending governor");

        address oldGovernor = governor;
        address oldPendingGovernor = pendingGovernor;

        governor = pendingGovernor;
        pendingGovernor = address(0);

        emit NewOwnership(oldGovernor, governor);
        emit NewPendingOwnership(oldPendingGovernor, pendingGovernor);
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_gateway","type":"address"},{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address","name":"_governor","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newGateway","type":"address"}],"name":"GatewayUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"NewOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"NewPendingOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensRescued","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"addTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"addToMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingGovernor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"pull","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"address","name":"_to","type":"address"}],"name":"pullMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"remove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newGateway","type":"address"}],"name":"setGateway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60a06040523480156200001157600080fd5b5060405162002bfc38038062002bfc833981810160405281019062000037919062000287565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a2906200034d565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620000fd836200013d60201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250505050506200044e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620001b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a7906200032b565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff01fde40131396fd2f417fae830fea338256f1ecc896f2fa4f0354fd4554712c60405160405180910390a250565b6000815190506200026a816200041a565b92915050565b600081519050620002818162000434565b92915050565b6000806000606084860312156200029d57600080fd5b6000620002ad8682870162000259565b9350506020620002c08682870162000270565b9250506040620002d38682870162000259565b9150509250925092565b6000620002ec6013836200036f565b9150620002f982620003c8565b602082019050919050565b6000620003136016836200036f565b91506200032082620003f1565b602082019050919050565b600060208201905081810360008301526200034681620002dd565b9050919050565b60006020820190508181036000830152620003688162000304565b9050919050565b600082825260208201905092915050565b60006200038d82620003a8565b9050919050565b6000620003a18262000380565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b7f476174657761792063616e6e6f74206265203000000000000000000000000000600082015250565b7f476f7665726e6f72206d757374206e6f74206265203000000000000000000000600082015250565b620004258162000380565b81146200043157600080fd5b50565b6200043f8162000394565b81146200044b57600080fd5b50565b60805160601c61277a620004826000396000818161086301528181611147015281816115fa015261179f015261277a6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063abe7f1ab1161008c578063ef9aab6811610066578063ef9aab681461020f578063f29573ff1461022b578063f2fde38b14610247578063f67a138914610263576100ea565b8063abe7f1ab146101b9578063cea9d26f146101d5578063e3056a34146101f1576100ea565b8063116191b6116100c8578063116191b61461014557806326224c641461016357806379ba50971461019357806390646b4a1461019d576100ea565b806307251d88146100ef5780630c340a241461010b5780631003e2d214610129575b600080fd5b61010960048036038101906101049190611c25565b61027f565b005b61011361032d565b6040516101209190612035565b60405180910390f35b610143600480360381019061013e9190611d9b565b610351565b005b61014d61035f565b60405161015a9190612035565b60405180910390f35b61017d60048036038101906101789190611b71565b610385565b60405161018a91906122d0565b60405180910390f35b61019b61039d565b005b6101b760048036038101906101b29190611b71565b610673565b005b6101d360048036038101906101ce9190611be9565b61070d565b005b6101ef60048036038101906101ea9190611b9a565b6109b6565b005b6101f9610c36565b6040516102069190612035565b60405180910390f35b61022960048036038101906102249190611ce9565b610c5c565b005b61024560048036038101906102409190611be9565b610e16565b005b610261600480360381019061025c9190611b71565b610e25565b005b61027d60048036038101906102789190611c74565b61100b565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461030f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030690612290565b60405180910390fd5b600061031b8484611441565b9050610327828261157f565b50505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61035c3333836116e9565b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915090505481565b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156104495750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047f90612150565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f60405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d60405160405180910390a35050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f890612250565b60405180910390fd5b61070a8161196c565b50565b6000811415610751576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610748906121f0565b60405180910390fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90612170565b60405180910390fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461081e9190612352565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016108bc929190612087565b602060405180830381600087803b1580156108d657600080fd5b505af11580156108ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090e9190611d72565b61094d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094490612230565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fcb0d9492300e48f4eaf3458b81c403bc7526f77735669f42e2378e5813d83857836040516109aa91906122d0565b60405180910390a35050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d90612290565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aad906121d0565b60405180910390fd5b6000811415610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190612270565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401610b3a929190612087565b602060405180830381600087803b158015610b5457600080fd5b505af1158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c9190611d72565b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc290612210565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f77023e19c7343ad491fd706c36335ca0e738340a91f29b1fd81e2673d44896c484604051610c2891906122d0565b60405180910390a350505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce390612290565b60405180910390fd5b828290508585905014610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b906120f0565b60405180910390fd5b600080600090505b86869050811015610e03576000610ddf888884818110610d85577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610d9a9190611b71565b878785818110610dd3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135611441565b90508083610ded91906122fc565b9250508080610dfb906123ce565b915050610d3c565b50610e0e828261157f565b505050505050565b610e213383836116e9565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa90612250565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a906120d0565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d60405160405180910390a35050565b818190508484905014611053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104a906120f0565b60405180910390fd5b6000805b8383905081101561114457600084848381811061109d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135116110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db906120b0565b60405180910390fd5b83838281811061111d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201358261112f91906122fc565b9150808061113c906123ce565b915050611057565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016111a293929190612050565b602060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f49190611d72565b611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a90612190565b60405180910390fd5b60005b8585905081101561143957600086868381811061127c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906112919190611b71565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa906122b0565b60405180910390fd5b84848381811061133c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461139191906122fc565b925050819055508073ffffffffffffffffffffffffffffffffffffffff167f0eaac1064ee8d13f83091f388597ffb5ff2d2e59f6a16aae2a74ba7f2d13c8d9868685818110611409577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013560405161141d91906122d0565b60405180910390a2508080611431906123ce565b915050611236565b505050505050565b60008061148d83600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a85565b905060008111156115755780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114e39190612352565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff167f3c3f210f5fb914ad3522d4b423e3db16130d0409700cb7b1827ccc90f341ac2f8260405161156c91906122d0565b60405180910390a25b8091505092915050565b60008111156116e557600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef90612110565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611653929190612087565b602060405180830381600087803b15801561166d57600080fd5b505af1158015611681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a59190611d72565b6116e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116db906121b0565b60405180910390fd5b5b5050565b600081141561172d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611724906120b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561179d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611794906122b0565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd8430846040518463ffffffff1660e01b81526004016117fa93929190612050565b602060405180830381600087803b15801561181457600080fd5b505af1158015611828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184c9190611d72565b61188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290612190565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118d691906122fc565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f0eaac1064ee8d13f83091f388597ffb5ff2d2e59f6a16aae2a74ba7f2d13c8d98260405161195f91906122d0565b60405180910390a2505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d390612130565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff01fde40131396fd2f417fae830fea338256f1ecc896f2fa4f0354fd4554712c60405160405180910390a250565b6000818310611a945781611a96565b825b905092915050565b600081359050611aad816126ff565b92915050565b60008083601f840112611ac557600080fd5b8235905067ffffffffffffffff811115611ade57600080fd5b602083019150836020820283011115611af657600080fd5b9250929050565b60008083601f840112611b0f57600080fd5b8235905067ffffffffffffffff811115611b2857600080fd5b602083019150836020820283011115611b4057600080fd5b9250929050565b600081519050611b5681612716565b92915050565b600081359050611b6b8161272d565b92915050565b600060208284031215611b8357600080fd5b6000611b9184828501611a9e565b91505092915050565b600080600060608486031215611baf57600080fd5b6000611bbd86828701611a9e565b9350506020611bce86828701611a9e565b9250506040611bdf86828701611b5c565b9150509250925092565b60008060408385031215611bfc57600080fd5b6000611c0a85828601611a9e565b9250506020611c1b85828601611b5c565b9150509250929050565b600080600060608486031215611c3a57600080fd5b6000611c4886828701611a9e565b9350506020611c5986828701611b5c565b9250506040611c6a86828701611a9e565b9150509250925092565b60008060008060408587031215611c8a57600080fd5b600085013567ffffffffffffffff811115611ca457600080fd5b611cb087828801611ab3565b9450945050602085013567ffffffffffffffff811115611ccf57600080fd5b611cdb87828801611afd565b925092505092959194509250565b600080600080600060608688031215611d0157600080fd5b600086013567ffffffffffffffff811115611d1b57600080fd5b611d2788828901611ab3565b9550955050602086013567ffffffffffffffff811115611d4657600080fd5b611d5288828901611afd565b93509350506040611d6588828901611a9e565b9150509295509295909350565b600060208284031215611d8457600080fd5b6000611d9284828501611b47565b91505092915050565b600060208284031215611dad57600080fd5b6000611dbb84828501611b5c565b91505092915050565b611dcd81612386565b82525050565b6000611de06014836122eb565b9150611deb82612446565b602082019050919050565b6000611e036014836122eb565b9150611e0e8261246f565b602082019050919050565b6000611e266011836122eb565b9150611e3182612498565b602082019050919050565b6000611e496020836122eb565b9150611e54826124c1565b602082019050919050565b6000611e6c6013836122eb565b9150611e77826124ea565b602082019050919050565b6000611e8f601f836122eb565b9150611e9a82612513565b602082019050919050565b6000611eb26010836122eb565b9150611ebd8261253c565b602082019050919050565b6000611ed56013836122eb565b9150611ee082612565565b602082019050919050565b6000611ef86015836122eb565b9150611f038261258e565b602082019050919050565b6000611f1b6019836122eb565b9150611f26826125b7565b602082019050919050565b6000611f3e6017836122eb565b9150611f49826125e0565b602082019050919050565b6000611f616014836122eb565b9150611f6c82612609565b602082019050919050565b6000611f846016836122eb565b9150611f8f82612632565b602082019050919050565b6000611fa76016836122eb565b9150611fb28261265b565b602082019050919050565b6000611fca6016836122eb565b9150611fd582612684565b602082019050919050565b6000611fed6016836122eb565b9150611ff8826126ad565b602082019050919050565b60006120106009836122eb565b915061201b826126d6565b602082019050919050565b61202f816123c4565b82525050565b600060208201905061204a6000830184611dc4565b92915050565b60006060820190506120656000830186611dc4565b6120726020830185611dc4565b61207f6040830184612026565b949350505050565b600060408201905061209c6000830185611dc4565b6120a96020830184612026565b9392505050565b600060208201905081810360008301526120c981611dd3565b9050919050565b600060208201905081810360008301526120e981611df6565b9050919050565b6000602082019050818103600083015261210981611e19565b9050919050565b6000602082019050818103600083015261212981611e3c565b9050919050565b6000602082019050818103600083015261214981611e5f565b9050919050565b6000602082019050818103600083015261216981611e82565b9050919050565b6000602082019050818103600083015261218981611ea5565b9050919050565b600060208201905081810360008301526121a981611ec8565b9050919050565b600060208201905081810360008301526121c981611eeb565b9050919050565b600060208201905081810360008301526121e981611f0e565b9050919050565b6000602082019050818103600083015261220981611f31565b9050919050565b6000602082019050818103600083015261222981611f54565b9050919050565b6000602082019050818103600083015261224981611f77565b9050919050565b6000602082019050818103600083015261226981611f9a565b9050919050565b6000602082019050818103600083015261228981611fbd565b9050919050565b600060208201905081810360008301526122a981611fe0565b9050919050565b600060208201905081810360008301526122c981612003565b9050919050565b60006020820190506122e56000830184612026565b92915050565b600082825260208201905092915050565b6000612307826123c4565b9150612312836123c4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561234757612346612417565b5b828201905092915050565b600061235d826123c4565b9150612368836123c4565b92508282101561237b5761237a612417565b5b828203905092915050565b6000612391826123a4565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006123d9826123c4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561240c5761240b612417565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4d75737420616464206d6f7265207468616e2030000000000000000000000000600082015250565b7f476f7665726e6f72206d75737420626520736574000000000000000000000000600082015250565b7f4c656e67746873206e6f7420657175616c000000000000000000000000000000600082015250565b7f43616e6e6f74207472616e7366657220746f20656d7074792061646472657373600082015250565b7f476174657761792063616e6e6f74206265203000000000000000000000000000600082015250565b7f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200600082015250565b7f546f6f206d7563682072656d6f76656400000000000000000000000000000000600082015250565b7f416464207472616e73666572206661696c656400000000000000000000000000600082015250565b7f546f6b656e207472616e73666572206661696c65640000000000000000000000600082015250565b7f43616e6e6f742073656e6420746f206164647265737328302900000000000000600082015250565b7f4d7573742072656d6f7665206d6f7265207468616e2030000000000000000000600082015250565b7f52657363756520746f6b656e73206661696c6564000000000000000000000000600082015250565b7f52656d6f7665207472616e73666572206661696c656400000000000000000000600082015250565b7f4f6e6c7920476f7665726e6f722063616e2063616c6c00000000000000000000600082015250565b7f43616e6e6f7420726573637565203020746f6b656e7300000000000000000000600082015250565b7f43616c6c6572206d757374206265206761746577617900000000000000000000600082015250565b7f7573657220213d20300000000000000000000000000000000000000000000000600082015250565b61270881612386565b811461271357600080fd5b50565b61271f81612398565b811461272a57600080fd5b50565b612736816123c4565b811461274157600080fd5b5056fea2646970667358221220bb637a2c131b0198ac908861fef9ce7cd05abd9a5c27d3c69ae201a882c0baf864736f6c6343000804003300000000000000000000000076c00f71f4dace63fd83ec80dbc8c30a88b2891c0000000000000000000000005fe2b58c013d7601147dcdd68c143a77499f5531000000000000000000000000ef38f892e4722152fd8edb50cd84a96344fd47ce

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

00000000000000000000000076c00f71f4dace63fd83ec80dbc8c30a88b2891c0000000000000000000000005fe2b58c013d7601147dcdd68c143a77499f5531000000000000000000000000ef38f892e4722152fd8edb50cd84a96344fd47ce

-----Decoded View---------------
Arg [0] : _gateway (address): 0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c
Arg [1] : _token (address): 0x5fe2b58c013d7601147dcdd68c143a77499f5531
Arg [2] : _governor (address): 0xef38f892e4722152fd8edb50cd84a96344fd47ce

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000076c00f71f4dace63fd83ec80dbc8c30a88b2891c
Arg [1] : 0000000000000000000000005fe2b58c013d7601147dcdd68c143a77499f5531
Arg [2] : 000000000000000000000000ef38f892e4722152fd8edb50cd84a96344fd47ce


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