Contract 0x5aE6aA64aAc13195eCaAF112246ee26F40E94D2B

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xee46e92da6266afd6deb244de1493ced51b3ad3e1e6a96d8153cba7df7f1cf2f0x60806040237312212022-01-15 2:10:143 days 20 hrs ago0x9f60699ce23f1ab86ec3e095b477ff79d4f409ad IN  Create: Protocol3Resolver0 MATIC0.084381150
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Protocol3Resolver

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 5 : main.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;


import "./helpers.sol";

contract Protocol3Resolver is Helpers {
    using SafeMath for uint;

    struct BorrowLimit {
        uint128 normal;
        uint128 extended;
    }

    struct PoolInfo {
        bool isEnabled;
        BorrowLimit borrowLimit;
        address[] markets;
        uint256 minTick;
        uint256 priceSlippage;
        TickCheck tickCheck;
    }

    struct Position {
        address pool;
        address[] tokens;
        uint256[2] collateralsWithoutFeeAccrued;
        uint256[2] collaterals;
        uint256[] debts;
        bool isStaked;
        BorrowLimit borrowLimit;
        uint256 status;
        uint256 normalizedStatus;
    }

    function getPoolInfo(address[] calldata pools) public view returns (PoolInfo[] memory poolInfos) {
        uint256 length_ = pools.length;
        poolInfos = new PoolInfo[](length_);
        for(uint i = 0; i < length_; i++) {
            poolInfos[i].isEnabled = protocolModule.poolEnabled(pools[i]);
            if (poolInfos[i].isEnabled) {
                (poolInfos[i].borrowLimit.normal, poolInfos[i].borrowLimit.extended) = protocolModule.borrowLimit(pools[i]);
                poolInfos[i].markets = protocolModule.poolMarkets(pools[i]);
                poolInfos[i].minTick = protocolModule.minTick(pools[i]);
                poolInfos[i].priceSlippage = protocolModule.priceSlippage(pools[i]);
                poolInfos[i].tickCheck = protocolModule.tickCheck(pools[i]);
            }
        }
    }

    function getPositionInfo(uint256[] memory NFTIDs) public view returns (Position[] memory positions) {
        positions = new Position[](NFTIDs.length);
        for(uint256 i = 0; i < NFTIDs.length; i++) {
            positions[i].pool = getPoolAddress(NFTIDs[i]);
            positions[i].tokens = protocolModule.poolMarkets(positions[i].pool);
            (
                positions[i].collateralsWithoutFeeAccrued[0],
                positions[i].collaterals[0],
                positions[i].collateralsWithoutFeeAccrued[1],
                positions[i].collaterals[1]
            ) = getCollaterals(NFTIDs[i], positions[i].pool);
            positions[i].debts = protocolModule.getNetNFTDebt(NFTIDs[i], positions[i].pool);
            positions[i].isStaked = protocolModule.isStaked(NFTIDs[i]);
            (positions[i].borrowLimit.normal, positions[i].borrowLimit.extended) = protocolModule.borrowLimit(positions[i].pool);
            (positions[i].status, positions[i].normalizedStatus) = getStatus(NFTIDs[i]);
        }
    }
}

File 2 of 5 : helpers.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;


import "./interfaces.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";


contract Constants {

    IProtocolModule internal constant protocolModule = IProtocolModule(0x5f76E4BFf40C6d4c656AcFee4FFd41c717b5115f);
    ILiquidity internal constant liquidity = ILiquidity(0xb5C272b5D0D0E3Bd3f20f32d3836e7Ce4e9Cfbdf);
    INonfungiblePositionManager public constant nftManager = INonfungiblePositionManager(0xC36442b4a4522E871399CD717aBDD847Ab11FE88);

}

contract UniswapHelpers is Constants {

    bytes32 internal constant POOL_INIT_CODE_HASH =
        0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54;

    struct PoolKey {
        address token0;
        address token1;
        uint24 fee;
    }

    function computeAddress(address factory_, PoolKey memory key_)
        internal
        pure
        returns (address pool_)
    {
        require(key_.token0 < key_.token1);
        pool_ = address(
            uint160(
                uint256(
                    keccak256(
                        abi.encodePacked(
                            hex"ff",
                            factory_,
                            keccak256(
                                abi.encode(key_.token0, key_.token1, key_.fee)
                            ),
                            POOL_INIT_CODE_HASH
                        )
                    )
                )
            )
        );
    }

    /**
     * @dev returns pool address.
     * @param token0_ token 0 address
     * @param token1_ token 1 address
     * @param fee_ fee of pool
     * @return poolAddr_ pool address
     */
    function _getPoolAddress(
        address token0_,
        address token1_,
        uint24 fee_
    ) internal view returns (address poolAddr_) {
        poolAddr_ = computeAddress(
            nftManager.factory(),
            PoolKey({token0: token0_, token1: token1_, fee: fee_})
        );
    }

}


contract Helpers is UniswapHelpers {
    using SafeMath for uint;

    function getPoolAddress(uint256 NFTID_) internal view returns (address poolAddr) {
        (
            ,
            ,
            address token0_,
            address token1_,
            uint24 fee_,
            ,
            ,
            ,
            ,
            ,
            ,
        ) = nftManager.positions(NFTID_);
        poolAddr = _getPoolAddress(token0_, token1_, fee_);
    }

    function getNFTdata(uint256 NFTID) internal view returns (int24 tickLower, int24 tickUpper, uint128 liquidity_) {
        (,,,,,
            tickLower,
            tickUpper,
            liquidity_,
            ,,,) = nftManager.positions(NFTID);
    }

    function getCollateralsWithoutFee(uint256 NFTID, address pool) internal view returns (uint256 amount0WithoutFeeAccrued, uint256 amount1WithoutFeeAccrued) {
        (int24 tickLower_, int24 tickUpper_, uint128 liquidity_) = getNFTdata(NFTID);
        (amount0WithoutFeeAccrued, amount1WithoutFeeAccrued) = protocolModule.getNetNFTLiquidity(pool, tickLower_, tickUpper_, liquidity_);
    }

    function getCollaterals(uint256 NFTID, address pool) internal view returns (uint256 amount0WithoutFeeAccrued, uint256 amount0, uint256 amount1WithoutFeeAccrued, uint256 amount1) {
        (uint256 fee0, uint256 fee1) = protocolModule.getFeeAccruedWrapper(NFTID, pool);
        (amount0WithoutFeeAccrued, amount1WithoutFeeAccrued) = getCollateralsWithoutFee(NFTID, pool);
        amount0 = amount0WithoutFeeAccrued.add(fee0);
        amount1 = amount1WithoutFeeAccrued.add(fee1);
    }

    function getStatus(uint256 NFTID) internal view returns (uint256 status, uint256 normalizedStatus) {
        (
            ,
            ,
            ,
            ,
            uint256 totalSupplyInUsd_,
            uint256 totalNormalizedSupplyInUsd_,
            uint256 totalBorrowInUsd_,
            uint256 totalNormalizedBorrowInUsd_
        ) = protocolModule.getOverallPosition(NFTID);
        status = totalSupplyInUsd_.div(totalBorrowInUsd_).mul(1e18);
        normalizedStatus = totalNormalizedSupplyInUsd_.div(totalNormalizedBorrowInUsd_).mul(1e18);
    }

}

File 3 of 5 : interfaces.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;

import "../../liquidity/interfaces.sol";

struct TickCheck {
    uint24 tickSlippage1;
    uint24 secsAgo1;
    uint24 tickSlippage2;
    uint24 secsAgo2;
    uint24 tickSlippage3;
    uint24 secsAgo3;
    uint24 tickSlippage4;
    uint24 secsAgo4;
    uint24 tickSlippage5;
    uint24 secsAgo5;
}

interface IProtocolModule {

    function getPoolAddress(address, address, uint24) external view returns (address);

    function getNftTokenPairAddresses(uint256) external view returns (address, address, uint24);

    function getFeeAccruedWrapper(uint256, address) external view returns (uint256, uint256);

    function getNetNFTLiquidity(address, int24, int24, uint128) external view returns (uint256, uint256);

    function getNetNFTDebt(uint256, address) external view returns (uint256[] memory);

    function getOverallPosition(uint256 NFTID_)
        external
        view
        returns (
            address poolAddr_,
            address token0_,
            address token1_,
            uint128 liquidity_,
            uint256 totalSupplyInUsd_,
            uint256 totalNormalSupplyInUsd_,
            uint256 totalBorrowInUsd_,
            uint256 totalNormalBorrowInUsd_
        );

    function poolEnabled(address) external view returns (bool);

    // Return true if the NFT is deposited and the owner is the owner_
    function position(address, uint) external view returns (bool);

    function isStaked(uint) external view returns (bool);

    function minTick(address) external view returns (uint);

    function borrowBalRaw(uint, address) external view returns (uint);

    function borrowAllowed(address, address) external view returns (bool);

    function poolMarkets(address) external view returns (address[] memory);

    function borrowLimit(address) external view returns (uint128, uint128);

    function priceSlippage(address) external view returns (uint);

    function tickCheck(address) external view returns (TickCheck memory);
    
}

interface INonfungiblePositionManager {
    function positions(uint256 tokenId)
        external
        view
        returns (
            uint96 nonce,
            address operator,
            address token0,
            address token1,
            uint24 fee,
            int24 tickLower,
            int24 tickUpper,
            uint128 liquidity,
            uint256 feeGrowthInside0LastX128,
            uint256 feeGrowthInside1LastX128,
            uint128 tokensOwed0,
            uint128 tokensOwed1
        );
    
    function factory() external view returns (address);
}

File 4 of 5 : SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 5 of 5 : interfaces.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;


interface ILiquidity {

    function supply(
        address token_,
        uint amount_
    ) external returns (
        uint newSupplyRate_,
        uint newBorrowRate_,
        uint newSupplyExchangePrice_,
        uint newBorrowExchangePrice_
    );

    function withdraw(
        address token_,
        uint amount_
    ) external returns (
        uint newSupplyRate_,
        uint newBorrowRate_,
        uint newSupplyExchangePrice_,
        uint newBorrowExchangePrice_
    );

    function borrow(
        address token_,
        uint amount_
    ) external returns (
        uint newSupplyRate_,
        uint newBorrowRate_,
        uint newSupplyExchangePrice_,
        uint newBorrowExchangePrice_
    );

    function payback(
        address token_,
        uint amount_
    ) external returns (
        uint newSupplyRate_,
        uint newBorrowRate_,
        uint newSupplyExchangePrice_,
        uint newBorrowExchangePrice_
    );

    function updateInterest(
        address token_
    ) external view returns (
        uint newSupplyExchangePrice,
        uint newBorrowExchangePrice
    );

    function isProtocol(address protocol_) external view returns (bool);

    function protocolSupplyLimit(address protocol_, address token_) external view returns (uint256);

    function protocolBorrowLimit(address protocol_, address token_) external view returns (uint256);

    function totalSupplyRaw(address token_) external view returns (uint256);

    function totalBorrowRaw(address token_) external view returns (uint256);

    function protocolRawSupply(address protocol_, address token_) external view returns (uint256);

    function protocolRawBorrow(address protocol_, address token_) external view returns (uint256);

    struct Rates {
        uint96 lastSupplyExchangePrice; // last stored exchange price. Increases overtime.
        uint96 lastBorrowExchangePrice; // last stored exchange price. Increases overtime.
        uint48 lastUpdateTime; // in sec
        uint16 utilization; // utilization. 10000 = 100%
    }

    function rate(address token_) external view returns (Rates memory);

}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"getPoolInfo","outputs":[{"components":[{"internalType":"bool","name":"isEnabled","type":"bool"},{"components":[{"internalType":"uint128","name":"normal","type":"uint128"},{"internalType":"uint128","name":"extended","type":"uint128"}],"internalType":"struct Protocol3Resolver.BorrowLimit","name":"borrowLimit","type":"tuple"},{"internalType":"address[]","name":"markets","type":"address[]"},{"internalType":"uint256","name":"minTick","type":"uint256"},{"internalType":"uint256","name":"priceSlippage","type":"uint256"},{"components":[{"internalType":"uint24","name":"tickSlippage1","type":"uint24"},{"internalType":"uint24","name":"secsAgo1","type":"uint24"},{"internalType":"uint24","name":"tickSlippage2","type":"uint24"},{"internalType":"uint24","name":"secsAgo2","type":"uint24"},{"internalType":"uint24","name":"tickSlippage3","type":"uint24"},{"internalType":"uint24","name":"secsAgo3","type":"uint24"},{"internalType":"uint24","name":"tickSlippage4","type":"uint24"},{"internalType":"uint24","name":"secsAgo4","type":"uint24"},{"internalType":"uint24","name":"tickSlippage5","type":"uint24"},{"internalType":"uint24","name":"secsAgo5","type":"uint24"}],"internalType":"struct TickCheck","name":"tickCheck","type":"tuple"}],"internalType":"struct Protocol3Resolver.PoolInfo[]","name":"poolInfos","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"NFTIDs","type":"uint256[]"}],"name":"getPositionInfo","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[2]","name":"collateralsWithoutFeeAccrued","type":"uint256[2]"},{"internalType":"uint256[2]","name":"collaterals","type":"uint256[2]"},{"internalType":"uint256[]","name":"debts","type":"uint256[]"},{"internalType":"bool","name":"isStaked","type":"bool"},{"components":[{"internalType":"uint128","name":"normal","type":"uint128"},{"internalType":"uint128","name":"extended","type":"uint128"}],"internalType":"struct Protocol3Resolver.BorrowLimit","name":"borrowLimit","type":"tuple"},{"internalType":"uint256","name":"status","type":"uint256"},{"internalType":"uint256","name":"normalizedStatus","type":"uint256"}],"internalType":"struct Protocol3Resolver.Position[]","name":"positions","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftManager","outputs":[{"internalType":"contract INonfungiblePositionManager","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50611d93806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80635a5e7e0d14610046578063e88b91ea1461006f578063f81d33ce146100a2575b600080fd5b610059610054366004611583565b6100c2565b6040516100669190611ae4565b60405180910390f35b61008a73c36442b4a4522e871399cd717abdd847ab11fe8881565b6040516001600160a01b039091168152602001610066565b6100b56100b0366004611468565b6106a7565b6040516100669190611973565b6060815167ffffffffffffffff8111156100de576100de611d0f565b60405190808252806020026020018201604052801561011757816020015b610104611227565b8152602001906001900390816100fc5790505b50905060005b82518110156106a15761014883828151811061013b5761013b611cf9565b6020026020010151610c74565b82828151811061015a5761015a611cf9565b60209081029190910101516001600160a01b0390911690528151600080516020611d3e83398151915290630fc3b89d9084908490811061019c5761019c611cf9565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160006040518083038186803b1580156101e757600080fd5b505afa1580156101fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261022391908101906114dd565b82828151811061023557610235611cf9565b60200260200101516020018190525061028483828151811061025957610259611cf9565b602002602001015183838151811061027357610273611cf9565b602002602001015160000151610d24565b85858151811061029657610296611cf9565b6020026020010151604001516000600281106102b4576102b4611cf9565b602002018686815181106102ca576102ca611cf9565b6020026020010151606001516000600281106102e8576102e8611cf9565b602002018787815181106102fe576102fe611cf9565b60200260200101516040015160016002811061031c5761031c611cf9565b6020020188888151811061033257610332611cf9565b60200260200101516060015160016002811061035057610350611cf9565b602002019390935292909152919052528251600080516020611d3e8339815191529063c815cbba9085908490811061038a5761038a611cf9565b60200260200101518484815181106103a4576103a4611cf9565b6020026020010151600001516040518363ffffffff1660e01b81526004016103df9291909182526001600160a01b0316602082015260400190565b60006040518083038186803b1580156103f757600080fd5b505afa15801561040b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610433919081019061160f565b82828151811061044557610445611cf9565b602002602001015160800181905250600080516020611d3e8339815191526001600160a01b031663baa51f8684838151811061048357610483611cf9565b60200260200101516040518263ffffffff1660e01b81526004016104a991815260200190565b60206040518083038186803b1580156104c157600080fd5b505afa1580156104d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f9919061169b565b82828151811061050b5761050b611cf9565b602002602001015160a0019015159081151581525050600080516020611d3e8339815191526001600160a01b03166328f5f50283838151811061055057610550611cf9565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401604080518083038186803b15801561059a57600080fd5b505afa1580156105ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d29190611785565b8383815181106105e4576105e4611cf9565b602002602001015160c0015160000184848151811061060557610605611cf9565b60209081029190910181015160c001516001600160801b0393841691015291169052825161064c9084908390811061063f5761063f611cf9565b6020026020010151610df2565b83838151811061065e5761065e611cf9565b602002602001015160e00184848151811061067b5761067b611cf9565b60209081029190910101516101000191909152528061069981611cc8565b91505061011d565b50919050565b6060818067ffffffffffffffff8111156106c3576106c3611d0f565b6040519080825280602002602001820160405280156106fc57816020015b6106e9611291565b8152602001906001900390816106e15790505b50915060005b81811015610c6c57600080516020611d3e83398151915263f75df75886868481811061073057610730611cf9565b905060200201602081019061074591906113ab565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561078457600080fd5b505afa158015610798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bc919061169b565b8382815181106107ce576107ce611cf9565b6020908102919091010151901515905282518390829081106107f2576107f2611cf9565b60200260200101516000015115610c5a57600080516020611d3e8339815191526328f5f50286868481811061082957610829611cf9565b905060200201602081019061083e91906113ab565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401604080518083038186803b15801561087c57600080fd5b505afa158015610890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b49190611785565b8483815181106108c6576108c6611cf9565b6020026020010151602001516000018584815181106108e7576108e7611cf9565b6020908102919091018101518101516001600160801b0393841691015291169052600080516020611d3e833981519152630fc3b89d86868481811061092e5761092e611cf9565b905060200201602081019061094391906113ab565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160006040518083038186803b15801561098257600080fd5b505afa158015610996573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109be91908101906114dd565b8382815181106109d0576109d0611cf9565b602090810291909101015160400152600080516020611d3e8339815191526326cf47a4868684818110610a0557610a05611cf9565b9050602002016020810190610a1a91906113ab565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610a5957600080fd5b505afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9191906117b8565b838281518110610aa357610aa3611cf9565b602090810291909101015160600152600080516020611d3e83398151915263ca624683868684818110610ad857610ad8611cf9565b9050602002016020810190610aed91906113ab565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610b2c57600080fd5b505afa158015610b40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6491906117b8565b838281518110610b7657610b76611cf9565b602090810291909101015160800152600080516020611d3e833981519152631dc0e49f868684818110610bab57610bab611cf9565b9050602002016020810190610bc091906113ab565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016101406040518083038186803b158015610c0057600080fd5b505afa158015610c14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3891906116bd565b838281518110610c4a57610c4a611cf9565b602002602001015160a001819052505b80610c6481611cc8565b915050610702565b505092915050565b60405163133f757160e31b81526004810182905260009081908190819073c36442b4a4522e871399cd717abdd847ab11fe88906399fbab88906024016101806040518083038186803b158015610cc957600080fd5b505afa158015610cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0191906117f5565b505050505050509450945094505050610d1b838383610edc565b95945050505050565b60405163144113a160e11b8152600481018390526001600160a01b038216602482015260009081908190819081908190600080516020611d3e83398151915290632882274290604401604080518083038186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbc91906117d1565b91509150610dca8888610fa5565b9096509350610dd98683611071565b9450610de58482611071565b9250505092959194509250565b600080600080600080600080516020611d3e8339815191526001600160a01b0316634679362c886040518263ffffffff1660e01b8152600401610e3791815260200190565b6101006040518083038186803b158015610e5057600080fd5b505afa158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8891906113e5565b975097509750975050505050610eb9670de0b6b3a7640000610eb3848761108490919063ffffffff16565b90611090565b9550610ed1670de0b6b3a7640000610eb38584611084565b945050505050915091565b6000610f9d73c36442b4a4522e871399cd717abdd847ab11fe886001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2e57600080fd5b505afa158015610f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6691906113c8565b6040518060600160405280876001600160a01b03168152602001866001600160a01b031681526020018562ffffff1681525061109c565b949350505050565b6000806000806000610fb687611185565b6040516366a0012160e01b81526001600160a01b038a166004820152600284810b602483015283900b60448201526001600160801b03821660648201529295509093509150600080516020611d3e833981519152906366a0012190608401604080518083038186803b15801561102b57600080fd5b505afa15801561103f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106391906117d1565b909890975095505050505050565b600061107d8284611c6f565b9392505050565b600061107d8284611c87565b600061107d8284611ca9565b600081602001516001600160a01b031682600001516001600160a01b0316106110c457600080fd5b815160208084015160408086015181516001600160a01b0395861681860152949092168482015262ffffff90911660608085019190915281518085038201815260808501909252815191909201206001600160f81b031960a08401529085901b6bffffffffffffffffffffffff191660a183015260b58201527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d582015260f50160408051601f1981840301815291905280516020909101209392505050565b60405163133f757160e31b8152600481018290526000908190819073c36442b4a4522e871399cd717abdd847ab11fe88906399fbab88906024016101806040518083038186803b1580156111d857600080fd5b505afa1580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121091906117f5565b50949e939d50919b50919950505050505050505050565b60408051610120810182526000815260606020820152908101611248611341565b8152602001611255611341565b81526060602080830182905260006040808501829052805180820190915281815291820152910190815260200160008152602001600081525090565b6040518060c001604052806000151581526020016112d4604051806040016040528060006001600160801b0316815260200160006001600160801b031681525090565b815260606020808301829052600060408085018290528385018290528051610140810182528281529283018290528201819052918101829052608081810183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925291015290565b60405180604001604052806002906020820280368337509192915050565b805161136a81611d25565b919050565b8051600281900b811461136a57600080fd5b80516001600160801b038116811461136a57600080fd5b805162ffffff8116811461136a57600080fd5b6000602082840312156113bd57600080fd5b813561107d81611d25565b6000602082840312156113da57600080fd5b815161107d81611d25565b600080600080600080600080610100898b03121561140257600080fd5b885161140d81611d25565b60208a015190985061141e81611d25565b60408a015190975061142f81611d25565b955061143d60608a01611381565b94506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b6000806020838503121561147b57600080fd5b823567ffffffffffffffff8082111561149357600080fd5b818501915085601f8301126114a757600080fd5b8135818111156114b657600080fd5b8660208260051b85010111156114cb57600080fd5b60209290920196919550909350505050565b600060208083850312156114f057600080fd5b825167ffffffffffffffff81111561150757600080fd5b8301601f8101851361151857600080fd5b805161152b61152682611c4b565b611c1a565b80828252848201915084840188868560051b870101111561154b57600080fd5b600094505b8385101561157757805161156381611d25565b835260019490940193918501918501611550565b50979650505050505050565b6000602080838503121561159657600080fd5b823567ffffffffffffffff8111156115ad57600080fd5b8301601f810185136115be57600080fd5b80356115cc61152682611c4b565b80828252848201915084840188868560051b87010111156115ec57600080fd5b600094505b838510156115775780358352600194909401939185019185016115f1565b6000602080838503121561162257600080fd5b825167ffffffffffffffff81111561163957600080fd5b8301601f8101851361164a57600080fd5b805161165861152682611c4b565b80828252848201915084840188868560051b870101111561167857600080fd5b600094505b8385101561157757805183526001949094019391850191850161167d565b6000602082840312156116ad57600080fd5b8151801515811461107d57600080fd5b600061014082840312156116d057600080fd5b6116d8611bf0565b6116e183611398565b81526116ef60208401611398565b602082015261170060408401611398565b604082015261171160608401611398565b606082015261172260808401611398565b608082015261173360a08401611398565b60a082015261174460c08401611398565b60c082015261175560e08401611398565b60e0820152610100611768818501611398565b9082015261012061177a848201611398565b908201529392505050565b6000806040838503121561179857600080fd5b6117a183611381565b91506117af60208401611381565b90509250929050565b6000602082840312156117ca57600080fd5b5051919050565b600080604083850312156117e457600080fd5b505080516020909101519092909150565b6000806000806000806000806000806000806101808d8f03121561181857600080fd5b8c516bffffffffffffffffffffffff8116811461183457600080fd5b9b5061184260208e0161135f565b9a5061185060408e0161135f565b995061185e60608e0161135f565b985061186c60808e01611398565b975061187a60a08e0161136f565b965061188860c08e0161136f565b955061189660e08e01611381565b94506101008d015193506101208d015192506118b56101408e01611381565b91506118c46101608e01611381565b90509295989b509295989b509295989b565b600081518084526020808501945080840160005b8381101561190f5781516001600160a01b0316875295820195908201906001016118ea565b509495945050505050565b8060005b600281101561193d57815184526020938401939091019060010161191e565b50505050565b600081518084526020808501945080840160005b8381101561190f57815187529582019590820190600101611957565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611ad657603f198984030185528151610200815115158552888201516119dc8a87018280516001600160801b03908116835260209182015116910152565b5087820151606082818801526119f4838801836118d6565b92508084015191506080828189015280850151925060a083818a015280860151955060c09350611a2b848a01875162ffffff169052565b8c86015160e0611a41818c018362ffffff169052565b8d8801519150610100611a5a818d018462ffffff169052565b94880151946101209250611a748c84018762ffffff169052565b9388015162ffffff9081166101408d01529288015183166101608c01529487015182166101808b01529386015181166101a08a01529085015181166101c08901529190930151166101e09095019490945250938601939086019060010161199a565b509098975050505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611ad657888303603f19018552815180516001600160a01b0316845261018088820151818a870152611b43828701826118d6565b91505087820151611b568987018261191a565b5060608201516080611b6a8188018361191a565b8084015191505060c086830381880152611b848383611943565b925060a0840151915060e0611b9c8189018415159052565b90840151915061010090611bc88883018480516001600160801b03908116835260209182015116910152565b8401516101408801529092015161016090950194909452509386019390860190600101611b0b565b604051610140810167ffffffffffffffff81118282101715611c1457611c14611d0f565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611c4357611c43611d0f565b604052919050565b600067ffffffffffffffff821115611c6557611c65611d0f565b5060051b60200190565b60008219821115611c8257611c82611ce3565b500190565b600082611ca457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611cc357611cc3611ce3565b500290565b6000600019821415611cdc57611cdc611ce3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611d3a57600080fd5b5056fe0000000000000000000000005f76e4bff40c6d4c656acfee4ffd41c717b5115fa26469706673582212200b38ee1a873b44e1caf6d097570fb28b025f750f5960648ac7e8b8e6d727538864736f6c63430008060033

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.