Contract 0x10829DB618E6F520Fa3A01c75bC6dDf8722fA9fE 1

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xbf4b66f8dbd5de4de29ac95cf5081061bfe09c71814ec7c4f31421bb1514e393Pull Many287272662022-05-24 21:32:513 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0280165 500
0x0502032c85bfb756e182e1b0764e911ec9b070cae9e4ef75a1fed58f26a49c42Pull Many287233362022-05-24 19:13:275 hrs 20 mins ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0280105 500
0xb30fcc6a67e480b144b7b2551e090e13853dfd6d52c5178f15419cb593662f33Pull Many287215732022-05-24 18:12:446 hrs 20 mins ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.04511 500
0x12a5fa0d00fb10a77c607238c001d7384a67ee16019f46b439368145398d9a7cPull Many287198002022-05-24 17:11:427 hrs 22 mins ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0280225 500
0x2dfcb4dceb8fb3008d0030df9e2aa67de690bcc78e92637cfe13724417072a76Pull Many287180312022-05-24 16:10:488 hrs 22 mins ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0280165 500
0xec2e96efa6935bd34d71cf686ed991686b0792127b3bf1dd225bf079c4789784Pull Many287162572022-05-24 15:09:449 hrs 23 mins ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0280105 500
0xd26e8f096211191aae13c86e34525887a617fa77b2905c1e1ca58cca02263829Pull Many287109542022-05-24 12:06:5412 hrs 26 mins ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.04076 500
0x6cb0c1e4895f33986ccc4fd11504f5eae0a8660b281af753076cda82cbd10d51Pull Many287056542022-05-24 9:04:1515 hrs 29 mins ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0280165 500
0xb38f9a31a3a60c33a837ce05f96a306a0750587f0abe3306df36cc6b8c986831Add287009072022-05-24 6:18:5018 hrs 14 mins ago0x47537237f137fbcb14a9e4c7cdd05b2b43495cbd IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.00227696054 30.070000013
0x95ca55fde93e11cc33e9dd0195fe010b21710c956f97096e382a436df3a1b111Pull Many287003932022-05-24 6:01:0918 hrs 32 mins ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.025374 500
0x9d8ed07e96350c1172737d79b01e4ec3378e14b25dc0404e6a914879ba64cca0Pull Many286986942022-05-24 5:00:3519 hrs 33 mins ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0280165 500
0x1c8a1cc9e0f3ebee87ed540993f52d8a587f03bb67828cf67a55dbe3deccc991Pull Many286936432022-05-24 1:58:0422 hrs 35 mins ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0280225 500
0xa2cdfc3f7a40f4af73288b6639f9102c1912e2b6b37cea65603ca49641a4dc9fPull Many286919942022-05-24 0:57:0623 hrs 36 mins ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0323605 500
0xccb89a2861bc09ac0be8f9c74500235ea970585b17513e53b51702384257a076Pull Many286902802022-05-23 23:56:021 day 37 mins ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.045104 500
0xaf065ef1c13d88fa9adabb2302c26c1af1206c18179e483bee530c9bba688f59Pull Many286885722022-05-23 22:55:071 day 1 hr ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0280225 500
0xccc1314f27768d92a04f45ffbcfae5d42482f534c3be56adf56b440c29a33e7aPull Many286868082022-05-23 21:54:311 day 2 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0367105 500
0x43346bd22dde562e1730bb9ea06bbe00030b42e70e1b0ccc9346cdf9385ed222Pull Many286850442022-05-23 20:53:291 day 3 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0323725 500
0x74c8ebb03ae0dfcf15fd125458b0cef677ee629c2381ae83b9819a4b79049971Pull Many286842522022-05-23 20:24:121 day 4 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0323485 500
0x61e63829a19c8e792205406ecd4e802b47bdc9a1a1e10ddbea2174730ca11f89Pull Many286826142022-05-23 19:23:351 day 5 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0367105 500
0x10e77bf2366f91744fb7a4b417501434769406fd225f667b71612a8bf74d04e3Pull Many286809102022-05-23 18:22:541 day 6 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0516915 500
0x7fd0821f99e6f60cf3f3c04cd3bbce269ebfd982af7877be52fd798e1c05dbbbPull Many286792682022-05-23 17:21:581 day 7 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.025374 500
0x9ec928473eb7184e1790829fc154b0e291bd49d4842778c37ebe259463a50347Add286789332022-05-23 17:10:281 day 7 hrs ago0x000000724350d0b24747bd816dc5031acb7efe0b IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.002388702203 31.550682921
0xe1c9d8dd763da1c7fcb5a2ac4ee550b693b3ec9c5c113046629bfd457605e6fcPull Many286774962022-05-23 16:20:571 day 8 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0280165 500
0x33fabad638180702a62a348a8e5e72261626efa36fb65b15b25ee8c24b1cfb8fPull Many286739472022-05-23 14:18:581 day 10 hrs ago0x76c00f71f4dace63fd83ec80dbc8c30a88b2891c IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0280165 500
0x48861dfb5c496a9c5b7b3cd347e2d4a4e96f672f624fa8fcc4429636713acb81Add286689142022-05-23 11:23:481 day 13 hrs ago0x4985ad3d7d81c9e9a4cb2cc080f0c6baa55d8f74 IN  0x10829db618e6f520fa3a01c75bc6ddf8722fa9fe0 MATIC0.0028364 40
[ 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.