Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
L1TokenClaimBridge
Compiler Version
v0.8.12+commit.f00d7308
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import {ICrossDomainMessenger} from "@eth-optimism/contracts/libraries/bridge/ICrossDomainMessenger.sol"; import "../L2/interface/IL2TokenClaimBridge.sol"; import "./interface/IL1EventLogger.sol"; import "./interface/IL1TokenClaimBridge.sol"; import "../lib/storage/L1TokenClaimBridgeStorage.sol"; import "./interface/IRoyaltyEngineV1.sol"; import "../lib/crosschain/CrosschainOrigin.sol"; contract L1TokenClaimBridge is IL1TokenClaimBridge { modifier onlyNftOwner(address canonicalNft_, uint256 tokenId_) { require( IERC721(canonicalNft_).ownerOf(tokenId_) == msg.sender, "Message sender does not own NFT" ); _; } modifier onlyNftsOwner( address[] calldata canonicalNfts_, uint256[] calldata tokenIds_ ) { require( canonicalNfts_.length > 0 && tokenIds_.length > 0 && canonicalNfts_.length == tokenIds_.length, "NFT inputs are malformed" ); for (uint8 i = 0; i < canonicalNfts_.length; i++) { require( IERC721(canonicalNfts_[i]).ownerOf(tokenIds_[i]) == msg.sender, "Message sender does not own at least one given NFT" ); } _; } constructor( address l1EventLogger_, address l2TokenClaimBridge_, address royaltyEngine_ ) { L1TokenClaimBridgeStorage.get().l1EventLogger = l1EventLogger_; L1TokenClaimBridgeStorage .get() .l2TokenClaimBridge = l2TokenClaimBridge_; L1TokenClaimBridgeStorage.get().royaltyEngine = royaltyEngine_; } function claimEtherForMultipleNfts( address[] calldata canonicalNfts_, uint256[] calldata tokenIds_, address payable beneficiary_, uint256[] calldata amounts_ ) external override onlyNftsOwner(canonicalNfts_, tokenIds_) { require( amounts_.length == canonicalNfts_.length, "canonicalNfts_, tokenIds_, and amounts_ must be same length" ); ( address payable[][] memory royaltyRecipientsArray, uint256[][] memory royaltyAmountsArray ) = _getRoyaltyRecipientsArrayAndRoyaltyAmountsArray( canonicalNfts_, tokenIds_, amounts_ ); bytes memory message = abi.encodeCall( IL2TokenClaimBridge(address(0)).claimEtherForMultipleNfts, ( canonicalNfts_, tokenIds_, beneficiary_, amounts_, royaltyRecipientsArray, royaltyAmountsArray ) ); ICrossDomainMessenger(CrosschainOrigin.crossDomainMessenger()) .sendMessage( L1TokenClaimBridgeStorage.get().l2TokenClaimBridge, message, 1920000 ); IL1EventLogger(L1TokenClaimBridgeStorage.get().l1EventLogger) .emitClaimEtherForMultipleNftsMessageSent( keccak256(abi.encodePacked(canonicalNfts_)), keccak256(abi.encodePacked(tokenIds_)), beneficiary_ ); } function markReplicasAsAuthentic(address canonicalNft_, uint256 tokenId_) external override onlyNftOwner(canonicalNft_, tokenId_) { bytes memory message = abi.encodeCall( IL2TokenClaimBridge(address(0)).markReplicasAsAuthentic, (canonicalNft_, tokenId_) ); ICrossDomainMessenger(CrosschainOrigin.crossDomainMessenger()) .sendMessage( L1TokenClaimBridgeStorage.get().l2TokenClaimBridge, message, 1000000 ); IL1EventLogger(L1TokenClaimBridgeStorage.get().l1EventLogger) .emitMarkReplicasAsAuthenticMessageSent(canonicalNft_, tokenId_); } function l2TokenClaimBridge() external view override returns (address) { return L1TokenClaimBridgeStorage.get().l2TokenClaimBridge; } function l1EventLogger() external view override returns (address) { return L1TokenClaimBridgeStorage.get().l1EventLogger; } function royaltyEngine() external view override returns (address) { return L1TokenClaimBridgeStorage.get().royaltyEngine; } function _getRoyaltyRecipientsArrayAndRoyaltyAmountsArray( address[] calldata canonicalNfts_, uint256[] calldata tokenIds_, uint256[] calldata amounts_ ) internal view returns (address payable[][] memory, uint256[][] memory) { address payable[][] memory royaltyRecipientsArray = new address payable[][]( canonicalNfts_.length ); uint256[][] memory royaltyAmountsArray = new uint256[][]( canonicalNfts_.length ); for (uint256 i = 0; i < canonicalNfts_.length; i++) { ( address payable[] memory royaltyRecipients, uint256[] memory royaltyAmounts ) = IRoyaltyEngineV1(L1TokenClaimBridgeStorage.get().royaltyEngine) .getRoyaltyView( canonicalNfts_[i], tokenIds_[i], amounts_[i] ); royaltyRecipientsArray[i] = royaltyRecipients; royaltyAmountsArray[i] = royaltyAmounts; } return (royaltyRecipientsArray, royaltyAmountsArray); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity >0.5.0 <0.9.0; /** * @title ICrossDomainMessenger */ interface ICrossDomainMessenger { /********** * Events * **********/ event SentMessage( address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit ); event RelayedMessage(bytes32 indexed msgHash); event FailedRelayedMessage(bytes32 indexed msgHash); /************* * Variables * *************/ function xDomainMessageSender() external view returns (address); /******************** * Public Functions * ********************/ /** * Sends a cross domain message to the target messenger. * @param _target Target contract address. * @param _message Message to send to the target. * @param _gasLimit Gas limit for the provided message. */ function sendMessage( address _target, bytes calldata _message, uint32 _gasLimit ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; import "./IHomageProtocolConfigView.sol"; interface IL2TokenClaimBridge is IHomageProtocolConfigView { function initialize(address homageProtocolConfig_) external; function claimEtherForMultipleNfts( address[] calldata canonicalNfts_, uint256[] calldata tokenIds_, address payable beneficiary_, uint256[] calldata claimAmounts_, address payable[][] calldata royaltyRecipientsArray_, uint256[][] calldata royaltyAmountsArray_ ) external returns (uint256); function markReplicasAsAuthentic(address canonicalNft_, uint256 tokenId_) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; import "../../shared/interface/IEventLogger.sol"; interface IL1EventLogger is IEventLogger { function emitClaimEtherForMultipleNftsMessageSent( bytes32 canonicalNftsHash_, bytes32 tokenIdsHash_, address beneficiary_ ) external; function emitMarkReplicasAsAuthenticMessageSent( address canonicalNft_, uint256 tokenId_ ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; interface IL1TokenClaimBridge { function claimEtherForMultipleNfts( address[] calldata canonicalNfts_, uint256[] calldata tokenIds_, address payable beneficiary_, uint256[] calldata amounts_ ) external; function markReplicasAsAuthentic(address canonicalNft_, uint256 tokenId_) external; function l2TokenClaimBridge() external view returns (address); function l1EventLogger() external view returns (address); function royaltyEngine() external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; library L1TokenClaimBridgeStorage { bytes32 constant STORAGE_POSITION = keccak256("homage.l1TokenClaimBridge"); struct Struct { address l1EventLogger; address l2TokenClaimBridge; address royaltyEngine; } function get() internal pure returns (Struct storage storageStruct) { bytes32 position = STORAGE_POSITION; assembly { storageStruct.slot := position } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; import "@openzeppelin/contracts/interfaces/IERC165.sol"; /** * As defined at: https://github.com/manifoldxyz/royalty-registry-solidity/blob/main/contracts/IRoyaltyEngineV1.sol * Retrieved 1/26/23 */ interface IRoyaltyEngineV1 is IERC165 { /** * View only version of getRoyalty * * @param tokenAddress - The address of the token * @param tokenId - The id of the token * @param value - The value you wish to get the royalty of * * returns Two arrays of equal length, royalty recipients and the corresponding amount each recipient should get */ function getRoyaltyView( address tokenAddress, uint256 tokenId, uint256 value ) external view returns (address payable[] memory recipients, uint256[] memory amounts); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; // Reference: https://github.com/ethereum-optimism/optimism-tutorial/blob/main/cross-dom-comm/contracts/Greeter.sol import {ICrossDomainMessenger} from "@eth-optimism/contracts/libraries/bridge/ICrossDomainMessenger.sol"; library CrosschainOrigin { function crossDomainMessenger() internal view returns (address cdmAddr) { // Get the cross domain messenger's address each time. // This is less resource intensive than writing to storage. if (block.chainid == 1) cdmAddr = 0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1; // Goerli if (block.chainid == 5) cdmAddr = 0x5086d1eEF304eb5284A0f6720f79403b4e9bE294; // Kovan if (block.chainid == 42) cdmAddr = 0x4361d0F75A0186C05f971c566dC6bEa5957483fD; // L2 if (block.chainid == 10 || block.chainid == 420 || block.chainid == 69) cdmAddr = 0x4200000000000000000000000000000000000007; // Local L1 (pre-Bedrock) if (block.chainid == 31337) { cdmAddr = 0x8A791620dd6260079BF849Dc5567aDC3F2FdC318; } // Local L1 (Bedrock) if (block.chainid == 900) { cdmAddr = 0x6900000000000000000000000000000000000002; } // Local L2 (pre-Bedrock) if (block.chainid == 987) { cdmAddr = 0x4200000000000000000000000000000000000007; } // Local L2 (Bedrock) if (block.chainid == 901) { cdmAddr = 0x4200000000000000000000000000000000000007; } } function getCrosschainMessageSender() internal view returns (address) { // Get the cross domain messenger's address each time. // This is less resource intensive than writing to storage. address cdmAddr = crossDomainMessenger(); // If this isn't a cross domain message if (msg.sender != cdmAddr) { revert("Not crosschain call"); } // If it is a cross domain message, find out where it is from return ICrossDomainMessenger(cdmAddr).xDomainMessageSender(); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; interface IHomageProtocolConfigView { function homageProtocolConfig() external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; interface IEventLogger { function emitReplicaDeployed(address replica_) external; function emitReplicaTransferred( uint256 canonicalTokenId_, uint256 replicaTokenId_ ) external; function emitReplicaRegistered( address canonicalNftContract_, uint256 canonicalTokenId_, address replica_ ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol) pragma solidity ^0.8.0; import "../utils/introspection/IERC165.sol";
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"l1EventLogger_","type":"address"},{"internalType":"address","name":"l2TokenClaimBridge_","type":"address"},{"internalType":"address","name":"royaltyEngine_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address[]","name":"canonicalNfts_","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"},{"internalType":"address payable","name":"beneficiary_","type":"address"},{"internalType":"uint256[]","name":"amounts_","type":"uint256[]"}],"name":"claimEtherForMultipleNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"l1EventLogger","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2TokenClaimBridge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"canonicalNft_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"markReplicasAsAuthentic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltyEngine","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200125738038062001257833981016040819052620000349162000130565b826200004a620000ef60201b620007281760201c565b60000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508162000087620000ef60201b620007281760201c565b60010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080620000c4620000ef60201b620007281760201c565b60020180546001600160a01b0319166001600160a01b0392909216919091179055506200017a915050565b7f1c814000c6f21df8b7924388cbfbf7add87ef32358675e415557c3c5b1d97a0090565b80516001600160a01b03811681146200012b57600080fd5b919050565b6000806000606084860312156200014657600080fd5b620001518462000113565b9250620001616020850162000113565b9150620001716040850162000113565b90509250925092565b6110cd806200018a6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630e111a0f1461005c5780630fd310a8146100805780634c94c90c14610095578063827754321461009d578063c81aadbf146100b0575b600080fd5b6100646100b8565b6040516001600160a01b03909116815260200160405180910390f35b61009361008e366004610a55565b6100d4565b005b6100646102dd565b6100936100ab366004610acd565b6102f9565b61006461070f565b60006100c2610728565b600101546001600160a01b0316919050565b6040516331a9108f60e11b8152600481018290528290829033906001600160a01b03841690636352211e90602401602060405180830381865afa15801561011f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101439190610b7c565b6001600160a01b03161461019e5760405162461bcd60e51b815260206004820152601f60248201527f4d6573736167652073656e64657220646f6573206e6f74206f776e204e46540060448201526064015b60405180910390fd5b604080516001600160a01b038616602482015260448082018690528251808303909101815260649091019091526020810180516001600160e01b03166301fa621560e31b1790526101ed61074c565b6001600160a01b0316633dbb202b610203610728565b600101546040516001600160e01b031960e084901b168152610238916001600160a01b0316908590620f424090600401610bed565b600060405180830381600087803b15801561025257600080fd5b505af1158015610266573d6000803e3d6000fd5b50505050610272610728565b5460405163117ba60160e21b81526001600160a01b03878116600483015260248201879052909116906345ee980490604401600060405180830381600087803b1580156102be57600080fd5b505af11580156102d2573d6000803e3d6000fd5b505050505050505050565b60006102e7610728565b600201546001600160a01b0316919050565b86868686821580159061030b57508015155b801561031657508281145b6103625760405162461bcd60e51b815260206004820152601860248201527f4e465420696e7075747320617265206d616c666f726d656400000000000000006044820152606401610195565b60005b60ff81168411156104a75733858560ff841681811061038657610386610c27565b905060200201602081019061039b9190610c3d565b6001600160a01b0316636352211e85858560ff168181106103be576103be610c27565b905060200201356040518263ffffffff1660e01b81526004016103e391815260200190565b602060405180830381865afa158015610400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104249190610b7c565b6001600160a01b0316146104955760405162461bcd60e51b815260206004820152603260248201527f4d6573736167652073656e64657220646f6573206e6f74206f776e206174206c60448201527119585cdd081bdb994819da5d995b8813919560721b6064820152608401610195565b8061049f81610c70565b915050610365565b50848a1461051d5760405162461bcd60e51b815260206004820152603b60248201527f63616e6f6e6963616c4e6674735f2c20746f6b656e4964735f2c20616e64206160448201527f6d6f756e74735f206d7573742062652073616d65206c656e67746800000000006064820152608401610195565b60008061052e8d8d8d8d8c8c610838565b915091506000806001600160a01b0316632c66c4328f8f8f8f8f8f8f8b8b60405160240161056499989796959493929190610db9565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050905061059b61074c565b6001600160a01b0316633dbb202b6105b1610728565b600101546040516001600160e01b031960e084901b1681526105e6916001600160a01b0316908590621d4c0090600401610bed565b600060405180830381600087803b15801561060057600080fd5b505af1158015610614573d6000803e3d6000fd5b50505050610620610728565b60000160009054906101000a90046001600160a01b03166001600160a01b0316638d0142878f8f604051602001610658929190610e73565b604051602081830303815290604052805190602001208e8e604051602001610681929190610eb5565b60408051601f198184030181529082905280516020909101206001600160e01b031960e085901b168252600482019290925260248101919091526001600160a01b038d166044820152606401600060405180830381600087803b1580156106e757600080fd5b505af11580156106fb573d6000803e3d6000fd5b505050505050505050505050505050505050565b6000610719610728565b546001600160a01b0316919050565b7f1c814000c6f21df8b7924388cbfbf7add87ef32358675e415557c3c5b1d97a0090565b6000466001141561076e57507325ace71c97b33cc4729cf772ae268934f7ab5fa15b466005141561078e5750735086d1eef304eb5284a0f6720f79403b4e9be2945b46602a14156107ae5750734361d0f75a0186c05f971c566dc6bea5957483fd5b46600a14806107be5750466101a4145b806107c95750466045145b156107d857506007602160991b015b46617a6914156107f95750738a791620dd6260079bf849dc5567adc3f2fdc3185b46610384141561080d57506002606960981b015b466103db141561082157506007602160991b015b46610385141561083557506007602160991b015b90565b60608060008767ffffffffffffffff81111561085657610856610ee1565b60405190808252806020026020018201604052801561088957816020015b60608152602001906001900390816108745790505b50905060008867ffffffffffffffff8111156108a7576108a7610ee1565b6040519080825280602002602001820160405280156108da57816020015b60608152602001906001900390816108c55790505b50905060005b89811015610a2d576000806108f3610728565b600201546001600160a01b0316633e1040148e8e8681811061091757610917610c27565b905060200201602081019061092c9190610c3d565b8d8d8781811061093e5761093e610c27565b905060200201358c8c8881811061095757610957610c27565b6040516001600160e01b031960e088901b1681526001600160a01b039095166004860152602485019390935250602090910201356044820152606401600060405180830381865afa1580156109b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109d89190810190610fb7565b91509150818584815181106109ef576109ef610c27565b602002602001018190525080848481518110610a0d57610a0d610c27565b602002602001018190525050508080610a259061107c565b9150506108e0565b5090999098509650505050505050565b6001600160a01b0381168114610a5257600080fd5b50565b60008060408385031215610a6857600080fd5b8235610a7381610a3d565b946020939093013593505050565b60008083601f840112610a9357600080fd5b50813567ffffffffffffffff811115610aab57600080fd5b6020830191508360208260051b8501011115610ac657600080fd5b9250929050565b60008060008060008060006080888a031215610ae857600080fd5b873567ffffffffffffffff80821115610b0057600080fd5b610b0c8b838c01610a81565b909950975060208a0135915080821115610b2557600080fd5b610b318b838c01610a81565b909750955060408a01359150610b4682610a3d565b90935060608901359080821115610b5c57600080fd5b50610b698a828b01610a81565b989b979a50959850939692959293505050565b600060208284031215610b8e57600080fd5b8151610b9981610a3d565b9392505050565b6000815180845260005b81811015610bc657602081850181015186830182015201610baa565b81811115610bd8576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0384168152606060208201819052600090610c1190830185610ba0565b905063ffffffff83166040830152949350505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610c4f57600080fd5b8135610b9981610a3d565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff811415610c8757610c87610c5a565b60010192915050565b81835260006001600160fb1b03831115610ca957600080fd5b8260051b8083602087013760009401602001938452509192915050565b600082825180855260208086019550808260051b8401018186016000805b85811015610d4057868403601f19018a52825180518086529086019086860190845b81811015610d2b5783516001600160a01b031683529288019291880191600101610d06565b50509a86019a94505091840191600101610ce4565b509198975050505050505050565b6000815180845260208085019450848260051b86018286016000805b86811015610d40578484038a52825180518086529087019087860190845b81811015610da457835183529289019291890191600101610d88565b50509a87019a94505091850191600101610d6a565b60c0808252810189905260008a60e08301825b8c811015610dfc578235610ddf81610a3d565b6001600160a01b0316825260209283019290910190600101610dcc565b508381036020850152610e10818b8d610c90565b915050610e2860408401896001600160a01b03169052565b8281036060840152610e3b818789610c90565b90508281036080840152610e4f8186610cc6565b905082810360a0840152610e638185610d4e565b9c9b505050505050505050505050565b60008184825b85811015610eaa578135610e8c81610a3d565b6001600160a01b031683526020928301929190910190600101610e79565b509095945050505050565b60006001600160fb1b03831115610ecb57600080fd5b8260051b80858437600092019182525092915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610f2057610f20610ee1565b604052919050565b600067ffffffffffffffff821115610f4257610f42610ee1565b5060051b60200190565b600082601f830112610f5d57600080fd5b81516020610f72610f6d83610f28565b610ef7565b82815260059290921b84018101918181019086841115610f9157600080fd5b8286015b84811015610fac5780518352918301918301610f95565b509695505050505050565b60008060408385031215610fca57600080fd5b825167ffffffffffffffff80821115610fe257600080fd5b818501915085601f830112610ff657600080fd5b81516020611006610f6d83610f28565b82815260059290921b8401810191818101908984111561102557600080fd5b948201945b8386101561104c57855161103d81610a3d565b8252948201949082019061102a565b9188015191965090935050508082111561106557600080fd5b5061107285828601610f4c565b9150509250929050565b600060001982141561109057611090610c5a565b506001019056fea2646970667358221220afe3aecff89ae85197ecd6aa115a9d6617e05e9b8aac83a9a66f3e68a25dc90c64736f6c634300080c003300000000000000000000000074b92f22bcb3ea996d6b027da62361f02c6a631e0000000000000000000000006f37a09269e67ede41307d359b5b4afaa70d8caf0000000000000000000000000385603ab55642cb4dd5de3ae9e306809991804f
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100575760003560e01c80630e111a0f1461005c5780630fd310a8146100805780634c94c90c14610095578063827754321461009d578063c81aadbf146100b0575b600080fd5b6100646100b8565b6040516001600160a01b03909116815260200160405180910390f35b61009361008e366004610a55565b6100d4565b005b6100646102dd565b6100936100ab366004610acd565b6102f9565b61006461070f565b60006100c2610728565b600101546001600160a01b0316919050565b6040516331a9108f60e11b8152600481018290528290829033906001600160a01b03841690636352211e90602401602060405180830381865afa15801561011f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101439190610b7c565b6001600160a01b03161461019e5760405162461bcd60e51b815260206004820152601f60248201527f4d6573736167652073656e64657220646f6573206e6f74206f776e204e46540060448201526064015b60405180910390fd5b604080516001600160a01b038616602482015260448082018690528251808303909101815260649091019091526020810180516001600160e01b03166301fa621560e31b1790526101ed61074c565b6001600160a01b0316633dbb202b610203610728565b600101546040516001600160e01b031960e084901b168152610238916001600160a01b0316908590620f424090600401610bed565b600060405180830381600087803b15801561025257600080fd5b505af1158015610266573d6000803e3d6000fd5b50505050610272610728565b5460405163117ba60160e21b81526001600160a01b03878116600483015260248201879052909116906345ee980490604401600060405180830381600087803b1580156102be57600080fd5b505af11580156102d2573d6000803e3d6000fd5b505050505050505050565b60006102e7610728565b600201546001600160a01b0316919050565b86868686821580159061030b57508015155b801561031657508281145b6103625760405162461bcd60e51b815260206004820152601860248201527f4e465420696e7075747320617265206d616c666f726d656400000000000000006044820152606401610195565b60005b60ff81168411156104a75733858560ff841681811061038657610386610c27565b905060200201602081019061039b9190610c3d565b6001600160a01b0316636352211e85858560ff168181106103be576103be610c27565b905060200201356040518263ffffffff1660e01b81526004016103e391815260200190565b602060405180830381865afa158015610400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104249190610b7c565b6001600160a01b0316146104955760405162461bcd60e51b815260206004820152603260248201527f4d6573736167652073656e64657220646f6573206e6f74206f776e206174206c60448201527119585cdd081bdb994819da5d995b8813919560721b6064820152608401610195565b8061049f81610c70565b915050610365565b50848a1461051d5760405162461bcd60e51b815260206004820152603b60248201527f63616e6f6e6963616c4e6674735f2c20746f6b656e4964735f2c20616e64206160448201527f6d6f756e74735f206d7573742062652073616d65206c656e67746800000000006064820152608401610195565b60008061052e8d8d8d8d8c8c610838565b915091506000806001600160a01b0316632c66c4328f8f8f8f8f8f8f8b8b60405160240161056499989796959493929190610db9565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050905061059b61074c565b6001600160a01b0316633dbb202b6105b1610728565b600101546040516001600160e01b031960e084901b1681526105e6916001600160a01b0316908590621d4c0090600401610bed565b600060405180830381600087803b15801561060057600080fd5b505af1158015610614573d6000803e3d6000fd5b50505050610620610728565b60000160009054906101000a90046001600160a01b03166001600160a01b0316638d0142878f8f604051602001610658929190610e73565b604051602081830303815290604052805190602001208e8e604051602001610681929190610eb5565b60408051601f198184030181529082905280516020909101206001600160e01b031960e085901b168252600482019290925260248101919091526001600160a01b038d166044820152606401600060405180830381600087803b1580156106e757600080fd5b505af11580156106fb573d6000803e3d6000fd5b505050505050505050505050505050505050565b6000610719610728565b546001600160a01b0316919050565b7f1c814000c6f21df8b7924388cbfbf7add87ef32358675e415557c3c5b1d97a0090565b6000466001141561076e57507325ace71c97b33cc4729cf772ae268934f7ab5fa15b466005141561078e5750735086d1eef304eb5284a0f6720f79403b4e9be2945b46602a14156107ae5750734361d0f75a0186c05f971c566dc6bea5957483fd5b46600a14806107be5750466101a4145b806107c95750466045145b156107d857506007602160991b015b46617a6914156107f95750738a791620dd6260079bf849dc5567adc3f2fdc3185b46610384141561080d57506002606960981b015b466103db141561082157506007602160991b015b46610385141561083557506007602160991b015b90565b60608060008767ffffffffffffffff81111561085657610856610ee1565b60405190808252806020026020018201604052801561088957816020015b60608152602001906001900390816108745790505b50905060008867ffffffffffffffff8111156108a7576108a7610ee1565b6040519080825280602002602001820160405280156108da57816020015b60608152602001906001900390816108c55790505b50905060005b89811015610a2d576000806108f3610728565b600201546001600160a01b0316633e1040148e8e8681811061091757610917610c27565b905060200201602081019061092c9190610c3d565b8d8d8781811061093e5761093e610c27565b905060200201358c8c8881811061095757610957610c27565b6040516001600160e01b031960e088901b1681526001600160a01b039095166004860152602485019390935250602090910201356044820152606401600060405180830381865afa1580156109b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109d89190810190610fb7565b91509150818584815181106109ef576109ef610c27565b602002602001018190525080848481518110610a0d57610a0d610c27565b602002602001018190525050508080610a259061107c565b9150506108e0565b5090999098509650505050505050565b6001600160a01b0381168114610a5257600080fd5b50565b60008060408385031215610a6857600080fd5b8235610a7381610a3d565b946020939093013593505050565b60008083601f840112610a9357600080fd5b50813567ffffffffffffffff811115610aab57600080fd5b6020830191508360208260051b8501011115610ac657600080fd5b9250929050565b60008060008060008060006080888a031215610ae857600080fd5b873567ffffffffffffffff80821115610b0057600080fd5b610b0c8b838c01610a81565b909950975060208a0135915080821115610b2557600080fd5b610b318b838c01610a81565b909750955060408a01359150610b4682610a3d565b90935060608901359080821115610b5c57600080fd5b50610b698a828b01610a81565b989b979a50959850939692959293505050565b600060208284031215610b8e57600080fd5b8151610b9981610a3d565b9392505050565b6000815180845260005b81811015610bc657602081850181015186830182015201610baa565b81811115610bd8576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0384168152606060208201819052600090610c1190830185610ba0565b905063ffffffff83166040830152949350505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610c4f57600080fd5b8135610b9981610a3d565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff811415610c8757610c87610c5a565b60010192915050565b81835260006001600160fb1b03831115610ca957600080fd5b8260051b8083602087013760009401602001938452509192915050565b600082825180855260208086019550808260051b8401018186016000805b85811015610d4057868403601f19018a52825180518086529086019086860190845b81811015610d2b5783516001600160a01b031683529288019291880191600101610d06565b50509a86019a94505091840191600101610ce4565b509198975050505050505050565b6000815180845260208085019450848260051b86018286016000805b86811015610d40578484038a52825180518086529087019087860190845b81811015610da457835183529289019291890191600101610d88565b50509a87019a94505091850191600101610d6a565b60c0808252810189905260008a60e08301825b8c811015610dfc578235610ddf81610a3d565b6001600160a01b0316825260209283019290910190600101610dcc565b508381036020850152610e10818b8d610c90565b915050610e2860408401896001600160a01b03169052565b8281036060840152610e3b818789610c90565b90508281036080840152610e4f8186610cc6565b905082810360a0840152610e638185610d4e565b9c9b505050505050505050505050565b60008184825b85811015610eaa578135610e8c81610a3d565b6001600160a01b031683526020928301929190910190600101610e79565b509095945050505050565b60006001600160fb1b03831115610ecb57600080fd5b8260051b80858437600092019182525092915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610f2057610f20610ee1565b604052919050565b600067ffffffffffffffff821115610f4257610f42610ee1565b5060051b60200190565b600082601f830112610f5d57600080fd5b81516020610f72610f6d83610f28565b610ef7565b82815260059290921b84018101918181019086841115610f9157600080fd5b8286015b84811015610fac5780518352918301918301610f95565b509695505050505050565b60008060408385031215610fca57600080fd5b825167ffffffffffffffff80821115610fe257600080fd5b818501915085601f830112610ff657600080fd5b81516020611006610f6d83610f28565b82815260059290921b8401810191818101908984111561102557600080fd5b948201945b8386101561104c57855161103d81610a3d565b8252948201949082019061102a565b9188015191965090935050508082111561106557600080fd5b5061107285828601610f4c565b9150509250929050565b600060001982141561109057611090610c5a565b506001019056fea2646970667358221220afe3aecff89ae85197ecd6aa115a9d6617e05e9b8aac83a9a66f3e68a25dc90c64736f6c634300080c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000074b92f22bcb3ea996d6b027da62361f02c6a631e0000000000000000000000006f37a09269e67ede41307d359b5b4afaa70d8caf0000000000000000000000000385603ab55642cb4dd5de3ae9e306809991804f
-----Decoded View---------------
Arg [0] : l1EventLogger_ (address): 0x74B92f22bCb3eA996d6b027dA62361f02C6a631e
Arg [1] : l2TokenClaimBridge_ (address): 0x6F37a09269E67edE41307d359b5B4aFAa70d8caF
Arg [2] : royaltyEngine_ (address): 0x0385603ab55642cb4Dd5De3aE9e306809991804f
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000074b92f22bcb3ea996d6b027da62361f02c6a631e
Arg [1] : 0000000000000000000000006f37a09269e67ede41307d359b5b4afaa70d8caf
Arg [2] : 0000000000000000000000000385603ab55642cb4dd5de3ae9e306809991804f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.