ETH Price: $4,018.17 (+6.04%)

Contract

0x40B9AD5DF1cc2EFacBFCc586e1b1B9E98BA72579

Overview

ETH Balance

0 ETH

ETH Value

$0.00

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
1252464432024-09-11 21:54:2386 days ago1726091663
0x40B9AD5D...98BA72579
0.002132744415603 ETH
1252464432024-09-11 21:54:2386 days ago1726091663
0x40B9AD5D...98BA72579
0.000021327444156 ETH
1252464432024-09-11 21:54:2386 days ago1726091663
0x40B9AD5D...98BA72579
0.002154071859759 ETH
1252438172024-09-11 20:26:5186 days ago1726086411
0x40B9AD5D...98BA72579
0.002134702292269 ETH
1252438172024-09-11 20:26:5186 days ago1726086411
0x40B9AD5D...98BA72579
0.000021347022922 ETH
1252438172024-09-11 20:26:5186 days ago1726086411
0x40B9AD5D...98BA72579
0.002156049315192 ETH
1252119032024-09-11 2:43:0386 days ago1726022583
0x40B9AD5D...98BA72579
0.002113940212423 ETH
1252119032024-09-11 2:43:0386 days ago1726022583
0x40B9AD5D...98BA72579
0.000029705258329 ETH
1252119032024-09-11 2:43:0386 days ago1726022583
0x40B9AD5D...98BA72579
0.002143645470753 ETH
1252031022024-09-10 21:49:4187 days ago1726004981
0x40B9AD5D...98BA72579
0.002103845830177 ETH
1252031022024-09-10 21:49:4187 days ago1726004981
0x40B9AD5D...98BA72579
0.000017788962952 ETH
1252031022024-09-10 21:49:4187 days ago1726004981
0x40B9AD5D...98BA72579
0.00212163479313 ETH
1251952622024-09-10 17:28:2187 days ago1725989301
0x40B9AD5D...98BA72579
0.002122596212528 ETH
1251952622024-09-10 17:28:2187 days ago1725989301
0x40B9AD5D...98BA72579
0.000027868160025 ETH
1251952622024-09-10 17:28:2187 days ago1725989301
0x40B9AD5D...98BA72579
0.002150464372554 ETH
1251573492024-09-09 20:24:3588 days ago1725913475
0x40B9AD5D...98BA72579
0.002132485707227 ETH
1251573492024-09-09 20:24:3588 days ago1725913475
0x40B9AD5D...98BA72579
0.000021324857072 ETH
1251573492024-09-09 20:24:3588 days ago1725913475
0x40B9AD5D...98BA72579
0.0021538105643 ETH
1251384412024-09-09 9:54:1988 days ago1725875659
0x40B9AD5D...98BA72579
0.002156428758464 ETH
1251384412024-09-09 9:54:1988 days ago1725875659
0x40B9AD5D...98BA72579
0.000021564287584 ETH
1251384412024-09-09 9:54:1988 days ago1725875659
0x40B9AD5D...98BA72579
0.002177993046048 ETH
1251335562024-09-09 7:11:2988 days ago1725865889
0x40B9AD5D...98BA72579
0.004348166378238 ETH
1251335562024-09-09 7:11:2988 days ago1725865889
0x40B9AD5D...98BA72579
0.000043481663782 ETH
1251335562024-09-09 7:11:2988 days ago1725865889
0x40B9AD5D...98BA72579
0.00439164804202 ETH
1251161652024-09-08 21:31:4789 days ago1725831107
0x40B9AD5D...98BA72579
0.002193717736444 ETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StableFeeMiddleware

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
london EvmVersion
File 1 of 7 : StableFeeMiddleware.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";

contract StableFeeMiddleware is LowerCaseCyberIdMiddleware, 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;

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

    event RebateChanged(bool rebateEnabled);

    event RecipientChanged(address recipient);

    event StableFeeChanged(
        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 _recipient,
            uint256[8] memory prices
        ) = abi.decode(data, (bool, address, uint256[8]));
        rebateEnabled = _rebateEnabled;
        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 RebateChanged(_rebateEnabled);
        emit RecipientChanged(_recipient);
        emit StableFeeChanged(
            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
    )
        external
        payable
        override
        onlyNameRegistry
        nonReentrant
        returns (uint256)
    {
        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");
        }
    }
}

File 2 of 7 : 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 7 : 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 7 : 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 7 : 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 7 : 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 7 : 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;
    }
}

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":false,"internalType":"bool","name":"rebateEnabled","type":"bool"}],"name":"RebateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"RecipientChanged","type":"event"},{"anonymous":false,"inputs":[{"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":"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":[{"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":"","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":"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"}]

60e060405234801561001057600080fd5b5060405161105738038061105783398101604081905261002f9161006d565b6001600160a01b03908116608052600160005591821660a0521660c0526100b0565b80516001600160a01b038116811461006857600080fd5b919050565b60008060006060848603121561008257600080fd5b61008b84610051565b925061009960208501610051565b91506100a760408501610051565b90509250925092565b60805160a05160c051610f5c6100fb600039600081816102b0015261096c0152600081816102e40152610a770152600081816102660152818161037d01526104430152610f5c6000f3fe6080604052600436106101085760003560e01c80637ac3e6ea11610095578063c8a4271f11610064578063c8a4271f146102d2578063cb8dd1e914610306578063cd5d2c741461031c578063d820ed4214610332578063f1ebaa661461034857600080fd5b80637ac3e6ea14610234578063a05c261614610254578063a200e15314610288578063a3e295bc1461029e57600080fd5b8063316a7878116100dc578063316a7878146101965780633da6aaed146101ac57806342a0d9b4146101bf57806359b6b86c146101e157806366d003ac146101f757600080fd5b8062d48e461461010d5780630261d9421461014057806306534e0c146101565780632c0fd74c14610180575b600080fd5b34801561011957600080fd5b5061012d610128366004610c41565b61035c565b6040519081526020015b60405180910390f35b34801561014c57600080fd5b5061012d60075481565b34801561016257600080fd5b506001546101709060ff1681565b6040519015158152602001610137565b34801561018c57600080fd5b5061012d60025481565b3480156101a257600080fd5b5061012d60085481565b61012d6101ba366004610c83565b610379565b3480156101cb57600080fd5b506101df6101da366004610c41565b610441565b005b3480156101ed57600080fd5b5061012d60065481565b34801561020357600080fd5b5060015461021c9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610137565b34801561024057600080fd5b5061017061024f366004610c41565b61062a565b34801561026057600080fd5b5061021c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561029457600080fd5b5061012d60045481565b3480156102aa57600080fd5b5061021c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102de57600080fd5b5061021c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561031257600080fd5b5061012d60095481565b34801561032857600080fd5b5061012d60035481565b34801561033e57600080fd5b5061012d60055481565b34801561035457600080fd5b506001610170565b600061037061036b8484610756565b6107de565b90505b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146103ec5760405162461bcd60e51b81526020600482015260116024820152704e4f545f4e414d455f524547495354525960781b60448201526064015b60405180910390fd5b6103f4610804565b60006104066101286020870187610cf4565b905061042e8161041c6060880160408901610d53565b6104296020890189610d53565b61085d565b905061043a6001600055565b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146104ad5760405162461bcd60e51b81526020600482015260116024820152704e4f545f4e414d455f524547495354525960781b60448201526064016103e3565b600080806104bd84860186610d86565b600180546001600160a81b031916841515610100600160a81b03198116919091176101006001600160a01b038616021790915581516002556020808301516003556040808401516004556060840151600555608084015160065560a084015160075560c084015160085560e08401516009555191825293965091945092507f308ece3d6d07fc00169d460bea2cf86425f604ce98acfdc41bf1797b55588656910160405180910390a16040516001600160a01b03831681527fff2d07bd188a9eb41acbc4a7db39e18956c95ab7f54f434d97849bf6206e577c9060200160405180910390a1805160208083015160408085015160608087015160808089015160a0808b015160c0808d015160e0808f01518b519e8f529c8e019b909b52988c0197909752948a0193909352908801528601528401528201527f7489fa6294e4b179863f8681d89f7ebfb40d35cc39abb5243fef5798a5253021906101000160405180910390a15050505050565b60008083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050825192935050601490911190508061067a575060018151105b15610689576000915050610373565b805160005b8181101561074a5760008382815181106106aa576106aa610e33565b01602001516001600160f81b0319169050600360fc1b81108015906106dd5750603960f81b6001600160f81b0319821611155b8061070f5750606160f81b6001600160f81b031982161080159061070f5750603d60f91b6001600160f81b0319821611155b806107275750605f60f81b6001600160f81b03198216145b1561073757816001019150610744565b6000945050505050610373565b5061068e565b50600195945050505050565b60008181600c821061076b57506009546107d6565b6007821061077c57506008546107d6565b8160060361078d57506007546107d6565b8160050361079e57506006546107d6565b816004036107af57506005546107d6565b816003036107c057506004546107d6565b816002036107d157506003546107d6565b506002545b949350505050565b6000806107e9610a6f565b9050806107fa846305f5e100610e5f565b61043a9190610e7e565b6002600054036108565760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103e3565b6002600055565b823410156108a25760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f46554e445360701b60448201526064016103e3565b34838103908414610942576000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108fa576040519150601f19603f3d011682016040523d82523d6000602084013e6108ff565b606091505b50509050806109405760405162461bcd60e51b815260206004820152600d60248201526c14915195539117d19052531151609a1b60448201526064016103e3565b505b60015460ff16156109cf5760405163b760faf960e01b81526001600160a01b0384811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063b760faf99086906024016000604051808303818588803b1580156109b157600080fd5b505af11580156109c5573d6000803e3d6000fd5b5050505050610a69565b60015460405160009161010090046001600160a01b03169086908381818185875af1925050503d8060008114610a21576040519150601f19603f3d011682016040523d82523d6000602084013e610a26565b606091505b5050905080610a675760405162461bcd60e51b815260206004820152600d60248201526c10d2105491d157d19052531151609a1b60448201526064016103e3565b505b50505050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af79190610ebf565b50935050925092508269ffffffffffffffffffff16600003610b5b5760405162461bcd60e51b815260206004820152601760248201527f494e56414c49445f4f5241434c455f524f554e445f494400000000000000000060448201526064016103e3565b60008213610ba25760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4f5241434c455f505249434560601b60448201526064016103e3565b610bae612a3042610f0f565b8111610bf15760405162461bcd60e51b81526020600482015260126024820152715354414c455f4f5241434c455f505249434560701b60448201526064016103e3565b5092915050565b60008083601f840112610c0a57600080fd5b50813567ffffffffffffffff811115610c2257600080fd5b602083019150836020828501011115610c3a57600080fd5b9250929050565b60008060208385031215610c5457600080fd5b823567ffffffffffffffff811115610c6b57600080fd5b610c7785828601610bf8565b90969095509350505050565b600080600060408486031215610c9857600080fd5b833567ffffffffffffffff80821115610cb057600080fd5b9085019060608288031215610cc457600080fd5b90935060208501359080821115610cda57600080fd5b50610ce786828701610bf8565b9497909650939450505050565b6000808335601e19843603018112610d0b57600080fd5b83018035915067ffffffffffffffff821115610d2657600080fd5b602001915036819003821315610c3a57600080fd5b6001600160a01b0381168114610d5057600080fd5b50565b600060208284031215610d6557600080fd5b813561043a81610d3b565b634e487b7160e01b600052604160045260246000fd5b6000806000610140808587031215610d9d57600080fd5b84358015158114610dad57600080fd5b9350602085810135610dbe81610d3b565b9350605f86018713610dcf57600080fd5b604051610100810181811067ffffffffffffffff82111715610df357610df3610d70565b604052918601918088841115610e0857600080fd5b604088015b84811015610e245780358252908301908301610e0d565b50508093505050509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610e7957610e79610e49565b500290565b600082610e9b57634e487b7160e01b600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610eba57600080fd5b919050565b600080600080600060a08688031215610ed757600080fd5b610ee086610ea0565b9450602086015193506040860151925060608601519150610f0360808701610ea0565b90509295509295909350565b600082821015610f2157610f21610e49565b50039056fea2646970667358221220257f73e755dd98d0f04aa3a62a468e48c2c67816eeadaca4ae8f08cfd4f4d7eb64736f6c634300080e003300000000000000000000000013e3ee699d1909e989722e753853ae30b17e08c5000000000000000000000000cd97405fb58e94954e825e46db192b916a45d412000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b24

Deployed Bytecode

0x6080604052600436106101085760003560e01c80637ac3e6ea11610095578063c8a4271f11610064578063c8a4271f146102d2578063cb8dd1e914610306578063cd5d2c741461031c578063d820ed4214610332578063f1ebaa661461034857600080fd5b80637ac3e6ea14610234578063a05c261614610254578063a200e15314610288578063a3e295bc1461029e57600080fd5b8063316a7878116100dc578063316a7878146101965780633da6aaed146101ac57806342a0d9b4146101bf57806359b6b86c146101e157806366d003ac146101f757600080fd5b8062d48e461461010d5780630261d9421461014057806306534e0c146101565780632c0fd74c14610180575b600080fd5b34801561011957600080fd5b5061012d610128366004610c41565b61035c565b6040519081526020015b60405180910390f35b34801561014c57600080fd5b5061012d60075481565b34801561016257600080fd5b506001546101709060ff1681565b6040519015158152602001610137565b34801561018c57600080fd5b5061012d60025481565b3480156101a257600080fd5b5061012d60085481565b61012d6101ba366004610c83565b610379565b3480156101cb57600080fd5b506101df6101da366004610c41565b610441565b005b3480156101ed57600080fd5b5061012d60065481565b34801561020357600080fd5b5060015461021c9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610137565b34801561024057600080fd5b5061017061024f366004610c41565b61062a565b34801561026057600080fd5b5061021c7f000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b2481565b34801561029457600080fd5b5061012d60045481565b3480156102aa57600080fd5b5061021c7f000000000000000000000000cd97405fb58e94954e825e46db192b916a45d41281565b3480156102de57600080fd5b5061021c7f00000000000000000000000013e3ee699d1909e989722e753853ae30b17e08c581565b34801561031257600080fd5b5061012d60095481565b34801561032857600080fd5b5061012d60035481565b34801561033e57600080fd5b5061012d60055481565b34801561035457600080fd5b506001610170565b600061037061036b8484610756565b6107de565b90505b92915050565b60007f000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b246001600160a01b031633146103ec5760405162461bcd60e51b81526020600482015260116024820152704e4f545f4e414d455f524547495354525960781b60448201526064015b60405180910390fd5b6103f4610804565b60006104066101286020870187610cf4565b905061042e8161041c6060880160408901610d53565b6104296020890189610d53565b61085d565b905061043a6001600055565b9392505050565b7f000000000000000000000000e55793f55df1f1b5037eba41881663583d4f9b246001600160a01b031633146104ad5760405162461bcd60e51b81526020600482015260116024820152704e4f545f4e414d455f524547495354525960781b60448201526064016103e3565b600080806104bd84860186610d86565b600180546001600160a81b031916841515610100600160a81b03198116919091176101006001600160a01b038616021790915581516002556020808301516003556040808401516004556060840151600555608084015160065560a084015160075560c084015160085560e08401516009555191825293965091945092507f308ece3d6d07fc00169d460bea2cf86425f604ce98acfdc41bf1797b55588656910160405180910390a16040516001600160a01b03831681527fff2d07bd188a9eb41acbc4a7db39e18956c95ab7f54f434d97849bf6206e577c9060200160405180910390a1805160208083015160408085015160608087015160808089015160a0808b015160c0808d015160e0808f01518b519e8f529c8e019b909b52988c0197909752948a0193909352908801528601528401528201527f7489fa6294e4b179863f8681d89f7ebfb40d35cc39abb5243fef5798a5253021906101000160405180910390a15050505050565b60008083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050825192935050601490911190508061067a575060018151105b15610689576000915050610373565b805160005b8181101561074a5760008382815181106106aa576106aa610e33565b01602001516001600160f81b0319169050600360fc1b81108015906106dd5750603960f81b6001600160f81b0319821611155b8061070f5750606160f81b6001600160f81b031982161080159061070f5750603d60f91b6001600160f81b0319821611155b806107275750605f60f81b6001600160f81b03198216145b1561073757816001019150610744565b6000945050505050610373565b5061068e565b50600195945050505050565b60008181600c821061076b57506009546107d6565b6007821061077c57506008546107d6565b8160060361078d57506007546107d6565b8160050361079e57506006546107d6565b816004036107af57506005546107d6565b816003036107c057506004546107d6565b816002036107d157506003546107d6565b506002545b949350505050565b6000806107e9610a6f565b9050806107fa846305f5e100610e5f565b61043a9190610e7e565b6002600054036108565760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103e3565b6002600055565b823410156108a25760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f46554e445360701b60448201526064016103e3565b34838103908414610942576000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108fa576040519150601f19603f3d011682016040523d82523d6000602084013e6108ff565b606091505b50509050806109405760405162461bcd60e51b815260206004820152600d60248201526c14915195539117d19052531151609a1b60448201526064016103e3565b505b60015460ff16156109cf5760405163b760faf960e01b81526001600160a01b0384811660048301527f000000000000000000000000cd97405fb58e94954e825e46db192b916a45d412169063b760faf99086906024016000604051808303818588803b1580156109b157600080fd5b505af11580156109c5573d6000803e3d6000fd5b5050505050610a69565b60015460405160009161010090046001600160a01b03169086908381818185875af1925050503d8060008114610a21576040519150601f19603f3d011682016040523d82523d6000602084013e610a26565b606091505b5050905080610a675760405162461bcd60e51b815260206004820152600d60248201526c10d2105491d157d19052531151609a1b60448201526064016103e3565b505b50505050565b6000806000807f00000000000000000000000013e3ee699d1909e989722e753853ae30b17e08c56001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af79190610ebf565b50935050925092508269ffffffffffffffffffff16600003610b5b5760405162461bcd60e51b815260206004820152601760248201527f494e56414c49445f4f5241434c455f524f554e445f494400000000000000000060448201526064016103e3565b60008213610ba25760405162461bcd60e51b8152602060048201526014602482015273494e56414c49445f4f5241434c455f505249434560601b60448201526064016103e3565b610bae612a3042610f0f565b8111610bf15760405162461bcd60e51b81526020600482015260126024820152715354414c455f4f5241434c455f505249434560701b60448201526064016103e3565b5092915050565b60008083601f840112610c0a57600080fd5b50813567ffffffffffffffff811115610c2257600080fd5b602083019150836020828501011115610c3a57600080fd5b9250929050565b60008060208385031215610c5457600080fd5b823567ffffffffffffffff811115610c6b57600080fd5b610c7785828601610bf8565b90969095509350505050565b600080600060408486031215610c9857600080fd5b833567ffffffffffffffff80821115610cb057600080fd5b9085019060608288031215610cc457600080fd5b90935060208501359080821115610cda57600080fd5b50610ce786828701610bf8565b9497909650939450505050565b6000808335601e19843603018112610d0b57600080fd5b83018035915067ffffffffffffffff821115610d2657600080fd5b602001915036819003821315610c3a57600080fd5b6001600160a01b0381168114610d5057600080fd5b50565b600060208284031215610d6557600080fd5b813561043a81610d3b565b634e487b7160e01b600052604160045260246000fd5b6000806000610140808587031215610d9d57600080fd5b84358015158114610dad57600080fd5b9350602085810135610dbe81610d3b565b9350605f86018713610dcf57600080fd5b604051610100810181811067ffffffffffffffff82111715610df357610df3610d70565b604052918601918088841115610e0857600080fd5b604088015b84811015610e245780358252908301908301610e0d565b50508093505050509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610e7957610e79610e49565b500290565b600082610e9b57634e487b7160e01b600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610eba57600080fd5b919050565b600080600080600060a08688031215610ed757600080fd5b610ee086610ea0565b9450602086015193506040860151925060608601519150610f0360808701610ea0565b90509295509295909350565b600082821015610f2157610f21610e49565b50039056fea2646970667358221220257f73e755dd98d0f04aa3a62a468e48c2c67816eeadaca4ae8f08cfd4f4d7eb64736f6c634300080e0033

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.