More Info
Private Name Tags
ContractCreator
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
125837487 | 70 days ago | 0.001925843581458 ETH | ||||
125837224 | 70 days ago | 0.001928990829921 ETH | ||||
125837137 | 70 days ago | 0.00192594976498 ETH | ||||
125837038 | 70 days ago | 0.001930184647961 ETH | ||||
125718462 | 73 days ago | 0.001958343668524 ETH | ||||
125718312 | 73 days ago | 0.001958147969497 ETH | ||||
125523873 | 77 days ago | 0.004338634526718 ETH | ||||
125494125 | 78 days ago | 0.021152013194165 ETH | ||||
125460473 | 79 days ago | 0.004440692572172 ETH | ||||
125443493 | 79 days ago | 0.021931815063147 ETH | ||||
125443078 | 79 days ago | 0.021940403174241 ETH | ||||
125441945 | 79 days ago | 0.021976950436532 ETH | ||||
125441458 | 79 days ago | 0.022017899985891 ETH | ||||
125441426 | 79 days ago | 0.022017899985891 ETH | ||||
125365946 | 81 days ago | 0.004173139853898 ETH | ||||
125365719 | 81 days ago | 0.004179588388342 ETH | ||||
125365681 | 81 days ago | 0.004179588388342 ETH | ||||
125355884 | 81 days ago | 0.004179702372084 ETH | ||||
125330992 | 82 days ago | 0.004168248675239 ETH | ||||
125330933 | 82 days ago | 0.004168248675239 ETH | ||||
125330887 | 82 days ago | 0.004168248675239 ETH | ||||
125306588 | 82 days ago | 0.002155865357019 ETH | ||||
125294847 | 83 days ago | 0.004277178078827 ETH | ||||
125292948 | 83 days ago | 0.002135703535395 ETH | ||||
125283085 | 83 days ago | 0.002148643624611 ETH |
Loading...
Loading
Contract Name:
PermissionedStableFeeMiddleware
Compiler Version
v0.8.14+commit.80d49f37
Optimization Enabled:
Yes with 200 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// 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"; } }
// 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 ); }
// 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; } }
// 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); }
// 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; }
// 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; } }
// 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; } }
// 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); }
{ "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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
OP | Ether (ETH) | 100.00% | $3,844.46 | 0.5214 | $2,004.4 |
[ 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.