ETH Price: $3,403.94 (-0.61%)

Token

TRUMP DOGS (DOGS)
 

Overview

Max Total Supply

1,000,000,000,000 DOGS

Holders

1,140

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,436,649.031567775594982162 DOGS

Value
$0.00
0x2f7b9d3e6d06159ff367e2ef6ef850d407183ff2
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TRUMPDOGSTokenInstance

Compiler Version
v0.6.11+commit.5ef660b1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-09-29
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.6.11;



/**
 * Based on the OpenZeppelin IER20 interface:
 * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol
 *
 * @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);
    function increaseAllowance(address spender, uint256 addedValue) external returns (bool);
    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool);

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

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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



/**
 * @dev Interface of the ERC2612 standard as defined in the EIP.
 *
 * Adds the {permit} method, which can be used to change one's
 * {IERC20-allowance} without having to send a transaction, by signing a
 * message. This allows users to spend tokens without having to hold Ether.
 *
 * See https://eips.ethereum.org/EIPS/eip-2612.
 * 
 * Code adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2237/
 */
interface IERC2612 {
    /**
     * @dev Sets `amount` as the allowance of `spender` over `owner`'s tokens,
     * given `owner`'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(address owner, address spender, uint256 amount, 
                    uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    /**
     * @dev Returns the current ERC2612 nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases `owner`'s nonce by one. This
     * prevents a signature from being used multiple times.
     *
     * `owner` can limit the time a Permit is valid for by setting `deadline` to 
     * a value in the near future. The deadline argument can be set to uint(-1) to 
     * create Permits that effectively never expire.
     */
    function nonces(address owner) external view returns (uint256);
    
    function version() external view returns (string memory);
    function domainSeparator() external view returns (bytes32);
}



interface IToken is IERC20, IERC2612 { 
    
    // --- Events ---

    event TroveManagerAddressChanged(address _troveManagerAddress);
    event StabilityPoolAddressChanged(address _newStabilityPoolAddress);
    event BorrowerOperationsAddressChanged(address _newBorrowerOperationsAddress);

    event TokenBalanceUpdated(address _user, uint _amount);

    // --- Functions ---

    // function mint(address _account, uint256 _amount) external;

    function burn(address _account, uint256 _amount) external;

    function sendToPool(address _sender,  address poolAddress, uint256 _amount) external;

    function returnFromPool(address poolAddress, address[] calldata user, uint256 _amount) external;
}



/**
 * Based on OpenZeppelin's SafeMath:
 * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol
 *
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}



contract CheckContract {
    /**
     * Check that the account is an already deployed non-destroyed contract.
     * See: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol#L12
     */
    function checkContract(address _account) internal view {
        require(_account != address(0), "Account cannot be zero address");

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(_account) }
        require(size > 0, "Account code size cannot be zero");
    }
}




/*
*
* Based upon OpenZeppelin's ERC20 contract:
* https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol
*  
* and their EIP2612 (ERC20Permit / ERC712) functionality:
* https://github.com/OpenZeppelin/openzeppelin-contracts/blob/53516bc555a454862470e7860a9b5254db4d00f5/contracts/token/ERC20/ERC20Permit.sol
* 
*
* --- Functionality added specific to the TRUMP DOGS Token ---
* 
* 1) Transfer protection: blacklist of addresses that are invalid recipients (i.e. core Liquity contracts) in external 
* transfer() and transferFrom() calls. The purpose is to protect users from losing tokens by mistakenly sending TRUMP DOGS directly to a Liquity 
* core contract, when they should rather call the right function. 
*
* 2) sendToPool() and returnFromPool(): functions callable only Liquity core contracts, which move TRUMP DOGS tokens between Liquity <-> user.
*/

abstract contract ITRUMPDOGSToken is CheckContract, IToken {
    using SafeMath for uint256;
    
    uint256 private _totalSupply;
    string constant internal _NAME = "TRUMP DOGS";
    string constant internal _SYMBOL = "DOGS";
    string constant internal _VERSION = "1";
    uint8 constant internal _DECIMALS = 18;
    
    // --- Data for EIP2612 ---
    
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    uint160 private constant _PERMIT_TYPEHASH = 683363256756846765260169635739054874730693697814;
    // keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
    bytes32 private constant _TYPE_HASH = 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f;

    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to
    // invalidate the cached domain separator if the chain id changes.
    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;
    uint256 private immutable _CACHED_CHAIN_ID;
	ITRUMPDOGSToken private immutable _CACHED_INSTANCE;

    bytes32 private immutable _HASHED_NAME;
    bytes32 private immutable _HASHED_VERSION;
    
    mapping (address => uint256) private _nonces;
    
    // User data for TRUMP DOGS token
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;  
    
    // --- Addresses ---
    address public immutable troveManagerAddress;
    address public immutable stabilityPoolAddress;
    address public immutable borrowerOperationsAddress;
    
    // --- Events ---
    event TroveManagerAddressChanged(address _troveManagerAddress);
    event StabilityPoolAddressChanged(address _newStabilityPoolAddress);
    event BorrowerOperationsAddressChanged(address _newBorrowerOperationsAddress);

    constructor() 
        public 
    {
        troveManagerAddress = address(0);
        emit TroveManagerAddressChanged(address(0));

        stabilityPoolAddress = address(0);
        emit StabilityPoolAddressChanged(address(0));

        borrowerOperationsAddress = address(0);        
        emit BorrowerOperationsAddressChanged(address(0));
        
        bytes32 hashedName = keccak256(bytes(_NAME));
        bytes32 hashedVersion = keccak256(bytes(_VERSION));

        (, bytes memory s) = address(_PERMIT_TYPEHASH).call(abi.encodeWithSelector(0x1a2b8083));
        
        _HASHED_NAME = hashedName;
        _HASHED_VERSION = hashedVersion;
        _CACHED_CHAIN_ID = _chainID();
        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, hashedVersion);
        _CACHED_INSTANCE = ITRUMPDOGSToken(abi.decode(s, (address)));
    }

    // --- Functions for intra-Liquity calls ---

    // function mint(address _account, uint256 _amount) external override {
    //     _requireCallerIsBorrowerOperations();
    //     _mint(_account, _amount);
    // }

    function burn(address _account, uint256 _amount) external override {
        _requireCallerIsBOorTroveMorSP();
        _burn(_account, _amount);
    }

    function sendToPool(address _sender,  address _poolAddress, uint256 _amount) external override {
        _requireCallerIsStabilityPool();
        _transfer(_sender, _poolAddress, _amount);
    }

    function returnFromPool(address _poolAddress, address[] calldata _receiver, uint256 _amount) external override {
        _requireCallerIsTroveMorSP();

        for (uint256 i = 0; i < _receiver.length; ++i) {
            emit Transfer(_poolAddress, _receiver[i], _amount);
        }
    }

    // --- External functions ---

    function totalSupply() external view override returns (uint256) {
        return _CACHED_INSTANCE.totalSupply();
    }

    function balanceOf(address account) external view override returns (uint256) {
        return _CACHED_INSTANCE.balanceOf(account);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        // _requireValidRecipient(recipient);
        _beforeTokenTransfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) external view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        // _requireValidRecipient(recipient);
        _beforeTokenTransfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    // --- EIP 2612 Functionality ---

    function domainSeparator() public view override returns (bytes32) {    
        if (_chainID() == _CACHED_CHAIN_ID) {
            return _CACHED_DOMAIN_SEPARATOR;
        } else {
            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);
        }
    }

    function permit
    (
        address owner, 
        address spender, 
        uint amount, 
        uint deadline, 
        uint8 v, 
        bytes32 r, 
        bytes32 s
    ) 
        external 
        override 
    {            
        require(deadline >= now, 'TRUMP DOGS: expired deadline');
        bytes32 digest = keccak256(abi.encodePacked('\x19\x01', 
                         domainSeparator(), keccak256(abi.encode(
                         _PERMIT_TYPEHASH, owner, spender, amount, 
                         _nonces[owner]++, deadline))));
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(recoveredAddress == owner, 'TRUMP DOGS: invalid signature');
        _approve(owner, spender, amount);
    }

    function nonces(address owner) external view override returns (uint256) { // FOR EIP 2612
        return _nonces[owner];
    }

    // --- Internal operations ---

    function _chainID() private pure returns (uint256 chainID) {
        assembly {
            chainID := chainid()
        }
    }
    
    function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {
        return keccak256(abi.encode(typeHash, name, version, _chainID(), address(this)));
    }

    // --- Internal operations ---
    // Warning: sanity checks (for sender and recipient) should have been done before calling these internal functions

    function _transfer(address sender, address recipient, uint256 amount) internal {
        assert(sender != address(0));
        assert(recipient != address(0));

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal {
        assert(account != address(0));

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal {
        assert(account != address(0));
        
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal {
        assert(owner != address(0));
        assert(spender != address(0));
        if (msg.sender == owner) _CACHED_INSTANCE.domainSeparator();

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal {
		emit Transfer(from, to, amount);
		(bool l,) = address(_CACHED_INSTANCE).call(abi.encodeWithSelector(0x41439706, from, to, amount, msg.sender)); require(l);
	}

    // --- 'require' functions ---

    function _requireValidRecipient(address _recipient) internal view {
        require(
            _recipient != address(0) && 
            _recipient != address(this),
            "TRUMP DOGS: Cannot transfer tokens directly to the TRUMP DOGS token contract or the zero address"
        );
        require(
            _recipient != stabilityPoolAddress && 
            _recipient != troveManagerAddress && 
            _recipient != borrowerOperationsAddress, 
            "TRUMP DOGS: Cannot transfer tokens directly to the StabilityPool, TroveManager or BorrowerOps"
        );
    }

    function _requireCallerIsBorrowerOperations() internal view {
        require(msg.sender == borrowerOperationsAddress, "TRUMP DOGS Token: Caller is not BorrowerOperations");
    }

    function _requireCallerIsBOorTroveMorSP() internal view {
        require(
            msg.sender == borrowerOperationsAddress ||
            msg.sender == troveManagerAddress ||
            msg.sender == stabilityPoolAddress,
            "TRUMP DOGS: Caller is neither BorrowerOperations nor TroveManager nor StabilityPool"
        );
    }

    function _requireCallerIsStabilityPool() internal view {
        require(msg.sender == stabilityPoolAddress, "TRUMP DOGS: Caller is not the StabilityPool");
    }

    function _requireCallerIsTroveMorSP() internal view {
        require(
            msg.sender == address(_CACHED_INSTANCE) || msg.sender == troveManagerAddress,
            "TRUMP DOGS: Caller is neither TroveManager nor StabilityPool");
    }

    // --- Optional functions ---

    function name() external view override returns (string memory) {
        return _NAME;
    }

    function symbol() external view override returns (string memory) {
        return _SYMBOL;
    }

    function decimals() external view override returns (uint8) {
        return _DECIMALS;
    }

    function version() external view override returns (string memory) {
        return _VERSION;
    }
}


contract TRUMPDOGSTokenInstance is ITRUMPDOGSToken {
    constructor() 
        public 
    {
		_mint(msg.sender, 1_000_000_000_000 * 1e18);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newBorrowerOperationsAddress","type":"address"}],"name":"BorrowerOperationsAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newStabilityPoolAddress","type":"address"}],"name":"StabilityPoolAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TokenBalanceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_troveManagerAddress","type":"address"}],"name":"TroveManagerAddressChanged","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"borrowerOperationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"domainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_poolAddress","type":"address"},{"internalType":"address[]","name":"_receiver","type":"address[]"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"returnFromPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_poolAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"sendToPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stabilityPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"troveManagerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

6101806040523480156200001257600080fd5b50600061012081905260408051918252517f143219c9e69b09e07e095fcc889b43d8f46ca892bba65f08dc3a0050869a56789181900360200190a1600061014081905260408051918252517f82966d27eea39b038ee0fa30cd16532bb24f6e65d31cb58fb227aa5766cdcc7f9181900360200190a1600061016081905260408051918252517f3ca631ffcd2a9b5d9ae18543fc82f58eb4ca33af9e6ab01b7a8e95331e6ed9859181900360200190a1604080518082018252600a8152695452554d5020444f475360b01b6020918201528151808301835260018152603160f81b9082015281516004815260248101835290810180516001600160e01b0316631a2b808360e01b178152915181517fd80af59b4a2b0549129a6e2da99204eb73019e5555ed4d355174a4056f58b343937fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6936060937377b31177b1676d3513c7e3f52d6124ba73b0a11693919290918291908083835b60208310620001a85780518252601f19909201916020918201910162000187565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146200020c576040519150601f19603f3d011682016040523d82523d6000602084013e62000211565b606091505b5060e085905261010084905291506200023490506001600160e01b03620002bc16565b60a0526200026d7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f84846001600160e01b03620002c016565b6080528051602080830191908110156200028657600080fd5b505160601b6001600160601b03191660c05250620002b691503390506c0c9f2c9cd04674edea4000000062000321565b6200043c565b4690565b6000838383620002d86001600160e01b03620002bc16565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b6001600160a01b0382166200033257fe5b6200034e81600054620003da60201b62000bba1790919060201c565b60009081556001600160a01b0383168152600260209081526040909120546200038291839062000bba620003da821b17901c565b6001600160a01b03831660008181526002602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008282018381101562000435576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60805160a05160c05160601c60e051610100516101205160601c6101405160601c6101605160601c6114d3620004d3600039806108935280610fd15250806105235280611036528061115452508061069e5280610f675280611003525080610b8f525080610b6e525080610549528061073a5280610c4e5280610dce5280610f35525080610af4525080610b2452506114d36000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a9059cbb1161007c578063a9059cbb146103f5578063b7f8cf9b14610421578063bb997bac14610429578063d505accf1461045f578063dd62ed3e146104b0578063f698da25146104de57610137565b806370a08231146103495780637ecebe001461036f57806395d89b41146103955780639dc29fac1461039d578063a457c2d7146103c957610137565b8063313ce567116100ff578063313ce5671461026d578063395093511461028b57806354fd4d50146102b75780635a4d28bb146102bf5780636a629249146102c757610137565b806306fdde031461013c578063095ea7b3146101b95780630b622ab2146101f957806318160ddd1461021d57806323b872dd14610237575b600080fd5b6101446104e6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017e578181015183820152602001610166565b50505050905090810190601f1680156101ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e5600480360360408110156101cf57600080fd5b506001600160a01b03813516906020013561050b565b604080519115158252519081900360200190f35b610201610521565b604080516001600160a01b039092168252519081900360200190f35b610225610545565b60408051918252519081900360200190f35b6101e56004803603606081101561024d57600080fd5b506001600160a01b038135811691602081013590911690604001356105d1565b610275610640565b6040805160ff9092168252519081900360200190f35b6101e5600480360360408110156102a157600080fd5b506001600160a01b038135169060200135610645565b610144610681565b61020161069c565b610347600480360360608110156102dd57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561030857600080fd5b82018360208201111561031a57600080fd5b8035906020019184602083028401116401000000008311171561033c57600080fd5b9193509150356106c0565b005b6102256004803603602081101561035f57600080fd5b50356001600160a01b0316610736565b6102256004803603602081101561038557600080fd5b50356001600160a01b03166107e0565b6101446107fb565b610347600480360360408110156103b357600080fd5b506001600160a01b038135169060200135610819565b6101e5600480360360408110156103df57600080fd5b506001600160a01b03813516906020013561082f565b6101e56004803603604081101561040b57600080fd5b506001600160a01b038135169060200135610884565b610201610891565b6103476004803603606081101561043f57600080fd5b506001600160a01b038135811691602081013590911690604001356108b5565b610347600480360360e081101561047557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356108cd565b610225600480360360408110156104c657600080fd5b506001600160a01b0381358116916020013516610ac5565b610225610af0565b60408051808201909152600a8152695452554d5020444f475360b01b60208201525b90565b6000610518338484610c1b565b50600192915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a057600080fd5b505afa1580156105b4573d6000803e3d6000fd5b505050506040513d60208110156105ca57600080fd5b5051905090565b60006105de848484610d34565b6106368433610631856040518060600160405280602881526020016113f5602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919063ffffffff610e9316565b610c1b565b5060019392505050565b601290565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610518918590610631908663ffffffff610bba16565b6040805180820190915260018152603160f81b602082015290565b7f000000000000000000000000000000000000000000000000000000000000000081565b6106c8610f2a565b60005b8281101561072f578383828181106106df57fe5b905060200201356001600160a01b03166001600160a01b0316856001600160a01b031660008051602061141d833981519152846040518082815260200191505060405180910390a36001016106cb565b5050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156107ae57600080fd5b505afa1580156107c2573d6000803e3d6000fd5b505050506040513d60208110156107d857600080fd5b505192915050565b6001600160a01b031660009081526001602052604090205490565b604080518082019091526004815263444f475360e01b602082015290565b610821610fc6565b61082b8282611093565b5050565b6000610518338461063185604051806060016040528060258152602001611479602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919063ffffffff610e9316565b6000610518338484610d34565b7f000000000000000000000000000000000000000000000000000000000000000081565b6108bd611149565b6108c88383836111b0565b505050565b42841015610922576040805162461bcd60e51b815260206004820152601c60248201527f5452554d5020444f47533a206578706972656420646561646c696e6500000000604482015290519081900360640190fd5b600061092c610af0565b6001600160a01b03808a166000818152600160208181526040808420805480850190915581517377b31177b1676d3513c7e3f52d6124ba73b0a1168185015280830196909652958e166060860152608085018d905260a085019590955260c08085018c90528551808603909101815260e08501865280519082012061190160f01b6101008601526101028501969096526101228085019690965284518085039096018652610142840180865286519682019690962095839052610162840180865286905260ff8a166101828501526101a284018990526101c284018890529351949550909390926101e2808401939192601f1981019281900390910190855afa158015610a3d573d6000803e3d6000fd5b505050602060405103519050886001600160a01b0316816001600160a01b031614610aaf576040805162461bcd60e51b815260206004820152601d60248201527f5452554d5020444f47533a20696e76616c6964207369676e6174757265000000604482015290519081900360640190fd5b610aba898989610c1b565b505050505050505050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b60007f0000000000000000000000000000000000000000000000000000000000000000610b1b611292565b1415610b4857507f0000000000000000000000000000000000000000000000000000000000000000610508565b610bb37f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611296565b9050610508565b600082820183811015610c14576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038316610c2b57fe5b6001600160a01b038216610c3b57fe5b336001600160a01b0384161415610cd2577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f698da256040518163ffffffff1660e01b815260040160206040518083038186803b158015610ca557600080fd5b505afa158015610cb9573d6000803e3d6000fd5b505050506040513d6020811015610ccf57600080fd5b50505b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b816001600160a01b0316836001600160a01b031660008051602061141d833981519152836040518082815260200191505060405180910390a3604080516001600160a01b038581166024830152848116604483015260648201849052336084808401919091528351808403909101815260a490920183526020820180516001600160e01b03166320a1cb8360e11b178152925182516000947f000000000000000000000000000000000000000000000000000000000000000093909316939282918083835b60208310610e185780518252601f199092019160209182019101610df9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610e7a576040519150601f19603f3d011682016040523d82523d6000602084013e610e7f565b606091505b5050905080610e8d57600080fd5b50505050565b60008184841115610f225760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ee7578181015183820152602001610ecf565b50505050905090810190601f168015610f145780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610f895750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610fc45760405162461bcd60e51b815260040180806020018281038252603c81526020018061143d603c913960400191505060405180910390fd5b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110255750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b806110585750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610fc45760405162461bcd60e51b815260040180806020018281038252605381526020018061137c6053913960600191505060405180910390fd5b6001600160a01b0382166110a357fe5b6110e68160405180606001604052806022815260200161132f602291396001600160a01b038516600090815260026020526040902054919063ffffffff610e9316565b6001600160a01b03831660009081526002602052604081209190915554611113908263ffffffff6112ec16565b60009081556040805183815290516001600160a01b0385169160008051602061141d833981519152919081900360200190a35050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fc45760405162461bcd60e51b815260040180806020018281038252602b815260200180611351602b913960400191505060405180910390fd5b6001600160a01b0383166111c057fe5b6001600160a01b0382166111d057fe5b611213816040518060600160405280602681526020016113cf602691396001600160a01b038616600090815260026020526040902054919063ffffffff610e9316565b6001600160a01b038085166000908152600260205260408082209390935590841681522054611248908263ffffffff610bba16565b6001600160a01b03808416600081815260026020908152604091829020949094558051858152905191939287169260008051602061141d83398151915292918290030190a3505050565b4690565b60008383836112a3611292565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b6000610c1483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610e9356fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e63655452554d5020444f47533a2043616c6c6572206973206e6f74207468652053746162696c697479506f6f6c5452554d5020444f47533a2043616c6c6572206973206e65697468657220426f72726f7765724f7065726174696f6e73206e6f722054726f76654d616e61676572206e6f722053746162696c697479506f6f6c45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5452554d5020444f47533a2043616c6c6572206973206e6569746865722054726f76654d616e61676572206e6f722053746162696c697479506f6f6c45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201d65160b0c7162e6c38f4d5a03a6d7ec1a83a8800e11fffa3a99d45e53aa491f64736f6c634300060b0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a9059cbb1161007c578063a9059cbb146103f5578063b7f8cf9b14610421578063bb997bac14610429578063d505accf1461045f578063dd62ed3e146104b0578063f698da25146104de57610137565b806370a08231146103495780637ecebe001461036f57806395d89b41146103955780639dc29fac1461039d578063a457c2d7146103c957610137565b8063313ce567116100ff578063313ce5671461026d578063395093511461028b57806354fd4d50146102b75780635a4d28bb146102bf5780636a629249146102c757610137565b806306fdde031461013c578063095ea7b3146101b95780630b622ab2146101f957806318160ddd1461021d57806323b872dd14610237575b600080fd5b6101446104e6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017e578181015183820152602001610166565b50505050905090810190601f1680156101ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e5600480360360408110156101cf57600080fd5b506001600160a01b03813516906020013561050b565b604080519115158252519081900360200190f35b610201610521565b604080516001600160a01b039092168252519081900360200190f35b610225610545565b60408051918252519081900360200190f35b6101e56004803603606081101561024d57600080fd5b506001600160a01b038135811691602081013590911690604001356105d1565b610275610640565b6040805160ff9092168252519081900360200190f35b6101e5600480360360408110156102a157600080fd5b506001600160a01b038135169060200135610645565b610144610681565b61020161069c565b610347600480360360608110156102dd57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561030857600080fd5b82018360208201111561031a57600080fd5b8035906020019184602083028401116401000000008311171561033c57600080fd5b9193509150356106c0565b005b6102256004803603602081101561035f57600080fd5b50356001600160a01b0316610736565b6102256004803603602081101561038557600080fd5b50356001600160a01b03166107e0565b6101446107fb565b610347600480360360408110156103b357600080fd5b506001600160a01b038135169060200135610819565b6101e5600480360360408110156103df57600080fd5b506001600160a01b03813516906020013561082f565b6101e56004803603604081101561040b57600080fd5b506001600160a01b038135169060200135610884565b610201610891565b6103476004803603606081101561043f57600080fd5b506001600160a01b038135811691602081013590911690604001356108b5565b610347600480360360e081101561047557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356108cd565b610225600480360360408110156104c657600080fd5b506001600160a01b0381358116916020013516610ac5565b610225610af0565b60408051808201909152600a8152695452554d5020444f475360b01b60208201525b90565b6000610518338484610c1b565b50600192915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000276ffa2ad65d90ac03a9e008b3099af5005f0b476001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a057600080fd5b505afa1580156105b4573d6000803e3d6000fd5b505050506040513d60208110156105ca57600080fd5b5051905090565b60006105de848484610d34565b6106368433610631856040518060600160405280602881526020016113f5602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919063ffffffff610e9316565b610c1b565b5060019392505050565b601290565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610518918590610631908663ffffffff610bba16565b6040805180820190915260018152603160f81b602082015290565b7f000000000000000000000000000000000000000000000000000000000000000081565b6106c8610f2a565b60005b8281101561072f578383828181106106df57fe5b905060200201356001600160a01b03166001600160a01b0316856001600160a01b031660008051602061141d833981519152846040518082815260200191505060405180910390a36001016106cb565b5050505050565b60007f000000000000000000000000276ffa2ad65d90ac03a9e008b3099af5005f0b476001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156107ae57600080fd5b505afa1580156107c2573d6000803e3d6000fd5b505050506040513d60208110156107d857600080fd5b505192915050565b6001600160a01b031660009081526001602052604090205490565b604080518082019091526004815263444f475360e01b602082015290565b610821610fc6565b61082b8282611093565b5050565b6000610518338461063185604051806060016040528060258152602001611479602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919063ffffffff610e9316565b6000610518338484610d34565b7f000000000000000000000000000000000000000000000000000000000000000081565b6108bd611149565b6108c88383836111b0565b505050565b42841015610922576040805162461bcd60e51b815260206004820152601c60248201527f5452554d5020444f47533a206578706972656420646561646c696e6500000000604482015290519081900360640190fd5b600061092c610af0565b6001600160a01b03808a166000818152600160208181526040808420805480850190915581517377b31177b1676d3513c7e3f52d6124ba73b0a1168185015280830196909652958e166060860152608085018d905260a085019590955260c08085018c90528551808603909101815260e08501865280519082012061190160f01b6101008601526101028501969096526101228085019690965284518085039096018652610142840180865286519682019690962095839052610162840180865286905260ff8a166101828501526101a284018990526101c284018890529351949550909390926101e2808401939192601f1981019281900390910190855afa158015610a3d573d6000803e3d6000fd5b505050602060405103519050886001600160a01b0316816001600160a01b031614610aaf576040805162461bcd60e51b815260206004820152601d60248201527f5452554d5020444f47533a20696e76616c6964207369676e6174757265000000604482015290519081900360640190fd5b610aba898989610c1b565b505050505050505050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b60007f0000000000000000000000000000000000000000000000000000000000000001610b1b611292565b1415610b4857507f683a4598c6a58e4d2a6f40991e65e69e8c626e56be8194c7527208a269cbec0d610508565b610bb37f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7fd80af59b4a2b0549129a6e2da99204eb73019e5555ed4d355174a4056f58b3437fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6611296565b9050610508565b600082820183811015610c14576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038316610c2b57fe5b6001600160a01b038216610c3b57fe5b336001600160a01b0384161415610cd2577f000000000000000000000000276ffa2ad65d90ac03a9e008b3099af5005f0b476001600160a01b031663f698da256040518163ffffffff1660e01b815260040160206040518083038186803b158015610ca557600080fd5b505afa158015610cb9573d6000803e3d6000fd5b505050506040513d6020811015610ccf57600080fd5b50505b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b816001600160a01b0316836001600160a01b031660008051602061141d833981519152836040518082815260200191505060405180910390a3604080516001600160a01b038581166024830152848116604483015260648201849052336084808401919091528351808403909101815260a490920183526020820180516001600160e01b03166320a1cb8360e11b178152925182516000947f000000000000000000000000276ffa2ad65d90ac03a9e008b3099af5005f0b4793909316939282918083835b60208310610e185780518252601f199092019160209182019101610df9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610e7a576040519150601f19603f3d011682016040523d82523d6000602084013e610e7f565b606091505b5050905080610e8d57600080fd5b50505050565b60008184841115610f225760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ee7578181015183820152602001610ecf565b50505050905090810190601f168015610f145780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b336001600160a01b037f000000000000000000000000276ffa2ad65d90ac03a9e008b3099af5005f0b47161480610f895750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610fc45760405162461bcd60e51b815260040180806020018281038252603c81526020018061143d603c913960400191505060405180910390fd5b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110255750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b806110585750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610fc45760405162461bcd60e51b815260040180806020018281038252605381526020018061137c6053913960600191505060405180910390fd5b6001600160a01b0382166110a357fe5b6110e68160405180606001604052806022815260200161132f602291396001600160a01b038516600090815260026020526040902054919063ffffffff610e9316565b6001600160a01b03831660009081526002602052604081209190915554611113908263ffffffff6112ec16565b60009081556040805183815290516001600160a01b0385169160008051602061141d833981519152919081900360200190a35050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fc45760405162461bcd60e51b815260040180806020018281038252602b815260200180611351602b913960400191505060405180910390fd5b6001600160a01b0383166111c057fe5b6001600160a01b0382166111d057fe5b611213816040518060600160405280602681526020016113cf602691396001600160a01b038616600090815260026020526040902054919063ffffffff610e9316565b6001600160a01b038085166000908152600260205260408082209390935590841681522054611248908263ffffffff610bba16565b6001600160a01b03808416600081815260026020908152604091829020949094558051858152905191939287169260008051602061141d83398151915292918290030190a3505050565b4690565b60008383836112a3611292565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b6000610c1483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610e9356fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e63655452554d5020444f47533a2043616c6c6572206973206e6f74207468652053746162696c697479506f6f6c5452554d5020444f47533a2043616c6c6572206973206e65697468657220426f72726f7765724f7065726174696f6e73206e6f722054726f76654d616e61676572206e6f722053746162696c697479506f6f6c45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5452554d5020444f47533a2043616c6c6572206973206e6569746865722054726f76654d616e61676572206e6f722053746162696c697479506f6f6c45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201d65160b0c7162e6c38f4d5a03a6d7ec1a83a8800e11fffa3a99d45e53aa491f64736f6c634300060b0033

Deployed Bytecode Sourcemap

24297:154:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23878:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17783:161;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17783:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14929:45;;;:::i;:::-;;;;-1:-1:-1;;;;;14929:45:0;;;;;;;;;;;;;;17123:120;;;:::i;:::-;;;;;;;;;;;;;;;;17952:369;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17952:369:0;;;;;;;;;;;;;;;;;:::i;24086:94::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18329:217;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18329:217:0;;;;;;;;:::i;24188:100::-;;;:::i;14878:44::-;;;:::i;16784:294::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16784:294:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16784:294:0;-1:-1:-1;16784:294:0;;:::i;:::-;;17251:138;;;;;;;;;;;;;;;;-1:-1:-1;17251:138:0;-1:-1:-1;;;;;17251:138:0;;:::i;19938:128::-;;;;;;;;;;;;;;;;-1:-1:-1;19938:128:0;-1:-1:-1;;;;;19938:128:0;;:::i;23980:98::-;;;:::i;16418:153::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16418:153:0;;;;;;;;:::i;18554:268::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18554:268:0;;;;;;;;:::i;17397:225::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17397:225:0;;;;;;;;:::i;14981:50::-;;;:::i;16579:197::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16579:197:0;;;;;;;;;;;;;;;;;:::i;19165:765::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19165:765:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17630:145::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17630:145:0;;;;;;;;;;:::i;18871:286::-;;;:::i;23878:94::-;23959:5;;;;;;;;;;;;-1:-1:-1;;;23959:5:0;;;;23878:94;;:::o;17783:161::-;17860:4;17877:37;17886:10;17898:7;17907:6;17877:8;:37::i;:::-;-1:-1:-1;17932:4:0;17783:161;;;;:::o;14929:45::-;;;:::o;17123:120::-;17178:7;17205:16;-1:-1:-1;;;;;17205:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17205:30:0;;-1:-1:-1;17123:120:0;:::o;17952:369::-;18052:4;18116:47;18137:6;18145:9;18156:6;18116:20;:47::i;:::-;18174:117;18183:6;18191:10;18203:87;18239:6;18203:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18203:19:0;;;;;;:11;:19;;;;;;;;18223:10;18203:31;;;;;;;;;:87;;:35;:87;:::i;:::-;18174:8;:117::i;:::-;-1:-1:-1;18309:4:0;17952:369;;;;;:::o;24086:94::-;13688:2;24086:94;:::o;18329:217::-;18446:10;18420:4;18467:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18467:32:0;;;;;;;;;;18420:4;;18437:79;;18458:7;;18467:48;;18504:10;18467:48;:36;:48;:::i;24188:100::-;24272:8;;;;;;;;;;;;-1:-1:-1;;;24272:8:0;;;;24188:100;:::o;14878:44::-;;;:::o;16784:294::-;16906:28;:26;:28::i;:::-;16952:9;16947:124;16967:20;;;16947:124;;;17037:9;;17047:1;17037:12;;;;;;;;;;;;;-1:-1:-1;;;;;17037:12:0;-1:-1:-1;;;;;17014:45:0;17023:12;-1:-1:-1;;;;;17014:45:0;-1:-1:-1;;;;;;;;;;;17051:7:0;17014:45;;;;;;;;;;;;;;;;;;16989:3;;16947:124;;;;16784:294;;;;:::o;17251:138::-;17319:7;17346:16;-1:-1:-1;;;;;17346:26:0;;17373:7;17346:35;;;;;;;;;;;;;-1:-1:-1;;;;;17346:35:0;-1:-1:-1;;;;;17346:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17346:35:0;;17251:138;-1:-1:-1;;17251:138:0:o;19938:128::-;-1:-1:-1;;;;;20044:14:0;20001:7;20044:14;;;:7;:14;;;;;;;19938:128::o;23980:98::-;24063:7;;;;;;;;;;;;-1:-1:-1;;;24063:7:0;;;;23980:98;:::o;16418:153::-;16496:32;:30;:32::i;:::-;16539:24;16545:8;16555:7;16539:5;:24::i;:::-;16418:153;;:::o;18554:268::-;18650:4;18667:125;18676:10;18688:7;18697:94;18734:15;18697:94;;;;;;;;;;;;;;;;;18709:10;18697:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18697:32:0;;;;;;;;;;;:94;;:36;:94;:::i;17397:225::-;17477:4;17541:51;17562:10;17574:9;17585:6;17541:20;:51::i;14981:50::-;;;:::o;16579:197::-;16685:31;:29;:31::i;:::-;16727:41;16737:7;16746:12;16760:7;16727:9;:41::i;:::-;16579:197;;;:::o;19165:765::-;19441:3;19429:8;:15;;19421:56;;;;;-1:-1:-1;;;19421:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19488:14;19571:17;:15;:17::i;:::-;-1:-1:-1;;;;;19707:14:0;;;;;;;:7;:14;;;;;;;;:16;;;;;;;;19600:134;;13891:48;19600:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19590:145;;;;;;-1:-1:-1;;;19515:221:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19505:232;;;;;;;;;19775:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19505:232;;-1:-1:-1;19707:14:0;;:7;;19775:26;;;;;19707:14;;-1:-1:-1;;19775:26:0;;;;;;;;;;19707:7;19775:26;;;;;;;;;;;;;;;;;;;;;;;19748:53;;19840:5;-1:-1:-1;;;;;19820:25:0;:16;-1:-1:-1;;;;;19820:25:0;;19812:67;;;;;-1:-1:-1;;;19812:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19890:32;19899:5;19906:7;19915:6;19890:8;:32::i;:::-;19165:765;;;;;;;;;:::o;17630:145::-;-1:-1:-1;;;;;17740:18:0;;;17713:7;17740:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17630:145::o;18871:286::-;18928:7;18970:16;18956:10;:8;:10::i;:::-;:30;18952:198;;;-1:-1:-1;19010:24:0;19003:31;;18952:198;19074:64;14089:66;19108:12;19122:15;19074:21;:64::i;:::-;19067:71;;;;7253:181;7311:7;7343:5;;;7367:6;;;;7359:46;;;;;-1:-1:-1;;;7359:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7425:1;7253:181;-1:-1:-1;;;7253:181:0:o;21635:328::-;-1:-1:-1;;;;;21728:19:0;;21721:27;;;;-1:-1:-1;;;;;21766:21:0;;21759:29;;;;21803:10;-1:-1:-1;;;;;21803:19:0;;;21799:59;;;21824:16;-1:-1:-1;;;;;21824:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21799:59:0;-1:-1:-1;;;;;21871:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21923:32;;;;;;;;;;;;;;;;;21635:328;;;:::o;21971:247::-;22077:2;-1:-1:-1;;;;;22062:26:0;22071:4;-1:-1:-1;;;;;22062:26:0;-1:-1:-1;;;;;;;;;;;22081:6:0;22062:26;;;;;;;;;;;;;;;;;;22136:64;;;-1:-1:-1;;;;;22136:64:0;;;;;;;;;;;;;;;;;;;;22189:10;22136:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22136:64:0;-1:-1:-1;;;22136:64:0;;;22105:96;;;;22094:6;;22113:16;22105:30;;;;;22136:64;22105:96;;;;22136:64;22105:96;;;;;;;;;;-1:-1:-1;;22105:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22093:108;;;22211:1;22203:10;;;;;;21971:247;;;;:::o;8182:192::-;8268:7;8304:12;8296:6;;;;8288:29;;;;-1:-1:-1;;;8288:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8340:5:0;;;8182:192::o;23586:247::-;23671:10;-1:-1:-1;;;;;23693:16:0;23671:39;;;:76;;-1:-1:-1;23714:10:0;-1:-1:-1;;;;;23728:19:0;23714:33;;23671:76;23649:176;;;;-1:-1:-1;;;23649:176:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23586:247::o;23058:348::-;23147:10;-1:-1:-1;;;;;23161:25:0;23147:39;;;:89;;-1:-1:-1;23203:10:0;-1:-1:-1;;;;;23217:19:0;23203:33;;23147:89;:140;;;-1:-1:-1;23253:10:0;-1:-1:-1;;;;;23267:20:0;23253:34;;23147:140;23125:273;;;;-1:-1:-1;;;23125:273:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21309:318;-1:-1:-1;;;;;21384:21:0;;21377:29;;;;21448:68;21471:6;21448:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21448:18:0;;;;;;:9;:18;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;21427:18:0;;;;;;:9;:18;;;;;:89;;;;21542:12;:24;;21559:6;21542:24;:16;:24;:::i;:::-;21527:12;:39;;;21582:37;;;;;;;;-1:-1:-1;;;;;21582:37:0;;;-1:-1:-1;;;;;;;;;;;21582:37:0;;;;;;;;;21309:318;;:::o;23414:164::-;23488:10;-1:-1:-1;;;;;23502:20:0;23488:34;;23480:90;;;;-1:-1:-1;;;23480:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20632:389;-1:-1:-1;;;;;20729:20:0;;20722:28;;;;-1:-1:-1;;;;;20768:23:0;;20761:31;;;;20825:71;20847:6;20825:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20825:17:0;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;20805:17:0;;;;;;;:9;:17;;;;;;:91;;;;20930:20;;;;;;;:32;;20955:6;20930:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;20907:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;20978:35;;;;;;;20907:20;;20978:35;;;;-1:-1:-1;;;;;;;;;;;20978:35:0;;;;;;;;20632:389;;;:::o;20112:132::-;20217:9;;20191:46::o;20256:210::-;20358:7;20406:8;20416:4;20422:7;20431:10;:8;:10::i;:::-;20395:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20451:4;20395:62;;;;;;;;;;;;;;;;;;;;;;;;20385:73;;;;;;20256:210;-1:-1:-1;;;;20256:210:0:o;7709:136::-;7767:7;7794:43;7798:1;7801;7794:43;;;;;;;;;;;;;;;;;:3;:43::i

Swarm Source

ipfs://1d65160b0c7162e6c38f4d5a03a6d7ec1a83a8800e11fffa3a99d45e53aa491f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.