ETH Price: $3,844.46 (+3.99%)

Contract

0x3Ec8E19306DF5A262b365E433Dd9A2A137a92FC3

Overview

ETH Balance

0.521374769502436742 ETH

ETH Value

$2,004.40 (@ $3,844.46/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
1258374872024-09-25 14:15:5170 days ago1727273751
0x3Ec8E193...137a92FC3
0.001925843581458 ETH
1258372242024-09-25 14:07:0570 days ago1727273225
0x3Ec8E193...137a92FC3
0.001928990829921 ETH
1258371372024-09-25 14:04:1170 days ago1727273051
0x3Ec8E193...137a92FC3
0.00192594976498 ETH
1258370382024-09-25 14:00:5370 days ago1727272853
0x3Ec8E193...137a92FC3
0.001930184647961 ETH
1257184622024-09-22 20:08:2173 days ago1727035701
0x3Ec8E193...137a92FC3
0.001958343668524 ETH
1257183122024-09-22 20:03:2173 days ago1727035401
0x3Ec8E193...137a92FC3
0.001958147969497 ETH
1255238732024-09-18 8:02:0377 days ago1726646523
0x3Ec8E193...137a92FC3
0.004338634526718 ETH
1254941252024-09-17 15:30:2778 days ago1726587027
0x3Ec8E193...137a92FC3
0.021152013194165 ETH
1254604732024-09-16 20:48:4379 days ago1726519723
0x3Ec8E193...137a92FC3
0.004440692572172 ETH
1254434932024-09-16 11:22:4379 days ago1726485763
0x3Ec8E193...137a92FC3
0.021931815063147 ETH
1254430782024-09-16 11:08:5379 days ago1726484933
0x3Ec8E193...137a92FC3
0.021940403174241 ETH
1254419452024-09-16 10:31:0779 days ago1726482667
0x3Ec8E193...137a92FC3
0.021976950436532 ETH
1254414582024-09-16 10:14:5379 days ago1726481693
0x3Ec8E193...137a92FC3
0.022017899985891 ETH
1254414262024-09-16 10:13:4979 days ago1726481629
0x3Ec8E193...137a92FC3
0.022017899985891 ETH
1253659462024-09-14 16:17:4981 days ago1726330669
0x3Ec8E193...137a92FC3
0.004173139853898 ETH
1253657192024-09-14 16:10:1581 days ago1726330215
0x3Ec8E193...137a92FC3
0.004179588388342 ETH
1253656812024-09-14 16:08:5981 days ago1726330139
0x3Ec8E193...137a92FC3
0.004179588388342 ETH
1253558842024-09-14 10:42:2581 days ago1726310545
0x3Ec8E193...137a92FC3
0.004179702372084 ETH
1253309922024-09-13 20:52:4182 days ago1726260761
0x3Ec8E193...137a92FC3
0.004168248675239 ETH
1253309332024-09-13 20:50:4382 days ago1726260643
0x3Ec8E193...137a92FC3
0.004168248675239 ETH
1253308872024-09-13 20:49:1182 days ago1726260551
0x3Ec8E193...137a92FC3
0.004168248675239 ETH
1253065882024-09-13 7:19:1382 days ago1726211953
0x3Ec8E193...137a92FC3
0.002155865357019 ETH
1252948472024-09-13 0:47:5183 days ago1726188471
0x3Ec8E193...137a92FC3
0.004277178078827 ETH
1252929482024-09-12 23:44:3383 days ago1726184673
0x3Ec8E193...137a92FC3
0.002135703535395 ETH
1252830852024-09-12 18:15:4783 days ago1726164947
0x3Ec8E193...137a92FC3
0.002148643624611 ETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PermissionedStableFeeMiddleware

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
london EvmVersion
File 1 of 8 : PermissionedStableFeeMiddleware.sol
// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity 0.8.14;

import { AggregatorV3Interface } from "chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
import { ReentrancyGuard } from "openzeppelin-contracts/contracts/security/ReentrancyGuard.sol";

import { ICyberIdMiddleware } from "../../interfaces/ICyberIdMiddleware.sol";
import { ITokenReceiver } from "../../interfaces/ITokenReceiver.sol";

import { DataTypes } from "../../libraries/DataTypes.sol";

import { LowerCaseCyberIdMiddleware } from "./base/LowerCaseCyberIdMiddleware.sol";
import { EIP712 } from "../../base/EIP712.sol";

contract PermissionedStableFeeMiddleware is
    LowerCaseCyberIdMiddleware,
    EIP712,
    ReentrancyGuard
{
    /*//////////////////////////////////////////////////////////////
                            STORAGE
    //////////////////////////////////////////////////////////////*/

    /**
     * @notice ETH/USD Oracle address.
     */
    AggregatorV3Interface public immutable usdOracle;

    /**
     * @notice TokenReceiver contract address.
     */
    ITokenReceiver public immutable tokenReceiver;

    /**
     * If true, the middleware will charge the fee to token receiver.
     */
    bool public rebateEnabled;

    /**
     * @notice The address that receives the fee.
     */
    address public recipient;

    /**
     * @notice The price of each letter in USD.
     */
    uint256 public price1Letter;
    uint256 public price2Letter;
    uint256 public price3Letter;
    uint256 public price4Letter;
    uint256 public price5Letter;
    uint256 public price6Letter;
    uint256 public price7To11Letter;
    uint256 public price12AndMoreLetter;

    /**
     * @notice Signer that approve meta transactions.
     */
    address public signer;

    /**
     * @notice User nonces that prevents signature replay.
     */
    mapping(address => uint256) public nonces;

    bytes32 internal constant _REGISTER_TYPEHASH =
        keccak256(
            "register(string cid,address to,uint256 nonce,uint256 deadline,bool free)"
        );

    /*//////////////////////////////////////////////////////////////
                            EVENTS
    //////////////////////////////////////////////////////////////*/

    event SignerChanged(address indexed signer);

    event StableFeeChanged(
        bool rebateEnabled,
        address indexed recipient,
        uint256 price1Letter,
        uint256 price2Letter,
        uint256 price3Letter,
        uint256 price4Letter,
        uint256 price5Letter,
        uint256 price6Letter,
        uint256 price7To11Letter,
        uint256 price12AndMoreLetter
    );

    /*//////////////////////////////////////////////////////////////
                            CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(
        address _oracleAddress,
        address _tokenReceiver,
        address cyberId
    ) LowerCaseCyberIdMiddleware(cyberId) {
        usdOracle = AggregatorV3Interface(_oracleAddress);
        tokenReceiver = ITokenReceiver(_tokenReceiver);
    }

    /*//////////////////////////////////////////////////////////////
                    ICyberIdMiddleware OVERRIDES
    //////////////////////////////////////////////////////////////*/

    /// @inheritdoc ICyberIdMiddleware
    function setMwData(bytes calldata data) external override onlyNameRegistry {
        (
            bool _rebateEnabled,
            address newSigner,
            address _recipient,
            uint256[8] memory prices
        ) = abi.decode(data, (bool, address, address, uint256[8]));
        require(newSigner != address(0), "INVALID_SIGNER");
        signer = newSigner;
        rebateEnabled = _rebateEnabled;
        emit SignerChanged(signer);
        recipient = _recipient;
        price1Letter = prices[0];
        price2Letter = prices[1];
        price3Letter = prices[2];
        price4Letter = prices[3];
        price5Letter = prices[4];
        price6Letter = prices[5];
        price7To11Letter = prices[6];
        price12AndMoreLetter = prices[7];
        emit StableFeeChanged(
            _rebateEnabled,
            _recipient,
            prices[0],
            prices[1],
            prices[2],
            prices[3],
            prices[4],
            prices[5],
            prices[6],
            prices[7]
        );
    }

    /// @inheritdoc ICyberIdMiddleware
    function preRegister(
        DataTypes.RegisterCyberIdParams calldata params,
        bytes calldata data
    ) external payable override onlyNameRegistry returns (uint256) {
        DataTypes.EIP712Signature memory sig;
        bool free;
        (sig.v, sig.r, sig.s, sig.deadline, free) = abi.decode(
            data,
            (uint8, bytes32, bytes32, uint256, bool)
        );

        _requiresExpectedSigner(
            _hashTypedDataV4(
                keccak256(
                    abi.encode(
                        _REGISTER_TYPEHASH,
                        keccak256(bytes(params.cid)),
                        params.to,
                        nonces[params.to]++,
                        sig.deadline,
                        free
                    )
                )
            ),
            signer,
            sig.v,
            sig.r,
            sig.s,
            sig.deadline
        );
        if (free) {
            return 0;
        } else {
            uint256 cost = getPriceWei(params.cid);
            _chargeAndRefundOverPayment(cost, params.to, params.msgSender);
            return cost;
        }
    }

    /// @inheritdoc ICyberIdMiddleware
    function skipCommit() external pure virtual override returns (bool) {
        return true;
    }

    /*//////////////////////////////////////////////////////////////
                            PUBLIC VIEW
    //////////////////////////////////////////////////////////////*/

    function getPriceWei(string calldata cid) public view returns (uint256) {
        return _attoUSDToWei(_getUSDPrice(cid));
    }

    /*//////////////////////////////////////////////////////////////
                             INTERNAL LOGIC
    //////////////////////////////////////////////////////////////*/

    function _getUSDPrice(string calldata cid) internal view returns (uint256) {
        // LowerCaseCyberIdMiddleware ensures that each cid character only occupies 1 byte
        uint256 len = bytes(cid).length;
        uint256 usdPrice;

        if (len >= 12) {
            usdPrice = price12AndMoreLetter;
        } else if (len >= 7) {
            usdPrice = price7To11Letter;
        } else if (len == 6) {
            usdPrice = price6Letter;
        } else if (len == 5) {
            usdPrice = price5Letter;
        } else if (len == 4) {
            usdPrice = price4Letter;
        } else if (len == 3) {
            usdPrice = price3Letter;
        } else if (len == 2) {
            usdPrice = price2Letter;
        } else {
            usdPrice = price1Letter;
        }
        return usdPrice;
    }

    function _getPrice() internal view returns (int256) {
        // prettier-ignore
        (
            uint80 roundID,
            int price,
            /* uint startedAt */,
            uint updatedAt,
            /*uint80 answeredInRound*/
        ) = usdOracle.latestRoundData();
        require(roundID != 0, "INVALID_ORACLE_ROUND_ID");
        require(price > 0, "INVALID_ORACLE_PRICE");
        require(updatedAt > block.timestamp - 3 hours, "STALE_ORACLE_PRICE");
        return price;
    }

    function _attoUSDToWei(uint256 amount) internal view returns (uint256) {
        uint256 ethPrice = uint256(_getPrice());
        return (amount * 1e8) / ethPrice;
    }

    function _chargeAndRefundOverPayment(
        uint256 cost,
        address depositTo,
        address refundTo
    ) internal {
        require(msg.value >= cost, "INSUFFICIENT_FUNDS");
        /**
         * Already checked msg.value >= cost
         */
        uint256 overpayment;
        unchecked {
            overpayment = msg.value - cost;
        }

        if (overpayment > 0) {
            (bool refundSuccess, ) = refundTo.call{ value: overpayment }("");
            require(refundSuccess, "REFUND_FAILED");
        }
        if (rebateEnabled) {
            tokenReceiver.depositTo{ value: cost }(depositTo);
        } else {
            (bool chargeSuccess, ) = recipient.call{ value: cost }("");
            require(chargeSuccess, "CHARGE_FAILED");
        }
    }

    /*//////////////////////////////////////////////////////////////
                    EIP712 OVERRIDES
    //////////////////////////////////////////////////////////////*/
    function _domainSeparatorName()
        internal
        pure
        override
        returns (string memory)
    {
        return "PermissionedStableFeeMw";
    }
}

File 2 of 8 : AggregatorV3Interface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface AggregatorV3Interface {
  function decimals() external view returns (uint8);

  function description() external view returns (string memory);

  function version() external view returns (uint256);

  function getRoundData(uint80 _roundId)
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );

  function latestRoundData()
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );
}

File 3 of 8 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 4 of 8 : ICyberIdMiddleware.sol
// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity 0.8.14;

import { DataTypes } from "../libraries/DataTypes.sol";

interface ICyberIdMiddleware {
    /**
     * @notice Sets data for middleware.
     *
     * @param data Extra data to set.
     */
    function setMwData(bytes calldata data) external;

    /**
     * @notice Indicates if commit-reveal should be skipped.
     */
    function skipCommit() external pure returns (bool);

    /**
     * @notice Process that runs before the register happens.
     *
     * @param params The params for register cid.
     * @param data Extra data to process.
     */
    function preRegister(
        DataTypes.RegisterCyberIdParams calldata params,
        bytes calldata data
    ) external payable returns (uint256);

    /**
     * @notice Validates the name pattern.
     *
     * @param name The name to validate.
     */
    function namePatternValid(
        string calldata name
    ) external view returns (bool);
}

File 5 of 8 : ITokenReceiver.sol
// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity 0.8.14;

/**
 * @title TokenReceiver
 * @author CyberConnect
 * @notice A contract that receive native token and record the amount.
 * The deposit only record the cumulative amount and withdraw won't affect
 * the deposit value.
 */
interface ITokenReceiver {
    function depositTo(address to) external payable;

    function withdraw(address to, uint256 amount) external;
}

File 6 of 8 : DataTypes.sol
// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity 0.8.14;

library DataTypes {
    struct EIP712Signature {
        uint8 v;
        bytes32 r;
        bytes32 s;
        uint256 deadline;
    }

    struct MetadataPair {
        string key;
        string value;
    }

    struct RegisterNameParams {
        address msgSender;
        string name;
        bytes32 parentNode;
        address to;
    }

    struct RegisterCyberIdParams {
        address msgSender;
        string cid;
        address to;
    }

    struct BatchRegisterCyberIdParams {
        string cid;
        address to;
        address resolver;
    }
}

File 7 of 8 : LowerCaseCyberIdMiddleware.sol
// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity 0.8.14;

import { ICyberIdMiddleware } from "../../../interfaces/ICyberIdMiddleware.sol";

abstract contract LowerCaseCyberIdMiddleware is ICyberIdMiddleware {
    /*//////////////////////////////////////////////////////////////
                            STORAGE
    //////////////////////////////////////////////////////////////*/

    address public immutable NAME_REGISTRY; // solhint-disable-line

    /*//////////////////////////////////////////////////////////////
                            CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(address nameRegistry) {
        NAME_REGISTRY = nameRegistry;
    }

    /*//////////////////////////////////////////////////////////////
                            MODIFIERS
    //////////////////////////////////////////////////////////////*/

    /**
     * @dev Reverts if called by any account other than the name registry.
     */
    modifier onlyNameRegistry() {
        require(NAME_REGISTRY == msg.sender, "NOT_NAME_REGISTRY");
        _;
    }

    /*//////////////////////////////////////////////////////////////
                    ICyberIdMiddleware OVERRIDES
    //////////////////////////////////////////////////////////////*/

    /// @inheritdoc ICyberIdMiddleware
    function skipCommit() external pure virtual override returns (bool) {
        return false;
    }

    /// @inheritdoc ICyberIdMiddleware
    function namePatternValid(
        string calldata name
    ) external pure virtual override returns (bool) {
        bytes memory byteName = bytes(name);

        if (byteName.length > 20 || byteName.length < 1) {
            return false;
        }

        uint256 byteNameLength = byteName.length;
        for (uint256 i = 0; i < byteNameLength; ) {
            bytes1 b = byteName[i];
            if ((b >= "0" && b <= "9") || (b >= "a" && b <= "z") || b == "_") {
                unchecked {
                    ++i;
                }
            } else {
                return false;
            }
        }
        return true;
    }
}

File 8 of 8 : EIP712.sol
// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity 0.8.14;

import { DataTypes } from "../libraries/DataTypes.sol";

abstract contract EIP712 {
    /*//////////////////////////////////////////////////////////////
                                CONSTANTS
    //////////////////////////////////////////////////////////////*/
    bytes32 internal constant _HASHED_VERSION = keccak256("1");
    bytes32 private constant _TYPE_HASH =
        keccak256(
            "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
        );

    /*//////////////////////////////////////////////////////////////
                            PUBLIC VIEW
    //////////////////////////////////////////////////////////////*/

    /**
     * @notice Returns the contract's {EIP712} domain separator.
     *
     * @return bytes32 the contract's {EIP712} domain separator.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() public view returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    _TYPE_HASH,
                    keccak256(bytes(_domainSeparatorName())),
                    _HASHED_VERSION,
                    block.chainid,
                    address(this)
                )
            );
    }

    /*//////////////////////////////////////////////////////////////
                              INTERNAL
    //////////////////////////////////////////////////////////////*/

    function _requiresExpectedSigner(
        bytes32 digest,
        address expectedSigner,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint256 deadline
    ) internal view {
        require(deadline >= block.timestamp, "DEADLINE_EXCEEDED");
        require(
            uint256(s) <=
                0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,
            "INVALID_SIGNATURE_S_VAULE"
        );

        address recoveredAddress = ecrecover(digest, v, r, s);
        require(recoveredAddress != address(0), "INVALID_RECOVERED_ADDRESS");
        require(recoveredAddress == expectedSigner, "INVALID_SIGNATURE");
    }

    function _requiresExpectedSigner(
        bytes32 digest,
        address expectedSigner,
        DataTypes.EIP712Signature calldata sig
    ) internal view {
        _requiresExpectedSigner(
            digest,
            expectedSigner,
            sig.v,
            sig.r,
            sig.s,
            sig.deadline
        );
    }

    function _hashTypedDataV4(
        bytes32 structHash
    ) internal view virtual returns (bytes32) {
        return
            keccak256(
                abi.encodePacked("\x19\x01", DOMAIN_SEPARATOR(), structHash)
            );
    }

    function _domainSeparatorName()
        internal
        view
        virtual
        returns (string memory);
}

Settings
{
  "remappings": [
    "@ens/=lib/ens-contracts/contracts/",
    "@ensdomains/=lib/",
    "@openzeppelin/=lib/openzeppelin-contracts/",
    "buffer/=lib/buffer/contracts/",
    "chainlink/=lib/chainlink/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "ens-contracts/=lib/ens-contracts/contracts/",
    "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "solmate/=lib/solmate/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_oracleAddress","type":"address"},{"internalType":"address","name":"_tokenReceiver","type":"address"},{"internalType":"address","name":"cyberId","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"signer","type":"address"}],"name":"SignerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"rebateEnabled","type":"bool"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"price1Letter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price2Letter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price3Letter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price4Letter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price5Letter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price6Letter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price7To11Letter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price12AndMoreLetter","type":"uint256"}],"name":"StableFeeChanged","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME_REGISTRY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"cid","type":"string"}],"name":"getPriceWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"namePatternValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"msgSender","type":"address"},{"internalType":"string","name":"cid","type":"string"},{"internalType":"address","name":"to","type":"address"}],"internalType":"struct DataTypes.RegisterCyberIdParams","name":"params","type":"tuple"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"preRegister","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"price12AndMoreLetter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"price6Letter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price7To11Letter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebateEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setMwData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"skipCommit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tokenReceiver","outputs":[{"internalType":"contract ITokenReceiver","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdOracle","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60e06040523480156200001157600080fd5b50604051620015e1380380620015e1833981016040819052620000349162000074565b6001600160a01b03908116608052600160005591821660a0521660c052620000be565b80516001600160a01b03811681146200006f57600080fd5b919050565b6000806000606084860312156200008a57600080fd5b620000958462000057565b9250620000a56020850162000057565b9150620000b56040850162000057565b90509250925092565b60805160a05160c0516114d76200010a600039600081816103330152610e560152600081816103670152610f610152600081816102e9015281816104c7015261070401526114d76000f3fe6080604052600436106101295760003560e01c806366d003ac116100ab578063a3e295bc1161006f578063a3e295bc14610321578063c8a4271f14610355578063cb8dd1e914610389578063cd5d2c741461039f578063d820ed42146103b5578063f1ebaa66146103cb57600080fd5b806366d003ac146102655780637ac3e6ea1461028a5780637ecebe00146102aa578063a05c2616146102d7578063a200e1531461030b57600080fd5b8063316a7878116100f2578063316a7878146101ef5780633644e515146102055780633da6aaed1461021a57806342a0d9b41461022d57806359b6b86c1461024f57600080fd5b8062d48e461461012e5780630261d9421461016157806306534e0c14610177578063238ac933146101a15780632c0fd74c146101d9575b600080fd5b34801561013a57600080fd5b5061014e61014936600461112b565b6103df565b6040519081526020015b60405180910390f35b34801561016d57600080fd5b5061014e60075481565b34801561018357600080fd5b506001546101919060ff1681565b6040519015158152602001610158565b3480156101ad57600080fd5b50600a546101c1906001600160a01b031681565b6040516001600160a01b039091168152602001610158565b3480156101e557600080fd5b5061014e60025481565b3480156101fb57600080fd5b5061014e60085481565b34801561021157600080fd5b5061014e6103fc565b61014e61022836600461116d565b6104c3565b34801561023957600080fd5b5061024d61024836600461112b565b610702565b005b34801561025b57600080fd5b5061014e60065481565b34801561027157600080fd5b506001546101c19061010090046001600160a01b031681565b34801561029657600080fd5b506101916102a536600461112b565b61095d565b3480156102b657600080fd5b5061014e6102c53660046111f6565b600b6020526000908152604090205481565b3480156102e357600080fd5b506101c17f000000000000000000000000000000000000000000000000000000000000000081565b34801561031757600080fd5b5061014e60045481565b34801561032d57600080fd5b506101c17f000000000000000000000000000000000000000000000000000000000000000081565b34801561036157600080fd5b506101c17f000000000000000000000000000000000000000000000000000000000000000081565b34801561039557600080fd5b5061014e60095481565b3480156103ab57600080fd5b5061014e60035481565b3480156103c157600080fd5b5061014e60055481565b3480156103d757600080fd5b506001610191565b60006103f36103ee8484610a89565b610b11565b90505b92915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61045960408051808201909152601781527f5065726d697373696f6e6564537461626c654665654d77000000000000000000602082015290565b80516020918201206040805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146105365760405162461bcd60e51b81526020600482015260116024820152704e4f545f4e414d455f524547495354525960781b60448201526064015b60405180910390fd5b60408051608081018252600080825260208201819052918101829052606081018290529061056685850186611228565b6060870191909152604086019190915260208086019290925260ff90921684529091506106a690610681907f523d280a8c9ac3e07cc82178e6169bbac469c25a6c09aea3e72b2fd602b02dc0906105bf908a018a611280565b6040516105cd9291906112c7565b60405180910390208960400160208101906105e891906111f6565b600b60006105fc60608e0160408f016111f6565b6001600160a01b0316815260208101919091526040016000908120805491610623836112ed565b909155506060808901516040805160208101979097528601949094526001600160a01b0390921691840191909152608083015260a082015283151560c082015260e00160405160208183030381529060405280519060200120610b37565b600a5484516020860151604087015160608801516001600160a01b0390941693610b7e565b80156106b7576000925050506106fb565b60006106c96101496020890189611280565b90506106f1816106df60608a0160408b016111f6565b6106ec60208b018b6111f6565b610d47565b92506106fb915050565b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461076e5760405162461bcd60e51b81526020600482015260116024820152704e4f545f4e414d455f524547495354525960781b604482015260640161052d565b600080808061077f8587018761131c565b929650909450925090506001600160a01b0383166107d05760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b604482015260640161052d565b600a80546001600160a01b0319166001600160a01b0385169081179091556001805460ff19168615151790556040517f5719a5656c5cfdaafa148ecf366fd3b0a7fae06449ce2a46225977fb7417e29d90600090a260018054610100600160a81b0319166101006001600160a01b03851602179055806000602002015160025580600160200201516003558060026020020151600455806003602002015160055580600460200201516006558060056020020151600755806006602002015160085580600760200201516009556001600160a01b0382167f097c620e2967565771aff084cc24984f90c9328ab70104448d21c3a79cf06e468583600060200201518460016020020151856002602002015186600360200201518760046020020151886005602002015189600660200201518a600760209081029190910151604080519a15158b52918a01989098528801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200160405180910390a2505050505050565b60008083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091119050806109ad575060018151105b156109bc5760009150506103f6565b805160005b81811015610a7d5760008382815181106109dd576109dd6113d5565b01602001516001600160f81b0319169050600360fc1b8110801590610a105750603960f81b6001600160f81b0319821611155b80610a425750606160f81b6001600160f81b0319821610801590610a425750603d60f91b6001600160f81b0319821611155b80610a5a5750605f60f81b6001600160f81b03198216145b15610a6a57816001019150610a77565b60009450505050506103f6565b506109c1565b50600195945050505050565b60008181600c8210610a9e5750600954610b09565b60078210610aaf5750600854610b09565b81600603610ac05750600754610b09565b81600503610ad15750600654610b09565b81600403610ae25750600554610b09565b81600303610af35750600454610b09565b81600203610b045750600354610b09565b506002545b949350505050565b600080610b1c610f59565b905080610b2d846305f5e1006113eb565b6106fb919061140a565b6000610b416103fc565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b42811015610bc25760405162461bcd60e51b8152602060048201526011602482015270111150511312539157d15610d151511151607a1b604482015260640161052d565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115610c325760405162461bcd60e51b815260206004820152601960248201527f494e56414c49445f5349474e41545552455f535f5641554c4500000000000000604482015260640161052d565b6040805160008082526020820180845289905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015610c86573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ce95760405162461bcd60e51b815260206004820152601960248201527f494e56414c49445f5245434f56455245445f4144445245535300000000000000604482015260640161052d565b856001600160a01b0316816001600160a01b031614610d3e5760405162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015260640161052d565b50505050505050565b82341015610d8c5760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f46554e445360701b604482015260640161052d565b34838103908414610e2c576000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610de4576040519150601f19603f3d011682016040523d82523d6000602084013e610de9565b606091505b5050905080610e2a5760405162461bcd60e51b815260206004820152600d60248201526c14915195539117d19052531151609a1b604482015260640161052d565b505b60015460ff1615610eb95760405163b760faf960e01b81526001600160a01b0384811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063b760faf99086906024016000604051808303818588803b158015610e9b57600080fd5b505af1158015610eaf573d6000803e3d6000fd5b5050505050610f53565b60015460405160009161010090046001600160a01b03169086908381818185875af1925050503d8060008114610f0b576040519150601f19603f3d011682016040523d82523d6000602084013e610f10565b606091505b5050905080610f515760405162461bcd60e51b815260206004820152600d60248201526c10d2105491d157d19052531151609a1b604482015260640161052d565b505b50505050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190611446565b50935050925092508269ffffffffffffffffffff166000036110455760405162461bcd60e51b815260206004820152601760248201527f494e56414c49445f4f5241434c455f524f554e445f4944000000000000000000604482015260640161052d565b6000821361108c5760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4f5241434c455f505249434560601b604482015260640161052d565b611098612a304261148a565b81116110db5760405162461bcd60e51b81526020600482015260126024820152715354414c455f4f5241434c455f505249434560701b604482015260640161052d565b5092915050565b60008083601f8401126110f457600080fd5b50813567ffffffffffffffff81111561110c57600080fd5b60208301915083602082850101111561112457600080fd5b9250929050565b6000806020838503121561113e57600080fd5b823567ffffffffffffffff81111561115557600080fd5b611161858286016110e2565b90969095509350505050565b60008060006040848603121561118257600080fd5b833567ffffffffffffffff8082111561119a57600080fd5b90850190606082880312156111ae57600080fd5b909350602085013590808211156111c457600080fd5b506111d1868287016110e2565b9497909650939450505050565b6001600160a01b03811681146111f357600080fd5b50565b60006020828403121561120857600080fd5b81356106fb816111de565b8035801515811461122357600080fd5b919050565b600080600080600060a0868803121561124057600080fd5b853560ff8116811461125157600080fd5b945060208601359350604086013592506060860135915061127460808701611213565b90509295509295909350565b6000808335601e1984360301811261129757600080fd5b83018035915067ffffffffffffffff8211156112b257600080fd5b60200191503681900382131561112457600080fd5b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b6000600182016112ff576112ff6112d7565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60008060008061016080868803121561133457600080fd5b61133d86611213565b945060208087013561134e816111de565b9450604087013561135e816111de565b9350607f8701881361136f57600080fd5b604051610100810181811067ffffffffffffffff8211171561139357611393611306565b6040529187019180898411156113a857600080fd5b606089015b848110156113c457803582529083019083016113ad565b505080935050505092959194509250565b634e487b7160e01b600052603260045260246000fd5b6000816000190483118215151615611405576114056112d7565b500290565b60008261142757634e487b7160e01b600052601260045260246000fd5b500490565b805169ffffffffffffffffffff8116811461122357600080fd5b600080600080600060a0868803121561145e57600080fd5b6114678661142c565b94506020860151935060408601519250606086015191506112746080870161142c565b60008282101561149c5761149c6112d7565b50039056fea2646970667358221220977a9e22a7b5c652c597bf6aedc9ca83df6f932a6b8a8b5509cfddebc3026d5b64736f6c634300080e003300000000000000000000000013e3ee699d1909e989722e753853ae30b17e08c5000000000000000000000000cd97405fb58e94954e825e46db192b916a45d412000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b24

Deployed Bytecode

0x6080604052600436106101295760003560e01c806366d003ac116100ab578063a3e295bc1161006f578063a3e295bc14610321578063c8a4271f14610355578063cb8dd1e914610389578063cd5d2c741461039f578063d820ed42146103b5578063f1ebaa66146103cb57600080fd5b806366d003ac146102655780637ac3e6ea1461028a5780637ecebe00146102aa578063a05c2616146102d7578063a200e1531461030b57600080fd5b8063316a7878116100f2578063316a7878146101ef5780633644e515146102055780633da6aaed1461021a57806342a0d9b41461022d57806359b6b86c1461024f57600080fd5b8062d48e461461012e5780630261d9421461016157806306534e0c14610177578063238ac933146101a15780632c0fd74c146101d9575b600080fd5b34801561013a57600080fd5b5061014e61014936600461112b565b6103df565b6040519081526020015b60405180910390f35b34801561016d57600080fd5b5061014e60075481565b34801561018357600080fd5b506001546101919060ff1681565b6040519015158152602001610158565b3480156101ad57600080fd5b50600a546101c1906001600160a01b031681565b6040516001600160a01b039091168152602001610158565b3480156101e557600080fd5b5061014e60025481565b3480156101fb57600080fd5b5061014e60085481565b34801561021157600080fd5b5061014e6103fc565b61014e61022836600461116d565b6104c3565b34801561023957600080fd5b5061024d61024836600461112b565b610702565b005b34801561025b57600080fd5b5061014e60065481565b34801561027157600080fd5b506001546101c19061010090046001600160a01b031681565b34801561029657600080fd5b506101916102a536600461112b565b61095d565b3480156102b657600080fd5b5061014e6102c53660046111f6565b600b6020526000908152604090205481565b3480156102e357600080fd5b506101c17f000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b2481565b34801561031757600080fd5b5061014e60045481565b34801561032d57600080fd5b506101c17f000000000000000000000000cd97405fb58e94954e825e46db192b916a45d41281565b34801561036157600080fd5b506101c17f00000000000000000000000013e3ee699d1909e989722e753853ae30b17e08c581565b34801561039557600080fd5b5061014e60095481565b3480156103ab57600080fd5b5061014e60035481565b3480156103c157600080fd5b5061014e60055481565b3480156103d757600080fd5b506001610191565b60006103f36103ee8484610a89565b610b11565b90505b92915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61045960408051808201909152601781527f5065726d697373696f6e6564537461626c654665654d77000000000000000000602082015290565b80516020918201206040805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60007f000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b246001600160a01b031633146105365760405162461bcd60e51b81526020600482015260116024820152704e4f545f4e414d455f524547495354525960781b60448201526064015b60405180910390fd5b60408051608081018252600080825260208201819052918101829052606081018290529061056685850186611228565b6060870191909152604086019190915260208086019290925260ff90921684529091506106a690610681907f523d280a8c9ac3e07cc82178e6169bbac469c25a6c09aea3e72b2fd602b02dc0906105bf908a018a611280565b6040516105cd9291906112c7565b60405180910390208960400160208101906105e891906111f6565b600b60006105fc60608e0160408f016111f6565b6001600160a01b0316815260208101919091526040016000908120805491610623836112ed565b909155506060808901516040805160208101979097528601949094526001600160a01b0390921691840191909152608083015260a082015283151560c082015260e00160405160208183030381529060405280519060200120610b37565b600a5484516020860151604087015160608801516001600160a01b0390941693610b7e565b80156106b7576000925050506106fb565b60006106c96101496020890189611280565b90506106f1816106df60608a0160408b016111f6565b6106ec60208b018b6111f6565b610d47565b92506106fb915050565b9392505050565b7f000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b246001600160a01b0316331461076e5760405162461bcd60e51b81526020600482015260116024820152704e4f545f4e414d455f524547495354525960781b604482015260640161052d565b600080808061077f8587018761131c565b929650909450925090506001600160a01b0383166107d05760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b604482015260640161052d565b600a80546001600160a01b0319166001600160a01b0385169081179091556001805460ff19168615151790556040517f5719a5656c5cfdaafa148ecf366fd3b0a7fae06449ce2a46225977fb7417e29d90600090a260018054610100600160a81b0319166101006001600160a01b03851602179055806000602002015160025580600160200201516003558060026020020151600455806003602002015160055580600460200201516006558060056020020151600755806006602002015160085580600760200201516009556001600160a01b0382167f097c620e2967565771aff084cc24984f90c9328ab70104448d21c3a79cf06e468583600060200201518460016020020151856002602002015186600360200201518760046020020151886005602002015189600660200201518a600760209081029190910151604080519a15158b52918a01989098528801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200160405180910390a2505050505050565b60008083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060149091119050806109ad575060018151105b156109bc5760009150506103f6565b805160005b81811015610a7d5760008382815181106109dd576109dd6113d5565b01602001516001600160f81b0319169050600360fc1b8110801590610a105750603960f81b6001600160f81b0319821611155b80610a425750606160f81b6001600160f81b0319821610801590610a425750603d60f91b6001600160f81b0319821611155b80610a5a5750605f60f81b6001600160f81b03198216145b15610a6a57816001019150610a77565b60009450505050506103f6565b506109c1565b50600195945050505050565b60008181600c8210610a9e5750600954610b09565b60078210610aaf5750600854610b09565b81600603610ac05750600754610b09565b81600503610ad15750600654610b09565b81600403610ae25750600554610b09565b81600303610af35750600454610b09565b81600203610b045750600354610b09565b506002545b949350505050565b600080610b1c610f59565b905080610b2d846305f5e1006113eb565b6106fb919061140a565b6000610b416103fc565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b42811015610bc25760405162461bcd60e51b8152602060048201526011602482015270111150511312539157d15610d151511151607a1b604482015260640161052d565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115610c325760405162461bcd60e51b815260206004820152601960248201527f494e56414c49445f5349474e41545552455f535f5641554c4500000000000000604482015260640161052d565b6040805160008082526020820180845289905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015610c86573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ce95760405162461bcd60e51b815260206004820152601960248201527f494e56414c49445f5245434f56455245445f4144445245535300000000000000604482015260640161052d565b856001600160a01b0316816001600160a01b031614610d3e5760405162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015260640161052d565b50505050505050565b82341015610d8c5760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f46554e445360701b604482015260640161052d565b34838103908414610e2c576000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610de4576040519150601f19603f3d011682016040523d82523d6000602084013e610de9565b606091505b5050905080610e2a5760405162461bcd60e51b815260206004820152600d60248201526c14915195539117d19052531151609a1b604482015260640161052d565b505b60015460ff1615610eb95760405163b760faf960e01b81526001600160a01b0384811660048301527f000000000000000000000000cd97405fb58e94954e825e46db192b916a45d412169063b760faf99086906024016000604051808303818588803b158015610e9b57600080fd5b505af1158015610eaf573d6000803e3d6000fd5b5050505050610f53565b60015460405160009161010090046001600160a01b03169086908381818185875af1925050503d8060008114610f0b576040519150601f19603f3d011682016040523d82523d6000602084013e610f10565b606091505b5050905080610f515760405162461bcd60e51b815260206004820152600d60248201526c10d2105491d157d19052531151609a1b604482015260640161052d565b505b50505050565b6000806000807f00000000000000000000000013e3ee699d1909e989722e753853ae30b17e08c56001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190611446565b50935050925092508269ffffffffffffffffffff166000036110455760405162461bcd60e51b815260206004820152601760248201527f494e56414c49445f4f5241434c455f524f554e445f4944000000000000000000604482015260640161052d565b6000821361108c5760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4f5241434c455f505249434560601b604482015260640161052d565b611098612a304261148a565b81116110db5760405162461bcd60e51b81526020600482015260126024820152715354414c455f4f5241434c455f505249434560701b604482015260640161052d565b5092915050565b60008083601f8401126110f457600080fd5b50813567ffffffffffffffff81111561110c57600080fd5b60208301915083602082850101111561112457600080fd5b9250929050565b6000806020838503121561113e57600080fd5b823567ffffffffffffffff81111561115557600080fd5b611161858286016110e2565b90969095509350505050565b60008060006040848603121561118257600080fd5b833567ffffffffffffffff8082111561119a57600080fd5b90850190606082880312156111ae57600080fd5b909350602085013590808211156111c457600080fd5b506111d1868287016110e2565b9497909650939450505050565b6001600160a01b03811681146111f357600080fd5b50565b60006020828403121561120857600080fd5b81356106fb816111de565b8035801515811461122357600080fd5b919050565b600080600080600060a0868803121561124057600080fd5b853560ff8116811461125157600080fd5b945060208601359350604086013592506060860135915061127460808701611213565b90509295509295909350565b6000808335601e1984360301811261129757600080fd5b83018035915067ffffffffffffffff8211156112b257600080fd5b60200191503681900382131561112457600080fd5b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b6000600182016112ff576112ff6112d7565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60008060008061016080868803121561133457600080fd5b61133d86611213565b945060208087013561134e816111de565b9450604087013561135e816111de565b9350607f8701881361136f57600080fd5b604051610100810181811067ffffffffffffffff8211171561139357611393611306565b6040529187019180898411156113a857600080fd5b606089015b848110156113c457803582529083019083016113ad565b505080935050505092959194509250565b634e487b7160e01b600052603260045260246000fd5b6000816000190483118215151615611405576114056112d7565b500290565b60008261142757634e487b7160e01b600052601260045260246000fd5b500490565b805169ffffffffffffffffffff8116811461122357600080fd5b600080600080600060a0868803121561145e57600080fd5b6114678661142c565b94506020860151935060408601519250606086015191506112746080870161142c565b60008282101561149c5761149c6112d7565b50039056fea2646970667358221220977a9e22a7b5c652c597bf6aedc9ca83df6f932a6b8a8b5509cfddebc3026d5b64736f6c634300080e0033

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

00000000000000000000000013e3ee699d1909e989722e753853ae30b17e08c5000000000000000000000000cd97405fb58e94954e825e46db192b916a45d412000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b24

-----Decoded View---------------
Arg [0] : _oracleAddress (address): 0x13e3Ee699D1909E989722E753853AE30b17e08c5
Arg [1] : _tokenReceiver (address): 0xcd97405Fb58e94954E825E46dB192b916A45d412
Arg [2] : cyberId (address): 0xe55793f55dF1F1B5037ebA41881663583d4f9B24

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000013e3ee699d1909e989722e753853ae30b17e08c5
Arg [1] : 000000000000000000000000cd97405fb58e94954e825e46db192b916a45d412
Arg [2] : 000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b24


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
[ 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.