Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 10,541 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Propagate Root | 21118343 | 52 mins ago | IN | 0 ETH | 0.00178266 | ||||
Propagate Root | 21118044 | 1 hr ago | IN | 0 ETH | 0.00181789 | ||||
Propagate Root | 21117745 | 2 hrs ago | IN | 0 ETH | 0.001803 | ||||
Propagate Root | 21117446 | 3 hrs ago | IN | 0 ETH | 0.00212227 | ||||
Propagate Root | 21117247 | 4 hrs ago | IN | 0 ETH | 0.00262856 | ||||
Propagate Root | 21117047 | 5 hrs ago | IN | 0 ETH | 0.00212535 | ||||
Propagate Root | 21116872 | 5 hrs ago | IN | 0 ETH | 0.00209885 | ||||
Propagate Root | 21116698 | 6 hrs ago | IN | 0 ETH | 0.00181945 | ||||
Propagate Root | 21116524 | 6 hrs ago | IN | 0 ETH | 0.00178085 | ||||
Propagate Root | 21116325 | 7 hrs ago | IN | 0 ETH | 0.00194008 | ||||
Propagate Root | 21116126 | 8 hrs ago | IN | 0 ETH | 0.00179429 | ||||
Propagate Root | 21115901 | 9 hrs ago | IN | 0 ETH | 0.00197561 | ||||
Propagate Root | 21115728 | 9 hrs ago | IN | 0 ETH | 0.00225492 | ||||
Propagate Root | 21115504 | 10 hrs ago | IN | 0 ETH | 0.00250548 | ||||
Propagate Root | 21115307 | 11 hrs ago | IN | 0 ETH | 0.00215606 | ||||
Propagate Root | 21115057 | 11 hrs ago | IN | 0 ETH | 0.00200844 | ||||
Propagate Root | 21114758 | 12 hrs ago | IN | 0 ETH | 0.00203473 | ||||
Propagate Root | 21114458 | 13 hrs ago | IN | 0 ETH | 0.00181243 | ||||
Propagate Root | 21114134 | 14 hrs ago | IN | 0 ETH | 0.00193123 | ||||
Propagate Root | 21113837 | 15 hrs ago | IN | 0 ETH | 0.00175207 | ||||
Propagate Root | 21113538 | 16 hrs ago | IN | 0 ETH | 0.00176545 | ||||
Propagate Root | 21113242 | 17 hrs ago | IN | 0 ETH | 0.001754 | ||||
Propagate Root | 21112942 | 18 hrs ago | IN | 0 ETH | 0.00176227 | ||||
Propagate Root | 21112642 | 19 hrs ago | IN | 0 ETH | 0.00168815 | ||||
Propagate Root | 21112342 | 20 hrs ago | IN | 0 ETH | 0.00175569 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
OpStateBridge
Compiler Version
v0.8.15+commit.e14f2714
Optimization Enabled:
Yes with 10000 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.15; // Optimism interface for cross domain messaging import {ICrossDomainMessenger} from "@eth-optimism/contracts/libraries/bridge/ICrossDomainMessenger.sol"; import {IOpWorldID} from "./interfaces/IOpWorldID.sol"; import {IRootHistory} from "./interfaces/IRootHistory.sol"; import {IWorldIDIdentityManager} from "./interfaces/IWorldIDIdentityManager.sol"; import {Ownable2Step} from "openzeppelin-contracts/access/Ownable2Step.sol"; import {ICrossDomainOwnable3} from "./interfaces/ICrossDomainOwnable3.sol"; /// @title World ID State Bridge Optimism /// @author Worldcoin /// @notice Distributes new World ID Identity Manager roots to an OP Stack network /// @dev This contract lives on Ethereum mainnet and works for Optimism and any OP Stack based chain contract OpStateBridge is Ownable2Step { /////////////////////////////////////////////////////////////////// /// STORAGE /// /////////////////////////////////////////////////////////////////// /// @notice The address of the OpWorldID contract on any OP Stack chain address public immutable opWorldIDAddress; /// @notice address for OP Stack chain Ethereum mainnet L1CrossDomainMessenger contract address internal immutable crossDomainMessengerAddress; /// @notice Ethereum mainnet worldID Address address public immutable worldIDAddress; /// @notice Amount of gas purchased on the OP Stack chain for propagateRoot uint32 internal _gasLimitPropagateRoot; /// @notice Amount of gas purchased on the OP Stack chain for SetRootHistoryExpiry uint32 internal _gasLimitSetRootHistoryExpiry; /// @notice Amount of gas purchased on the OP Stack chain for transferOwnershipOp uint32 internal _gasLimitTransferOwnership; /// @notice The default gas limit amount to buy on an OP stack chain to do simple transactions uint32 public constant DEFAULT_OP_GAS_LIMIT = 1000000; /////////////////////////////////////////////////////////////////// /// EVENTS /// /////////////////////////////////////////////////////////////////// /// @notice Emitted when the StateBridge gives ownership of the OPWorldID contract /// to the WorldID Identity Manager contract away /// @param previousOwner The previous owner of the OPWorldID contract /// @param newOwner The new owner of the OPWorldID contract /// @param isLocal Whether the ownership transfer is local (Optimism/OP Stack chain EOA/contract) /// or an Ethereum EOA or contract event OwnershipTransferredOp( address indexed previousOwner, address indexed newOwner, bool isLocal ); /// @notice Emitted when the StateBridge sends a root to the OPWorldID contract /// @param root The root sent to the OPWorldID contract on the OP Stack chain event RootPropagated(uint256 root); /// @notice Emitted when the StateBridge sets the root history expiry for OpWorldID and PolygonWorldID /// @param rootHistoryExpiry The new root history expiry event SetRootHistoryExpiry(uint256 rootHistoryExpiry); /// @notice Emitted when the StateBridge sets the gas limit for sendRootOp /// @param _opGasLimit The new opGasLimit for sendRootOp event SetGasLimitPropagateRoot(uint32 _opGasLimit); /// @notice Emitted when the StateBridge sets the gas limit for SetRootHistoryExpiry /// @param _opGasLimit The new opGasLimit for SetRootHistoryExpiry event SetGasLimitSetRootHistoryExpiry(uint32 _opGasLimit); /// @notice Emitted when the StateBridge sets the gas limit for transferOwnershipOp /// @param _opGasLimit The new opGasLimit for transferOwnershipOptimism event SetGasLimitTransferOwnershipOp(uint32 _opGasLimit); /////////////////////////////////////////////////////////////////// /// ERRORS /// /////////////////////////////////////////////////////////////////// /// @notice Emitted when an attempt is made to renounce ownership. error CannotRenounceOwnership(); /// @notice Emitted when an attempt is made to set the gas limit to zero error GasLimitZero(); /// @notice Emitted when an attempt is made to set an address to zero error AddressZero(); /////////////////////////////////////////////////////////////////// /// CONSTRUCTOR /// /////////////////////////////////////////////////////////////////// /// @notice constructor /// @param _worldIDIdentityManager Deployment address of the WorldID Identity Manager contract /// @param _opWorldIDAddress Address of the Optimism contract that will receive the new root and timestamp /// @param _crossDomainMessenger L1CrossDomainMessenger contract used to communicate with the desired OP /// Stack network /// @custom:revert if any of the constructor params addresses are zero constructor( address _worldIDIdentityManager, address _opWorldIDAddress, address _crossDomainMessenger ) { if ( _worldIDIdentityManager == address(0) || _opWorldIDAddress == address(0) || _crossDomainMessenger == address(0) ) { revert AddressZero(); } opWorldIDAddress = _opWorldIDAddress; worldIDAddress = _worldIDIdentityManager; crossDomainMessengerAddress = _crossDomainMessenger; _gasLimitPropagateRoot = DEFAULT_OP_GAS_LIMIT; _gasLimitSetRootHistoryExpiry = DEFAULT_OP_GAS_LIMIT; _gasLimitTransferOwnership = DEFAULT_OP_GAS_LIMIT; } /////////////////////////////////////////////////////////////////// /// PUBLIC API /// /////////////////////////////////////////////////////////////////// /// @notice Sends the latest WorldID Identity Manager root to the IOpStack. /// @dev Calls this method on the L1 Proxy contract to relay roots to the destination OP Stack chain function propagateRoot() external { uint256 latestRoot = IWorldIDIdentityManager(worldIDAddress).latestRoot(); // The `encodeCall` function is strongly typed, so this checks that we are passing the // correct data to the optimism bridge. bytes memory message = abi.encodeCall(IOpWorldID.receiveRoot, (latestRoot)); ICrossDomainMessenger(crossDomainMessengerAddress).sendMessage( // Contract address on the OP Stack Chain opWorldIDAddress, message, _gasLimitPropagateRoot ); emit RootPropagated(latestRoot); } /// @notice Adds functionality to the StateBridge to transfer ownership /// of OpWorldID to another contract on L1 or to a local OP Stack chain EOA /// @param _owner new owner (EOA or contract) /// @param _isLocal true if new owner is on Optimism, false if it is a cross-domain owner /// @custom:revert if _owner is set to the zero address function transferOwnershipOp(address _owner, bool _isLocal) external onlyOwner { if (_owner == address(0)) { revert AddressZero(); } // The `encodeCall` function is strongly typed, so this checks that we are passing the // correct data to the OP Stack chain bridge. bytes memory message = abi.encodeCall(ICrossDomainOwnable3.transferOwnership, (_owner, _isLocal)); ICrossDomainMessenger(crossDomainMessengerAddress).sendMessage( // Contract address on the OP Stack Chain opWorldIDAddress, message, _gasLimitTransferOwnership ); emit OwnershipTransferredOp(owner(), _owner, _isLocal); } /// @notice Adds functionality to the StateBridge to set the root history expiry on OpWorldID /// @param _rootHistoryExpiry new root history expiry function setRootHistoryExpiry(uint256 _rootHistoryExpiry) external onlyOwner { // The `encodeCall` function is strongly typed, so this checks that we are passing the // correct data to the optimism bridge. bytes memory message = abi.encodeCall(IRootHistory.setRootHistoryExpiry, (_rootHistoryExpiry)); ICrossDomainMessenger(crossDomainMessengerAddress).sendMessage( // Contract address on the OP Stack Chain opWorldIDAddress, message, _gasLimitSetRootHistoryExpiry ); emit SetRootHistoryExpiry(_rootHistoryExpiry); } /////////////////////////////////////////////////////////////////// /// OP GAS LIMIT /// /////////////////////////////////////////////////////////////////// /// @notice Sets the gas limit for the propagateRoot method /// @param _opGasLimit The new gas limit for the propagateRoot method function setGasLimitPropagateRoot(uint32 _opGasLimit) external onlyOwner { if (_opGasLimit <= 0) { revert GasLimitZero(); } _gasLimitPropagateRoot = _opGasLimit; emit SetGasLimitPropagateRoot(_opGasLimit); } /// @notice Sets the gas limit for the SetRootHistoryExpiry method /// @param _opGasLimit The new gas limit for the SetRootHistoryExpiry method function setGasLimitSetRootHistoryExpiry(uint32 _opGasLimit) external onlyOwner { if (_opGasLimit <= 0) { revert GasLimitZero(); } _gasLimitSetRootHistoryExpiry = _opGasLimit; emit SetGasLimitSetRootHistoryExpiry(_opGasLimit); } /// @notice Sets the gas limit for the transferOwnershipOp method /// @param _opGasLimit The new gas limit for the transferOwnershipOp method function setGasLimitTransferOwnershipOp(uint32 _opGasLimit) external onlyOwner { if (_opGasLimit <= 0) { revert GasLimitZero(); } _gasLimitTransferOwnership = _opGasLimit; emit SetGasLimitTransferOwnershipOp(_opGasLimit); } /////////////////////////////////////////////////////////////////// /// OWNERSHIP /// /////////////////////////////////////////////////////////////////// /// @notice Ensures that ownership of WorldID implementations cannot be renounced. /// @dev This function is intentionally not `virtual` as we do not want it to be possible to /// renounce ownership for any WorldID implementation. /// @dev This function is marked as `onlyOwner` to maintain the access restriction from the base /// contract. function renounceOwnership() public view override onlyOwner { revert CannotRenounceOwnership(); } }
// 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.15; /// @title Interface for the OpWorldID contract /// @author Worldcoin /// @custom:usage abi.encodeCall(IOpWorldID.receiveRoot, (_newRoot, _supersedeTimestamp)); interface IOpWorldID { //////////////////////////////////////////////////////////////////////////////// /// ROOT MIRRORING /// /////////////////////////////////////////////////////////////////////////////// /// @notice This function is called by the state bridge contract when it forwards a new root to /// the bridged WorldID. /// @dev This function can revert if Optimism's CrossDomainMessenger stops processing proofs /// or if OPLabs stops submitting them. Next iteration of Optimism's cross-domain messaging, will be /// fully permissionless for message-passing, so this will not be an issue. /// Sequencer needs to include changes to the CrossDomainMessenger contract on L1, not economically penalized /// if messages are not included, however the fraud prover (Cannon) can force the sequencer to include it. /// /// @param newRoot The value of the new root. /// /// @custom:reverts CannotOverwriteRoot If the root already exists in the root history. /// @custom:reverts string If the caller is not the owner. function receiveRoot(uint256 newRoot) external; }
//SPDX-License-Identifier: MIT pragma solidity ^0.8.15; /// @title Interface for WorldID setRooHistoryExpiry /// @author Worldcoin /// @notice Interface for WorldID setRooHistoryExpiry /// @dev Used in StateBridge to set the root history expiry time on Optimism (OPWorldID) /// @custom:usage abi.encodeCall(IRootHistory.setRootHistoryExpiry, (_expiryTime)); interface IRootHistory { /// @notice Sets the amount of time it takes for a root in the root history to expire. /// /// @param expiryTime The new amount of time it takes for a root to expire. /// /// @custom:reverts string If the caller is not the owner. function setRootHistoryExpiry(uint256 expiryTime) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.15; /// @title IWorldIDIdentityManager /// @author Worldcoin /// @dev used to fetch the latest root from the WorldIDIdentityManager interface IWorldIDIdentityManager { /// @notice returns the latest root function latestRoot() external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol) pragma solidity ^0.8.0; import "./Ownable.sol"; /** * @dev Contract module which provides access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() external { address sender = _msgSender(); require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner"); _transferOwnership(sender); } }
pragma solidity ^0.8.15; /// @title Optimism - CrossDomainOwnable3 Interface /// @author Worldcoin /// @notice Interface for the CrossDomainOwnable contract for the Optimism L2 /// @dev Adds functionality to the StateBridge to transfer ownership /// of OpWorldID to another contract on L1 or to a local Optimism EOA /// @custom:usage abi.encodeCall(ICrossDomainOwnable3.transferOwnership, (_owner, _isLocal)); interface ICrossDomainOwnable3 { /// @notice transfers owner to a cross-domain or local owner /// @param _owner new owner (EOA or contract) /// @param _isLocal true if new owner is on Optimism, false if it is a cross-domain owner function transferOwnership(address _owner, bool _isLocal) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "remappings": [ "@prb/test/=lib/prb-test/src/", "forge-std/=lib/forge-std/src/", "src/=src/", "semaphore/=lib/semaphore-v3/packages/contracts/contracts/", "solmate/=lib/solmate/", "@rari-capital/solmate/=lib/solmate/", "@eth-optimism/contracts/=node_modules/@eth-optimism/contracts/", "@eth-optimism/contracts-bedrock/=node_modules/@eth-optimism/contracts-bedrock/", "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "fx-portal/contracts/=lib/contracts/contracts/", "ds-test/=lib/forge-std/lib/ds-test/src/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "prb-test/=lib/prb-test/src/", "semaphore-v3/=lib/semaphore-v3/" ], "optimizer": { "enabled": true, "runs": 10000, "details": { "peephole": true, "inliner": true, "deduplicate": true, "cse": true, "yul": true } }, "metadata": { "useLiteralContent": false, "bytecodeHash": "none" }, "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":"_worldIDIdentityManager","type":"address"},{"internalType":"address","name":"_opWorldIDAddress","type":"address"},{"internalType":"address","name":"_crossDomainMessenger","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AddressZero","type":"error"},{"inputs":[],"name":"CannotRenounceOwnership","type":"error"},{"inputs":[],"name":"GasLimitZero","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":false,"internalType":"bool","name":"isLocal","type":"bool"}],"name":"OwnershipTransferredOp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"root","type":"uint256"}],"name":"RootPropagated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"_opGasLimit","type":"uint32"}],"name":"SetGasLimitPropagateRoot","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"_opGasLimit","type":"uint32"}],"name":"SetGasLimitSetRootHistoryExpiry","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"_opGasLimit","type":"uint32"}],"name":"SetGasLimitTransferOwnershipOp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rootHistoryExpiry","type":"uint256"}],"name":"SetRootHistoryExpiry","type":"event"},{"inputs":[],"name":"DEFAULT_OP_GAS_LIMIT","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"opWorldIDAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"propagateRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_opGasLimit","type":"uint32"}],"name":"setGasLimitPropagateRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_opGasLimit","type":"uint32"}],"name":"setGasLimitSetRootHistoryExpiry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_opGasLimit","type":"uint32"}],"name":"setGasLimitTransferOwnershipOp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rootHistoryExpiry","type":"uint256"}],"name":"setRootHistoryExpiry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"bool","name":"_isLocal","type":"bool"}],"name":"transferOwnershipOp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"worldIDAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b50604051620011783803806200117883398101604081905262000034916200015e565b6200003f33620000c7565b6001600160a01b03831615806200005d57506001600160a01b038216155b806200007057506001600160a01b038116155b156200008f57604051639fabe1c160e01b815260040160405180910390fd5b6001600160a01b0391821660805291811660c05290811660a05260018054909116693d0900003d0900003d0960a61b179055620001a8565b600180546001600160a01b0319169055620000ee81620000f1602090811b62000cc217901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200015957600080fd5b919050565b6000806000606084860312156200017457600080fd5b6200017f8462000141565b92506200018f6020850162000141565b91506200019f6040850162000141565b90509250925092565b60805160a05160c051610f7662000202600039600081816101c5015261031a015260008181610463015281816108420152610b1f01526000818161019e015281816104a5015281816108840152610b610152610f766000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a3b801a31161008c578063c70aa72711610066578063c70aa727146101e7578063e30c3978146101fa578063e84d647414610218578063f2fde38b1461023757600080fd5b8063a3b801a314610186578063ab6dab0d14610199578063b665a5b2146101c057600080fd5b8063715018a6116100c8578063715018a61461011f57806379ba5097146101275780638a8fcec41461012f5780638da5cb5b1461014257600080fd5b80631c56fe40146100ef578063380db829146101045780634eb6840c1461010c575b600080fd5b6101026100fd366004610deb565b61024a565b005b610102610316565b61010261011a366004610deb565b61055e565b610102610627565b610102610661565b61010261013d366004610e41565b61071b565b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610102610194366004610deb565b610994565b61015c7f000000000000000000000000000000000000000000000000000000000000000081565b61015c7f000000000000000000000000000000000000000000000000000000000000000081565b6101026101f5366004610e7d565b610a5d565b60015473ffffffffffffffffffffffffffffffffffffffff1661015c565b610222620f424081565b60405163ffffffff909116815260200161017d565b610102610245366004610e96565b610c12565b610252610d37565b60008163ffffffff1611610292576040517f90ecd8f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527ffa2a99078de4d1b0d18381a1d80698c2798f5a987838280224694c908b4b7607906020015b60405180910390a150565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d7b0fef16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a79190610eb1565b90506000816040516024016103be91815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181526020820180517ffbde929b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260015490517f3dbb202b0000000000000000000000000000000000000000000000000000000081529192507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1691633dbb202b916104ef917f00000000000000000000000000000000000000000000000000000000000000009186917401000000000000000000000000000000000000000090910463ffffffff1690600401610eca565b600060405180830381600087803b15801561050957600080fd5b505af115801561051d573d6000803e3d6000fd5b505050507fd8f3e639501c4b5e551a948a2930f1215556bcde417c94d45746a8ec6418366f8260405161055291815260200190565b60405180910390a15050565b610566610d37565b60008163ffffffff16116105a6576040517f90ecd8f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527fb588f307d3dd92c5dae6b4ac79ad106af16c06b664d6afc62480daa61fe624e79060200161030b565b61062f610d37565b6040517f77aeb0ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154339073ffffffffffffffffffffffffffffffffffffffff16811461070f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61071881610dba565b50565b610723610d37565b73ffffffffffffffffffffffffffffffffffffffff8216610770576040517f9fabe1c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff831660248201528115156044820152600090606401604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181526020820180517fb242e534000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260015490517f3dbb202b0000000000000000000000000000000000000000000000000000000081529192507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1691633dbb202b916108d6917f00000000000000000000000000000000000000000000000000000000000000009186917c010000000000000000000000000000000000000000000000000000000090910463ffffffff1690600401610eca565b600060405180830381600087803b1580156108f057600080fd5b505af1158015610904573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1661093e60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f763ef977ad8eb40834384c417cf481dc800c87822c6a7feef8726a6566b6b12584604051610987911515815260200190565b60405180910390a3505050565b61099c610d37565b60008163ffffffff16116109dc576040517f90ecd8f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527fc48e688c0a2fc42ce36ecb7204c7b77f96132d253c141ef46c2591ae5a7763729060200161030b565b610a65610d37565b600081604051602401610a7a91815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181526020820180517fc70aa727000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260015490517f3dbb202b0000000000000000000000000000000000000000000000000000000081529192507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1691633dbb202b91610baf917f0000000000000000000000000000000000000000000000000000000000000000918691780100000000000000000000000000000000000000000000000090910463ffffffff1690600401610eca565b600060405180830381600087803b158015610bc957600080fd5b505af1158015610bdd573d6000803e3d6000fd5b505050507f9036872f40830f3909d8006c77be543a639ad4ebb34aff720498fcd12656a2928260405161055291815260200190565b610c1a610d37565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155610c7d60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610db8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610706565b565b600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561071881610cc2565b600060208284031215610dfd57600080fd5b813563ffffffff81168114610e1157600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e3c57600080fd5b919050565b60008060408385031215610e5457600080fd5b610e5d83610e18565b915060208301358015158114610e7257600080fd5b809150509250929050565b600060208284031215610e8f57600080fd5b5035919050565b600060208284031215610ea857600080fd5b610e1182610e18565b600060208284031215610ec357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815260006020606081840152845180606085015260005b81811015610f1457868101830151858201608001528201610ef8565b81811115610f26576000608083870101525b5063ffffffff9490941660408401525050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016080019291505056fea164736f6c634300080f000a000000000000000000000000f7134ce138832c1456f2a91d64621ee90c2bddea000000000000000000000000b3e7771a6e2d7dd8c0666042b7a07c39b938eb7d00000000000000000000000025ace71c97b33cc4729cf772ae268934f7ab5fa1
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a3b801a31161008c578063c70aa72711610066578063c70aa727146101e7578063e30c3978146101fa578063e84d647414610218578063f2fde38b1461023757600080fd5b8063a3b801a314610186578063ab6dab0d14610199578063b665a5b2146101c057600080fd5b8063715018a6116100c8578063715018a61461011f57806379ba5097146101275780638a8fcec41461012f5780638da5cb5b1461014257600080fd5b80631c56fe40146100ef578063380db829146101045780634eb6840c1461010c575b600080fd5b6101026100fd366004610deb565b61024a565b005b610102610316565b61010261011a366004610deb565b61055e565b610102610627565b610102610661565b61010261013d366004610e41565b61071b565b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610102610194366004610deb565b610994565b61015c7f000000000000000000000000b3e7771a6e2d7dd8c0666042b7a07c39b938eb7d81565b61015c7f000000000000000000000000f7134ce138832c1456f2a91d64621ee90c2bddea81565b6101026101f5366004610e7d565b610a5d565b60015473ffffffffffffffffffffffffffffffffffffffff1661015c565b610222620f424081565b60405163ffffffff909116815260200161017d565b610102610245366004610e96565b610c12565b610252610d37565b60008163ffffffff1611610292576040517f90ecd8f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527ffa2a99078de4d1b0d18381a1d80698c2798f5a987838280224694c908b4b7607906020015b60405180910390a150565b60007f000000000000000000000000f7134ce138832c1456f2a91d64621ee90c2bddea73ffffffffffffffffffffffffffffffffffffffff1663d7b0fef16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a79190610eb1565b90506000816040516024016103be91815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181526020820180517ffbde929b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260015490517f3dbb202b0000000000000000000000000000000000000000000000000000000081529192507f00000000000000000000000025ace71c97b33cc4729cf772ae268934f7ab5fa173ffffffffffffffffffffffffffffffffffffffff1691633dbb202b916104ef917f000000000000000000000000b3e7771a6e2d7dd8c0666042b7a07c39b938eb7d9186917401000000000000000000000000000000000000000090910463ffffffff1690600401610eca565b600060405180830381600087803b15801561050957600080fd5b505af115801561051d573d6000803e3d6000fd5b505050507fd8f3e639501c4b5e551a948a2930f1215556bcde417c94d45746a8ec6418366f8260405161055291815260200190565b60405180910390a15050565b610566610d37565b60008163ffffffff16116105a6576040517f90ecd8f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527fb588f307d3dd92c5dae6b4ac79ad106af16c06b664d6afc62480daa61fe624e79060200161030b565b61062f610d37565b6040517f77aeb0ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154339073ffffffffffffffffffffffffffffffffffffffff16811461070f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61071881610dba565b50565b610723610d37565b73ffffffffffffffffffffffffffffffffffffffff8216610770576040517f9fabe1c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff831660248201528115156044820152600090606401604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181526020820180517fb242e534000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260015490517f3dbb202b0000000000000000000000000000000000000000000000000000000081529192507f00000000000000000000000025ace71c97b33cc4729cf772ae268934f7ab5fa173ffffffffffffffffffffffffffffffffffffffff1691633dbb202b916108d6917f000000000000000000000000b3e7771a6e2d7dd8c0666042b7a07c39b938eb7d9186917c010000000000000000000000000000000000000000000000000000000090910463ffffffff1690600401610eca565b600060405180830381600087803b1580156108f057600080fd5b505af1158015610904573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1661093e60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f763ef977ad8eb40834384c417cf481dc800c87822c6a7feef8726a6566b6b12584604051610987911515815260200190565b60405180910390a3505050565b61099c610d37565b60008163ffffffff16116109dc576040517f90ecd8f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527fc48e688c0a2fc42ce36ecb7204c7b77f96132d253c141ef46c2591ae5a7763729060200161030b565b610a65610d37565b600081604051602401610a7a91815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181526020820180517fc70aa727000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260015490517f3dbb202b0000000000000000000000000000000000000000000000000000000081529192507f00000000000000000000000025ace71c97b33cc4729cf772ae268934f7ab5fa173ffffffffffffffffffffffffffffffffffffffff1691633dbb202b91610baf917f000000000000000000000000b3e7771a6e2d7dd8c0666042b7a07c39b938eb7d918691780100000000000000000000000000000000000000000000000090910463ffffffff1690600401610eca565b600060405180830381600087803b158015610bc957600080fd5b505af1158015610bdd573d6000803e3d6000fd5b505050507f9036872f40830f3909d8006c77be543a639ad4ebb34aff720498fcd12656a2928260405161055291815260200190565b610c1a610d37565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155610c7d60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610db8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610706565b565b600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561071881610cc2565b600060208284031215610dfd57600080fd5b813563ffffffff81168114610e1157600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e3c57600080fd5b919050565b60008060408385031215610e5457600080fd5b610e5d83610e18565b915060208301358015158114610e7257600080fd5b809150509250929050565b600060208284031215610e8f57600080fd5b5035919050565b600060208284031215610ea857600080fd5b610e1182610e18565b600060208284031215610ec357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815260006020606081840152845180606085015260005b81811015610f1457868101830151858201608001528201610ef8565b81811115610f26576000608083870101525b5063ffffffff9490941660408401525050601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016016080019291505056fea164736f6c634300080f000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f7134ce138832c1456f2a91d64621ee90c2bddea000000000000000000000000b3e7771a6e2d7dd8c0666042b7a07c39b938eb7d00000000000000000000000025ace71c97b33cc4729cf772ae268934f7ab5fa1
-----Decoded View---------------
Arg [0] : _worldIDIdentityManager (address): 0xf7134CE138832c1456F2a91D64621eE90c2bddEa
Arg [1] : _opWorldIDAddress (address): 0xB3E7771a6e2d7DD8C0666042B7a07C39b938eb7d
Arg [2] : _crossDomainMessenger (address): 0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000f7134ce138832c1456f2a91d64621ee90c2bddea
Arg [1] : 000000000000000000000000b3e7771a6e2d7dd8c0666042b7a07c39b938eb7d
Arg [2] : 00000000000000000000000025ace71c97b33cc4729cf772ae268934f7ab5fa1
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.