FTM Price: $0.99 (-0.66%)
Gas: 103 GWei

Contract

0x10010078a54396F62c96dF8532dc2B4847d47ED3
 

More Info

Private Name Tags

TokenTracker

Sponsored

Transaction Hash
Method
Block
From
To
Value
Approve782633082024-03-27 4:24:1445 hrs ago1711513454IN
Hundred Finance: HND Token
0 FTM0.00288769112
Transfer782043292024-03-26 8:00:012 days ago1711440001IN
Hundred Finance: HND Token
0 FTM0.0019386741.42283982
Approve781551452024-03-25 16:34:063 days ago1711384446IN
Hundred Finance: HND Token
0 FTM0.0087596187.22698909
Approve781237452024-03-25 3:57:213 days ago1711339041IN
Hundred Finance: HND Token
0 FTM0.0028226493.61400963
Approve781237172024-03-25 3:56:013 days ago1711338961IN
Hundred Finance: HND Token
0 FTM0.0028226493.61400963
Approve781012922024-03-24 15:32:354 days ago1711294355IN
Hundred Finance: HND Token
0 FTM0.0013828929.83780452
Approve780971102024-03-24 12:14:574 days ago1711282497IN
Hundred Finance: HND Token
0 FTM0.0010496822.66013902
Approve780844382024-03-24 2:32:204 days ago1711247540IN
Hundred Finance: HND Token
0 FTM0.0011333641
Approve780843412024-03-24 2:28:044 days ago1711247284IN
Hundred Finance: HND Token
0 FTM0.00739972287
Approve780506902024-03-23 13:35:225 days ago1711200922IN
Hundred Finance: HND Token
0 FTM0.0033481871.83244139
Approve780307182024-03-23 7:44:045 days ago1711179844IN
Hundred Finance: HND Token
0 FTM0.00335972.49392833
Approve779859772024-03-22 18:50:216 days ago1711133421IN
Hundred Finance: HND Token
0 FTM0.00353448131.93308552
Approve779859462024-03-22 18:49:416 days ago1711133381IN
Hundred Finance: HND Token
0 FTM0.0061301131.98641496
Transfer779388072024-03-22 5:58:186 days ago1711087098IN
Hundred Finance: HND Token
0 FTM0.00704028130
Approve779220382024-03-22 0:42:477 days ago1711068167IN
Hundred Finance: HND Token
0 FTM0.00818309174.85990913
Approve779217012024-03-22 0:35:537 days ago1711067753IN
Hundred Finance: HND Token
0 FTM0.00859601183.68343632
Approve778716962024-03-21 10:17:407 days ago1711016260IN
Hundred Finance: HND Token
0 FTM0.01027761210
Approve778373472024-03-20 23:53:338 days ago1710978813IN
Hundred Finance: HND Token
0 FTM0.02247677790.40614153
Approve778373442024-03-20 23:53:298 days ago1710978809IN
Hundred Finance: HND Token
0 FTM0.03666703791.14143414
Approve778179652024-03-20 18:46:018 days ago1710960361IN
Hundred Finance: HND Token
0 FTM0.00982332381
Approve777746332024-03-20 7:02:468 days ago1710918166IN
Hundred Finance: HND Token
0 FTM0.00886935344
Approve777564522024-03-20 2:09:029 days ago1710900542IN
Hundred Finance: HND Token
0 FTM0.02457954530.61216574
Approve777205652024-03-19 17:04:199 days ago1710867859IN
Hundred Finance: HND Token
0 FTM0.04309516924.57076513
Approve777180012024-03-19 16:28:509 days ago1710865730IN
Hundred Finance: HND Token
0 FTM0.047494241,015.13801146
Approve776958562024-03-19 10:49:309 days ago1710845370IN
Hundred Finance: HND Token
0 FTM0.00476985185
View all transactions

Latest 1 internal transaction

Parent Txn Hash Block From To Value
205435752021-10-30 11:01:09880 days ago1635591669  Contract Creation0 FTM
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Hundred

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 1 : Hundred.sol
// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity 0.8.7;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    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.
 */
interface IERC2612 {

    /**
     * @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.
     */
    function nonces(address owner) external view returns (uint256);
}

/// @dev Wrapped ERC-20 v10 (AnyswapV3ERC20) is an ERC-20 ERC-20 wrapper. You can `deposit` ERC-20 and obtain an AnyswapV3ERC20 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ERC-20 from AnyswapV3ERC20, which will then burn AnyswapV3ERC20 token in your wallet. The amount of AnyswapV3ERC20 token in any wallet is always identical to the
/// balance of ERC-20 deposited minus the ERC-20 withdrawn with that specific wallet.
interface IAnyswapV3ERC20 is IERC20, IERC2612 {

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`),
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ERC-20 withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external returns (bool);
}

interface ITransferReceiver {
    function onTokenTransfer(address, uint, bytes calldata) external returns (bool);
}

interface IApprovalReceiver {
    function onTokenApproval(address, uint, bytes calldata) external returns (bool);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

library SafeERC20 {
    using Address for address;

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

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

    function safeApprove(IERC20 token, address spender, uint value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract AnyswapV5ERC20 is IAnyswapV3ERC20 {
    using SafeERC20 for IERC20;
    string public name;
    string public symbol;
    uint8  public immutable override decimals;

    address public immutable underlying;

    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant TRANSFER_TYPEHASH = keccak256("Transfer(address owner,address to,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public immutable DOMAIN_SEPARATOR;

    /// @dev Records amount of AnyswapV3ERC20 token owned by account.
    mapping (address => uint256) public override balanceOf;
    uint256 private _totalSupply;

    // init flag for setting immediate vault, needed for CREATE2 support
    bool private _init;

    // flag to enable/disable swapout vs vault.burn so multiple events are triggered
    bool private _vaultOnly;

    // configurable delay for timelock functions
    uint public delay = 2*24*3600;


    // set of minters, can be this bridge or other bridges
    mapping(address => bool) public isMinter;
    address[] public minters;

    // primary controller of the token contract
    address public vault;

    address public pendingMinter;
    uint public delayMinter;

    address public pendingVault;
    uint public delayVault;

    uint public pendingDelay;
    uint public delayDelay;


    modifier onlyAuth() {
        require(isMinter[msg.sender], "AnyswapV4ERC20: FORBIDDEN");
        _;
    }

    modifier onlyVault() {
        require(msg.sender == mpc(), "AnyswapV3ERC20: FORBIDDEN");
        _;
    }

    function owner() public view returns (address) {
        return mpc();
    }

    function mpc() public view returns (address) {
        if (block.timestamp >= delayVault) {
            return pendingVault;
        }
        return vault;
    }

    function setVaultOnly(bool enabled) external onlyVault {
        _vaultOnly = enabled;
    }

    function initVault(address _vault) external onlyVault {
        require(_init);
        vault = _vault;
        pendingVault = _vault;
        isMinter[_vault] = true;
        minters.push(_vault);
        delayVault = block.timestamp;
        _init = false;
    }

    function setMinter(address _auth) external onlyVault {
        pendingMinter = _auth;
        delayMinter = block.timestamp + delay;
    }

    function setVault(address _vault) external onlyVault {
        pendingVault = _vault;
        delayVault = block.timestamp + delay;
    }

    function applyVault() external onlyVault {
        require(block.timestamp >= delayVault);
        vault = pendingVault;
    }

    function applyMinter() external onlyVault {
        require(block.timestamp >= delayMinter);
        isMinter[pendingMinter] = true;
        minters.push(pendingMinter);
    }

    // No time delay revoke minter emergency function
    function revokeMinter(address _auth) external onlyVault {
        isMinter[_auth] = false;
    }

    function getAllMinters() external view returns (address[] memory) {
        return minters;
    }


    function changeVault(address newVault) external onlyVault returns (bool) {
        require(newVault != address(0), "AnyswapV3ERC20: address(0x0)");
        pendingVault = newVault;
        delayVault = block.timestamp + delay;
        emit LogChangeVault(vault, pendingVault, delayVault);
        return true;
    }

    function changeMPCOwner(address newVault) public onlyVault returns (bool) {
        require(newVault != address(0), "AnyswapV3ERC20: address(0x0)");
        pendingVault = newVault;
        delayVault = block.timestamp + delay;
        emit LogChangeMPCOwner(vault, pendingVault, delayVault);
        return true;
    }

    function mint(address to, uint256 amount) external onlyAuth returns (bool) {
        _mint(to, amount);
        return true;
    }

    function burn(address from, uint256 amount) external onlyAuth returns (bool) {
        require(from != address(0), "AnyswapV3ERC20: address(0x0)");
        _burn(from, amount);
        return true;
    }

    function Swapin(bytes32 txhash, address account, uint256 amount) public onlyAuth returns (bool) {
        _mint(account, amount);
        emit LogSwapin(txhash, account, amount);
        return true;
    }

    function Swapout(uint256 amount, address bindaddr) public returns (bool) {
        require(!_vaultOnly, "AnyswapV4ERC20: onlyAuth");
        require(bindaddr != address(0), "AnyswapV3ERC20: address(0x0)");
        _burn(msg.sender, amount);
        emit LogSwapout(msg.sender, bindaddr, amount);
        return true;
    }

    /// @dev Records current ERC2612 nonce for account. This value must be included whenever signature is generated for {permit}.
    /// Every successful call to {permit} increases account's nonce by one. This prevents signature from being used multiple times.
    mapping (address => uint256) public override nonces;

    /// @dev Records number of AnyswapV3ERC20 token that account (second) will be allowed to spend on behalf of another account (first) through {transferFrom}.
    mapping (address => mapping (address => uint256)) public override allowance;

    event LogChangeVault(address indexed oldVault, address indexed newVault, uint indexed effectiveTime);
    event LogChangeMPCOwner(address indexed oldOwner, address indexed newOwner, uint indexed effectiveHeight);
    event LogSwapin(bytes32 indexed txhash, address indexed account, uint amount);
    event LogSwapout(address indexed account, address indexed bindaddr, uint amount);
    event LogAddAuth(address indexed auth, uint timestamp);

    constructor(string memory _name, string memory _symbol, uint8 _decimals, address _underlying, address _vault) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        underlying = _underlying;
        if (_underlying != address(0x0)) {
            require(_decimals == IERC20(_underlying).decimals());
        }

        // Use init to allow for CREATE2 accross all chains
        _init = true;

        // Disable/Enable swapout for v1 tokens vs mint/burn for v3 tokens
        _vaultOnly = false;

        vault = _vault;
        pendingVault = _vault;
        delayVault = block.timestamp;

        uint256 chainId;
        assembly {chainId := chainid()}
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(name)),
                keccak256(bytes("1")),
                chainId,
                address(this)));
    }

    /// @dev Returns the total supply of AnyswapV3ERC20 token as the ETH held in this contract.
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function depositWithPermit(address target, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external returns (uint) {
        IERC20(underlying).permit(target, address(this), value, deadline, v, r, s);
        IERC20(underlying).safeTransferFrom(target, address(this), value);
        return _deposit(value, to);
    }

    function depositWithTransferPermit(address target, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external returns (uint) {
        IERC20(underlying).transferWithPermit(target, address(this), value, deadline, v, r, s);
        return _deposit(value, to);
    }

    function deposit() external returns (uint) {
        uint _amount = IERC20(underlying).balanceOf(msg.sender);
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), _amount);
        return _deposit(_amount, msg.sender);
    }

    function deposit(uint amount) external returns (uint) {
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount);
        return _deposit(amount, msg.sender);
    }

    function deposit(uint amount, address to) external returns (uint) {
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount);
        return _deposit(amount, to);
    }

    function depositVault(uint amount, address to) external onlyVault returns (uint) {
        return _deposit(amount, to);
    }

    function _deposit(uint amount, address to) internal returns (uint) {
        require(underlying != address(0x0) && underlying != address(this));
        _mint(to, amount);
        return amount;
    }

    function withdraw() external returns (uint) {
        return _withdraw(msg.sender, balanceOf[msg.sender], msg.sender);
    }

    function withdraw(uint amount) external returns (uint) {
        return _withdraw(msg.sender, amount, msg.sender);
    }

    function withdraw(uint amount, address to) external returns (uint) {
        return _withdraw(msg.sender, amount, to);
    }

    function withdrawVault(address from, uint amount, address to) external onlyVault returns (uint) {
        return _withdraw(from, amount, to);
    }

    function _withdraw(address from, uint amount, address to) internal returns (uint) {
        _burn(from, amount);
        IERC20(underlying).safeTransfer(to, amount);
        return amount;
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        balanceOf[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        balanceOf[account] -= amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    function approve(address spender, uint256 value) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return true;
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return IApprovalReceiver(spender).onTokenApproval(msg.sender, value, data);
    }

    /// @dev Sets `value` as allowance of `spender` account over `owner` account's AnyswapV3ERC20 token, given `owner` account's signed approval.
    /// Emits {Approval} event.
    /// Requirements:
    ///   - `deadline` must be timestamp in future.
    ///   - `v`, `r` and `s` must be valid `secp256k1` signature from `owner` account over EIP712-formatted function arguments.
    ///   - the signature must use `owner` account's current nonce (see {nonces}).
    ///   - the signer cannot be zero address and must be `owner` account.
    /// For more information on signature format, see https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].
    /// AnyswapV3ERC20 token implementation adapted from https://github.com/albertocuestacanada/ERC20Permit/blob/master/contracts/ERC20Permit.sol.
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override {
        require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit");

        bytes32 hashStruct = keccak256(
            abi.encode(
                PERMIT_TYPEHASH,
                target,
                spender,
                value,
                nonces[target]++,
                deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        // _approve(owner, spender, value);
        allowance[target][spender] = value;
        emit Approval(target, spender, value);
    }

    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override returns (bool) {
        require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit");

        bytes32 hashStruct = keccak256(
            abi.encode(
                TRANSFER_TYPEHASH,
                target,
                to,
                value,
                nonces[target]++,
                deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        require(to != address(0) || to != address(this));

        uint256 balance = balanceOf[target];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[target] = balance - value;
        balanceOf[to] += value;
        emit Transfer(target, to, value);

        return true;
    }

    function verifyEIP712(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
        bytes32 hash = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                hashStruct));
        address signer = ecrecover(hash, v, r, s);
        return (signer != address(0) && signer == target);
    }

    function verifyPersonalSign(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
        bytes32 hash = prefixed(hashStruct);
        address signer = ecrecover(hash, v, r, s);
        return (signer != address(0) && signer == target);
    }

    // Builds a prefixed hash to mimic the behavior of eth_sign.
    function prefixed(bytes32 hash) internal view returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", DOMAIN_SEPARATOR, hash));
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`).
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    function transfer(address to, uint256 value) external override returns (bool) {
        require(to != address(0) || to != address(this));
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[msg.sender] = balance - value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);

        return true;
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from account (`from`) to account (`to`) using allowance mechanism.
    /// `value` is then deducted from caller account's allowance, unless set to `type(uint256).max`.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - `from` account must have at least `value` balance of AnyswapV3ERC20 token.
    ///   - `from` account must have approved caller to spend at least `value` of AnyswapV3ERC20 token, unless `from` and caller are the same account.
    function transferFrom(address from, address to, uint256 value) external override returns (bool) {
        require(to != address(0) || to != address(this));
        if (from != msg.sender) {
            // _decreaseAllowance(from, msg.sender, value);
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "AnyswapV3ERC20: request exceeds allowance");
                uint256 reduced = allowed - value;
                allowance[from][msg.sender] = reduced;
                emit Approval(from, msg.sender, reduced);
            }
        }

        uint256 balance = balanceOf[from];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[from] = balance - value;
        balanceOf[to] += value;
        emit Transfer(from, to, value);

        return true;
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`),
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external override returns (bool) {
        require(to != address(0) || to != address(this));

        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[msg.sender] = balance - value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);

        return ITransferReceiver(to).onTokenTransfer(msg.sender, value, data);
    }
}

contract Hundred is AnyswapV5ERC20 {
    constructor(address ownerAddress) 
        AnyswapV5ERC20("Hundred Finance", "HND", 18, address(0x0), ownerAddress) {
        _mint(ownerAddress, 100e24);
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"ownerAddress","type":"address"}],"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":true,"internalType":"address","name":"auth","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LogAddAuth","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveHeight","type":"uint256"}],"name":"LogChangeMPCOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldVault","type":"address"},{"indexed":true,"internalType":"address","name":"newVault","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"LogChangeVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"bindaddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapout","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"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swapin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"bindaddr","type":"address"}],"name":"Swapout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TRANSFER_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"changeMPCOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"changeVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayMinter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"depositVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","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"},{"internalType":"address","name":"to","type":"address"}],"name":"depositWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","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"},{"internalType":"address","name":"to","type":"address"}],"name":"depositWithTransferPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllMinters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"initVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","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":"_auth","type":"address"}],"name":"revokeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setVaultOnly","outputs":[],"stateMutability":"nonpayable","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"transferWithPermit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

60e06040526202a3006005553480156200001857600080fd5b5060405162002fc538038062002fc58339810160408190526200003b9162000430565b6040518060400160405280600f81526020016e48756e647265642046696e616e636560881b8152506040518060400160405280600381526020016212139160ea1b815250601260008484600090805190602001906200009c9291906200038a565b508351620000b29060019060208701906200038a565b507fff0000000000000000000000000000000000000000000000000000000000000060f884901b166080526001600160601b0319606083901b1660a0526001600160a01b038216156200018657816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200013957600080fd5b505afa1580156200014e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000174919062000462565b60ff168360ff16146200018657600080fd5b6004805461ffff19166001179055600880546001600160a01b0383166001600160a01b03199182168117909255600b8054909116909117905542600c5560405146907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90620001f89060009062000487565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c0016040516020818303038152906040528051906020012060c081815250505050505050506200029b816a52b7d2dcc80cd2e4000000620002a260201b60201c565b506200058f565b6001600160a01b038216620002fd5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600360008282546200031191906200052b565b90915550506001600160a01b03821660009081526002602052604081208054839290620003409084906200052b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620003989062000552565b90600052602060002090601f016020900481019282620003bc576000855562000407565b82601f10620003d757805160ff191683800117855562000407565b8280016001018555821562000407579182015b8281111562000407578251825591602001919060010190620003ea565b506200041592915062000419565b5090565b5b808211156200041557600081556001016200041a565b6000602082840312156200044357600080fd5b81516001600160a01b03811681146200045b57600080fd5b9392505050565b6000602082840312156200047557600080fd5b815160ff811681146200045b57600080fd5b600080835481600182811c915080831680620004a457607f831692505b6020808410821415620004c557634e487b7160e01b86526022600452602486fd5b818015620004dc5760018114620004ee576200051d565b60ff198616895284890196506200051d565b60008a81526020902060005b86811015620005155781548b820152908501908301620004fa565b505084890196505b509498975050505050505050565b600082198211156200054d57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200056757607f821691505b602082108114156200058957634e487b7160e01b600052602260045260246000fd5b50919050565b60805160f81c60a05160601c60c0516129ac620006196000396000818161048c01528181611dd00152611ee20152600081816105900152818161134a01528181611396015281816114160152818161163d01528181611852015281816118db01528181611ba601528181611cc3015281816120b201526120e50152600061045301526129ac6000f3fe608060405234801561001057600080fd5b506004361061033f5760003560e01c80637ecebe00116101b8578063bebbf4d011610104578063d93f2445116100a2578063f75c26641161007c578063f75c266414610774578063f954734e1461077c578063fbfa77cf1461078f578063fca3b5aa146107a257600080fd5b8063d93f24451461072e578063dd62ed3e14610736578063ec126c771461076157600080fd5b8063cae9ca51116100de578063cae9ca51146106ed578063cfbd488514610700578063d0e30db014610713578063d505accf1461071b57600080fd5b8063bebbf4d0146106be578063c3081240146106d1578063c4b740f5146106da57600080fd5b806395d89b4111610171578063a29dff721161014b578063a29dff721461066c578063a9059cbb14610675578063aa271e1a14610688578063b6b55f25146106ab57600080fd5b806395d89b411461063c5780639dc29fac14610644578063a045442c1461065757600080fd5b80637ecebe00146105d257806381a37c18146105f25780638623ec7b1461060557806387689e28146106185780638da5cb5b1461062157806391c5df491461062957600080fd5b80633ccfd60b1161029257806360e232a9116102305780636a42b8f81161020a5780636a42b8f81461056f5780636e553f65146105785780636f307dc31461058b57806370a08231146105b257600080fd5b806360e232a914610536578063628d6cba146105495780636817031b1461055c57600080fd5b80634ca8f0ed1161026c5780634ca8f0ed146104dc57806352113ba7146104e55780635f9b105d14610510578063605629d61461052357600080fd5b80633ccfd60b146104ae5780634000aea0146104b657806340c10f19146104c957600080fd5b806318160ddd116102ff5780632ebe3fbb116102d95780632ebe3fbb1461041457806330adf81f14610427578063313ce5671461044e5780633644e5151461048757600080fd5b806318160ddd146103e657806323b872dd146103ee5780632e1a7d4d1461040157600080fd5b806239d6ec14610344578062bf26f41461036a578062f714ce1461039157806306fdde03146103a4578063095ea7b3146103b95780630d707df8146103dc575b600080fd5b610357610352366004612464565b6107b5565b6040519081526020015b60405180910390f35b6103577f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b61035761039f366004612622565b61080b565b6103ac61081f565b6040516103619190612737565b6103cc6103c736600461243a565b6108ad565b6040519015158152602001610361565b6103e4610907565b005b600354610357565b6103cc6103fc366004612394565b6109c3565b61035761040f3660046125f0565b610bae565b6103e4610422366004612346565b610bc1565b6103577f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6104757f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610361565b6103577f000000000000000000000000000000000000000000000000000000000000000081565b610357610c98565b6103cc6104c43660046124a0565b610cb9565b6103cc6104d736600461243a565b610e12565b610357600d5481565b600b546104f8906001600160a01b031681565b6040516001600160a01b039091168152602001610361565b6103cc61051e366004612346565b610e54565b6103cc6105313660046123d0565b610f29565b6103cc610544366004612346565b611139565b6103cc610557366004612622565b61120d565b6103e461056a366004612346565b6112d5565b61035760055481565b610357610586366004612622565b61133b565b6104f87f000000000000000000000000000000000000000000000000000000000000000081565b6103576105c0366004612346565b60026020526000908152604090205481565b6103576105e0366004612346565b600f6020526000908152604090205481565b610357610600366004612527565b61137c565b6104f86106133660046125f0565b611456565b610357600c5481565b6104f8611480565b6009546104f8906001600160a01b031681565b6103ac61148a565b6103cc61065236600461243a565b611497565b61065f6114f6565b60405161036191906126ea565b610357600e5481565b6103cc61068336600461243a565b611558565b6103cc610696366004612346565b60066020526000908152604090205460ff1681565b6103576106b93660046125f0565b61162e565b6103576106cc366004612622565b61166f565b610357600a5481565b6103e46106e8366004612591565b6116a9565b6103cc6106fb3660046124a0565b6116fb565b6103e461070e366004612346565b6117d7565b610357611830565b6103e46107293660046123d0565b611913565b6103e4611a81565b610357610744366004612361565b601060209081526000928352604080842090915290825290205481565b6103cc61076f3660046125cb565b611aec565b6104f8611b61565b61035761078a366004612527565b611b8c565b6008546104f8906001600160a01b031681565b6103e46107b0366004612346565b611c44565b60006107bf611b61565b6001600160a01b0316336001600160a01b0316146107f85760405162461bcd60e51b81526004016107ef9061276a565b60405180910390fd5b610803848484611caa565b949350505050565b6000610818338484611caa565b9392505050565b6000805461082c906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610858906128b9565b80156108a55780601f1061087a576101008083540402835291602001916108a5565b820191906000526020600020905b81548152906001019060200180831161088857829003601f168201915b505050505081565b3360008181526010602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020612957833981519152906108f69086815260200190565b60405180910390a350600192915050565b61090f611b61565b6001600160a01b0316336001600160a01b03161461093f5760405162461bcd60e51b81526004016107ef9061276a565b600a5442101561094e57600080fd5b600980546001600160a01b039081166000908152600660205260408120805460ff1916600190811790915592546007805494850181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180546001600160a01b03191692909116919091179055565b60006001600160a01b0383161515806109e557506001600160a01b0383163014155b6109ee57600080fd5b6001600160a01b0384163314610ae8576001600160a01b03841660009081526010602090815260408083203384529091529020546000198114610ae65782811015610a8d5760405162461bcd60e51b815260206004820152602960248201527f416e7973776170563345524332303a2072657175657374206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016107ef565b6000610a998483612876565b6001600160a01b03871660008181526010602090815260408083203380855290835292819020859055518481529394509092600080516020612957833981519152910160405180910390a3505b505b6001600160a01b03841660009081526002602052604090205482811015610b215760405162461bcd60e51b81526004016107ef906127d8565b610b2b8382612876565b6001600160a01b038087166000908152600260205260408082209390935590861681529081208054859290610b6190849061285e565b92505081905550836001600160a01b0316856001600160a01b031660008051602061293783398151915285604051610b9b91815260200190565b60405180910390a3506001949350505050565b6000610bbb338333611caa565b92915050565b610bc9611b61565b6001600160a01b0316336001600160a01b031614610bf95760405162461bcd60e51b81526004016107ef9061276a565b60045460ff16610c0857600080fd5b600880546001600160a01b039092166001600160a01b03199283168117909155600b80548316821790556000818152600660205260408120805460ff1990811660019081179092556007805492830181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805490931690911790915542600c55600480549091169055565b336000818152600260205260408120549091610cb49181611caa565b905090565b60006001600160a01b038516151580610cdb57506001600160a01b0385163014155b610ce457600080fd5b3360009081526002602052604090205484811015610d145760405162461bcd60e51b81526004016107ef906127d8565b610d1e8582612876565b33600090815260026020526040808220929092556001600160a01b03881681529081208054879290610d5190849061285e565b90915550506040518581526001600160a01b0387169033906000805160206129378339815191529060200160405180910390a3604051635260769b60e11b81526001600160a01b0387169063a4c0ed3690610db69033908990899089906004016126a2565b602060405180830381600087803b158015610dd057600080fd5b505af1158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0891906125ae565b9695505050505050565b3360009081526006602052604081205460ff16610e415760405162461bcd60e51b81526004016107ef90612827565b610e4b8383611cf2565b50600192915050565b6000610e5e611b61565b6001600160a01b0316336001600160a01b031614610e8e5760405162461bcd60e51b81526004016107ef9061276a565b6001600160a01b038216610eb45760405162461bcd60e51b81526004016107ef906127a1565b600b80546001600160a01b0319166001600160a01b038416179055600554610edc904261285e565b600c819055600b546008546040516001600160a01b0392831692909116907f1d065115f314fb9bad9557bd5460b9e3c66f7223b1dd04e73e828f0bb5afe89f90600090a45060015b919050565b600084421115610f7b5760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ef565b6001600160a01b0388166000908152600f6020526040812080547f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59918b918b918b919086610fc8836128f4565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012090506110298982878787611dc0565b8061103c575061103c8982878787611eb0565b61104557600080fd5b6001600160a01b03881615158061106557506001600160a01b0388163014155b61106e57600080fd5b6001600160a01b038916600090815260026020526040902054878110156110a75760405162461bcd60e51b81526004016107ef906127d8565b6110b18882612876565b6001600160a01b03808c1660009081526002602052604080822093909355908b16815290812080548a92906110e790849061285e565b92505081905550886001600160a01b03168a6001600160a01b03166000805160206129378339815191528a60405161112191815260200190565b60405180910390a35060019998505050505050505050565b6000611143611b61565b6001600160a01b0316336001600160a01b0316146111735760405162461bcd60e51b81526004016107ef9061276a565b6001600160a01b0382166111995760405162461bcd60e51b81526004016107ef906127a1565b600b80546001600160a01b0319166001600160a01b0384161790556005546111c1904261285e565b600c819055600b546008546040516001600160a01b0392831692909116907f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac90600090a4506001919050565b600454600090610100900460ff16156112685760405162461bcd60e51b815260206004820152601860248201527f416e7973776170563445524332303a206f6e6c7941757468000000000000000060448201526064016107ef565b6001600160a01b03821661128e5760405162461bcd60e51b81526004016107ef906127a1565b6112983384611f6b565b6040518381526001600160a01b0383169033907f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c888906020016108f6565b6112dd611b61565b6001600160a01b0316336001600160a01b03161461130d5760405162461bcd60e51b81526004016107ef9061276a565b600b80546001600160a01b0319166001600160a01b038316179055600554611335904261285e565b600c5550565b60006113726001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308661203d565b61081883836120ae565b60405163d505accf60e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d505accf906113d7908b9030908c908c908c908c908c90600401612661565b600060405180830381600087803b1580156113f157600080fd5b505af1158015611405573d6000803e3d6000fd5b506114409250506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016905089308a61203d565b61144a87836120ae565b98975050505050505050565b6007818154811061146657600080fd5b6000918252602090912001546001600160a01b0316905081565b6000610cb4611b61565b6001805461082c906128b9565b3360009081526006602052604081205460ff166114c65760405162461bcd60e51b81526004016107ef90612827565b6001600160a01b0383166114ec5760405162461bcd60e51b81526004016107ef906127a1565b610e4b8383611f6b565b6060600780548060200260200160405190810160405280929190818152602001828054801561154e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611530575b5050505050905090565b60006001600160a01b03831615158061157a57506001600160a01b0383163014155b61158357600080fd5b33600090815260026020526040902054828110156115b35760405162461bcd60e51b81526004016107ef906127d8565b6115bd8382612876565b33600090815260026020526040808220929092556001600160a01b038616815290812080548592906115f090849061285e565b90915550506040518381526001600160a01b038516903390600080516020612937833981519152906020015b60405180910390a35060019392505050565b60006116656001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308561203d565b610bbb82336120ae565b6000611679611b61565b6001600160a01b0316336001600160a01b0316146113725760405162461bcd60e51b81526004016107ef9061276a565b6116b1611b61565b6001600160a01b0316336001600160a01b0316146116e15760405162461bcd60e51b81526004016107ef9061276a565b600480549115156101000261ff0019909216919091179055565b3360008181526010602090815260408083206001600160a01b03891680855292528083208790555191929091600080516020612957833981519152906117449088815260200190565b60405180910390a360405162ba451f60e01b81526001600160a01b0386169062ba451f9061177c9033908890889088906004016126a2565b602060405180830381600087803b15801561179657600080fd5b505af11580156117aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ce91906125ae565b95945050505050565b6117df611b61565b6001600160a01b0316336001600160a01b03161461180f5760405162461bcd60e51b81526004016107ef9061276a565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6040516370a0823160e01b815233600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cc9190612609565b90506119036001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308461203d565b61190d81336120ae565b91505090565b834211156119635760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ef565b6001600160a01b0387166000908152600f6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866119b0836128f4565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050611a118882868686611dc0565b80611a245750611a248882868686611eb0565b611a2d57600080fd5b6001600160a01b038881166000818152601060209081526040808320948c16808452948252918290208a90559051898152600080516020612957833981519152910160405180910390a35050505050505050565b611a89611b61565b6001600160a01b0316336001600160a01b031614611ab95760405162461bcd60e51b81526004016107ef9061276a565b600c54421015611ac857600080fd5b600b54600880546001600160a01b0319166001600160a01b03909216919091179055565b3360009081526006602052604081205460ff16611b1b5760405162461bcd60e51b81526004016107ef90612827565b611b258383611cf2565b826001600160a01b0316847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d618460405161161c91815260200190565b6000600c544210611b7c5750600b546001600160a01b031690565b506008546001600160a01b031690565b60405163302b14eb60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063605629d690611be7908b9030908c908c908c908c908c90600401612661565b602060405180830381600087803b158015611c0157600080fd5b505af1158015611c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3991906125ae565b5061144a87836120ae565b611c4c611b61565b6001600160a01b0316336001600160a01b031614611c7c5760405162461bcd60e51b81526004016107ef9061276a565b600980546001600160a01b0319166001600160a01b038316179055600554611ca4904261285e565b600a5550565b6000611cb68484611f6b565b611cea6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016838561212b565b509092915050565b6001600160a01b038216611d485760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107ef565b8060036000828254611d5a919061285e565b90915550506001600160a01b03821660009081526002602052604081208054839290611d8790849061285e565b90915550506040518181526001600160a01b03831690600090600080516020612937833981519152906020015b60405180910390a35050565b60405161190160f01b60208201527f0000000000000000000000000000000000000000000000000000000000000000602282015260428101859052600090819060620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0015b6020604051602081039080840390855afa158015611e6f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061144a5750876001600160a01b0316816001600160a01b03161498975050505050505050565b600080611f30866040517f19457468657265756d205369676e6564204d6573736167653a0a33320000000060208201527f0000000000000000000000000000000000000000000000000000000000000000603c820152605c8101829052600090607c01604051602081830303815290604052805190602001209050919050565b6040805160008082526020820180845284905260ff89169282019290925260608101879052608081018690529192509060019060a001611e4d565b6001600160a01b038216611fcb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107ef565b6001600160a01b03821660009081526002602052604081208054839290611ff3908490612876565b92505081905550806003600082825461200c9190612876565b90915550506040518181526000906001600160a01b0384169060008051602061293783398151915290602001611db4565b6040516001600160a01b03808516602483015283166044820152606481018290526120a89085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612160565b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161580159061211157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014155b61211a57600080fd5b6121248284611cf2565b5090919050565b6040516001600160a01b03831660248201526044810182905261215b90849063a9059cbb60e01b90606401612071565b505050565b612172826001600160a01b03166122e7565b6121be5760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740060448201526064016107ef565b600080836001600160a01b0316836040516121d99190612645565b6000604051808303816000865af19150503d8060008114612216576040519150601f19603f3d011682016040523d82523d6000602084013e61221b565b606091505b50915091508161226d5760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460448201526064016107ef565b8051156120a8578080602001905181019061228891906125ae565b6120a85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016107ef565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906108035750141592915050565b80356001600160a01b0381168114610f2457600080fd5b803560ff81168114610f2457600080fd5b60006020828403121561235857600080fd5b6108188261231e565b6000806040838503121561237457600080fd5b61237d8361231e565b915061238b6020840161231e565b90509250929050565b6000806000606084860312156123a957600080fd5b6123b28461231e565b92506123c06020850161231e565b9150604084013590509250925092565b600080600080600080600060e0888a0312156123eb57600080fd5b6123f48861231e565b96506124026020890161231e565b9550604088013594506060880135935061241e60808901612335565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561244d57600080fd5b6124568361231e565b946020939093013593505050565b60008060006060848603121561247957600080fd5b6124828461231e565b9250602084013591506124976040850161231e565b90509250925092565b600080600080606085870312156124b657600080fd5b6124bf8561231e565b935060208501359250604085013567ffffffffffffffff808211156124e357600080fd5b818701915087601f8301126124f757600080fd5b81358181111561250657600080fd5b88602082850101111561251857600080fd5b95989497505060200194505050565b600080600080600080600060e0888a03121561254257600080fd5b61254b8861231e565b9650602088013595506040880135945061256760608901612335565b93506080880135925060a0880135915061258360c0890161231e565b905092959891949750929550565b6000602082840312156125a357600080fd5b813561081881612925565b6000602082840312156125c057600080fd5b815161081881612925565b6000806000606084860312156125e057600080fd5b833592506123c06020850161231e565b60006020828403121561260257600080fd5b5035919050565b60006020828403121561261b57600080fd5b5051919050565b6000806040838503121561263557600080fd5b8235915061238b6020840161231e565b6000825161265781846020870161288d565b9190910192915050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b6020808252825182820181905260009190848201906040850190845b8181101561272b5783516001600160a01b031683529284019291840191600101612706565b50909695505050505050565b602081526000825180602084015261275681604085016020870161288d565b601f01601f19169190910160400192915050565b60208082526019908201527f416e7973776170563345524332303a20464f5242494444454e00000000000000604082015260600190565b6020808252601c908201527f416e7973776170563345524332303a2061646472657373283078302900000000604082015260600190565b6020808252602f908201527f416e7973776170563345524332303a207472616e7366657220616d6f756e742060408201526e657863656564732062616c616e636560881b606082015260800190565b60208082526019908201527f416e7973776170563445524332303a20464f5242494444454e00000000000000604082015260600190565b600082198211156128715761287161290f565b500190565b6000828210156128885761288861290f565b500390565b60005b838110156128a8578181015183820152602001612890565b838111156120a85750506000910152565b600181811c908216806128cd57607f821691505b602082108114156128ee57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156129085761290861290f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b801515811461293357600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a26469706673582212203be1d96312638a059957fd4e793ab2c107e23e97da46145fd450a1aba187ffd364736f6c634300080700330000000000000000000000001001009911e3fe1d5b45ff8efea7732c33a6c012

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061033f5760003560e01c80637ecebe00116101b8578063bebbf4d011610104578063d93f2445116100a2578063f75c26641161007c578063f75c266414610774578063f954734e1461077c578063fbfa77cf1461078f578063fca3b5aa146107a257600080fd5b8063d93f24451461072e578063dd62ed3e14610736578063ec126c771461076157600080fd5b8063cae9ca51116100de578063cae9ca51146106ed578063cfbd488514610700578063d0e30db014610713578063d505accf1461071b57600080fd5b8063bebbf4d0146106be578063c3081240146106d1578063c4b740f5146106da57600080fd5b806395d89b4111610171578063a29dff721161014b578063a29dff721461066c578063a9059cbb14610675578063aa271e1a14610688578063b6b55f25146106ab57600080fd5b806395d89b411461063c5780639dc29fac14610644578063a045442c1461065757600080fd5b80637ecebe00146105d257806381a37c18146105f25780638623ec7b1461060557806387689e28146106185780638da5cb5b1461062157806391c5df491461062957600080fd5b80633ccfd60b1161029257806360e232a9116102305780636a42b8f81161020a5780636a42b8f81461056f5780636e553f65146105785780636f307dc31461058b57806370a08231146105b257600080fd5b806360e232a914610536578063628d6cba146105495780636817031b1461055c57600080fd5b80634ca8f0ed1161026c5780634ca8f0ed146104dc57806352113ba7146104e55780635f9b105d14610510578063605629d61461052357600080fd5b80633ccfd60b146104ae5780634000aea0146104b657806340c10f19146104c957600080fd5b806318160ddd116102ff5780632ebe3fbb116102d95780632ebe3fbb1461041457806330adf81f14610427578063313ce5671461044e5780633644e5151461048757600080fd5b806318160ddd146103e657806323b872dd146103ee5780632e1a7d4d1461040157600080fd5b806239d6ec14610344578062bf26f41461036a578062f714ce1461039157806306fdde03146103a4578063095ea7b3146103b95780630d707df8146103dc575b600080fd5b610357610352366004612464565b6107b5565b6040519081526020015b60405180910390f35b6103577f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b61035761039f366004612622565b61080b565b6103ac61081f565b6040516103619190612737565b6103cc6103c736600461243a565b6108ad565b6040519015158152602001610361565b6103e4610907565b005b600354610357565b6103cc6103fc366004612394565b6109c3565b61035761040f3660046125f0565b610bae565b6103e4610422366004612346565b610bc1565b6103577f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6104757f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff9091168152602001610361565b6103577fd1ce439ed36bad7d6b5bb4a28dd4dc58be94c268d8d7a8e2400fe7956661f91b81565b610357610c98565b6103cc6104c43660046124a0565b610cb9565b6103cc6104d736600461243a565b610e12565b610357600d5481565b600b546104f8906001600160a01b031681565b6040516001600160a01b039091168152602001610361565b6103cc61051e366004612346565b610e54565b6103cc6105313660046123d0565b610f29565b6103cc610544366004612346565b611139565b6103cc610557366004612622565b61120d565b6103e461056a366004612346565b6112d5565b61035760055481565b610357610586366004612622565b61133b565b6104f87f000000000000000000000000000000000000000000000000000000000000000081565b6103576105c0366004612346565b60026020526000908152604090205481565b6103576105e0366004612346565b600f6020526000908152604090205481565b610357610600366004612527565b61137c565b6104f86106133660046125f0565b611456565b610357600c5481565b6104f8611480565b6009546104f8906001600160a01b031681565b6103ac61148a565b6103cc61065236600461243a565b611497565b61065f6114f6565b60405161036191906126ea565b610357600e5481565b6103cc61068336600461243a565b611558565b6103cc610696366004612346565b60066020526000908152604090205460ff1681565b6103576106b93660046125f0565b61162e565b6103576106cc366004612622565b61166f565b610357600a5481565b6103e46106e8366004612591565b6116a9565b6103cc6106fb3660046124a0565b6116fb565b6103e461070e366004612346565b6117d7565b610357611830565b6103e46107293660046123d0565b611913565b6103e4611a81565b610357610744366004612361565b601060209081526000928352604080842090915290825290205481565b6103cc61076f3660046125cb565b611aec565b6104f8611b61565b61035761078a366004612527565b611b8c565b6008546104f8906001600160a01b031681565b6103e46107b0366004612346565b611c44565b60006107bf611b61565b6001600160a01b0316336001600160a01b0316146107f85760405162461bcd60e51b81526004016107ef9061276a565b60405180910390fd5b610803848484611caa565b949350505050565b6000610818338484611caa565b9392505050565b6000805461082c906128b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610858906128b9565b80156108a55780601f1061087a576101008083540402835291602001916108a5565b820191906000526020600020905b81548152906001019060200180831161088857829003601f168201915b505050505081565b3360008181526010602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020612957833981519152906108f69086815260200190565b60405180910390a350600192915050565b61090f611b61565b6001600160a01b0316336001600160a01b03161461093f5760405162461bcd60e51b81526004016107ef9061276a565b600a5442101561094e57600080fd5b600980546001600160a01b039081166000908152600660205260408120805460ff1916600190811790915592546007805494850181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180546001600160a01b03191692909116919091179055565b60006001600160a01b0383161515806109e557506001600160a01b0383163014155b6109ee57600080fd5b6001600160a01b0384163314610ae8576001600160a01b03841660009081526010602090815260408083203384529091529020546000198114610ae65782811015610a8d5760405162461bcd60e51b815260206004820152602960248201527f416e7973776170563345524332303a2072657175657374206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016107ef565b6000610a998483612876565b6001600160a01b03871660008181526010602090815260408083203380855290835292819020859055518481529394509092600080516020612957833981519152910160405180910390a3505b505b6001600160a01b03841660009081526002602052604090205482811015610b215760405162461bcd60e51b81526004016107ef906127d8565b610b2b8382612876565b6001600160a01b038087166000908152600260205260408082209390935590861681529081208054859290610b6190849061285e565b92505081905550836001600160a01b0316856001600160a01b031660008051602061293783398151915285604051610b9b91815260200190565b60405180910390a3506001949350505050565b6000610bbb338333611caa565b92915050565b610bc9611b61565b6001600160a01b0316336001600160a01b031614610bf95760405162461bcd60e51b81526004016107ef9061276a565b60045460ff16610c0857600080fd5b600880546001600160a01b039092166001600160a01b03199283168117909155600b80548316821790556000818152600660205260408120805460ff1990811660019081179092556007805492830181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805490931690911790915542600c55600480549091169055565b336000818152600260205260408120549091610cb49181611caa565b905090565b60006001600160a01b038516151580610cdb57506001600160a01b0385163014155b610ce457600080fd5b3360009081526002602052604090205484811015610d145760405162461bcd60e51b81526004016107ef906127d8565b610d1e8582612876565b33600090815260026020526040808220929092556001600160a01b03881681529081208054879290610d5190849061285e565b90915550506040518581526001600160a01b0387169033906000805160206129378339815191529060200160405180910390a3604051635260769b60e11b81526001600160a01b0387169063a4c0ed3690610db69033908990899089906004016126a2565b602060405180830381600087803b158015610dd057600080fd5b505af1158015610de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0891906125ae565b9695505050505050565b3360009081526006602052604081205460ff16610e415760405162461bcd60e51b81526004016107ef90612827565b610e4b8383611cf2565b50600192915050565b6000610e5e611b61565b6001600160a01b0316336001600160a01b031614610e8e5760405162461bcd60e51b81526004016107ef9061276a565b6001600160a01b038216610eb45760405162461bcd60e51b81526004016107ef906127a1565b600b80546001600160a01b0319166001600160a01b038416179055600554610edc904261285e565b600c819055600b546008546040516001600160a01b0392831692909116907f1d065115f314fb9bad9557bd5460b9e3c66f7223b1dd04e73e828f0bb5afe89f90600090a45060015b919050565b600084421115610f7b5760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ef565b6001600160a01b0388166000908152600f6020526040812080547f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59918b918b918b919086610fc8836128f4565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012090506110298982878787611dc0565b8061103c575061103c8982878787611eb0565b61104557600080fd5b6001600160a01b03881615158061106557506001600160a01b0388163014155b61106e57600080fd5b6001600160a01b038916600090815260026020526040902054878110156110a75760405162461bcd60e51b81526004016107ef906127d8565b6110b18882612876565b6001600160a01b03808c1660009081526002602052604080822093909355908b16815290812080548a92906110e790849061285e565b92505081905550886001600160a01b03168a6001600160a01b03166000805160206129378339815191528a60405161112191815260200190565b60405180910390a35060019998505050505050505050565b6000611143611b61565b6001600160a01b0316336001600160a01b0316146111735760405162461bcd60e51b81526004016107ef9061276a565b6001600160a01b0382166111995760405162461bcd60e51b81526004016107ef906127a1565b600b80546001600160a01b0319166001600160a01b0384161790556005546111c1904261285e565b600c819055600b546008546040516001600160a01b0392831692909116907f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac90600090a4506001919050565b600454600090610100900460ff16156112685760405162461bcd60e51b815260206004820152601860248201527f416e7973776170563445524332303a206f6e6c7941757468000000000000000060448201526064016107ef565b6001600160a01b03821661128e5760405162461bcd60e51b81526004016107ef906127a1565b6112983384611f6b565b6040518381526001600160a01b0383169033907f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c888906020016108f6565b6112dd611b61565b6001600160a01b0316336001600160a01b03161461130d5760405162461bcd60e51b81526004016107ef9061276a565b600b80546001600160a01b0319166001600160a01b038316179055600554611335904261285e565b600c5550565b60006113726001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308661203d565b61081883836120ae565b60405163d505accf60e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d505accf906113d7908b9030908c908c908c908c908c90600401612661565b600060405180830381600087803b1580156113f157600080fd5b505af1158015611405573d6000803e3d6000fd5b506114409250506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016905089308a61203d565b61144a87836120ae565b98975050505050505050565b6007818154811061146657600080fd5b6000918252602090912001546001600160a01b0316905081565b6000610cb4611b61565b6001805461082c906128b9565b3360009081526006602052604081205460ff166114c65760405162461bcd60e51b81526004016107ef90612827565b6001600160a01b0383166114ec5760405162461bcd60e51b81526004016107ef906127a1565b610e4b8383611f6b565b6060600780548060200260200160405190810160405280929190818152602001828054801561154e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611530575b5050505050905090565b60006001600160a01b03831615158061157a57506001600160a01b0383163014155b61158357600080fd5b33600090815260026020526040902054828110156115b35760405162461bcd60e51b81526004016107ef906127d8565b6115bd8382612876565b33600090815260026020526040808220929092556001600160a01b038616815290812080548592906115f090849061285e565b90915550506040518381526001600160a01b038516903390600080516020612937833981519152906020015b60405180910390a35060019392505050565b60006116656001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308561203d565b610bbb82336120ae565b6000611679611b61565b6001600160a01b0316336001600160a01b0316146113725760405162461bcd60e51b81526004016107ef9061276a565b6116b1611b61565b6001600160a01b0316336001600160a01b0316146116e15760405162461bcd60e51b81526004016107ef9061276a565b600480549115156101000261ff0019909216919091179055565b3360008181526010602090815260408083206001600160a01b03891680855292528083208790555191929091600080516020612957833981519152906117449088815260200190565b60405180910390a360405162ba451f60e01b81526001600160a01b0386169062ba451f9061177c9033908890889088906004016126a2565b602060405180830381600087803b15801561179657600080fd5b505af11580156117aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ce91906125ae565b95945050505050565b6117df611b61565b6001600160a01b0316336001600160a01b03161461180f5760405162461bcd60e51b81526004016107ef9061276a565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6040516370a0823160e01b815233600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cc9190612609565b90506119036001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308461203d565b61190d81336120ae565b91505090565b834211156119635760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ef565b6001600160a01b0387166000908152600f6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866119b0836128f4565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050611a118882868686611dc0565b80611a245750611a248882868686611eb0565b611a2d57600080fd5b6001600160a01b038881166000818152601060209081526040808320948c16808452948252918290208a90559051898152600080516020612957833981519152910160405180910390a35050505050505050565b611a89611b61565b6001600160a01b0316336001600160a01b031614611ab95760405162461bcd60e51b81526004016107ef9061276a565b600c54421015611ac857600080fd5b600b54600880546001600160a01b0319166001600160a01b03909216919091179055565b3360009081526006602052604081205460ff16611b1b5760405162461bcd60e51b81526004016107ef90612827565b611b258383611cf2565b826001600160a01b0316847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d618460405161161c91815260200190565b6000600c544210611b7c5750600b546001600160a01b031690565b506008546001600160a01b031690565b60405163302b14eb60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063605629d690611be7908b9030908c908c908c908c908c90600401612661565b602060405180830381600087803b158015611c0157600080fd5b505af1158015611c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3991906125ae565b5061144a87836120ae565b611c4c611b61565b6001600160a01b0316336001600160a01b031614611c7c5760405162461bcd60e51b81526004016107ef9061276a565b600980546001600160a01b0319166001600160a01b038316179055600554611ca4904261285e565b600a5550565b6000611cb68484611f6b565b611cea6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016838561212b565b509092915050565b6001600160a01b038216611d485760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107ef565b8060036000828254611d5a919061285e565b90915550506001600160a01b03821660009081526002602052604081208054839290611d8790849061285e565b90915550506040518181526001600160a01b03831690600090600080516020612937833981519152906020015b60405180910390a35050565b60405161190160f01b60208201527fd1ce439ed36bad7d6b5bb4a28dd4dc58be94c268d8d7a8e2400fe7956661f91b602282015260428101859052600090819060620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0015b6020604051602081039080840390855afa158015611e6f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061144a5750876001600160a01b0316816001600160a01b03161498975050505050505050565b600080611f30866040517f19457468657265756d205369676e6564204d6573736167653a0a33320000000060208201527fd1ce439ed36bad7d6b5bb4a28dd4dc58be94c268d8d7a8e2400fe7956661f91b603c820152605c8101829052600090607c01604051602081830303815290604052805190602001209050919050565b6040805160008082526020820180845284905260ff89169282019290925260608101879052608081018690529192509060019060a001611e4d565b6001600160a01b038216611fcb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107ef565b6001600160a01b03821660009081526002602052604081208054839290611ff3908490612876565b92505081905550806003600082825461200c9190612876565b90915550506040518181526000906001600160a01b0384169060008051602061293783398151915290602001611db4565b6040516001600160a01b03808516602483015283166044820152606481018290526120a89085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612160565b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161580159061211157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014155b61211a57600080fd5b6121248284611cf2565b5090919050565b6040516001600160a01b03831660248201526044810182905261215b90849063a9059cbb60e01b90606401612071565b505050565b612172826001600160a01b03166122e7565b6121be5760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740060448201526064016107ef565b600080836001600160a01b0316836040516121d99190612645565b6000604051808303816000865af19150503d8060008114612216576040519150601f19603f3d011682016040523d82523d6000602084013e61221b565b606091505b50915091508161226d5760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460448201526064016107ef565b8051156120a8578080602001905181019061228891906125ae565b6120a85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016107ef565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906108035750141592915050565b80356001600160a01b0381168114610f2457600080fd5b803560ff81168114610f2457600080fd5b60006020828403121561235857600080fd5b6108188261231e565b6000806040838503121561237457600080fd5b61237d8361231e565b915061238b6020840161231e565b90509250929050565b6000806000606084860312156123a957600080fd5b6123b28461231e565b92506123c06020850161231e565b9150604084013590509250925092565b600080600080600080600060e0888a0312156123eb57600080fd5b6123f48861231e565b96506124026020890161231e565b9550604088013594506060880135935061241e60808901612335565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561244d57600080fd5b6124568361231e565b946020939093013593505050565b60008060006060848603121561247957600080fd5b6124828461231e565b9250602084013591506124976040850161231e565b90509250925092565b600080600080606085870312156124b657600080fd5b6124bf8561231e565b935060208501359250604085013567ffffffffffffffff808211156124e357600080fd5b818701915087601f8301126124f757600080fd5b81358181111561250657600080fd5b88602082850101111561251857600080fd5b95989497505060200194505050565b600080600080600080600060e0888a03121561254257600080fd5b61254b8861231e565b9650602088013595506040880135945061256760608901612335565b93506080880135925060a0880135915061258360c0890161231e565b905092959891949750929550565b6000602082840312156125a357600080fd5b813561081881612925565b6000602082840312156125c057600080fd5b815161081881612925565b6000806000606084860312156125e057600080fd5b833592506123c06020850161231e565b60006020828403121561260257600080fd5b5035919050565b60006020828403121561261b57600080fd5b5051919050565b6000806040838503121561263557600080fd5b8235915061238b6020840161231e565b6000825161265781846020870161288d565b9190910192915050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b6020808252825182820181905260009190848201906040850190845b8181101561272b5783516001600160a01b031683529284019291840191600101612706565b50909695505050505050565b602081526000825180602084015261275681604085016020870161288d565b601f01601f19169190910160400192915050565b60208082526019908201527f416e7973776170563345524332303a20464f5242494444454e00000000000000604082015260600190565b6020808252601c908201527f416e7973776170563345524332303a2061646472657373283078302900000000604082015260600190565b6020808252602f908201527f416e7973776170563345524332303a207472616e7366657220616d6f756e742060408201526e657863656564732062616c616e636560881b606082015260800190565b60208082526019908201527f416e7973776170563445524332303a20464f5242494444454e00000000000000604082015260600190565b600082198211156128715761287161290f565b500190565b6000828210156128885761288861290f565b500390565b60005b838110156128a8578181015183820152602001612890565b838111156120a85750506000910152565b600181811c908216806128cd57607f821691505b602082108114156128ee57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156129085761290861290f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b801515811461293357600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a26469706673582212203be1d96312638a059957fd4e793ab2c107e23e97da46145fd450a1aba187ffd364736f6c63430008070033

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

0000000000000000000000001001009911e3fe1d5b45ff8efea7732c33a6c012

-----Decoded View---------------
Arg [0] : ownerAddress (address): 0x1001009911e3FE1d5B45FF8Efea7732C33a6C012

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001001009911e3fe1d5b45ff8efea7732c33a6c012


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Hundred Finance is a decentralized application (dApp) that enables the lending and borrowing of cryptocurrencies. A multi-chain protocol, it integrates with Chainlink oracles to ensure market health and stability, while specializing in serving long-tail assets.

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.