ETH Price: $3,809.12 (+4.25%)

Contract

0x6b0C7D013cC0B461490287Cc20AA9f34f950a6a6
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw154200272022-08-27 6:30:49837 days ago1661581849IN
0x6b0C7D01...4f950a6a6
0 ETH0.002306838.24093555
Withdraw154036982022-08-24 15:31:52840 days ago1661355112IN
0x6b0C7D01...4f950a6a6
0 ETH0.0072055428.01850821
Claim All154033002022-08-24 13:56:08840 days ago1661349368IN
0x6b0C7D01...4f950a6a6
0 ETH0.00252888.78462258
Claim All153276902022-08-12 15:10:07852 days ago1660317007IN
0x6b0C7D01...4f950a6a6
0 ETH0.0062376720.78491805
Withdraw153276852022-08-12 15:09:28852 days ago1660316968IN
0x6b0C7D01...4f950a6a6
0 ETH0.0071121525.40745319
Claim All152049002022-07-24 10:54:58871 days ago1658660098IN
0x6b0C7D01...4f950a6a6
0 ETH0.001726145.69861094
Withdraw149261032022-06-08 10:04:18917 days ago1654682658IN
0x6b0C7D01...4f950a6a6
0 ETH0.0088107631.47557303
Withdraw148779642022-05-31 9:29:30925 days ago1653989370IN
0x6b0C7D01...4f950a6a6
0 ETH0.0047900717.11206706
Withdraw148401152022-05-25 5:39:17931 days ago1653457157IN
0x6b0C7D01...4f950a6a6
0 ETH0.0054641319.19178045
Withdraw148293222022-05-23 11:30:51933 days ago1653305451IN
0x6b0C7D01...4f950a6a6
0 ETH0.0041340514.76850825
Withdraw148042932022-05-19 9:50:13937 days ago1652953813IN
0x6b0C7D01...4f950a6a6
0 ETH0.00405215.75608785
Claim All148042882022-05-19 9:49:35937 days ago1652953775IN
0x6b0C7D01...4f950a6a6
0 ETH0.0054696519.00061976
Claim All148027672022-05-19 3:51:22937 days ago1652932282IN
0x6b0C7D01...4f950a6a6
0 ETH0.0048128517.00618364
Withdraw148027632022-05-19 3:50:29937 days ago1652932229IN
0x6b0C7D01...4f950a6a6
0 ETH0.0045527416.26421453
Withdraw148025292022-05-19 2:55:36937 days ago1652928936IN
0x6b0C7D01...4f950a6a6
0 ETH0.0076010629.5564682
Claim All148025262022-05-19 2:54:59937 days ago1652928899IN
0x6b0C7D01...4f950a6a6
0 ETH0.0095862233.30086849
Withdraw147712652022-05-14 3:13:56942 days ago1652498036IN
0x6b0C7D01...4f950a6a6
0 ETH0.010931539.05168943
Claim All145770632022-04-13 12:19:42973 days ago1649852382IN
0x6b0C7D01...4f950a6a6
0 ETH0.0083595529.53842748
Withdraw145770092022-04-13 12:07:33973 days ago1649851653IN
0x6b0C7D01...4f950a6a6
0 ETH0.0008414735.26877387
Withdraw145770072022-04-13 12:07:28973 days ago1649851648IN
0x6b0C7D01...4f950a6a6
0 ETH0.0108221238.66094509
Withdraw145521862022-04-09 15:00:22977 days ago1649516422IN
0x6b0C7D01...4f950a6a6
0 ETH0.0105847737.81302435
Withdraw145518662022-04-09 13:46:09977 days ago1649511969IN
0x6b0C7D01...4f950a6a6
0 ETH0.0073192526.14730007
Withdraw145191322022-04-04 10:58:18982 days ago1649069898IN
0x6b0C7D01...4f950a6a6
0 ETH0.0128144745.77839974
Withdraw144920452022-03-31 5:23:33986 days ago1648704213IN
0x6b0C7D01...4f950a6a6
0 ETH0.0006562727.50620364
Withdraw144920452022-03-31 5:23:33986 days ago1648704213IN
0x6b0C7D01...4f950a6a6
0 ETH0.0006562727.50620364
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:
Staking

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-26
*/

pragma solidity ^0.5.16;


// Copied from compound/EIP20Interface
/**
 * @title ERC 20 Token Standard Interface
 *  https://eips.ethereum.org/EIPS/eip-20
 */
interface EIP20Interface {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

    /**
      * @notice Get the total number of tokens in circulation
      * @return The supply of tokens
      */
    function totalSupply() external view returns (uint256);

    /**
     * @notice Gets the balance of the specified address
     * @param owner The address from which the balance will be retrieved
     * @return The balance
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
      * @notice Transfer `amount` tokens from `msg.sender` to `dst`
      * @param dst The address of the destination account
      * @param amount The number of tokens to transfer
      * @return Whether or not the transfer succeeded
      */
    function transfer(address dst, uint256 amount) external returns (bool success);

    /**
      * @notice Transfer `amount` tokens from `src` to `dst`
      * @param src The address of the source account
      * @param dst The address of the destination account
      * @param amount The number of tokens to transfer
      * @return Whether or not the transfer succeeded
      */
    function transferFrom(address src, address dst, uint256 amount) external returns (bool success);

    /**
      * @notice Approve `spender` to transfer up to `amount` from `src`
      * @dev This will overwrite the approval amount for `spender`
      *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
      * @param spender The address of the account which may transfer tokens
      * @param amount The number of tokens that are approved (-1 means infinite)
      * @return Whether or not the approval succeeded
      */
    function approve(address spender, uint256 amount) external returns (bool success);

    /**
      * @notice Get the current allowance from `owner` for `spender`
      * @param owner The address of the account which owns the tokens to be spent
      * @param spender The address of the account which may transfer tokens
      * @return The number of tokens allowed to be spent (-1 means infinite)
      */
    function allowance(address owner, address spender) external view returns (uint256 remaining);

    event Transfer(address indexed from, address indexed to, uint256 amount);
    event Approval(address indexed owner, address indexed spender, uint256 amount);
}

// Copied from compound/EIP20NonStandardInterface
/**
 * @title EIP20NonStandardInterface
 * @dev Version of ERC20 with no return values for `transfer` and `transferFrom`
 *  See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca
 */
interface EIP20NonStandardInterface {

    /**
     * @notice Get the total number of tokens in circulation
     * @return The supply of tokens
     */
    function totalSupply() external view returns (uint256);

    /**
     * @notice Gets the balance of the specified address
     * @param owner The address from which the balance will be retrieved
     * @return The balance
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    ///
    /// !!!!!!!!!!!!!!
    /// !!! NOTICE !!! `transfer` does not return a value, in violation of the ERC-20 specification
    /// !!!!!!!!!!!!!!
    ///

    /**
      * @notice Transfer `amount` tokens from `msg.sender` to `dst`
      * @param dst The address of the destination account
      * @param amount The number of tokens to transfer
      */
    function transfer(address dst, uint256 amount) external;

    ///
    /// !!!!!!!!!!!!!!
    /// !!! NOTICE !!! `transferFrom` does not return a value, in violation of the ERC-20 specification
    /// !!!!!!!!!!!!!!
    ///

    /**
      * @notice Transfer `amount` tokens from `src` to `dst`
      * @param src The address of the source account
      * @param dst The address of the destination account
      * @param amount The number of tokens to transfer
      */
    function transferFrom(address src, address dst, uint256 amount) external;

    /**
      * @notice Approve `spender` to transfer up to `amount` from `src`
      * @dev This will overwrite the approval amount for `spender`
      *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
      * @param spender The address of the account which may transfer tokens
      * @param amount The number of tokens that are approved
      * @return Whether or not the approval succeeded
      */
    function approve(address spender, uint256 amount) external returns (bool success);

    /**
      * @notice Get the current allowance from `owner` for `spender`
      * @param owner The address of the account which owns the tokens to be spent
      * @param spender The address of the account which may transfer tokens
      * @return The number of tokens allowed to be spent
      */
    function allowance(address owner, address spender) external view returns (uint256 remaining);

    event Transfer(address indexed from, address indexed to, uint256 amount);
    event Approval(address indexed owner, address indexed spender, uint256 amount);
}

// Copied from Compound/ExponentialNoError
/**
 * @title Exponential module for storing fixed-precision decimals
 * @author DeFil
 * @notice Exp is a struct which stores decimals with a fixed precision of 18 decimal places.
 *         Thus, if we wanted to store the 5.1, mantissa would store 5.1e18. That is:
 *         `Exp({mantissa: 5100000000000000000})`.
 */
contract ExponentialNoError {
    uint constant expScale = 1e18;
    uint constant doubleScale = 1e36;
    uint constant halfExpScale = expScale/2;
    uint constant mantissaOne = expScale;

    struct Exp {
        uint mantissa;
    }

    struct Double {
        uint mantissa;
    }

    /**
     * @dev Truncates the given exp to a whole number value.
     *      For example, truncate(Exp{mantissa: 15 * expScale}) = 15
     */
    function truncate(Exp memory exp) pure internal returns (uint) {
        // Note: We are not using careful math here as we're performing a division that cannot fail
        return exp.mantissa / expScale;
    }

    /**
     * @dev Multiply an Exp by a scalar, then truncate to return an unsigned integer.
     */
    function mul_ScalarTruncate(Exp memory a, uint scalar) pure internal returns (uint) {
        Exp memory product = mul_(a, scalar);
        return truncate(product);
    }

    /**
     * @dev Multiply an Exp by a scalar, truncate, then add an to an unsigned integer, returning an unsigned integer.
     */
    function mul_ScalarTruncateAddUInt(Exp memory a, uint scalar, uint addend) pure internal returns (uint) {
        Exp memory product = mul_(a, scalar);
        return add_(truncate(product), addend);
    }

    /**
     * @dev Checks if first Exp is less than second Exp.
     */
    function lessThanExp(Exp memory left, Exp memory right) pure internal returns (bool) {
        return left.mantissa < right.mantissa;
    }

    /**
     * @dev Checks if left Exp <= right Exp.
     */
    function lessThanOrEqualExp(Exp memory left, Exp memory right) pure internal returns (bool) {
        return left.mantissa <= right.mantissa;
    }

    /**
     * @dev Checks if left Exp > right Exp.
     */
    function greaterThanExp(Exp memory left, Exp memory right) pure internal returns (bool) {
        return left.mantissa > right.mantissa;
    }

    /**
     * @dev returns true if Exp is exactly zero
     */
    function isZeroExp(Exp memory value) pure internal returns (bool) {
        return value.mantissa == 0;
    }

    function safe224(uint n, string memory errorMessage) pure internal returns (uint224) {
        require(n < 2**224, errorMessage);
        return uint224(n);
    }

    function safe32(uint n, string memory errorMessage) pure internal returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function add_(Exp memory a, Exp memory b) pure internal returns (Exp memory) {
        return Exp({mantissa: add_(a.mantissa, b.mantissa)});
    }

    function add_(Double memory a, Double memory b) pure internal returns (Double memory) {
        return Double({mantissa: add_(a.mantissa, b.mantissa)});
    }

    function add_(uint a, uint b) pure internal returns (uint) {
        return add_(a, b, "addition overflow");
    }

    function add_(uint a, uint b, string memory errorMessage) pure internal returns (uint) {
        uint c = a + b;
        require(c >= a, errorMessage);
        return c;
    }

    function sub_(Exp memory a, Exp memory b) pure internal returns (Exp memory) {
        return Exp({mantissa: sub_(a.mantissa, b.mantissa)});
    }

    function sub_(Double memory a, Double memory b) pure internal returns (Double memory) {
        return Double({mantissa: sub_(a.mantissa, b.mantissa)});
    }

    function sub_(uint a, uint b) pure internal returns (uint) {
        return sub_(a, b, "subtraction underflow");
    }

    function sub_(uint a, uint b, string memory errorMessage) pure internal returns (uint) {
        require(b <= a, errorMessage);
        return a - b;
    }

    function mul_(Exp memory a, Exp memory b) pure internal returns (Exp memory) {
        return Exp({mantissa: mul_(a.mantissa, b.mantissa) / expScale});
    }

    function mul_(Exp memory a, uint b) pure internal returns (Exp memory) {
        return Exp({mantissa: mul_(a.mantissa, b)});
    }

    function mul_(uint a, Exp memory b) pure internal returns (uint) {
        return mul_(a, b.mantissa) / expScale;
    }

    function mul_(Double memory a, Double memory b) pure internal returns (Double memory) {
        return Double({mantissa: mul_(a.mantissa, b.mantissa) / doubleScale});
    }

    function mul_(Double memory a, uint b) pure internal returns (Double memory) {
        return Double({mantissa: mul_(a.mantissa, b)});
    }

    function mul_(uint a, Double memory b) pure internal returns (uint) {
        return mul_(a, b.mantissa) / doubleScale;
    }

    function mul_(uint a, uint b) pure internal returns (uint) {
        return mul_(a, b, "multiplication overflow");
    }

    function mul_(uint a, uint b, string memory errorMessage) pure internal returns (uint) {
        if (a == 0 || b == 0) {
            return 0;
        }
        uint c = a * b;
        require(c / a == b, errorMessage);
        return c;
    }

    function div_(Exp memory a, Exp memory b) pure internal returns (Exp memory) {
        return Exp({mantissa: div_(mul_(a.mantissa, expScale), b.mantissa)});
    }

    function div_(Exp memory a, uint b) pure internal returns (Exp memory) {
        return Exp({mantissa: div_(a.mantissa, b)});
    }

    function div_(uint a, Exp memory b) pure internal returns (uint) {
        return div_(mul_(a, expScale), b.mantissa);
    }

    function div_(Double memory a, Double memory b) pure internal returns (Double memory) {
        return Double({mantissa: div_(mul_(a.mantissa, doubleScale), b.mantissa)});
    }

    function div_(Double memory a, uint b) pure internal returns (Double memory) {
        return Double({mantissa: div_(a.mantissa, b)});
    }

    function div_(uint a, Double memory b) pure internal returns (uint) {
        return div_(mul_(a, doubleScale), b.mantissa);
    }

    function div_(uint a, uint b) pure internal returns (uint) {
        return div_(a, b, "divide by zero");
    }

    function div_(uint a, uint b, string memory errorMessage) pure internal returns (uint) {
        require(b > 0, errorMessage);
        return a / b;
    }

    function fraction(uint a, uint b) pure internal returns (Double memory) {
        return Double({mantissa: div_(mul_(a, doubleScale), b)});
    }
}

interface Distributor {
    // The asset to be distributed
    function asset() external view returns (address);

    // Return the accrued amount of account based on stored data
    function accruedStored(address account) external view returns (uint);

    // Accrue and distribute for caller, but not actually transfer assets to the caller
    // returns the new accrued amount
    function accrue() external returns (uint);

    // Claim asset, transfer the given amount assets to receiver
    function claim(address receiver, uint amount) external returns (uint);
}

contract Redistributor is Distributor, ExponentialNoError {
    /**
     * @notice The superior Distributor contract
     */
    Distributor public superior;

    // The accrued amount of this address in superior Distributor
    uint public superiorAccruedAmount;

    // The initial accrual index
    uint internal constant initialAccruedIndex = 1e36;

    // The last accrued block number
    uint public accrualBlockNumber;

    // The last accrued index
    uint public globalAccruedIndex;

    // Total count of shares.
    uint internal totalShares;

    struct AccountState {
        /// @notice The share of account
        uint share;
        // The last accrued index of account
        uint accruedIndex;
        /// @notice The accrued but not yet transferred to account
        uint accruedAmount;
    }

    // The AccountState for each account
    mapping(address => AccountState) internal accountStates;

    /*** Events ***/
    // Emitted when dfl is accrued
    event Accrued(uint amount, uint globalAccruedIndex);

    // Emitted when distribute to a account
    event Distributed(address account, uint amount, uint accruedIndex);

    // Emitted when account claims asset
    event Claimed(address account, address receiver, uint amount);

    // Emitted when account transfer asset
    event Transferred(address from, address to, uint amount);

    constructor(Distributor superior_) public {
        // set superior
        superior = superior_;
        // init accrued index
        globalAccruedIndex = initialAccruedIndex;
    }

    function asset() external view returns (address) {
        return superior.asset();
    }

    // Return the accrued amount of account based on stored data
    function accruedStored(address account) external view returns(uint) {
        uint storedGlobalAccruedIndex;
        if (totalShares == 0) {
            storedGlobalAccruedIndex = globalAccruedIndex;
        } else {
            uint superiorAccruedStored = superior.accruedStored(address(this));
            uint delta = sub_(superiorAccruedStored, superiorAccruedAmount);

            Double memory ratio = fraction(delta, totalShares);
            Double memory doubleGlobalAccruedIndex = add_(Double({mantissa: globalAccruedIndex}), ratio);
            storedGlobalAccruedIndex = doubleGlobalAccruedIndex.mantissa;
        }

        (, uint instantAccountAccruedAmount) = accruedStoredInternal(account, storedGlobalAccruedIndex);
        return instantAccountAccruedAmount;
    }

    // Return the accrued amount of account based on stored data
    function accruedStoredInternal(address account, uint withGlobalAccruedIndex) internal view returns(uint, uint) {
        AccountState memory state = accountStates[account];

        Double memory doubleGlobalAccruedIndex = Double({mantissa: withGlobalAccruedIndex});
        Double memory doubleAccountAccruedIndex = Double({mantissa: state.accruedIndex});
        if (doubleAccountAccruedIndex.mantissa == 0 && doubleGlobalAccruedIndex.mantissa > 0) {
            doubleAccountAccruedIndex.mantissa = initialAccruedIndex;
        }

        Double memory deltaIndex = sub_(doubleGlobalAccruedIndex, doubleAccountAccruedIndex);
        uint delta = mul_(state.share, deltaIndex);

        return (delta, add_(state.accruedAmount, delta));
    }

    function accrueInternal() internal {
        uint blockNumber = getBlockNumber();
        if (accrualBlockNumber == blockNumber) {
            return;
        }

        uint newSuperiorAccruedAmount = superior.accrue();
        if (totalShares == 0) {
            accrualBlockNumber = blockNumber;
            return;
        }

        uint delta = sub_(newSuperiorAccruedAmount, superiorAccruedAmount);

        Double memory ratio = fraction(delta, totalShares);
        Double memory doubleAccruedIndex = add_(Double({mantissa: globalAccruedIndex}), ratio);

        // update globalAccruedIndex
        globalAccruedIndex = doubleAccruedIndex.mantissa;
        superiorAccruedAmount = newSuperiorAccruedAmount;
        accrualBlockNumber = blockNumber;

        emit Accrued(delta, doubleAccruedIndex.mantissa);
    }

    /**
     * @notice accrue and returns accrued stored of msg.sender
     */
    function accrue() external returns (uint) {
        accrueInternal();

        (, uint instantAccountAccruedAmount) = accruedStoredInternal(msg.sender, globalAccruedIndex);
        return instantAccountAccruedAmount;
    }

    function distributeInternal(address account) internal {
        (uint delta, uint instantAccruedAmount) = accruedStoredInternal(account, globalAccruedIndex);

        AccountState storage state = accountStates[account];
        state.accruedIndex = globalAccruedIndex;
        state.accruedAmount = instantAccruedAmount;

        // emit Distributed event
        emit Distributed(account, delta, globalAccruedIndex);
    }

    function claim(address receiver, uint amount) external returns (uint) {
        address account = msg.sender;

        // keep fresh
        accrueInternal();
        distributeInternal(account);

        AccountState storage state = accountStates[account];
        require(amount <= state.accruedAmount, "claim: insufficient value");

        // claim from superior
        require(superior.claim(receiver, amount) == amount, "claim: amount mismatch");

        // update storage
        state.accruedAmount = sub_(state.accruedAmount, amount);
        superiorAccruedAmount = sub_(superiorAccruedAmount, amount);

        emit Claimed(account, receiver, amount);

        return amount;
    }

    function claimAll() external {
        address account = msg.sender;

        // accrue and distribute
        accrueInternal();
        distributeInternal(account);

        AccountState storage state = accountStates[account];
        uint amount = state.accruedAmount;

        // claim from superior
        require(superior.claim(account, amount) == amount, "claim: amount mismatch");

        // update storage
        state.accruedAmount = 0;
        superiorAccruedAmount = sub_(superiorAccruedAmount, amount);

        emit Claimed(account, account, amount);
    }

    function transfer(address to, uint amount) external {
        address from = msg.sender;

        // keep fresh
        accrueInternal();
        distributeInternal(from);

        AccountState storage fromState = accountStates[from];
        uint actualAmount = amount;
        if (actualAmount == 0) {
            actualAmount = fromState.accruedAmount;
        }
        require(fromState.accruedAmount >= actualAmount, "transfer: insufficient value");

        AccountState storage toState = accountStates[to];

        // update storage
        fromState.accruedAmount = sub_(fromState.accruedAmount, actualAmount);
        toState.accruedAmount = add_(toState.accruedAmount, actualAmount);

        emit Transferred(from, to, actualAmount);
    }

    function getBlockNumber() public view returns (uint) {
        return block.number;
    }
}

contract Staking is Redistributor {
    // The token to deposit
    address public property;

    /*** Events ***/
    // Event emitted when new property tokens is deposited
    event Deposit(address account, uint amount);

    // Event emitted when new property tokens is withdrawed
    event Withdraw(address account, uint amount);

    constructor(address property_, Distributor superior_) Redistributor(superior_) public {
        property = property_;
    }

    function totalDeposits() external view returns (uint) {
        return totalShares;
    }

    function accountState(address account) external view returns (uint, uint, uint) {
        AccountState memory state = accountStates[account];
        return (state.share, state.accruedIndex, state.accruedAmount);
    }

    // Deposit property tokens
    function deposit(uint amount) external returns (uint) {
        address account = msg.sender;

        // accrue & distribute
        accrueInternal();
        distributeInternal(account);

        // transfer property token in
        uint actualAmount = doTransferIn(account, amount);

        // update storage
        AccountState storage state = accountStates[account];
        totalShares = add_(totalShares, actualAmount);
        state.share = add_(state.share, actualAmount);

        emit Deposit(account, actualAmount);

        return actualAmount;
    }

    // Withdraw property tokens
    function withdraw(uint amount) external returns (uint) {
        address account = msg.sender;
        AccountState storage state = accountStates[account];
        require(state.share >= amount, "withdraw: insufficient value");

        // accrue & distribute
        accrueInternal();
        distributeInternal(account);

        // decrease total deposits
        totalShares = sub_(totalShares, amount);
        state.share = sub_(state.share, amount);

        // transfer property tokens back to account
        doTransferOut(account, amount);

        emit Withdraw(account, amount);

        return amount;
    }

    /*** Safe Token ***/

    /**
     * @dev Similar to EIP20 transfer, except it handles a False result from `transferFrom` and reverts in that case.
     *      This will revert due to insufficient balance or insufficient allowance.
     *      This function returns the actual amount received,
     *      which may be less than `amount` if there is a fee attached to the transfer.
     *
     *      Note: This wrapper safely handles non-standard ERC-20 tokens that do not return a value.
     *            See here: https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca
     */
    function doTransferIn(address from, uint amount) internal returns (uint) {
        EIP20NonStandardInterface token = EIP20NonStandardInterface(property);
        uint balanceBefore = EIP20Interface(property).balanceOf(address(this));
        token.transferFrom(from, address(this), amount);

        bool success;
        assembly {
            switch returndatasize()
                case 0 {                       // This is a non-standard ERC-20
                    success := not(0)          // set success to true
                }
                case 32 {                      // This is a compliant ERC-20
                    returndatacopy(0, 0, 32)
                    success := mload(0)        // Set `success = returndata` of external call
                }
                default {                      // This is an excessively non-compliant ERC-20, revert.
                    revert(0, 0)
                }
        }
        require(success, "TOKEN_TRANSFER_IN_FAILED");

        // Calculate the amount that was *actually* transferred
        uint balanceAfter = EIP20Interface(property).balanceOf(address(this));
        require(balanceAfter >= balanceBefore, "TOKEN_TRANSFER_IN_OVERFLOW");
        return balanceAfter - balanceBefore;   // underflow already checked above, just subtract
    }

    /**
     * @dev Similar to EIP20 transfer, except it handles a False success from `transfer` and returns an explanatory
     *      error code rather than reverting. If caller has not called checked protocol's balance, this may revert due to
     *      insufficient cash held in this contract. If caller has checked protocol's balance prior to this call, and verified
     *      it is >= amount, this should not revert in normal conditions.
     *
     *      Note: This wrapper safely handles non-standard ERC-20 tokens that do not return a value.
     *            See here: https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca
     */
    function doTransferOut(address to, uint amount) internal {
        EIP20NonStandardInterface token = EIP20NonStandardInterface(property);
        token.transfer(to, amount);

        bool success;
        assembly {
            switch returndatasize()
                case 0 {                      // This is a non-standard ERC-20
                    success := not(0)          // set success to true
                }
                case 32 {                     // This is a complaint ERC-20
                    returndatacopy(0, 0, 32)
                    success := mload(0)        // Set `success = returndata` of external call
                }
                default {                     // This is an excessively non-compliant ERC-20, revert.
                    revert(0, 0)
                }
        }
        require(success, "TOKEN_TRANSFER_OUT_FAILED");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"property_","type":"address"},{"internalType":"contract Distributor","name":"superior_","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"globalAccruedIndex","type":"uint256"}],"name":"Accrued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accruedIndex","type":"uint256"}],"name":"Distributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"accountState","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"accrualBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"accrue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"accruedStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"globalAccruedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"property","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"superior","outputs":[{"internalType":"contract Distributor","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"superiorAccruedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506040516114e63803806114e68339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039283166001600160a01b0319918216179091556ec097ce7bc90715b34b9f10000000006003556006805492909316911617905561145c8061008a6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80637d88209711610097578063b1e819c811610066578063b1e819c81461024c578063b6b55f2514610254578063d1058e5914610271578063f8ba4cff1461027957610100565b80637d882097146101e257806395f65898146101ea578063a9059cbb146101f2578063aad3ec961461022057610100565b806338d52e0f116100d357806338d52e0f146101a457806342cbb15c146101ac5780636bbcac92146101b45780636c540baf146101da57610100565b80630ec4c60114610105578063176fd3f014610149578063201075d81461016d5780632e1a7d4d14610187575b600080fd5b61012b6004803603602081101561011b57600080fd5b50356001600160a01b0316610281565b60408051938452602084019290925282820152519081900360600190f35b6101516102d6565b604080516001600160a01b039092168252519081900360200190f35b6101756102e5565b60408051918252519081900360200190f35b6101756004803603602081101561019d57600080fd5b50356102eb565b6101516103d7565b610175610457565b610175600480360360208110156101ca57600080fd5b50356001600160a01b031661045b565b610175610555565b61017561055b565b610151610561565b61021e6004803603604081101561020857600080fd5b506001600160a01b038135169060200135610570565b005b6101756004803603604081101561023657600080fd5b506001600160a01b038135169060200135610694565b610175610861565b6101756004803603602081101561026a57600080fd5b5035610867565b61021e61090d565b610175610a69565b600080600061028e6113f3565b505050506001600160a01b0316600090815260056020908152604091829020825160608101845281548082526001830154938201849052600290920154930183905292909190565b6006546001600160a01b031681565b60035481565b3360008181526005602052604081208054919291841115610353576040805162461bcd60e51b815260206004820152601c60248201527f77697468647261773a20696e73756666696369656e742076616c756500000000604482015290519081900360640190fd5b61035b610a88565b61036482610bd2565b61037060045485610c5a565b600455805461037f9085610c5a565b815561038b8285610c9b565b604080516001600160a01b03841681526020810186905281517f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364929181900390910190a1509192915050565b60008060009054906101000a90046001600160a01b03166001600160a01b03166338d52e0f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561042657600080fd5b505afa15801561043a573d6000803e3d6000fd5b505050506040513d602081101561045057600080fd5b5051905090565b4390565b600080600454600014156104725750600354610540565b60008054604080516335de564960e11b815230600482015290516001600160a01b0390921691636bbcac9291602480820192602092909190829003018186803b1580156104be57600080fd5b505afa1580156104d2573d6000803e3d6000fd5b505050506040513d60208110156104e857600080fd5b50516001549091506000906104fe908390610c5a565b9050610508611414565b61051482600454610d92565b905061051e611414565b610538604051806020016040528060035481525083610dd0565b519450505050505b600061054c8483610df5565b95945050505050565b60025481565b60045490565b6000546001600160a01b031681565b33610579610a88565b61058281610bd2565b6001600160a01b038116600090815260056020526040902082806105a7575060028101545b8082600201541015610600576040805162461bcd60e51b815260206004820152601c60248201527f7472616e736665723a20696e73756666696369656e742076616c756500000000604482015290519081900360640190fd5b6001600160a01b038516600090815260056020526040902060028301546106279083610c5a565b836002018190555061063d816002015483610edd565b6002820155604080516001600160a01b0380871682528816602082015280820184905290517fd1ba4ac2e2a11b5101f6cb4d978f514a155b421e8ec396d2d9abaf0bb02917ee9181900360600190a1505050505050565b60003361069f610a88565b6106a881610bd2565b6001600160a01b03811660009081526005602052604090206002810154841115610719576040805162461bcd60e51b815260206004820152601960248201527f636c61696d3a20696e73756666696369656e742076616c756500000000000000604482015290519081900360640190fd5b6000805460408051635569f64b60e11b81526001600160a01b0389811660048301526024820189905291518894929093169263aad3ec9692604480840193602093929083900390910190829087803b15801561077457600080fd5b505af1158015610788573d6000803e3d6000fd5b505050506040513d602081101561079e57600080fd5b5051146107eb576040805162461bcd60e51b81526020600482015260166024820152750c6d8c2d2da7440c2dadeeadce840dad2e6dac2e8c6d60531b604482015290519081900360640190fd5b6107f9816002015485610c5a565b600282015560015461080b9085610c5a565b600155604080516001600160a01b0380851682528716602082015280820186905290517ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839181900360600190a150919392505050565b60015481565b600033610872610a88565b61087b81610bd2565b60006108878285610f13565b6001600160a01b0383166000908152600560205260409020600454919250906108b09083610edd565b60045580546108bf9083610edd565b8155604080516001600160a01b03851681526020810184905281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a1509392505050565b33610916610a88565b61091f81610bd2565b6001600160a01b038082166000818152600560209081526040808320600281015484548351635569f64b60e11b81526004810197909752602487018290529251919690958695939091169363aad3ec969360448084019492938390030190829087803b15801561098e57600080fd5b505af11580156109a2573d6000803e3d6000fd5b505050506040513d60208110156109b857600080fd5b505114610a05576040805162461bcd60e51b81526020600482015260166024820152750c6d8c2d2da7440c2dadeeadce840dad2e6dac2e8c6d60531b604482015290519081900360640190fd5b60006002830155600154610a199082610c5a565b600155604080516001600160a01b038516808252602082015280820183905290517ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839181900360600190a1505050565b6000610a73610a88565b6000610a8133600354610df5565b9250505090565b6000610a92610457565b9050806002541415610aa45750610bd0565b60008060009054906101000a90046001600160a01b03166001600160a01b031663f8ba4cff6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610af557600080fd5b505af1158015610b09573d6000803e3d6000fd5b505050506040513d6020811015610b1f57600080fd5b5051600454909150610b345750600255610bd0565b6000610b4282600154610c5a565b9050610b4c611414565b610b5882600454610d92565b9050610b62611414565b610b7c604051806020016040528060035481525083610dd0565b805160038190556001869055600287905560408051868152602081019290925280519293507fe0c50b11a6cc6d75470f28bd76d20c8d223c626324486a273eefadf6c6e973a792918290030190a150505050505b565b600080610be183600354610df5565b6001600160a01b0385166000818152600560209081526040918290206003805460018301556002820186905554835194855291840186905283830191909152905193955091935090917f60ce3cc2d133631eac66a476f14997a9fa682bd05a60dd993cf02285822d78d89181900360600190a150505050565b6000610c948383604051806040016040528060158152602001747375627472616374696f6e20756e646572666c6f7760581b81525061115d565b9392505050565b6006546040805163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905291519190921691829163a9059cbb9160448082019260009290919082900301818387803b158015610cf357600080fd5b505af1158015610d07573d6000803e3d6000fd5b5050505060003d60008114610d235760208114610d2d57600080fd5b6000199150610d39565b60206000803e60005191505b5080610d8c576040805162461bcd60e51b815260206004820152601960248201527f544f4b454e5f5452414e534645525f4f55545f4641494c454400000000000000604482015290519081900360640190fd5b50505050565b610d9a611414565b6040518060200160405280610dc7610dc1866ec097ce7bc90715b34b9f10000000006111f4565b85611236565b90529392505050565b610dd8611414565b6040518060200160405280610dc785600001518560000151610edd565b600080610e006113f3565b506001600160a01b0384166000908152600560209081526040918290208251606081018452815481526001820154928101929092526002015491810191909152610e48611414565b506040805160208101909152848152610e5f611414565b5060408051602080820190925290830151808252158015610e805750815115155b15610e98576ec097ce7bc90715b34b9f100000000081525b610ea0611414565b610eaa8383611269565b90506000610ebc85600001518361128e565b905080610ecd866040015183610edd565b9650965050505050509250929050565b6000610c948383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b8152506112bd565b600654604080516370a0823160e01b815230600482015290516000926001600160a01b031691839183916370a08231916024808301926020929190829003018186803b158015610f6257600080fd5b505afa158015610f76573d6000803e3d6000fd5b505050506040513d6020811015610f8c57600080fd5b5051604080516323b872dd60e01b81526001600160a01b038881166004830152306024830152604482018890529151929350908416916323b872dd9160648082019260009290919082900301818387803b158015610fe957600080fd5b505af1158015610ffd573d6000803e3d6000fd5b5050505060003d60008114611019576020811461102357600080fd5b600019915061102f565b60206000803e60005191505b5080611082576040805162461bcd60e51b815260206004820152601860248201527f544f4b454e5f5452414e534645525f494e5f4641494c45440000000000000000604482015290519081900360640190fd5b600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156110cd57600080fd5b505afa1580156110e1573d6000803e3d6000fd5b505050506040513d60208110156110f757600080fd5b5051905082811015611150576040805162461bcd60e51b815260206004820152601a60248201527f544f4b454e5f5452414e534645525f494e5f4f564552464c4f57000000000000604482015290519081900360640190fd5b9190910395945050505050565b600081848411156111ec5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156111b1578181015183820152602001611199565b50505050905090810190601f1680156111de5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000610c9483836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f7700000000000000000081525061131b565b6000610c9483836040518060400160405280600e81526020016d646976696465206279207a65726f60901b815250611391565b611271611414565b6040518060200160405280610dc785600001518560000151610c5a565b60006ec097ce7bc90715b34b9f10000000006112ae8484600001516111f4565b816112b557fe5b049392505050565b600083830182858210156113125760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156111b1578181015183820152602001611199565b50949350505050565b6000831580611328575082155b1561133557506000610c94565b8383028385828161134257fe5b041483906113125760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156111b1578181015183820152602001611199565b600081836113e05760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156111b1578181015183820152602001611199565b508284816113ea57fe5b04949350505050565b60405180606001604052806000815260200160008152602001600081525090565b604051806020016040528060008152509056fea265627a7a72315820dcfe5fda2275a269dd33b870b306cbd34d53a4b91a877aa06f4f15c5b2272b1e64736f6c63430005110032000000000000000000000000d372a3221021df72eda38f77117d3a95f057e163000000000000000000000000e67ae15cbb7f6b009f12c4c8999ca3ff4c39463d

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101005760003560e01c80637d88209711610097578063b1e819c811610066578063b1e819c81461024c578063b6b55f2514610254578063d1058e5914610271578063f8ba4cff1461027957610100565b80637d882097146101e257806395f65898146101ea578063a9059cbb146101f2578063aad3ec961461022057610100565b806338d52e0f116100d357806338d52e0f146101a457806342cbb15c146101ac5780636bbcac92146101b45780636c540baf146101da57610100565b80630ec4c60114610105578063176fd3f014610149578063201075d81461016d5780632e1a7d4d14610187575b600080fd5b61012b6004803603602081101561011b57600080fd5b50356001600160a01b0316610281565b60408051938452602084019290925282820152519081900360600190f35b6101516102d6565b604080516001600160a01b039092168252519081900360200190f35b6101756102e5565b60408051918252519081900360200190f35b6101756004803603602081101561019d57600080fd5b50356102eb565b6101516103d7565b610175610457565b610175600480360360208110156101ca57600080fd5b50356001600160a01b031661045b565b610175610555565b61017561055b565b610151610561565b61021e6004803603604081101561020857600080fd5b506001600160a01b038135169060200135610570565b005b6101756004803603604081101561023657600080fd5b506001600160a01b038135169060200135610694565b610175610861565b6101756004803603602081101561026a57600080fd5b5035610867565b61021e61090d565b610175610a69565b600080600061028e6113f3565b505050506001600160a01b0316600090815260056020908152604091829020825160608101845281548082526001830154938201849052600290920154930183905292909190565b6006546001600160a01b031681565b60035481565b3360008181526005602052604081208054919291841115610353576040805162461bcd60e51b815260206004820152601c60248201527f77697468647261773a20696e73756666696369656e742076616c756500000000604482015290519081900360640190fd5b61035b610a88565b61036482610bd2565b61037060045485610c5a565b600455805461037f9085610c5a565b815561038b8285610c9b565b604080516001600160a01b03841681526020810186905281517f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364929181900390910190a1509192915050565b60008060009054906101000a90046001600160a01b03166001600160a01b03166338d52e0f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561042657600080fd5b505afa15801561043a573d6000803e3d6000fd5b505050506040513d602081101561045057600080fd5b5051905090565b4390565b600080600454600014156104725750600354610540565b60008054604080516335de564960e11b815230600482015290516001600160a01b0390921691636bbcac9291602480820192602092909190829003018186803b1580156104be57600080fd5b505afa1580156104d2573d6000803e3d6000fd5b505050506040513d60208110156104e857600080fd5b50516001549091506000906104fe908390610c5a565b9050610508611414565b61051482600454610d92565b905061051e611414565b610538604051806020016040528060035481525083610dd0565b519450505050505b600061054c8483610df5565b95945050505050565b60025481565b60045490565b6000546001600160a01b031681565b33610579610a88565b61058281610bd2565b6001600160a01b038116600090815260056020526040902082806105a7575060028101545b8082600201541015610600576040805162461bcd60e51b815260206004820152601c60248201527f7472616e736665723a20696e73756666696369656e742076616c756500000000604482015290519081900360640190fd5b6001600160a01b038516600090815260056020526040902060028301546106279083610c5a565b836002018190555061063d816002015483610edd565b6002820155604080516001600160a01b0380871682528816602082015280820184905290517fd1ba4ac2e2a11b5101f6cb4d978f514a155b421e8ec396d2d9abaf0bb02917ee9181900360600190a1505050505050565b60003361069f610a88565b6106a881610bd2565b6001600160a01b03811660009081526005602052604090206002810154841115610719576040805162461bcd60e51b815260206004820152601960248201527f636c61696d3a20696e73756666696369656e742076616c756500000000000000604482015290519081900360640190fd5b6000805460408051635569f64b60e11b81526001600160a01b0389811660048301526024820189905291518894929093169263aad3ec9692604480840193602093929083900390910190829087803b15801561077457600080fd5b505af1158015610788573d6000803e3d6000fd5b505050506040513d602081101561079e57600080fd5b5051146107eb576040805162461bcd60e51b81526020600482015260166024820152750c6d8c2d2da7440c2dadeeadce840dad2e6dac2e8c6d60531b604482015290519081900360640190fd5b6107f9816002015485610c5a565b600282015560015461080b9085610c5a565b600155604080516001600160a01b0380851682528716602082015280820186905290517ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839181900360600190a150919392505050565b60015481565b600033610872610a88565b61087b81610bd2565b60006108878285610f13565b6001600160a01b0383166000908152600560205260409020600454919250906108b09083610edd565b60045580546108bf9083610edd565b8155604080516001600160a01b03851681526020810184905281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a1509392505050565b33610916610a88565b61091f81610bd2565b6001600160a01b038082166000818152600560209081526040808320600281015484548351635569f64b60e11b81526004810197909752602487018290529251919690958695939091169363aad3ec969360448084019492938390030190829087803b15801561098e57600080fd5b505af11580156109a2573d6000803e3d6000fd5b505050506040513d60208110156109b857600080fd5b505114610a05576040805162461bcd60e51b81526020600482015260166024820152750c6d8c2d2da7440c2dadeeadce840dad2e6dac2e8c6d60531b604482015290519081900360640190fd5b60006002830155600154610a199082610c5a565b600155604080516001600160a01b038516808252602082015280820183905290517ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839181900360600190a1505050565b6000610a73610a88565b6000610a8133600354610df5565b9250505090565b6000610a92610457565b9050806002541415610aa45750610bd0565b60008060009054906101000a90046001600160a01b03166001600160a01b031663f8ba4cff6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610af557600080fd5b505af1158015610b09573d6000803e3d6000fd5b505050506040513d6020811015610b1f57600080fd5b5051600454909150610b345750600255610bd0565b6000610b4282600154610c5a565b9050610b4c611414565b610b5882600454610d92565b9050610b62611414565b610b7c604051806020016040528060035481525083610dd0565b805160038190556001869055600287905560408051868152602081019290925280519293507fe0c50b11a6cc6d75470f28bd76d20c8d223c626324486a273eefadf6c6e973a792918290030190a150505050505b565b600080610be183600354610df5565b6001600160a01b0385166000818152600560209081526040918290206003805460018301556002820186905554835194855291840186905283830191909152905193955091935090917f60ce3cc2d133631eac66a476f14997a9fa682bd05a60dd993cf02285822d78d89181900360600190a150505050565b6000610c948383604051806040016040528060158152602001747375627472616374696f6e20756e646572666c6f7760581b81525061115d565b9392505050565b6006546040805163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905291519190921691829163a9059cbb9160448082019260009290919082900301818387803b158015610cf357600080fd5b505af1158015610d07573d6000803e3d6000fd5b5050505060003d60008114610d235760208114610d2d57600080fd5b6000199150610d39565b60206000803e60005191505b5080610d8c576040805162461bcd60e51b815260206004820152601960248201527f544f4b454e5f5452414e534645525f4f55545f4641494c454400000000000000604482015290519081900360640190fd5b50505050565b610d9a611414565b6040518060200160405280610dc7610dc1866ec097ce7bc90715b34b9f10000000006111f4565b85611236565b90529392505050565b610dd8611414565b6040518060200160405280610dc785600001518560000151610edd565b600080610e006113f3565b506001600160a01b0384166000908152600560209081526040918290208251606081018452815481526001820154928101929092526002015491810191909152610e48611414565b506040805160208101909152848152610e5f611414565b5060408051602080820190925290830151808252158015610e805750815115155b15610e98576ec097ce7bc90715b34b9f100000000081525b610ea0611414565b610eaa8383611269565b90506000610ebc85600001518361128e565b905080610ecd866040015183610edd565b9650965050505050509250929050565b6000610c948383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b8152506112bd565b600654604080516370a0823160e01b815230600482015290516000926001600160a01b031691839183916370a08231916024808301926020929190829003018186803b158015610f6257600080fd5b505afa158015610f76573d6000803e3d6000fd5b505050506040513d6020811015610f8c57600080fd5b5051604080516323b872dd60e01b81526001600160a01b038881166004830152306024830152604482018890529151929350908416916323b872dd9160648082019260009290919082900301818387803b158015610fe957600080fd5b505af1158015610ffd573d6000803e3d6000fd5b5050505060003d60008114611019576020811461102357600080fd5b600019915061102f565b60206000803e60005191505b5080611082576040805162461bcd60e51b815260206004820152601860248201527f544f4b454e5f5452414e534645525f494e5f4641494c45440000000000000000604482015290519081900360640190fd5b600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156110cd57600080fd5b505afa1580156110e1573d6000803e3d6000fd5b505050506040513d60208110156110f757600080fd5b5051905082811015611150576040805162461bcd60e51b815260206004820152601a60248201527f544f4b454e5f5452414e534645525f494e5f4f564552464c4f57000000000000604482015290519081900360640190fd5b9190910395945050505050565b600081848411156111ec5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156111b1578181015183820152602001611199565b50505050905090810190601f1680156111de5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000610c9483836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f7700000000000000000081525061131b565b6000610c9483836040518060400160405280600e81526020016d646976696465206279207a65726f60901b815250611391565b611271611414565b6040518060200160405280610dc785600001518560000151610c5a565b60006ec097ce7bc90715b34b9f10000000006112ae8484600001516111f4565b816112b557fe5b049392505050565b600083830182858210156113125760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156111b1578181015183820152602001611199565b50949350505050565b6000831580611328575082155b1561133557506000610c94565b8383028385828161134257fe5b041483906113125760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156111b1578181015183820152602001611199565b600081836113e05760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156111b1578181015183820152602001611199565b508284816113ea57fe5b04949350505050565b60405180606001604052806000815260200160008152602001600081525090565b604051806020016040528060008152509056fea265627a7a72315820dcfe5fda2275a269dd33b870b306cbd34d53a4b91a877aa06f4f15c5b2272b1e64736f6c63430005110032

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

000000000000000000000000d372a3221021df72eda38f77117d3a95f057e163000000000000000000000000e67ae15cbb7f6b009f12c4c8999ca3ff4c39463d

-----Decoded View---------------
Arg [0] : property_ (address): 0xd372a3221021Df72eDa38f77117d3A95f057e163
Arg [1] : superior_ (address): 0xe67Ae15CBb7F6B009F12c4c8999ca3Ff4c39463d

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000d372a3221021df72eda38f77117d3a95f057e163
Arg [1] : 000000000000000000000000e67ae15cbb7f6b009f12c4c8999ca3ff4c39463d


Deployed Bytecode Sourcemap

20149:5691:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20149:5691:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20731:221;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20731:221:0;-1:-1:-1;;;;;20731:221:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;20219:23;;;:::i;:::-;;;;-1:-1:-1;;;;;20219:23:0;;;;;;;;;;;;;;13401:30;;;:::i;:::-;;;;;;;;;;;;;;;;21617:639;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21617:639:0;;:::i;14536:91::-;;;:::i;20051:::-;;;:::i;14701:799::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14701:799:0;-1:-1:-1;;;;;14701:799:0;;:::i;13331:30::-;;;:::i;20632:91::-;;;:::i;13056:27::-;;;:::i;19270:773::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19270:773:0;;;;;;;;:::i;:::-;;17950:714;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17950:714:0;;;;;;;;:::i;13159:33::-;;;:::i;20992:584::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20992:584:0;;:::i;18672:590::-;;;:::i;17275:227::-;;;:::i;20731:221::-;20793:4;20799;20805;20822:25;;:::i;:::-;-1:-1:-1;;;;;;;;;20850:22:0;;;;;:13;:22;;;;;;;;;20822:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20731:221::o;20219:23::-;;;-1:-1:-1;;;;;20219:23:0;;:::o;13401:30::-;;;;:::o;21617:639::-;21701:10;21666:4;21751:22;;;:13;:22;;;;;21792:11;;21666:4;;21701:10;21792:21;-1:-1:-1;21792:21:0;21784:62;;;;;-1:-1:-1;;;21784:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21891:16;:14;:16::i;:::-;21918:27;21937:7;21918:18;:27::i;:::-;22008:25;22013:11;;22026:6;22008:4;:25::i;:::-;21994:11;:39;22063:11;;22058:25;;22076:6;22058:4;:25::i;:::-;22044:39;;22149:30;22163:7;22172:6;22149:13;:30::i;:::-;22197:25;;;-1:-1:-1;;;;;22197:25:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22242:6:0;;21617:639;-1:-1:-1;;21617:639:0:o;14536:91::-;14576:7;14603:8;;;;;;;;;-1:-1:-1;;;;;14603:8:0;-1:-1:-1;;;;;14603:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14603:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14603:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14603:16:0;;-1:-1:-1;14536:91:0;:::o;20051:::-;20122:12;20051:91;:::o;14701:799::-;14763:4;14780:29;14824:11;;14839:1;14824:16;14820:520;;;-1:-1:-1;14884:18:0;;14820:520;;;14935:26;14964:8;;:37;;;-1:-1:-1;;;14964:37:0;;14995:4;14964:37;;;;;;-1:-1:-1;;;;;14964:8:0;;;;:22;;:37;;;;;;;;;;;;;;;:8;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;14964:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14964:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14964:37:0;15057:21;;14964:37;;-1:-1:-1;15016:10:0;;15029:50;;14964:37;;15029:4;:50::i;:::-;15016:63;;15096:19;;:::i;:::-;15118:28;15127:5;15134:11;;15118:8;:28::i;:::-;15096:50;;15161:38;;:::i;:::-;15202:51;15207:38;;;;;;;;15225:18;;15207:38;;;15247:5;15202:4;:51::i;:::-;15295:33;;-1:-1:-1;;;;;14820:520:0;15355:32;15391:56;15413:7;15422:24;15391:21;:56::i;:::-;15352:95;14701:799;-1:-1:-1;;;;;14701:799:0:o;13331:30::-;;;;:::o;20632:91::-;20704:11;;20632:91;:::o;13056:27::-;;;-1:-1:-1;;;;;13056:27:0;;:::o;19270:773::-;19348:10;19394:16;:14;:16::i;:::-;19421:24;19440:4;19421:18;:24::i;:::-;-1:-1:-1;;;;;19491:19:0;;19458:30;19491:19;;;:13;:19;;;;;19541:6;19562:17;19558:88;;-1:-1:-1;19611:23:0;;;;19558:88;19691:12;19664:9;:23;;;:39;;19656:80;;;;;-1:-1:-1;;;19656:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19780:17:0;;19749:28;19780:17;;;:13;:17;;;;;19868:23;;;;19863:43;;19893:12;19863:4;:43::i;:::-;19837:9;:23;;:69;;;;19941:41;19946:7;:21;;;19969:12;19941:4;:41::i;:::-;19917:21;;;:65;20000:35;;;-1:-1:-1;;;;;20000:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19270:773;;;;;;:::o;17950:714::-;18014:4;18049:10;18095:16;:14;:16::i;:::-;18122:27;18141:7;18122:18;:27::i;:::-;-1:-1:-1;;;;;18191:22:0;;18162:26;18191:22;;;:13;:22;;;;;18242:19;;;;18232:29;;;18224:67;;;;;-1:-1:-1;;;18224:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18344:8;;;:32;;;-1:-1:-1;;;18344:32:0;;-1:-1:-1;;;;;18344:32:0;;;;;;;;;;;;;;;18380:6;;18344:8;;;;;:14;;:32;;;;;;;;;;;;;;;;;;:8;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;18344:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18344:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18344:32:0;:42;18336:77;;;;;-1:-1:-1;;;18336:77:0;;;;;;;;;;;;-1:-1:-1;;;18336:77:0;;;;;;;;;;;;;;;18475:33;18480:5;:19;;;18501:6;18475:4;:33::i;:::-;18453:19;;;:55;18548:21;;18543:35;;18571:6;18543:4;:35::i;:::-;18519:21;:59;18596:34;;;-1:-1:-1;;;;;18596:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18650:6:0;;17950:714;-1:-1:-1;;;17950:714:0:o;13159:33::-;;;;:::o;20992:584::-;21040:4;21075:10;21130:16;:14;:16::i;:::-;21157:27;21176:7;21157:18;:27::i;:::-;21236:17;21256:29;21269:7;21278:6;21256:12;:29::i;:::-;-1:-1:-1;;;;;21354:22:0;;21325:26;21354:22;;;:13;:22;;;;;21406:11;;21236:49;;-1:-1:-1;21354:22:0;21401:31;;21236:49;21401:4;:31::i;:::-;21387:11;:45;21462:11;;21457:31;;21475:12;21457:4;:31::i;:::-;21443:45;;21506:30;;;-1:-1:-1;;;;;21506:30:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21556:12:0;20992:584;-1:-1:-1;;;20992:584:0:o;18672:590::-;18730:10;18787:16;:14;:16::i;:::-;18814:27;18833:7;18814:18;:27::i;:::-;-1:-1:-1;;;;;18883:22:0;;;18854:26;18883:22;;;:13;:22;;;;;;;;18930:19;;;;19002:8;;:31;;-1:-1:-1;;;19002:31:0;;;;;;;;;;;;;;;;;18883:22;;18930:19;;;;19002:8;;;;;:14;;:31;;;;;18883:22;;19002:31;;;;;;;:8;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;19002:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19002:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19002:31:0;:41;18994:76;;;;;-1:-1:-1;;;18994:76:0;;;;;;;;;;;;-1:-1:-1;;;18994:76:0;;;;;;;;;;;;;;;19132:1;19110:19;;;:23;19173:21;;19168:35;;19196:6;19168:4;:35::i;:::-;19144:21;:59;19221:33;;;-1:-1:-1;;;;;19221:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;18672:590;;;:::o;17275:227::-;17311:4;17328:16;:14;:16::i;:::-;17360:32;17396:53;17418:10;17430:18;;17396:21;:53::i;:::-;17357:92;-1:-1:-1;;;17275:227:0;:::o;16339:846::-;16385:16;16404;:14;:16::i;:::-;16385:35;;16457:11;16435:18;;:33;16431:72;;;16485:7;;;16431:72;16515:29;16547:8;;;;;;;;;-1:-1:-1;;;;;16547:8:0;-1:-1:-1;;;;;16547:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16547:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16547:17:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16547:17:0;16579:11;;16547:17;;-1:-1:-1;16575:102:0;;-1:-1:-1;16612:18:0;:32;16659:7;;16575:102;16689:10;16702:53;16707:24;16733:21;;16702:4;:53::i;:::-;16689:66;;16768:19;;:::i;:::-;16790:28;16799:5;16806:11;;16790:8;:28::i;:::-;16768:50;;16829:32;;:::i;:::-;16864:51;16869:38;;;;;;;;16887:18;;16869:38;;;16909:5;16864:4;:51::i;:::-;16987:27;;16966:18;:48;;;17025:21;:48;;;-1:-1:-1;17084:32:0;;;17134:43;;;;;;;;;;;;;;;16829:86;;-1:-1:-1;17134:43:0;;;;;;;;;16339:846;;;;;;:::o;17510:432::-;17576:10;17588:25;17617:50;17639:7;17648:18;;17617:21;:50::i;:::-;-1:-1:-1;;;;;17709:22:0;;17680:26;17709:22;;;:13;:22;;;;;;;;;17763:18;;;17742;;;:39;17792:19;;;:42;;;17915:18;17887:47;;;;;;;;;;;;;;;;;;;;17575:92;;-1:-1:-1;17575:92:0;;-1:-1:-1;17709:22:0;;17887:47;;;;;;;;;17510:432;;;;:::o;9387:120::-;9440:4;9464:35;9469:1;9472;9464:35;;;;;;;;;;;;;-1:-1:-1;;;9464:35:0;;;:4;:35::i;:::-;9457:42;9387:120;-1:-1:-1;;;9387:120:0:o;24943:894::-;25071:8;;25091:26;;;-1:-1:-1;;;25091:26:0;;-1:-1:-1;;;;;25091:26:0;;;;;;;;;;;;;;;25071:8;;;;;;;25091:14;;:26;;;;;25011:31;;25091:26;;;;;;;;25011:31;25071:8;25091:26;;;5:2:-1;;;;30:1;27;20:12;5:2;25091:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25091:26:0;;;;25130:12;25184:16;25223:1;25218:152;;;;25393:2;25388:219;;;;25742:1;25739;25732:12;25218:152;-1:-1:-1;;25313:6:0;-1:-1:-1;25218:152:0;;25388:219;25490:2;25487:1;25484;25469:24;25532:1;25526:8;25515:19;;25177:586;;25792:7;25784:45;;;;;-1:-1:-1;;;25784:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24943:894;;;;:::o;12183:147::-;12240:13;;:::i;:::-;12273:49;;;;;;;;12291:29;12296:20;12301:1;6021:4;12296;:20::i;:::-;12318:1;12291:4;:29::i;:::-;12273:49;;12266:56;12183:147;-1:-1:-1;;;12183:147:0:o;8584:160::-;8655:13;;:::i;:::-;8688:48;;;;;;;;8706:28;8711:1;:10;;;8723:1;:10;;;8706:4;:28::i;15574:757::-;15673:4;15679;15696:25;;:::i;:::-;-1:-1:-1;;;;;;15724:22:0;;;;;;:13;:22;;;;;;;;;15696:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15759:38;;:::i;:::-;-1:-1:-1;15800:42:0;;;;;;;;;;;;15853:39;;:::i;:::-;-1:-1:-1;15895:38:0;;;;;;;;;;15913:18;;;;15895:38;;;15948:39;:80;;;;-1:-1:-1;15991:33:0;;:37;;15948:80;15944:169;;;13280:4;16045:56;;15944:169;16125:24;;:::i;:::-;16152:57;16157:24;16183:25;16152:4;:57::i;:::-;16125:84;;16220:10;16233:29;16238:5;:11;;;16251:10;16233:4;:29::i;:::-;16220:42;;16283:5;16290:32;16295:5;:19;;;16316:5;16290:4;:32::i;:::-;16275:48;;;;;;;;;15574:757;;;;;:::o;8752:116::-;8805:4;8829:31;8834:1;8837;8829:31;;;;;;;;;;;;;-1:-1:-1;;;8829:31:0;;;:4;:31::i;22901:1338::-;23045:8;;23086:49;;;-1:-1:-1;;;23086:49:0;;23129:4;23086:49;;;;;;22968:4;;-1:-1:-1;;;;;23045:8:0;;22968:4;;23045:8;;23086:34;;:49;;;;;;;;;;;;;;23045:8;23086:49;;;5:2:-1;;;;30:1;27;20:12;5:2;23086:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23086:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23086:49:0;23146:47;;;-1:-1:-1;;;23146:47:0;;-1:-1:-1;;;;;23146:47:0;;;;;;;23179:4;23146:47;;;;;;;;;;;;23086:49;;-1:-1:-1;23146:18:0;;;;;;:47;;;;;-1:-1:-1;;23146:47:0;;;;;;;;-1:-1:-1;23146:18:0;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;23146:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23146:47:0;;;;23206:12;23260:16;23299:1;23294:153;;;;23470:2;23465:220;;;;23821:1;23818;23811:12;23294:153;-1:-1:-1;;23390:6:0;-1:-1:-1;23294:153:0;;23465:220;23568:2;23565:1;23562;23547:24;23610:1;23604:8;23593:19;;23253:589;;23871:7;23863:44;;;;;-1:-1:-1;;;23863:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24020:8;;24005:49;;;-1:-1:-1;;;24005:49:0;;24048:4;24005:49;;;;;;23985:17;;-1:-1:-1;;;;;24020:8:0;;24005:34;;:49;;;;;;;;;;;;;;24020:8;24005:49;;;5:2:-1;;;;30:1;27;20:12;5:2;24005:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24005:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24005:49:0;;-1:-1:-1;24073:29:0;;;;24065:68;;;;;-1:-1:-1;;;24065:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24151:28;;;;;22901:1338;-1:-1:-1;;;;;22901:1338:0:o;9515:158::-;9596:4;9629:12;9621:6;;;;9613:29;;;;-1:-1:-1;;;9613:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9613:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9660:5:0;;;9515:158::o;10585:122::-;10638:4;10662:37;10667:1;10670;10662:37;;;;;;;;;;;;;;;;;:4;:37::i;11897:113::-;11950:4;11974:28;11979:1;11982;11974:28;;;;;;;;;;;;;-1:-1:-1;;;11974:28:0;;;:4;:28::i;9219:160::-;9290:13;;:::i;:::-;9323:48;;;;;;;;9341:28;9346:1;:10;;;9358:1;:10;;;9341:4;:28::i;10450:127::-;10512:4;6021;10536:19;10541:1;10544;:10;;;10536:4;:19::i;:::-;:33;;;;;;;10450:127;-1:-1:-1;;;10450:127:0:o;8876:179::-;8957:4;8983:5;;;9015:12;9007:6;;;;8999:29;;;;-1:-1:-1;;;8999:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;8999:29:0;-1:-1:-1;9046:1:0;8876:179;-1:-1:-1;;;;8876:179:0:o;10715:250::-;10796:4;10817:6;;;:16;;-1:-1:-1;10827:6:0;;10817:16;10813:57;;;-1:-1:-1;10857:1:0;10850:8;;10813:57;10889:5;;;10893:1;10889;:5;:1;10913:5;;;;;:10;10925:12;10905:33;;;;;-1:-1:-1;;;10905:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;12018:157:0;12099:4;12131:12;12124:5;12116:28;;;;-1:-1:-1;;;12116:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;12116:28:0;;12166:1;12162;:5;;;;;;;12018:157;-1:-1:-1;;;;12018:157:0:o;20149:5691::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://dcfe5fda2275a269dd33b870b306cbd34d53a4b91a877aa06f4f15c5b2272b1e

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.