ETH Price: $3,385.86 (+4.23%)
Gas: 2 Gwei

Contract

0x15EB0c763581329C921C8398556EcFf85Cc48275
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Stake202510382024-07-07 0:24:5922 days ago1720311899IN
0x15EB0c76...85Cc48275
0 ETH0.000307751.1
Unstake177752582023-07-26 5:46:35369 days ago1690350395IN
0x15EB0c76...85Cc48275
0 ETH0.0014089518.9798613
Unstake Early154164202022-08-26 16:29:02702 days ago1661531342IN
0x15EB0c76...85Cc48275
0 ETH0.0029325136.13427545
Unstake Early152882382022-08-06 10:42:52722 days ago1659782572IN
0x15EB0c76...85Cc48275
0 ETH0.000324544
Stake151060752022-07-09 3:59:49751 days ago1657339189IN
0x15EB0c76...85Cc48275
0 ETH0.0039335918.7415742
Unstake Early151060282022-07-09 3:47:00751 days ago1657338420IN
0x15EB0c76...85Cc48275
0 ETH0.0010412612.83046904
Stake151047342022-07-08 22:42:47751 days ago1657320167IN
0x15EB0c76...85Cc48275
0 ETH0.0053693417.63069929
Unstake Early151047232022-07-08 22:40:39751 days ago1657320039IN
0x15EB0c76...85Cc48275
0 ETH0.0016283624.13253228
Unstake Early151047202022-07-08 22:40:02751 days ago1657320002IN
0x15EB0c76...85Cc48275
0 ETH0.0015186922.50716309
Stake151046052022-07-08 22:11:27751 days ago1657318287IN
0x15EB0c76...85Cc48275
0 ETH0.0042159612.9073512
Unstake Early144925662022-03-31 7:24:45851 days ago1648711485IN
0x15EB0c76...85Cc48275
0 ETH0.0028729235.40006092
Unstake Early143426872022-03-07 23:26:28874 days ago1646695588IN
0x15EB0c76...85Cc48275
0 ETH0.0026957139.95071374
Unstake Early143426822022-03-07 23:25:54874 days ago1646695554IN
0x15EB0c76...85Cc48275
0 ETH0.0028014541.51779611
Unstake Early143426742022-03-07 23:24:11874 days ago1646695451IN
0x15EB0c76...85Cc48275
0 ETH0.0037069845.67726553
Unstake Early141281452022-02-02 18:07:20907 days ago1643825240IN
0x15EB0c76...85Cc48275
0 ETH0.01237573183.40940002
Unstake Early139736542022-01-09 21:04:20931 days ago1641762260IN
0x15EB0c76...85Cc48275
0 ETH0.0190932235.2915925
Unstake Early135493002021-11-04 8:59:45998 days ago1636016385IN
0x15EB0c76...85Cc48275
0 ETH0.0062717292.94754077
Unstake Early135492752021-11-04 8:55:40998 days ago1636016140IN
0x15EB0c76...85Cc48275
0 ETH0.0080898299.68246105
Unstake Early135478262021-11-04 3:22:02998 days ago1635996122IN
0x15EB0c76...85Cc48275
0 ETH0.00905207111.53913829
Unstake Early134856692021-10-25 8:59:221008 days ago1635152362IN
0x15EB0c76...85Cc48275
0 ETH0.0032462440
Unstake Early134329812021-10-17 3:13:101016 days ago1634440390IN
0x15EB0c76...85Cc48275
0 ETH0.0030249544.83016082
Unstake Early134329812021-10-17 3:13:101016 days ago1634440390IN
0x15EB0c76...85Cc48275
0 ETH0.0036382344.83016082
Stake133906352021-10-10 11:31:081022 days ago1633865468IN
0x15EB0c76...85Cc48275
0 ETH0.0180640258.83876001
Stake133895122021-10-10 7:16:411023 days ago1633850201IN
0x15EB0c76...85Cc48275
0 ETH0.023919559.42247417
Stake133894402021-10-10 6:57:591023 days ago1633849079IN
0x15EB0c76...85Cc48275
0 ETH0.0224608653.52041996
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FlashProtocol

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-03-31
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;

interface IFlashToken {
    function totalSupply() external view returns (uint256);

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

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    function mint(address to, uint256 value) external returns (bool);

    function burn(uint256 value) external returns (bool);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
}

interface IFlashReceiver {
    function receiveFlash(
        bytes32 id,
        uint256 amountIn,
        uint256 expireAfter,
        uint256 mintedAmount,
        address staker,
        bytes calldata data
    ) external returns (uint256);
}

interface IFlashProtocol {
    enum LockedFunctions { SET_MATCH_RATIO, SET_MATCH_RECEIVER }

    function TIMELOCK() external view returns (uint256);

    function FLASH_TOKEN() external view returns (address);

    function matchRatio() external view returns (uint256);

    function matchReceiver() external view returns (address);

    function stakes(bytes32 _id)
        external
        view
        returns (
            uint256 amountIn,
            uint256 expiry,
            uint256 expireAfter,
            uint256 mintedAmount,
            address staker,
            address receiver
        );

    function stake(
        uint256 _amountIn,
        uint256 _days,
        address _receiver,
        bytes calldata _data
    )
        external
        returns (
            uint256 mintedAmount,
            uint256 matchedAmount,
            bytes32 id
        );

    function lockFunction(LockedFunctions _lockedFunction) external;

    function unlockFunction(LockedFunctions _lockedFunction) external;

    function timelock(LockedFunctions _lockedFunction) external view returns (uint256);

    function balances(address _staker) external view returns (uint256);

    function unstake(bytes32 _id) external returns (uint256 withdrawAmount);

    function unstakeEarly(bytes32 _id) external returns (uint256 withdrawAmount);

    function getFPY(uint256 _amountIn) external view returns (uint256);

    function setMatchReceiver(address _newMatchReceiver) external;

    function setMatchRatio(uint256 _newMatchRatio) external;

    function getMatchedAmount(uint256 mintedAmount) external view returns (uint256);

    function getMintAmount(uint256 _amountIn, uint256 _expiry) external view returns (uint256);

    function getPercentageStaked(uint256 _amountIn) external view returns (uint256 percentage);

    function calculateMaxStakePeriod(uint256 _amountIn) external view returns (uint256);

    function stakeWithPermit(
        address _receiver,
        uint256 _amountIn,
        uint256 _expiry,
        uint256 _deadline,
        uint8 _v,
        bytes32 _r,
        bytes32 _s,
        bytes calldata _data
    )
        external
        returns (
            uint256 mintedAmount,
            uint256 matchedAmount,
            bytes32 id
        );
}

library SafeMath {
    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x + y) >= x, "MATH:: ADD_OVERFLOW");
    }

    function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x - y) <= x, "MATH:: SUB_UNDERFLOW");
    }

    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, "MATH:: MUL_OVERFLOW");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "MATH:: DIVISION_BY_ZERO");
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
}


contract FlashProtocol is IFlashProtocol {
    using SafeMath for uint256;
    using Address for address;

    struct Stake {
        uint256 amountIn;
        uint256 expiry;
        uint256 expireAfter;
        uint256 mintedAmount;
        address staker;
        address receiver;
    }

    uint256 public constant override TIMELOCK = 3 days;
    address public constant override FLASH_TOKEN = 0x20398aD62bb2D930646d45a6D4292baa0b860C1f;

    uint256 internal constant PRECISION = 1e18;
    uint256 internal constant MAX_FPY_FOR_1_YEAR = 5e17;
    uint256 internal constant SECONDS_IN_1_YEAR = 365 * 86400;

    uint256 public override matchRatio;
    address public override matchReceiver;

    mapping(bytes32 => Stake) public override stakes;
    mapping(LockedFunctions => uint256) public override timelock;
    mapping(address => uint256) public override balances;

    event Staked(
        bytes32 _id,
        uint256 _amountIn,
        uint256 _expiry,
        uint256 _expireAfter,
        uint256 _mintedAmount,
        address indexed _staker,
        address indexed _receiver
    );

    event Unstaked(bytes32 _id, uint256 _amountIn, address indexed _staker);

    modifier onlyMatchReceiver {
        require(msg.sender == matchReceiver, "FlashProtocol:: NOT_MATCH_RECEIVER");
        _;
    }

    modifier notLocked(LockedFunctions _lockedFunction) {
        require(
            timelock[_lockedFunction] != 0 && timelock[_lockedFunction] <= block.timestamp,
            "FlashProtocol:: FUNCTION_TIMELOCKED"
        );
        _;
    }

    constructor(address _initialMatchReceiver, uint256 _initialMatchRatio) {
        _setMatchRatio(_initialMatchRatio);
        _setMatchReceiver(_initialMatchReceiver);
    }

    function lockFunction(LockedFunctions _lockedFunction) external override onlyMatchReceiver {
        timelock[_lockedFunction] = type(uint256).max;
    }

    function unlockFunction(LockedFunctions _lockedFunction) external override onlyMatchReceiver {
        timelock[_lockedFunction] = block.timestamp + TIMELOCK;
    }

    function setMatchReceiver(address _newMatchReceiver)
        external
        override
        onlyMatchReceiver
        notLocked(LockedFunctions.SET_MATCH_RECEIVER)
    {
        _setMatchReceiver(_newMatchReceiver);
        timelock[LockedFunctions.SET_MATCH_RECEIVER] = 0;
    }

    function _setMatchReceiver(address _newMatchReceiver) internal {
        matchReceiver = _newMatchReceiver;
    }

    function setMatchRatio(uint256 _newMatchRatio)
        external
        override
        onlyMatchReceiver
        notLocked(LockedFunctions.SET_MATCH_RATIO)
    {
        _setMatchRatio(_newMatchRatio);
        timelock[LockedFunctions.SET_MATCH_RATIO] = 0;
    }

    function _setMatchRatio(uint256 _newMatchRatio) internal {
        require(_newMatchRatio >= 0 && _newMatchRatio <= 2000, "FlashProtocol:: INVALID_MATCH_RATIO");
        // can be 0 and cannot be above 20%
        require(_newMatchRatio <= 2000, "FlashProtocol:: INVALID_MATCH_RATIO");
        matchRatio = _newMatchRatio;
    }

    function stake(
        uint256 _amountIn,
        uint256 _expiry,
        address _receiver,
        bytes calldata _data
    )
        external
        override
        returns (
            uint256,
            uint256,
            bytes32
        )
    {
        return _stake(_amountIn, _expiry, _receiver, _data);
    }

    function stakeWithPermit(
        address _receiver,
        uint256 _amountIn,
        uint256 _expiry,
        uint256 _deadline,
        uint8 _v,
        bytes32 _r,
        bytes32 _s,
        bytes calldata _data
    )
        external
        override
        returns (
            uint256,
            uint256,
            bytes32
        )
    {
        IFlashToken(FLASH_TOKEN).permit(msg.sender, address(this), type(uint256).max, _deadline, _v, _r, _s);
        return _stake(_amountIn, _expiry, _receiver, _data);
    }

    function _stake(
        uint256 _amountIn,
        uint256 _expiry,
        address _receiver,
        bytes calldata _data
    )
        internal
        returns (
            uint256 mintedAmount,
            uint256 matchedAmount,
            bytes32 id
        )
    {
        require(_amountIn > 0, "FlashProtocol:: INVALID_AMOUNT");
        require(_receiver != address(this), "FlashProtocol:: INVALID_ADDRESS");
        require(_expiry <= calculateMaxStakePeriod(_amountIn), "FlashProtocol:: MAX_STAKE_PERIOD_EXCEEDS");

        address staker = msg.sender;

        uint256 expiration = block.timestamp.add(_expiry);
        balances[staker] = balances[staker].add(_amountIn);

        id = keccak256(abi.encodePacked(_amountIn, _expiry, _receiver, staker, block.timestamp));

        require(stakes[id].staker == address(0), "FlashProtocol:: STAKE_EXISTS");

        mintedAmount = getMintAmount(_amountIn, _expiry);
        matchedAmount = getMatchedAmount(mintedAmount);

        IFlashToken(FLASH_TOKEN).transferFrom(staker, address(this), _amountIn);

        IFlashToken(FLASH_TOKEN).mint(_receiver, mintedAmount);
        IFlashToken(FLASH_TOKEN).mint(matchReceiver, matchedAmount);

        stakes[id] = Stake(_amountIn, _expiry, expiration, mintedAmount, staker, _receiver);

        if (_receiver.isContract()) {
            IFlashReceiver(_receiver).receiveFlash(id, _amountIn, expiration, mintedAmount, staker, _data);
        }

        emit Staked(id, _amountIn, _expiry, expiration, mintedAmount, staker, _receiver);
    }

    function unstake(bytes32 _id) external override returns (uint256 withdrawAmount) {
        Stake memory s = stakes[_id];
        require(block.timestamp >= s.expireAfter, "FlashProtol:: STAKE_NOT_EXPIRED");
        balances[s.staker] = balances[s.staker].sub(s.amountIn);
        withdrawAmount = s.amountIn;
        delete stakes[_id];
        IFlashToken(FLASH_TOKEN).transfer(s.staker, withdrawAmount);
        emit Unstaked(_id, s.amountIn, s.staker);
    }

    function unstakeEarly(bytes32 _id) external override returns (uint256 withdrawAmount) {
        Stake memory s = stakes[_id];
        address staker = msg.sender;
        require(s.staker == staker, "FlashProtocol:: INVALID_STAKER");
        uint256 remainingTime = (s.expireAfter.sub(block.timestamp));
        require(s.expiry > remainingTime, "Flash Protocol:: INVALID_UNSTAKE_TIME");
        uint256 burnAmount = _calculateBurn(s.amountIn, remainingTime, s.expiry);
        assert(burnAmount <= s.amountIn);
        balances[staker] = balances[staker].sub(s.amountIn);
        withdrawAmount = s.amountIn.sub(burnAmount);
        delete stakes[_id];
        IFlashToken(FLASH_TOKEN).burn(burnAmount);
        IFlashToken(FLASH_TOKEN).transfer(staker, withdrawAmount);
        emit Unstaked(_id, withdrawAmount, staker);
    }

    function getMatchedAmount(uint256 _mintedAmount) public view override returns (uint256) {
        return _mintedAmount.mul(matchRatio).div(10000);
    }

    function getMintAmount(uint256 _amountIn, uint256 _expiry) public view override returns (uint256) {
        return _amountIn.mul(_expiry).mul(getFPY(_amountIn)).div(PRECISION * SECONDS_IN_1_YEAR);
    }

    function getFPY(uint256 _amountIn) public view override returns (uint256) {
        return (PRECISION.sub(getPercentageStaked(_amountIn))).div(2);
    }

    function getPercentageStaked(uint256 _amountIn) public view override returns (uint256) {
        uint256 locked = IFlashToken(FLASH_TOKEN).balanceOf(address(this)).add(_amountIn);
        return locked.mul(PRECISION).div(IFlashToken(FLASH_TOKEN).totalSupply());
    }

    function calculateMaxStakePeriod(uint256 _amountIn) public view override returns (uint256) {
        return MAX_FPY_FOR_1_YEAR.mul(SECONDS_IN_1_YEAR).div(getFPY(_amountIn));
    }

    function _calculateBurn(
        uint256 _amount,
        uint256 _remainingTime,
        uint256 _totalTime
    ) private pure returns (uint256) {
        return _amount.mul(_remainingTime).div(_totalTime);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_initialMatchReceiver","type":"address"},{"internalType":"uint256","name":"_initialMatchRatio","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"_id","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"_amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_expiry","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_expireAfter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_mintedAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"_staker","type":"address"},{"indexed":true,"internalType":"address","name":"_receiver","type":"address"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"_id","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"_amountIn","type":"uint256"},{"indexed":true,"internalType":"address","name":"_staker","type":"address"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"FLASH_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIMELOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"calculateMaxStakePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"getFPY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintedAmount","type":"uint256"}],"name":"getMatchedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"uint256","name":"_expiry","type":"uint256"}],"name":"getMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"getPercentageStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IFlashProtocol.LockedFunctions","name":"_lockedFunction","type":"uint8"}],"name":"lockFunction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"matchRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"matchReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMatchRatio","type":"uint256"}],"name":"setMatchRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newMatchReceiver","type":"address"}],"name":"setMatchReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"uint256","name":"_expiry","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"stake","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"uint256","name":"_expiry","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":"bytes","name":"_data","type":"bytes"}],"name":"stakeWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"stakes","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"expireAfter","type":"uint256"},{"internalType":"uint256","name":"mintedAmount","type":"uint256"},{"internalType":"address","name":"staker","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IFlashProtocol.LockedFunctions","name":"","type":"uint8"}],"name":"timelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IFlashProtocol.LockedFunctions","name":"_lockedFunction","type":"uint8"}],"name":"unlockFunction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"unstake","outputs":[{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"unstakeEarly","outputs":[{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162001af738038062001af7833981810160405260408110156200003757600080fd5b5080516020909101516200004b816200005e565b6200005682620000e9565b50506200010b565b6107d0811115620000a15760405162461bcd60e51b815260040180806020018281038252602381526020018062001ad46023913960400191505060405180910390fd5b6107d0811115620000e45760405162461bcd60e51b815260040180806020018281038252602381526020018062001ad46023913960400191505060405180910390fd5b600055565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6119b9806200011b6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637aadef8b116100ad578063b4fa3b9811610071578063b4fa3b9814610448578063c17bae2a14610468578063cc704d5414610488578063d08c9702146104a5578063e345a380146104ad5761012c565b80637aadef8b146103155780638fee64071461031d578063a066983d14610379578063aa53099d14610405578063b3e1f050146104255761012c565b806332a3fcb8116100f457806332a3fcb8146101ef5780635b49129e146102b657806368220664146102be57806371ed5d1a146102db57806376f5cf28146102f85761012c565b80631051f696146101315780631f75caac1461016057806323c6e14c1461017d57806327212b5b146101a157806327e235e3146101c9575b600080fd5b61014e6004803603602081101561014757600080fd5b50356104ca565b60408051918252519081900360200190f35b61014e6004803603602081101561017657600080fd5b50356104f3565b610185610517565b604080516001600160a01b039092168252519081900360200190f35b6101c7600480360360208110156101b757600080fd5b50356001600160a01b031661052f565b005b61014e600480360360208110156101df57600080fd5b50356001600160a01b0316610649565b610298600480360361010081101561020657600080fd5b6001600160a01b038235169160208101359160408201359160608101359160ff6080830135169160a08101359160c08201359190810190610100810160e082013564010000000081111561025957600080fd5b82018360208201111561026b57600080fd5b8035906020019184600183028401116401000000008311171561028d57600080fd5b50909250905061065b565b60408051938452602084019290925282820152519081900360600190f35b61014e61071a565b61014e600480360360208110156102d457600080fd5b5035610720565b61014e600480360360208110156102f157600080fd5b5035610851565b6101c76004803603602081101561030e57600080fd5b5035610a83565b61014e610b7e565b61033a6004803603602081101561033357600080fd5b5035610b85565b6040805196875260208701959095528585019390935260608501919091526001600160a01b0390811660808501521660a0830152519081900360c00190f35b6102986004803603608081101561038f57600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156103c657600080fd5b8201836020820111156103d857600080fd5b803590602001918460018302840111640100000000831117156103fa57600080fd5b509092509050610bc8565b6101c76004803603602081101561041b57600080fd5b503560ff16610beb565b61014e6004803603604081101561043b57600080fd5b5080359060200135610c69565b6101c76004803603602081101561045e57600080fd5b503560ff16610c96565b61014e6004803603602081101561047e57600080fd5b503560ff16610cf2565b61014e6004803603602081101561049e57600080fd5b5035610d04565b610185610d26565b61014e600480360360208110156104c357600080fd5b5035610d35565b60006104ed6127106104e76000548561105990919063ffffffff16565b906110be565b92915050565b60006104ed61050183610d04565b6104e76706f05b59d3b200006301e13380611059565b7320398ad62bb2d930646d45a6d4292baa0b860c1f81565b6001546001600160a01b031633146105785760405162461bcd60e51b81526004018080602001828103825260228152602001806119626022913960400191505060405180910390fd5b6001600081905260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c54158015906105dd575042600360008360018111156105c057fe5b60018111156105cb57fe5b81526020019081526020016000205411155b6106185760405162461bcd60e51b81526004018080602001828103825260238152602001806119176023913960400191505060405180910390fd5b61062182611128565b600060038160015b600181111561063457fe5b81526020810191909152604001600020555050565b60046020526000908152604090205481565b6040805163d505accf60e01b815233600482015230602482015260001960448201526064810188905260ff8716608482015260a4810186905260c481018590529051600091829182917320398ad62bb2d930646d45a6d4292baa0b860c1f9163d505accf9160e480820192869290919082900301818387803b1580156106e057600080fd5b505af11580156106f4573d6000803e3d6000fd5b505050506107058b8b8e888861114a565b92509250925099509950999650505050505050565b60005481565b6000806107ba837320398ad62bb2d930646d45a6d4292baa0b860c1f6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561078857600080fd5b505afa15801561079c573d6000803e3d6000fd5b505050506040513d60208110156107b257600080fd5b505190611744565b905061084a7320398ad62bb2d930646d45a6d4292baa0b860c1f6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561080c57600080fd5b505afa158015610820573d6000803e3d6000fd5b505050506040513d602081101561083657600080fd5b50516104e783670de0b6b3a7640000611059565b9392505050565b600061085b611886565b50600082815260026020818152604092839020835160c08101855281548152600182015492810192909252918201549281018390526003820154606082015260048201546001600160a01b03908116608083015260059092015490911660a082015290421015610912576040805162461bcd60e51b815260206004820152601f60248201527f466c61736850726f746f6c3a3a205354414b455f4e4f545f4558504952454400604482015290519081900360640190fd5b805160808201516001600160a01b031660009081526004602052604090205461093a91611792565b6080820180516001600160a01b0390811660009081526004602081815260408084209690965586518984526002808352878520858155600181018690559081018590556003810185905580840180546001600160a01b03199081169091556005909101805490911690559451865163a9059cbb60e01b81529416918401919091526024830184905293519295507320398ad62bb2d930646d45a6d4292baa0b860c1f9363a9059cbb93604480850194929391928390030190829087803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b505050506040513d6020811015610a2d57600080fd5b50506080810151815160408051868152602081019290925280516001600160a01b03909316927f2ce17f91452598d1f926f6cfe29a9d42a67ff82b45d1eb94e0634c27555c14da9281900390910190a250919050565b6001546001600160a01b03163314610acc5760405162461bcd60e51b81526004018080602001828103825260228152602001806119626022913960400191505060405180910390fd5b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5415801590610b2f57504260036000836001811115610b1257fe5b6001811115610b1d57fe5b81526020019081526020016000205411155b610b6a5760405162461bcd60e51b81526004018080602001828103825260238152602001806119176023913960400191505060405180910390fd5b610b73826117e1565b600060038180610629565b6203f48081565b6002602081905260009182526040909120805460018201549282015460038301546004840154600590940154929493919290916001600160a01b03908116911686565b6000806000610bda888888888861114a565b925092509250955095509592505050565b6001546001600160a01b03163314610c345760405162461bcd60e51b81526004018080602001828103825260228152602001806119626022913960400191505060405180910390fd5b6203f480420160036000836001811115610c4a57fe5b6001811115610c5557fe5b815260208101919091526040016000205550565b600061084a6a1a1601fc4ea7109e0000006104e7610c8686610d04565b610c908787611059565b90611059565b6001546001600160a01b03163314610cdf5760405162461bcd60e51b81526004018080602001828103825260228152602001806119626022913960400191505060405180910390fd5b60001960036000836001811115610c4a57fe5b60036020526000908152604090205481565b60006104ed60026104e7610d1785610720565b670de0b6b3a764000090611792565b6001546001600160a01b031681565b6000610d3f611886565b50600082815260026020818152604092839020835160c0810185528154815260018201549281019290925291820154928101929092526003810154606083015260048101546001600160a01b03908116608084018190526005909201541660a083015233908114610df7576040805162461bcd60e51b815260206004820152601e60248201527f466c61736850726f746f636f6c3a3a20494e56414c49445f5354414b45520000604482015290519081900360640190fd5b6040820151600090610e099042611792565b905080836020015111610e4d5760405162461bcd60e51b81526004018080602001828103825260258152602001806118cf6025913960400191505060405180910390fd5b6000610e628460000151838660200151611868565b8451909150811115610e7057fe5b83516001600160a01b038416600090815260046020526040902054610e9491611792565b6001600160a01b0384166000908152600460205260409020558351610eb99082611792565b60008781526002602081815260408084208481556001810185905592830184905560038301849055600480840180546001600160a01b0319908116909155600590940180549094169093558051630852cd8d60e31b8152928301869052519398507320398ad62bb2d930646d45a6d4292baa0b860c1f936342966c68936024808501948390030190829087803b158015610f5257600080fd5b505af1158015610f66573d6000803e3d6000fd5b505050506040513d6020811015610f7c57600080fd5b50506040805163a9059cbb60e01b81526001600160a01b03851660048201526024810187905290517320398ad62bb2d930646d45a6d4292baa0b860c1f9163a9059cbb9160448083019260209291908290030181600087803b158015610fe157600080fd5b505af1158015610ff5573d6000803e3d6000fd5b505050506040513d602081101561100b57600080fd5b5050604080518781526020810187905281516001600160a01b038616927f2ce17f91452598d1f926f6cfe29a9d42a67ff82b45d1eb94e0634c27555c14da928290030190a250505050919050565b600082611068575060006104ed565b8282028284828161107557fe5b041461084a576040805162461bcd60e51b81526020600482015260136024820152724d4154483a3a204d554c5f4f564552464c4f5760681b604482015290519081900360640190fd5b6000808211611114576040805162461bcd60e51b815260206004820152601760248201527f4d4154483a3a204449564953494f4e5f42595f5a45524f000000000000000000604482015290519081900360640190fd5b600082848161111f57fe5b04949350505050565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008088116111a3576040805162461bcd60e51b815260206004820152601e60248201527f466c61736850726f746f636f6c3a3a20494e56414c49445f414d4f554e540000604482015290519081900360640190fd5b6001600160a01b038616301415611201576040805162461bcd60e51b815260206004820152601f60248201527f466c61736850726f746f636f6c3a3a20494e56414c49445f4144445245535300604482015290519081900360640190fd5b61120a886104f3565b8711156112485760405162461bcd60e51b815260040180806020018281038252602881526020018061193a6028913960400191505060405180910390fd5b336000611255428a611744565b6001600160a01b03831660009081526004602052604090205490915061127b908b611744565b60046000846001600160a01b03166001600160a01b0316815260200190815260200160002081905550898989844260405160200180868152602001858152602001846001600160a01b031660601b8152601401836001600160a01b031660601b81526014018281526020019550505050505060405160208183030381529060405280519060200120925060006001600160a01b03166002600085815260200190815260200160002060040160009054906101000a90046001600160a01b03166001600160a01b031614611395576040805162461bcd60e51b815260206004820152601c60248201527f466c61736850726f746f636f6c3a3a205354414b455f45584953545300000000604482015290519081900360640190fd5b61139f8a8a610c69565b94506113aa856104ca565b604080516323b872dd60e01b81526001600160a01b0385166004820152306024820152604481018d905290519195507320398ad62bb2d930646d45a6d4292baa0b860c1f916323b872dd916064808201926020929091908290030181600087803b15801561141757600080fd5b505af115801561142b573d6000803e3d6000fd5b505050506040513d602081101561144157600080fd5b5050604080516340c10f1960e01b81526001600160a01b038a1660048201526024810187905290517320398ad62bb2d930646d45a6d4292baa0b860c1f916340c10f199160448083019260209291908290030181600087803b1580156114a657600080fd5b505af11580156114ba573d6000803e3d6000fd5b505050506040513d60208110156114d057600080fd5b5050600154604080516340c10f1960e01b81526001600160a01b03909216600483015260248201869052517320398ad62bb2d930646d45a6d4292baa0b860c1f916340c10f199160448083019260209291908290030181600087803b15801561153857600080fd5b505af115801561154c573d6000803e3d6000fd5b505050506040513d602081101561156257600080fd5b50506040805160c0810182528b815260208181018c8152828401858152606084018a81526001600160a01b03808916608087019081528f821660a0880181815260008d8152600298899052999099209751885594516001880155925194860194909455516003850155516004840180549184166001600160a01b0319928316179055935160059093018054939092169290931691909117905561160490611880565b156116d957876001600160a01b0316632cbff446848c8489878d8d6040518863ffffffff1660e01b815260040180888152602001878152602001868152602001858152602001846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505098505050505050505050602060405180830381600087803b1580156116ac57600080fd5b505af11580156116c0573d6000803e3d6000fd5b505050506040513d60208110156116d657600080fd5b50505b60408051848152602081018c90528082018b9052606081018390526080810187905290516001600160a01b03808b1692908516917f8872a0bfe035dd55f2341f67aa0f9a8196bb3f97e132b6d3cb2f53f91aaa93f99181900360a00190a35050955095509592505050565b808201828110156104ed576040805162461bcd60e51b81526020600482015260136024820152724d4154483a3a204144445f4f564552464c4f5760681b604482015290519081900360640190fd5b808203828111156104ed576040805162461bcd60e51b81526020600482015260146024820152734d4154483a3a205355425f554e444552464c4f5760601b604482015290519081900360640190fd5b6107d08111156118225760405162461bcd60e51b81526004018080602001828103825260238152602001806118f46023913960400191505060405180910390fd5b6107d08111156118635760405162461bcd60e51b81526004018080602001828103825260238152602001806118f46023913960400191505060405180910390fd5b600055565b6000611878826104e78686611059565b949350505050565b3b151590565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152509056fe466c6173682050726f746f636f6c3a3a20494e56414c49445f554e5354414b455f54494d45466c61736850726f746f636f6c3a3a20494e56414c49445f4d415443485f524154494f466c61736850726f746f636f6c3a3a2046554e4354494f4e5f54494d454c4f434b4544466c61736850726f746f636f6c3a3a204d41585f5354414b455f504552494f445f45584345454453466c61736850726f746f636f6c3a3a204e4f545f4d415443485f5245434549564552a26469706673582212206dc5d6153199f30c9e7dfd6cff75014faddcff6959bde4c24a51e128a2010df564736f6c63430007040033466c61736850726f746f636f6c3a3a20494e56414c49445f4d415443485f524154494f000000000000000000000000842f8f6fb524996d0b660621da895166e1cea69100000000000000000000000000000000000000000000000000000000000005dc

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80637aadef8b116100ad578063b4fa3b9811610071578063b4fa3b9814610448578063c17bae2a14610468578063cc704d5414610488578063d08c9702146104a5578063e345a380146104ad5761012c565b80637aadef8b146103155780638fee64071461031d578063a066983d14610379578063aa53099d14610405578063b3e1f050146104255761012c565b806332a3fcb8116100f457806332a3fcb8146101ef5780635b49129e146102b657806368220664146102be57806371ed5d1a146102db57806376f5cf28146102f85761012c565b80631051f696146101315780631f75caac1461016057806323c6e14c1461017d57806327212b5b146101a157806327e235e3146101c9575b600080fd5b61014e6004803603602081101561014757600080fd5b50356104ca565b60408051918252519081900360200190f35b61014e6004803603602081101561017657600080fd5b50356104f3565b610185610517565b604080516001600160a01b039092168252519081900360200190f35b6101c7600480360360208110156101b757600080fd5b50356001600160a01b031661052f565b005b61014e600480360360208110156101df57600080fd5b50356001600160a01b0316610649565b610298600480360361010081101561020657600080fd5b6001600160a01b038235169160208101359160408201359160608101359160ff6080830135169160a08101359160c08201359190810190610100810160e082013564010000000081111561025957600080fd5b82018360208201111561026b57600080fd5b8035906020019184600183028401116401000000008311171561028d57600080fd5b50909250905061065b565b60408051938452602084019290925282820152519081900360600190f35b61014e61071a565b61014e600480360360208110156102d457600080fd5b5035610720565b61014e600480360360208110156102f157600080fd5b5035610851565b6101c76004803603602081101561030e57600080fd5b5035610a83565b61014e610b7e565b61033a6004803603602081101561033357600080fd5b5035610b85565b6040805196875260208701959095528585019390935260608501919091526001600160a01b0390811660808501521660a0830152519081900360c00190f35b6102986004803603608081101561038f57600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156103c657600080fd5b8201836020820111156103d857600080fd5b803590602001918460018302840111640100000000831117156103fa57600080fd5b509092509050610bc8565b6101c76004803603602081101561041b57600080fd5b503560ff16610beb565b61014e6004803603604081101561043b57600080fd5b5080359060200135610c69565b6101c76004803603602081101561045e57600080fd5b503560ff16610c96565b61014e6004803603602081101561047e57600080fd5b503560ff16610cf2565b61014e6004803603602081101561049e57600080fd5b5035610d04565b610185610d26565b61014e600480360360208110156104c357600080fd5b5035610d35565b60006104ed6127106104e76000548561105990919063ffffffff16565b906110be565b92915050565b60006104ed61050183610d04565b6104e76706f05b59d3b200006301e13380611059565b7320398ad62bb2d930646d45a6d4292baa0b860c1f81565b6001546001600160a01b031633146105785760405162461bcd60e51b81526004018080602001828103825260228152602001806119626022913960400191505060405180910390fd5b6001600081905260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c54158015906105dd575042600360008360018111156105c057fe5b60018111156105cb57fe5b81526020019081526020016000205411155b6106185760405162461bcd60e51b81526004018080602001828103825260238152602001806119176023913960400191505060405180910390fd5b61062182611128565b600060038160015b600181111561063457fe5b81526020810191909152604001600020555050565b60046020526000908152604090205481565b6040805163d505accf60e01b815233600482015230602482015260001960448201526064810188905260ff8716608482015260a4810186905260c481018590529051600091829182917320398ad62bb2d930646d45a6d4292baa0b860c1f9163d505accf9160e480820192869290919082900301818387803b1580156106e057600080fd5b505af11580156106f4573d6000803e3d6000fd5b505050506107058b8b8e888861114a565b92509250925099509950999650505050505050565b60005481565b6000806107ba837320398ad62bb2d930646d45a6d4292baa0b860c1f6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561078857600080fd5b505afa15801561079c573d6000803e3d6000fd5b505050506040513d60208110156107b257600080fd5b505190611744565b905061084a7320398ad62bb2d930646d45a6d4292baa0b860c1f6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561080c57600080fd5b505afa158015610820573d6000803e3d6000fd5b505050506040513d602081101561083657600080fd5b50516104e783670de0b6b3a7640000611059565b9392505050565b600061085b611886565b50600082815260026020818152604092839020835160c08101855281548152600182015492810192909252918201549281018390526003820154606082015260048201546001600160a01b03908116608083015260059092015490911660a082015290421015610912576040805162461bcd60e51b815260206004820152601f60248201527f466c61736850726f746f6c3a3a205354414b455f4e4f545f4558504952454400604482015290519081900360640190fd5b805160808201516001600160a01b031660009081526004602052604090205461093a91611792565b6080820180516001600160a01b0390811660009081526004602081815260408084209690965586518984526002808352878520858155600181018690559081018590556003810185905580840180546001600160a01b03199081169091556005909101805490911690559451865163a9059cbb60e01b81529416918401919091526024830184905293519295507320398ad62bb2d930646d45a6d4292baa0b860c1f9363a9059cbb93604480850194929391928390030190829087803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b505050506040513d6020811015610a2d57600080fd5b50506080810151815160408051868152602081019290925280516001600160a01b03909316927f2ce17f91452598d1f926f6cfe29a9d42a67ff82b45d1eb94e0634c27555c14da9281900390910190a250919050565b6001546001600160a01b03163314610acc5760405162461bcd60e51b81526004018080602001828103825260228152602001806119626022913960400191505060405180910390fd5b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5415801590610b2f57504260036000836001811115610b1257fe5b6001811115610b1d57fe5b81526020019081526020016000205411155b610b6a5760405162461bcd60e51b81526004018080602001828103825260238152602001806119176023913960400191505060405180910390fd5b610b73826117e1565b600060038180610629565b6203f48081565b6002602081905260009182526040909120805460018201549282015460038301546004840154600590940154929493919290916001600160a01b03908116911686565b6000806000610bda888888888861114a565b925092509250955095509592505050565b6001546001600160a01b03163314610c345760405162461bcd60e51b81526004018080602001828103825260228152602001806119626022913960400191505060405180910390fd5b6203f480420160036000836001811115610c4a57fe5b6001811115610c5557fe5b815260208101919091526040016000205550565b600061084a6a1a1601fc4ea7109e0000006104e7610c8686610d04565b610c908787611059565b90611059565b6001546001600160a01b03163314610cdf5760405162461bcd60e51b81526004018080602001828103825260228152602001806119626022913960400191505060405180910390fd5b60001960036000836001811115610c4a57fe5b60036020526000908152604090205481565b60006104ed60026104e7610d1785610720565b670de0b6b3a764000090611792565b6001546001600160a01b031681565b6000610d3f611886565b50600082815260026020818152604092839020835160c0810185528154815260018201549281019290925291820154928101929092526003810154606083015260048101546001600160a01b03908116608084018190526005909201541660a083015233908114610df7576040805162461bcd60e51b815260206004820152601e60248201527f466c61736850726f746f636f6c3a3a20494e56414c49445f5354414b45520000604482015290519081900360640190fd5b6040820151600090610e099042611792565b905080836020015111610e4d5760405162461bcd60e51b81526004018080602001828103825260258152602001806118cf6025913960400191505060405180910390fd5b6000610e628460000151838660200151611868565b8451909150811115610e7057fe5b83516001600160a01b038416600090815260046020526040902054610e9491611792565b6001600160a01b0384166000908152600460205260409020558351610eb99082611792565b60008781526002602081815260408084208481556001810185905592830184905560038301849055600480840180546001600160a01b0319908116909155600590940180549094169093558051630852cd8d60e31b8152928301869052519398507320398ad62bb2d930646d45a6d4292baa0b860c1f936342966c68936024808501948390030190829087803b158015610f5257600080fd5b505af1158015610f66573d6000803e3d6000fd5b505050506040513d6020811015610f7c57600080fd5b50506040805163a9059cbb60e01b81526001600160a01b03851660048201526024810187905290517320398ad62bb2d930646d45a6d4292baa0b860c1f9163a9059cbb9160448083019260209291908290030181600087803b158015610fe157600080fd5b505af1158015610ff5573d6000803e3d6000fd5b505050506040513d602081101561100b57600080fd5b5050604080518781526020810187905281516001600160a01b038616927f2ce17f91452598d1f926f6cfe29a9d42a67ff82b45d1eb94e0634c27555c14da928290030190a250505050919050565b600082611068575060006104ed565b8282028284828161107557fe5b041461084a576040805162461bcd60e51b81526020600482015260136024820152724d4154483a3a204d554c5f4f564552464c4f5760681b604482015290519081900360640190fd5b6000808211611114576040805162461bcd60e51b815260206004820152601760248201527f4d4154483a3a204449564953494f4e5f42595f5a45524f000000000000000000604482015290519081900360640190fd5b600082848161111f57fe5b04949350505050565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008088116111a3576040805162461bcd60e51b815260206004820152601e60248201527f466c61736850726f746f636f6c3a3a20494e56414c49445f414d4f554e540000604482015290519081900360640190fd5b6001600160a01b038616301415611201576040805162461bcd60e51b815260206004820152601f60248201527f466c61736850726f746f636f6c3a3a20494e56414c49445f4144445245535300604482015290519081900360640190fd5b61120a886104f3565b8711156112485760405162461bcd60e51b815260040180806020018281038252602881526020018061193a6028913960400191505060405180910390fd5b336000611255428a611744565b6001600160a01b03831660009081526004602052604090205490915061127b908b611744565b60046000846001600160a01b03166001600160a01b0316815260200190815260200160002081905550898989844260405160200180868152602001858152602001846001600160a01b031660601b8152601401836001600160a01b031660601b81526014018281526020019550505050505060405160208183030381529060405280519060200120925060006001600160a01b03166002600085815260200190815260200160002060040160009054906101000a90046001600160a01b03166001600160a01b031614611395576040805162461bcd60e51b815260206004820152601c60248201527f466c61736850726f746f636f6c3a3a205354414b455f45584953545300000000604482015290519081900360640190fd5b61139f8a8a610c69565b94506113aa856104ca565b604080516323b872dd60e01b81526001600160a01b0385166004820152306024820152604481018d905290519195507320398ad62bb2d930646d45a6d4292baa0b860c1f916323b872dd916064808201926020929091908290030181600087803b15801561141757600080fd5b505af115801561142b573d6000803e3d6000fd5b505050506040513d602081101561144157600080fd5b5050604080516340c10f1960e01b81526001600160a01b038a1660048201526024810187905290517320398ad62bb2d930646d45a6d4292baa0b860c1f916340c10f199160448083019260209291908290030181600087803b1580156114a657600080fd5b505af11580156114ba573d6000803e3d6000fd5b505050506040513d60208110156114d057600080fd5b5050600154604080516340c10f1960e01b81526001600160a01b03909216600483015260248201869052517320398ad62bb2d930646d45a6d4292baa0b860c1f916340c10f199160448083019260209291908290030181600087803b15801561153857600080fd5b505af115801561154c573d6000803e3d6000fd5b505050506040513d602081101561156257600080fd5b50506040805160c0810182528b815260208181018c8152828401858152606084018a81526001600160a01b03808916608087019081528f821660a0880181815260008d8152600298899052999099209751885594516001880155925194860194909455516003850155516004840180549184166001600160a01b0319928316179055935160059093018054939092169290931691909117905561160490611880565b156116d957876001600160a01b0316632cbff446848c8489878d8d6040518863ffffffff1660e01b815260040180888152602001878152602001868152602001858152602001846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505098505050505050505050602060405180830381600087803b1580156116ac57600080fd5b505af11580156116c0573d6000803e3d6000fd5b505050506040513d60208110156116d657600080fd5b50505b60408051848152602081018c90528082018b9052606081018390526080810187905290516001600160a01b03808b1692908516917f8872a0bfe035dd55f2341f67aa0f9a8196bb3f97e132b6d3cb2f53f91aaa93f99181900360a00190a35050955095509592505050565b808201828110156104ed576040805162461bcd60e51b81526020600482015260136024820152724d4154483a3a204144445f4f564552464c4f5760681b604482015290519081900360640190fd5b808203828111156104ed576040805162461bcd60e51b81526020600482015260146024820152734d4154483a3a205355425f554e444552464c4f5760601b604482015290519081900360640190fd5b6107d08111156118225760405162461bcd60e51b81526004018080602001828103825260238152602001806118f46023913960400191505060405180910390fd5b6107d08111156118635760405162461bcd60e51b81526004018080602001828103825260238152602001806118f46023913960400191505060405180910390fd5b600055565b6000611878826104e78686611059565b949350505050565b3b151590565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152509056fe466c6173682050726f746f636f6c3a3a20494e56414c49445f554e5354414b455f54494d45466c61736850726f746f636f6c3a3a20494e56414c49445f4d415443485f524154494f466c61736850726f746f636f6c3a3a2046554e4354494f4e5f54494d454c4f434b4544466c61736850726f746f636f6c3a3a204d41585f5354414b455f504552494f445f45584345454453466c61736850726f746f636f6c3a3a204e4f545f4d415443485f5245434549564552a26469706673582212206dc5d6153199f30c9e7dfd6cff75014faddcff6959bde4c24a51e128a2010df564736f6c63430007040033

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

000000000000000000000000842f8f6fb524996d0b660621da895166e1cea69100000000000000000000000000000000000000000000000000000000000005dc

-----Decoded View---------------
Arg [0] : _initialMatchReceiver (address): 0x842f8f6fB524996d0b660621DA895166E1ceA691
Arg [1] : _initialMatchRatio (uint256): 1500

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000842f8f6fb524996d0b660621da895166e1cea691
Arg [1] : 00000000000000000000000000000000000000000000000000000000000005dc


Deployed Bytecode Sourcemap

5695:8236:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12706:154;;;;;;;;;;;;;;;;-1:-1:-1;12706:154:0;;:::i;:::-;;;;;;;;;;;;;;;;13520:181;;;;;;;;;;;;;;;;-1:-1:-1;13520:181:0;;:::i;6061:89::-;;;:::i;:::-;;;;-1:-1:-1;;;;;6061:89:0;;;;;;;;;;;;;;7833:290;;;;;;;;;;;;;;;;-1:-1:-1;7833:290:0;-1:-1:-1;;;;;7833:290:0;;:::i;:::-;;6541:52;;;;;;;;;;;;;;;;-1:-1:-1;6541:52:0;-1:-1:-1;;;;;6541:52:0;;:::i;9224:551::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9224:551:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9224:551:0;;-1:-1:-1;9224:551:0;-1:-1:-1;9224:551:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;6332:34;;;:::i;13242:270::-;;;;;;;;;;;;;;;;-1:-1:-1;13242:270:0;;:::i;11378:469::-;;;;;;;;;;;;;;;;-1:-1:-1;11378:469:0;;:::i;8254:272::-;;;;;;;;;;;;;;;;-1:-1:-1;8254:272:0;;:::i;6004:50::-;;;:::i;6419:48::-;;;;;;;;;;;;;;;;-1:-1:-1;6419:48:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6419:48:0;;;;;;;;;;;;;;;;;;;;;8875:341;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8875:341:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8875:341:0;;-1:-1:-1;8875:341:0;-1:-1:-1;8875:341:0;:::i;7659:166::-;;;;;;;;;;;;;;;;-1:-1:-1;7659:166:0;;;;:::i;12868:204::-;;;;;;;;;;;;;;;;-1:-1:-1;12868:204:0;;;;;;;:::i;7496:155::-;;;;;;;;;;;;;;;;-1:-1:-1;7496:155:0;;;;:::i;6474:60::-;;;;;;;;;;;;;;;;-1:-1:-1;6474:60:0;;;;:::i;13080:154::-;;;;;;;;;;;;;;;;-1:-1:-1;13080:154:0;;:::i;6373:37::-;;;:::i;11855:843::-;;;;;;;;;;;;;;;;-1:-1:-1;11855:843:0;;:::i;12706:154::-;12785:7;12812:40;12846:5;12812:29;12830:10;;12812:13;:17;;:29;;;;:::i;:::-;:33;;:40::i;:::-;12805:47;12706:154;-1:-1:-1;;12706:154:0:o;13520:181::-;13602:7;13629:64;13675:17;13682:9;13675:6;:17::i;:::-;13629:41;6255:4;6312:11;13629:22;:41::i;6061:89::-;6108:42;6061:89;:::o;7833:290::-;6979:13;;-1:-1:-1;;;;;6979:13:0;6965:10;:27;6957:74;;;;-1:-1:-1;;;6957:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7968:34:::1;7144:25;::::0;;;:8:::1;:25;::::0;;;:30;;::::1;::::0;:78:::1;;;7207:15;7178:8;:25;7187:15;7178:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;7144:78;7122:163;;;;-1:-1:-1::0;;;7122:163:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8020:36:::2;8038:17;8020;:36::i;:::-;8114:1;8067:8;8114:1:::0;8076:34:::2;8067:44;;;;;;;;;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;8067:44:0;:48;-1:-1:-1;;7833:290:0:o;6541:52::-;;;;;;;;;;;;;:::o;9224:551::-;9605:100;;;-1:-1:-1;;;9605:100:0;;9637:10;9605:100;;;;9657:4;9605:100;;;;-1:-1:-1;;9605:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9526:7;;;;;;6108:42;;9605:31;;:100;;;;;9526:7;;9605:100;;;;;;;;9526:7;6108:42;9605:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9723:44;9730:9;9741:7;9750:9;9761:5;;9723:6;:44::i;:::-;9716:51;;;;;;9224:551;;;;;;;;;;;;;:::o;6332:34::-;;;;:::o;13242:270::-;13320:7;13340:14;13357:64;13411:9;6108:42;-1:-1:-1;;;;;13357:34:0;;13400:4;13357:49;;;;;;;;;;;;;-1:-1:-1;;;;;13357:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13357:49:0;;:53;:64::i;:::-;13340:81;;13439:65;6108:42;-1:-1:-1;;;;;13465:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13465:38:0;13439:21;:6;6197:4;13439:10;:21::i;:65::-;13432:72;13242:270;-1:-1:-1;;;13242:270:0:o;11378:469::-;11435:22;11470:14;;:::i;:::-;-1:-1:-1;11487:11:0;;;;:6;:11;;;;;;;;;11470:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11470:28:0;;;;;;;;;;;;;;;;;;;;11517:15;:32;;11509:76;;;;;-1:-1:-1;;;11509:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11640:10;;11626:8;;;;-1:-1:-1;;;;;11617:18:0;11640:10;11617:18;;;:8;:18;;;;;;:34;;:22;:34::i;:::-;11605:8;;;;;-1:-1:-1;;;;;11596:18:0;;;;;;;:8;:18;;;;;;;;:55;;;;11679:10;;11707:11;;;:6;:11;;;;;;11700:18;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11700:18:0;;;;;;;;;;;;;;;;;11763:8;;11729:59;;-1:-1:-1;;;11729:59:0;;;;;;;;;;;;;;;;;;;11679:10;;-1:-1:-1;6108:42:0;;11729:33;;:59;;;;;11596:18;;11729:59;;;;;;;;;6108:42;11729:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11830:8:0;;;;11818:10;;11804:35;;;;;;11729:59;11804:35;;;;;;;;-1:-1:-1;;;;;11804:35:0;;;;;;;;;;;;;;11378:469;;;;:::o;8254:272::-;6979:13;;-1:-1:-1;;;;;6979:13:0;6965:10;:27;6957:74;;;;-1:-1:-1;;;6957:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8383:31:::1;7144:25:::0;;;:8:::1;:25;::::0;;;:30;;::::1;::::0;:78:::1;;;7207:15;7178:8;:25;7187:15;7178:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;7144:78;7122:163;;;;-1:-1:-1::0;;;7122:163:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8432:30:::2;8447:14;8432;:30::i;:::-;8517:1;8473:8;8517:1:::0;;8473:41:::2;::::0;6004:50;6048:6;6004:50;:::o;6419:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6419:48:0;;;;;;:::o;8875:341::-;9078:7;9100;9122;9164:44;9171:9;9182:7;9191:9;9202:5;;9164:6;:44::i;:::-;9157:51;;;;;;8875:341;;;;;;;;;:::o;7659:166::-;6979:13;;-1:-1:-1;;;;;6979:13:0;6965:10;:27;6957:74;;;;-1:-1:-1;;;6957:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6048:6:::1;7791:15;:26;7763:8;:25;7772:15;7763:25;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;7763:25:0;:54;-1:-1:-1;7659:166:0:o;12868:204::-;12957:7;12984:80;13034:29;12984:45;13011:17;13018:9;13011:6;:17::i;:::-;12984:22;:9;12998:7;12984:13;:22::i;:::-;:26;;:45::i;7496:155::-;6979:13;;-1:-1:-1;;;;;6979:13:0;6965:10;:27;6957:74;;;;-1:-1:-1;;;6957:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7598:8:0::1;:25;7607:15;7598:25;;;;;;;6474:60:::0;;;;;;;;;;;;;:::o;13080:154::-;13145:7;13172:54;13224:1;13173:45;13187:30;13207:9;13187:19;:30::i;:::-;6197:4;;13173:13;:45::i;6373:37::-;;;-1:-1:-1;;;;;6373:37:0;;:::o;11855:843::-;11917:22;11952:14;;:::i;:::-;-1:-1:-1;11969:11:0;;;;:6;:11;;;;;;;;;11952:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11952:28:0;;;;;;;;;;;;;;;;;;;12008:10;;12037:18;;12029:61;;;;;-1:-1:-1;;;12029:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12126:13;;;;12101:21;;12126:34;;12144:15;12126:17;:34::i;:::-;12101:60;;12191:13;12180:1;:8;;;:24;12172:74;;;;-1:-1:-1;;;12172:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12257:18;12278:51;12293:1;:10;;;12305:13;12320:1;:8;;;12278:14;:51::i;:::-;12361:10;;12257:72;;-1:-1:-1;12347:24:0;;;12340:32;;;;12423:10;;-1:-1:-1;;;;;12402:16:0;;12423:10;12402:16;;;:8;:16;;;;;;:32;;:20;:32::i;:::-;-1:-1:-1;;;;;12383:16:0;;;;;;:8;:16;;;;;:51;12462:10;;:26;;12477:10;12462:14;:26::i;:::-;12506:11;;;;:6;:11;;;;;;;;12499:18;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12499:18:0;;;;;;;;;;;;;;;;;;12528:41;;-1:-1:-1;;;12528:41:0;;;;;;;;;12445:43;;-1:-1:-1;6108:42:0;;12528:29;;:41;;;;;;;;;;;;6108:42;12528:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12580:57:0;;;-1:-1:-1;;;12580:57:0;;-1:-1:-1;;;;;12580:57:0;;;;;;;;;;;;;;6108:42;;12580:33;;:57;;;;;12528:41;;12580:57;;;;;;;-1:-1:-1;6108:42:0;12580:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12653:37:0;;;;;;12580:57;12653:37;;;;;;;-1:-1:-1;;;;;12653:37:0;;;;;;;;;;;11855:843;;;;;;;:::o;3897:457::-;3955:7;4200:6;4196:47;;-1:-1:-1;4230:1:0;4223:8;;4196:47;4267:5;;;4271:1;4267;:5;:1;4291:5;;;;;:10;4283:42;;;;;-1:-1:-1;;;4283:42:0;;;;;;;;;;;;-1:-1:-1;;;4283:42:0;;;;;;;;;;;;;;4362:263;4420:7;4452:1;4448;:5;4440:41;;;;;-1:-1:-1;;;4440:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4492:9;4508:1;4504;:5;;;;;;;4362:263;-1:-1:-1;;;;4362:263:0:o;8131:115::-;8205:13;:33;;-1:-1:-1;;;;;;8205:33:0;-1:-1:-1;;;;;8205:33:0;;;;;;;;;;8131:115::o;9783:1587::-;9969:20;10004:21;10040:10;10098:1;10086:9;:13;10078:56;;;;;-1:-1:-1;;;10078:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10153:26:0;;10174:4;10153:26;;10145:70;;;;;-1:-1:-1;;;10145:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10245:34;10269:9;10245:23;:34::i;:::-;10234:7;:45;;10226:98;;;;-1:-1:-1;;;10226:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10354:10;10337:14;10398:28;:15;10418:7;10398:19;:28::i;:::-;-1:-1:-1;;;;;10456:16:0;;;;;;:8;:16;;;;;;10377:49;;-1:-1:-1;10456:31:0;;10477:9;10456:20;:31::i;:::-;10437:8;:16;10446:6;-1:-1:-1;;;;;10437:16:0;-1:-1:-1;;;;;10437:16:0;;;;;;;;;;;;:50;;;;10532:9;10543:7;10552:9;10563:6;10571:15;10515:72;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10515:72:0;;;;;;;;-1:-1:-1;;;;;10515:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10505:83;;;;;;10500:88;;10638:1;-1:-1:-1;;;;;10609:31:0;:6;:10;10616:2;10609:10;;;;;;;;;;;:17;;;;;;;;;;-1:-1:-1;;;;;10609:17:0;-1:-1:-1;;;;;10609:31:0;;10601:72;;;;;-1:-1:-1;;;10601:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10701:33;10715:9;10726:7;10701:13;:33::i;:::-;10686:48;;10761:30;10778:12;10761:16;:30::i;:::-;10804:71;;;-1:-1:-1;;;10804:71:0;;-1:-1:-1;;;;;10804:71:0;;;;;;10858:4;10804:71;;;;;;;;;;;;10745:46;;-1:-1:-1;6108:42:0;;10804:37;;:71;;;;;;;;;;;;;;;-1:-1:-1;6108:42:0;10804:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10888:54:0;;;-1:-1:-1;;;10888:54:0;;-1:-1:-1;;;;;10888:54:0;;;;;;;;;;;;;;6108:42;;10888:29;;:54;;;;;10804:71;;10888:54;;;;;;;-1:-1:-1;6108:42:0;10888:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10983:13:0;;10953:59;;;-1:-1:-1;;;10953:59:0;;-1:-1:-1;;;;;10983:13:0;;;10953:59;;;;;;;;;;;6108:42;;10953:29;;:59;;;;;10888:54;;10953:59;;;;;;;-1:-1:-1;6108:42:0;10953:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11038:70:0;;;;;;;;;;;10953:59;11038:70;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11038:70:0;;;;;;;;;;;;;;;;;;-1:-1:-1;11025:10:0;;;:6;:10;;;;;;;;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11025:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11125:22;;:20;:22::i;:::-;11121:149;;;11179:9;-1:-1:-1;;;;;11164:38:0;;11203:2;11207:9;11218:10;11230:12;11244:6;11252:5;;11164:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11164:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11121:149:0;11287:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11287:75:0;;;;;;;;;;;;;;;;;9783:1587;;;;;;;;;;;:::o;3608:136::-;3701:5;;;3696:16;;;;3688:48;;;;;-1:-1:-1;;;3688:48:0;;;;;;;;;;;;-1:-1:-1;;;3688:48:0;;;;;;;;;;;;;;3752:137;3845:5;;;3840:16;;;;3832:49;;;;;-1:-1:-1;;;3832:49:0;;;;;;;;;;;;-1:-1:-1;;;3832:49:0;;;;;;;;;;;;;;8534:333;8651:4;8633:14;:22;;8602:93;;;;-1:-1:-1;;;8602:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8777:4;8759:14;:22;;8751:70;;;;-1:-1:-1;;;8751:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8832:10;:27;8534:333::o;13709:219::-;13850:7;13877:43;13909:10;13877:27;:7;13889:14;13877:11;:27::i;:43::-;13870:50;13709:219;-1:-1:-1;;;;13709:219:0:o;5242:444::-;5622:20;5670:8;;;5242:444::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://6dc5d6153199f30c9e7dfd6cff75014faddcff6959bde4c24a51e128a2010df5

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.