Contract 0xc194BF150f458d6f04C135c9bA1FF0e4d10A6D61

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb9a59222f954d4e2d061db44bf6f324813110e02e5056c1aaa7c49ccac08442b0x6101806057830122022-11-29 9:16:19111 days 22 hrs agoCronos ID: Deployer IN  Contract Creation0 CRO4.557188141270
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x905F5280Fc0B64FD1D3B0179F728BFB901426e5B

Contract Name:
ExponentialPremiumStablePriceOracle

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 7 : ExponentialPremiumStablePriceOracle.sol
//SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

import "./StablePriceOracle.sol";

contract ExponentialPremiumStablePriceOracle is StablePriceOracle {
    uint256 constant GRACE_PERIOD = 90 days;
    uint256 constant SECONDS_PER_YEAR = 31556952;

    uint256 immutable startPremium;
    uint256 immutable endValue;

    constructor(
        AggregatorInterface _usdOracle,
        uint256[] memory _rentPrices,
        uint256 _startPremium,
        uint256 totalDays
    ) StablePriceOracle(_usdOracle, _rentPrices) {
        startPremium = _startPremium;
        endValue = _startPremium >> totalDays;
    }

    uint256 constant PRECISION = 1e18;
    uint256 constant bit1 = 999989423469314432; // 0.5 ^ 1/65536 * (10 ** 18)
    uint256 constant bit2 = 999978847050491904; // 0.5 ^ 2/65536 * (10 ** 18)
    uint256 constant bit3 = 999957694548431104;
    uint256 constant bit4 = 999915390886613504;
    uint256 constant bit5 = 999830788931929088;
    uint256 constant bit6 = 999661606496243712;
    uint256 constant bit7 = 999323327502650752;
    uint256 constant bit8 = 998647112890970240;
    uint256 constant bit9 = 997296056085470080;
    uint256 constant bit10 = 994599423483633152;
    uint256 constant bit11 = 989228013193975424;
    uint256 constant bit12 = 978572062087700096;
    uint256 constant bit13 = 957603280698573696;
    uint256 constant bit14 = 917004043204671232;
    uint256 constant bit15 = 840896415253714560;
    uint256 constant bit16 = 707106781186547584;

    /**
     * @dev Returns the pricing premium in internal base units.
     */
    function _premium(
        string memory,
        uint256 expires,
        uint256
    ) internal view override returns (uint256) {
        expires = expires + GRACE_PERIOD;
        if (expires > block.timestamp) {
            return 0;
        }

        uint256 elapsed = block.timestamp - expires;
        uint256 premium = decayedPremium(startPremium, elapsed);
        if (premium >= endValue) {
            return premium - endValue;
        }
        return 0;
    }

    /**
     * @dev Returns the pricing discount, 0 - 100.
     */
    function _discount(
        string memory,
        uint256 expires,
        uint256 duration
    ) internal view override returns (uint256) {
        expires = expires + GRACE_PERIOD;
        if (expires > block.timestamp) {
            // for renew, no discount
            return 100;
        }

        uint256 year = duration / SECONDS_PER_YEAR;
        if (year < 2) {
            // [0,2) => 0%
            return 100;
        } else if (year < 6) {
            // [2,6) => 30%
            return 70;
        } else if (year < 10) {
            // [6,10) => 20%
            return 80;
        } else {
            // 10+ => 10%
            return 90;
        }
    }

    /**
     * @dev Returns the premium price at current time elapsed
     * @param startPremium starting price
     * @param elapsed time past since expiry
     */
    function decayedPremium(uint256 startPremium, uint256 elapsed)
        public
        pure
        returns (uint256)
    {
        uint256 daysPast = (elapsed * PRECISION) / 1 days;
        uint256 intDays = daysPast / PRECISION;
        uint256 premium = startPremium >> intDays;
        uint256 partDay = (daysPast - intDays * PRECISION);
        uint256 fraction = (partDay * (2**16)) / PRECISION;
        uint256 totalPremium = addFractionalPremium(fraction, premium);
        return totalPremium;
    }

    function addFractionalPremium(uint256 fraction, uint256 premium)
        internal
        pure
        returns (uint256)
    {
        if (fraction & (1 << 0) != 0) {
            premium = (premium * bit1) / PRECISION;
        }
        if (fraction & (1 << 1) != 0) {
            premium = (premium * bit2) / PRECISION;
        }
        if (fraction & (1 << 2) != 0) {
            premium = (premium * bit3) / PRECISION;
        }
        if (fraction & (1 << 3) != 0) {
            premium = (premium * bit4) / PRECISION;
        }
        if (fraction & (1 << 4) != 0) {
            premium = (premium * bit5) / PRECISION;
        }
        if (fraction & (1 << 5) != 0) {
            premium = (premium * bit6) / PRECISION;
        }
        if (fraction & (1 << 6) != 0) {
            premium = (premium * bit7) / PRECISION;
        }
        if (fraction & (1 << 7) != 0) {
            premium = (premium * bit8) / PRECISION;
        }
        if (fraction & (1 << 8) != 0) {
            premium = (premium * bit9) / PRECISION;
        }
        if (fraction & (1 << 9) != 0) {
            premium = (premium * bit10) / PRECISION;
        }
        if (fraction & (1 << 10) != 0) {
            premium = (premium * bit11) / PRECISION;
        }
        if (fraction & (1 << 11) != 0) {
            premium = (premium * bit12) / PRECISION;
        }
        if (fraction & (1 << 12) != 0) {
            premium = (premium * bit13) / PRECISION;
        }
        if (fraction & (1 << 13) != 0) {
            premium = (premium * bit14) / PRECISION;
        }
        if (fraction & (1 << 14) != 0) {
            premium = (premium * bit15) / PRECISION;
        }
        if (fraction & (1 << 15) != 0) {
            premium = (premium * bit16) / PRECISION;
        }
        return premium;
    }

    function supportsInterface(bytes4 interfaceID)
        public
        view
        virtual
        override
        returns (bool)
    {
        return super.supportsInterface(interfaceID);
    }
}

File 2 of 7 : StablePriceOracle.sol
//SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

import "./IPriceOracle.sol";
import "../utils/StringUtils.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";

interface AggregatorInterface {
    function latestAnswer() external view returns (int256);
}

// Set a price in USD, based on an oracle.
contract StablePriceOracle is IPriceOracle {
    using StringUtils for *;

    // Rent in base price units by length
    uint256 public immutable price1Letter;
    uint256 public immutable price2Letter;
    uint256 public immutable price3Letter;
    uint256 public immutable price4Letter;
    uint256 public immutable price5Letter;

    // Oracle address
    AggregatorInterface public immutable usdOracle;

    event RentPriceChanged(uint256[] prices);

    constructor(AggregatorInterface _usdOracle, uint256[] memory _rentPrices) {
        usdOracle = _usdOracle;
        price1Letter = _rentPrices[0];
        price2Letter = _rentPrices[1];
        price3Letter = _rentPrices[2];
        price4Letter = _rentPrices[3];
        price5Letter = _rentPrices[4];
    }

    function price(
        string calldata name,
        uint256 expires,
        uint256 duration
    ) external view override returns (IPriceOracle.Price memory) {
        uint256 len = name.strlen();
        uint256 basePrice;

        if (len == 1) {
            basePrice = price1Letter * duration;
        } else if (len == 2) {
            basePrice = price2Letter * duration;
        } else if (len == 3) {
            basePrice = price3Letter * duration;
        } else if (len == 4) {
            basePrice = price4Letter * duration;
        } else {
            basePrice = price5Letter * duration;
        }

        basePrice = basePrice * _discount(name, expires, duration) / 100;

        return
            IPriceOracle.Price({
                base: attoUSDToWei(basePrice),
                premium: attoUSDToWei(_premium(name, expires, duration))
            });
    }

    /**
     * @dev Returns the pricing premium in wei.
     */
    function premium(
        string calldata name,
        uint256 expires,
        uint256 duration
    ) external view returns (uint256) {
        return attoUSDToWei(_premium(name, expires, duration));
    }

    /**
     * @dev Returns the pricing premium in internal base units.
     */
    function _premium(
        string memory,
        uint256,
        uint256
    ) internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Returns the pricing discount.
     */
    function discount(
        string calldata name,
        uint256 expires,
        uint256 duration
    ) external view returns (uint256) {
        return _discount(name, expires, duration);
    }

    /**
     * @dev Returns the pricing discount, 0 - 100.
     */
    function _discount(
        string memory,
        uint256,
        uint256
    ) internal view virtual returns (uint256) {
        return 100;
    }

    function attoUSDToWei(uint256 amount) internal view returns (uint256) {
        uint256 croPrice = uint256(usdOracle.latestAnswer());
        return (amount * 1e8) / croPrice;
    }

    function weiToAttoUSD(uint256 amount) internal view returns (uint256) {
        uint256 croPrice = uint256(usdOracle.latestAnswer());
        return (amount * croPrice) / 1e8;
    }

    function supportsInterface(bytes4 interfaceID)
        public
        view
        virtual
        returns (bool)
    {
        return
            interfaceID == type(IERC165).interfaceId ||
            interfaceID == type(IPriceOracle).interfaceId;
    }
}

File 3 of 7 : StringUtils.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

library StringUtils {
    /**
     * @dev Returns the length of a given string
     *
     * @param s The string to measure the length of
     * @return The length of the input string
     */
    function strlen(string memory s) internal pure returns (uint) {
        uint len;
        uint i = 0;
        uint bytelength = bytes(s).length;
        for(len = 0; i < bytelength; len++) {
            bytes1 b = bytes(s)[i];
            if(b < 0x80) {
                i += 1;
            } else if (b < 0xE0) {
                i += 2;
            } else if (b < 0xF0) {
                i += 3;
            } else if (b < 0xF8) {
                i += 4;
            } else if (b < 0xFC) {
                i += 5;
            } else {
                i += 6;
            }
        }
        return len;
    }

    function toLower(string memory s) internal pure returns (string memory) {
        bytes memory bstr = bytes(s);
        bytes memory blower = new bytes(bstr.length);
        for (uint i = 0; i < bstr.length; i++) {
            if ((uint8(bstr[i]) >= 65) && (uint8(bstr[i]) <= 90)) {
                blower[i] = bytes1(uint8(bstr[i]) + 32);
            } else {
                blower[i] = bstr[i];
            }
        }
        return string(blower);
    }

    function toUpper(string memory s) internal pure returns (string memory) {
        bytes memory bstr = bytes(s);
        bytes memory bupper = new bytes(bstr.length);
        for (uint i = 0; i < bstr.length; i++) {
            if ((uint8(bstr[i]) >= 97) && (uint8(bstr[i]) <= 122)) {
                bupper[i] = bytes1(uint8(bstr[i]) - 32);
            } else {
                bupper[i] = bstr[i];
            }
        }
        return string(bupper);
    }
}

File 4 of 7 : IPriceOracle.sol
//SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;

interface IPriceOracle {
    struct Price {
        uint256 base;
        uint256 premium;
    }

    /**
     * @dev Returns the price to register or renew a name.
     * @param name The name being registered or renewed.
     * @param expires When the name presently expires (0 if this is a new registration).
     * @param duration How long the name is being registered or extended for, in seconds.
     * @return base premium tuple of base price + premium price
     */
    function price(
        string calldata name,
        uint256 expires,
        uint256 duration
    ) external view returns (Price calldata);
}

File 5 of 7 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 6 of 7 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 7 of 7 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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

Contract ABI

[{"inputs":[{"internalType":"contract AggregatorInterface","name":"_usdOracle","type":"address"},{"internalType":"uint256[]","name":"_rentPrices","type":"uint256[]"},{"internalType":"uint256","name":"_startPremium","type":"uint256"},{"internalType":"uint256","name":"totalDays","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"RentPriceChanged","type":"event"},{"inputs":[{"internalType":"uint256","name":"startPremium","type":"uint256"},{"internalType":"uint256","name":"elapsed","type":"uint256"}],"name":"decayedPremium","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"discount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"premium","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"price","outputs":[{"components":[{"internalType":"uint256","name":"base","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"}],"internalType":"struct IPriceOracle.Price","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price1Letter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price2Letter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price3Letter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price4Letter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price5Letter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdOracle","outputs":[{"internalType":"contract AggregatorInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6101806040523480156200001257600080fd5b50604051620012c7380380620012c783398101604081905262000035916200012c565b6001600160a01b0384166101205282518490849081906000906200005d576200005d62000227565b6020026020010151608081815250508060018151811062000082576200008262000227565b602002602001015160a0818152505080600281518110620000a757620000a762000227565b602002602001015160c0818152505080600381518110620000cc57620000cc62000227565b602002602001015160e0818152505080600481518110620000f157620000f162000227565b60209081029190910101516101005250506101408290521c61016052506200023d9050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200014357600080fd5b84516001600160a01b03811681146200015b57600080fd5b602086810151919550906001600160401b03808211156200017b57600080fd5b818801915088601f8301126200019057600080fd5b815181811115620001a557620001a562000116565b8060051b604051601f19603f83011681018181108582111715620001cd57620001cd62000116565b60405291825284820192508381018501918b831115620001ec57600080fd5b938501935b828510156200020c57845184529385019392850192620001f1565b60408b01516060909b0151999c909b50975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e05161010051610120516101405161016051610ff4620002d360003960008181610a010152610a2b015260006109d80152600081816101e501526108fa01526000818161015e01526103b9015260008181610258015261038f015260008181610198015261035d015260008181610231015261032b01526000818160fb01526102f20152610ff46000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063a200e15311610081578063c8a4271f1161005b578063c8a4271f146101e0578063cd5d2c741461022c578063d820ed421461025357600080fd5b8063a200e15314610193578063a34e3596146101ba578063a995f1eb146101cd57600080fd5b806350e9a715116100b257806350e9a7151461012b57806359b6b86c1461015957806359e1777c1461018057600080fd5b806301ffc9a7146100ce5780632c0fd74c146100f6575b600080fd5b6100e16100dc366004610d85565b61027a565b60405190151581526020015b60405180910390f35b61011d7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100ed565b61013e610139366004610dc7565b61028b565b604080518251815260209283015192810192909252016100ed565b61011d7f000000000000000000000000000000000000000000000000000000000000000081565b61011d61018e366004610e46565b6104ac565b61011d7f000000000000000000000000000000000000000000000000000000000000000081565b61011d6101c8366004610dc7565b610547565b61011d6101db366004610dc7565b610598565b6102077f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ed565b61011d7f000000000000000000000000000000000000000000000000000000000000000081565b61011d7f000000000000000000000000000000000000000000000000000000000000000081565b6000610285826105dd565b92915050565b604080518082019091526000808252602082015260006102e086868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061067592505050565b905060008160010361031d57610316847f0000000000000000000000000000000000000000000000000000000000000000610e97565b90506103e0565b8160020361034f57610316847f0000000000000000000000000000000000000000000000000000000000000000610e97565b8160030361038157610316847f0000000000000000000000000000000000000000000000000000000000000000610e97565b816004036103b357610316847f0000000000000000000000000000000000000000000000000000000000000000610e97565b6103dd847f0000000000000000000000000000000000000000000000000000000000000000610e97565b90505b606461042588888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a925089915061087c9050565b61042f9083610e97565b6104399190610ed4565b9050604051806040016040528061044f836108f5565b815260200161049f61049a8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508b91506109a29050565b6108f5565b9052979650505050505050565b600080620151806104c5670de0b6b3a764000085610e97565b6104cf9190610ed4565b905060006104e5670de0b6b3a764000083610ed4565b905084811c60006104fe670de0b6b3a764000084610e97565b6105089085610f0f565b90506000670de0b6b3a76400006105228362010000610e97565b61052c9190610ed4565b9050600061053a8285610a65565b9998505050505050505050565b600061058f61049a86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506109a29050565b95945050505050565b600061058f85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525087925086915061087c9050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000148061028557507fffffffff0000000000000000000000000000000000000000000000000000000082167f50e9a715000000000000000000000000000000000000000000000000000000001492915050565b8051600090819081905b8082101561087357600085838151811061069b5761069b610f26565b01602001517fff000000000000000000000000000000000000000000000000000000000000001690507f80000000000000000000000000000000000000000000000000000000000000008110156106fe576106f7600184610f55565b9250610860565b7fe0000000000000000000000000000000000000000000000000000000000000007fff0000000000000000000000000000000000000000000000000000000000000082161015610753576106f7600284610f55565b7ff0000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610156107a8576106f7600384610f55565b7ff8000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610156107fd576106f7600484610f55565b7ffc000000000000000000000000000000000000000000000000000000000000007fff0000000000000000000000000000000000000000000000000000000000000082161015610852576106f7600584610f55565b61085d600684610f55565b92505b508261086b81610f6d565b93505061067f565b50909392505050565b600061088b6276a70084610f55565b92504283111561089d575060646108ee565b60006108ad6301e1855884610ed4565b905060028110156108c25760649150506108ee565b60068110156108d55760469150506108ee565b600a8110156108e85760509150506108ee565b605a9150505b9392505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109879190610fa5565b905080610998846305f5e100610e97565b6108ee9190610ed4565b60006109b16276a70084610f55565b9250428311156109c3575060006108ee565b60006109cf8442610f0f565b905060006109fd7f0000000000000000000000000000000000000000000000000000000000000000836104ac565b90507f00000000000000000000000000000000000000000000000000000000000000008110610a5957610a507f000000000000000000000000000000000000000000000000000000000000000082610f0f565b925050506108ee565b50600095945050505050565b60006001831615610a9857670de0b6b3a7640000610a8b670de0ad151d09418084610e97565b610a959190610ed4565b91505b6002831615610ac957670de0b6b3a7640000610abc670de0a3769959680084610e97565b610ac69190610ed4565b91505b6004831615610afa57670de0b6b3a7640000610aed670de09039a5fa510084610e97565b610af79190610ed4565b91505b6008831615610b2b57670de0b6b3a7640000610b1e670de069c00f3e120084610e97565b610b289190610ed4565b91505b6010831615610b5c57670de0b6b3a7640000610b4f670de01cce21c9440084610e97565b610b599190610ed4565b91505b6020831615610b8d57670de0b6b3a7640000610b80670ddf82ef46ce100084610e97565b610b8a9190610ed4565b91505b6040831615610bbe57670de0b6b3a7640000610bb1670dde4f458f8e8d8084610e97565b610bbb9190610ed4565b91505b6080831615610bef57670de0b6b3a7640000610be2670ddbe84213d5f08084610e97565b610bec9190610ed4565b91505b610100831615610c2157670de0b6b3a7640000610c14670dd71b7aa6df5b8084610e97565b610c1e9190610ed4565b91505b610200831615610c5357670de0b6b3a7640000610c46670dcd86e7f28cde0084610e97565b610c509190610ed4565b91505b610400831615610c8557670de0b6b3a7640000610c78670dba71a3084ad68084610e97565b610c829190610ed4565b91505b610800831615610cb757670de0b6b3a7640000610caa670d94961b13dbde8084610e97565b610cb49190610ed4565b91505b611000831615610ce957670de0b6b3a7640000610cdc670d4a171c35c9838084610e97565b610ce69190610ed4565b91505b612000831615610d1b57670de0b6b3a7640000610d0e670cb9da519ccfb70084610e97565b610d189190610ed4565b91505b614000831615610d4d57670de0b6b3a7640000610d40670bab76d59c18d68084610e97565b610d4a9190610ed4565b91505b618000831615610d7f57670de0b6b3a7640000610d726709d025defee4df8084610e97565b610d7c9190610ed4565b91505b50919050565b600060208284031215610d9757600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146108ee57600080fd5b60008060008060608587031215610ddd57600080fd5b843567ffffffffffffffff80821115610df557600080fd5b818701915087601f830112610e0957600080fd5b813581811115610e1857600080fd5b886020828501011115610e2a57600080fd5b6020928301999098509187013596604001359550909350505050565b60008060408385031215610e5957600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610ecf57610ecf610e68565b500290565b600082610f0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610f2157610f21610e68565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115610f6857610f68610e68565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610f9e57610f9e610e68565b5060010190565b600060208284031215610fb757600080fd5b505191905056fea2646970667358221220656d4e74a70e503b1686a7dfbe2ffbc27470142d0d5c0655a73ccc20436eec1d64736f6c634300080d00330000000000000000000000004636ac8216805fe96de9e7afc62da99096a930f6000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000052b7d2dcc80cd2e4000000000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000b4212f0353737000000000000000000000000000000000000000000000000000120351805525200000000000000000000000000000000000000000000000000000e690e00441d000000000000000000000000000000000000000000000000000005300f47c69a000000000000000000000000000000000000000000000000000000490b149671

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