Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 25 from a total of 149 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Call Forwarder | 121731797 | 75 days ago | IN | 0 ETH | 0.00002992 | ||||
Call Forwarder | 121725257 | 75 days ago | IN | 0 ETH | 0.00002992 | ||||
Call Forwarder | 121718443 | 75 days ago | IN | 0 ETH | 0.00002992 | ||||
Call Forwarder | 121715733 | 75 days ago | IN | 0 ETH | 0.00000472 | ||||
Call Forwarder | 121700620 | 75 days ago | IN | 0 ETH | 0.00003782 | ||||
Call Forwarder | 121690035 | 75 days ago | IN | 0 ETH | 0.00001588 | ||||
Call Forwarder | 121683737 | 75 days ago | IN | 0 ETH | 0.00001588 | ||||
Call Forwarder | 121673041 | 75 days ago | IN | 0 ETH | 0.00001588 | ||||
Call Forwarder | 121488838 | 75 days ago | IN | 0 ETH | 0.00001588 | ||||
Call Forwarder | 121477287 | 75 days ago | IN | 0 ETH | 0.00002255 | ||||
Call Forwarder | 108523481 | 124 days ago | IN | 0 ETH | 0.00002992 | ||||
Call Forwarder | 108515681 | 124 days ago | IN | 0 ETH | 0.00002992 | ||||
Call Forwarder | 108514092 | 124 days ago | IN | 0 ETH | 0.00000472 | ||||
Call Forwarder | 108507779 | 124 days ago | IN | 0 ETH | 0.00002944 | ||||
Call Forwarder | 108496842 | 124 days ago | IN | 0 ETH | 0.00002944 | ||||
Call Forwarder | 108485987 | 124 days ago | IN | 0 ETH | 0.00003782 | ||||
Call Forwarder | 108478337 | 125 days ago | IN | 0 ETH | 0.00001588 | ||||
Call Forwarder | 108473698 | 125 days ago | IN | 0 ETH | 0.00001588 | ||||
Call Forwarder | 108464424 | 125 days ago | IN | 0 ETH | 0.00001588 | ||||
Call Forwarder | 108458319 | 125 days ago | IN | 0 ETH | 0.00001588 | ||||
Call Forwarder | 108453709 | 125 days ago | IN | 0 ETH | 0.00001588 | ||||
Call Forwarder | 108433666 | 125 days ago | IN | 0 ETH | 0.00001588 | ||||
Call Forwarder | 108404960 | 125 days ago | IN | 0 ETH | 0.00002255 | ||||
Call Forwarder | 103682399 | 138 days ago | IN | 0 ETH | 0.00003659 | ||||
Call Forwarder | 103679374 | 138 days ago | IN | 0 ETH | 0.00003611 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
121700620 | 75 days ago | Contract Creation | 0 ETH | |||
121477287 | 75 days ago | Contract Creation | 0 ETH | |||
108485987 | 124 days ago | Contract Creation | 0 ETH | |||
108404960 | 125 days ago | Contract Creation | 0 ETH | |||
103682399 | 138 days ago | Contract Creation | 0 ETH | |||
103679374 | 138 days ago | Contract Creation | 0 ETH | |||
103677814 | 138 days ago | Contract Creation | 0 ETH | |||
103677810 | 138 days ago | Contract Creation | 0 ETH | |||
103677805 | 138 days ago | Contract Creation | 0 ETH | |||
103362225 | 139 days ago | Contract Creation | 0 ETH | |||
103360687 | 139 days ago | Contract Creation | 0 ETH | |||
85412022 | 203 days ago | 0.00065553 ETH | ||||
66699231 | 270 days ago | 0.00001401 ETH | ||||
64277699 | 280 days ago | 0.00001401 ETH | ||||
64273906 | 280 days ago | 0.00013 ETH | ||||
64273906 | 280 days ago | Contract Creation | 0 ETH | |||
62737469 | 286 days ago | 0.00065558 ETH | ||||
62737469 | 286 days ago | Contract Creation | 0 ETH | |||
60367737 | 294 days ago | 0.00010918 ETH | ||||
56217873 | 307 days ago | 0.00010918 ETH | ||||
54224733 | 313 days ago | 0.00001797 ETH | ||||
54211851 | 313 days ago | 0.00010918 ETH | ||||
51867184 | 320 days ago | 0.00001401 ETH | ||||
51857232 | 320 days ago | 0.00001407 ETH | ||||
51213109 | 322 days ago | 0.00001401 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
L2ForwarderFactory
Compiler Version
v0.8.23+commit.f704f362
Optimization Enabled:
Yes with 20000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.13; import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol"; import {L2ForwarderPredictor} from "./L2ForwarderPredictor.sol"; import {IL2ForwarderFactory} from "./interfaces/IL2ForwarderFactory.sol"; import {IL2Forwarder} from "./interfaces/IL2Forwarder.sol"; contract L2ForwarderFactory is L2ForwarderPredictor, IL2ForwarderFactory { /// @inheritdoc IL2ForwarderFactory address public immutable aliasedL1Teleporter; constructor(address _impl, address _aliasedL1Teleporter) L2ForwarderPredictor(address(this), _impl) { aliasedL1Teleporter = _aliasedL1Teleporter; } /// @inheritdoc IL2ForwarderFactory function callForwarder(IL2Forwarder.L2ForwarderParams memory params) external payable { if (msg.sender != aliasedL1Teleporter) revert OnlyL1Teleporter(); IL2Forwarder l2Forwarder = _tryCreateL2Forwarder(params.owner, params.routerOrInbox, params.to); l2Forwarder.bridgeToL3{value: msg.value}(params); emit CalledL2Forwarder(address(l2Forwarder), params); } /// @inheritdoc IL2ForwarderFactory function createL2Forwarder(address owner, address routerOrInbox, address to) public returns (IL2Forwarder) { IL2Forwarder l2Forwarder = IL2Forwarder(payable(Clones.cloneDeterministic(l2ForwarderImplementation, _salt(owner, routerOrInbox, to)))); l2Forwarder.initialize(owner); emit CreatedL2Forwarder(address(l2Forwarder), owner, routerOrInbox, to); return l2Forwarder; } /// @dev Create an L2Forwarder if it doesn't exist, otherwise return the existing one. function _tryCreateL2Forwarder(address owner, address routerOrInbox, address to) internal returns (IL2Forwarder) { address calculatedAddress = l2ForwarderAddress(owner, routerOrInbox, to); if (calculatedAddress.code.length > 0) { // contract already exists return IL2Forwarder(payable(calculatedAddress)); } // contract doesn't exist, create it return createL2Forwarder(owner, routerOrInbox, to); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (proxy/Clones.sol) pragma solidity ^0.8.0; /** * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for * deploying minimal proxy contracts, also known as "clones". * * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies * > a minimal bytecode implementation that delegates all calls to a known, fixed address. * * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the * deterministic method. * * _Available since v3.4._ */ library Clones { /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create opcode, which should never revert. */ function clone(address implementation) internal returns (address instance) { /// @solidity memory-safe-assembly assembly { // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes // of the `implementation` address with the bytecode before the address. mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000)) // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3)) instance := create(0, 0x09, 0x37) } require(instance != address(0), "ERC1167: create failed"); } /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create2 opcode and a `salt` to deterministically deploy * the clone. Using the same `implementation` and `salt` multiple time will revert, since * the clones cannot be deployed twice at the same address. */ function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) { /// @solidity memory-safe-assembly assembly { // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes // of the `implementation` address with the bytecode before the address. mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000)) // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3)) instance := create2(0, 0x09, 0x37, salt) } require(instance != address(0), "ERC1167: create2 failed"); } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress( address implementation, bytes32 salt, address deployer ) internal pure returns (address predicted) { /// @solidity memory-safe-assembly assembly { let ptr := mload(0x40) mstore(add(ptr, 0x38), deployer) mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff) mstore(add(ptr, 0x14), implementation) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73) mstore(add(ptr, 0x58), salt) mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37)) predicted := keccak256(add(ptr, 0x43), 0x55) } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress( address implementation, bytes32 salt ) internal view returns (address predicted) { return predictDeterministicAddress(implementation, salt, address(this)); } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.13; import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol"; import {IL2ForwarderPredictor} from "./interfaces/IL2ForwarderPredictor.sol"; abstract contract L2ForwarderPredictor is IL2ForwarderPredictor { /// @inheritdoc IL2ForwarderPredictor address public immutable l2ForwarderFactory; /// @inheritdoc IL2ForwarderPredictor address public immutable l2ForwarderImplementation; constructor(address _factory, address _implementation) { l2ForwarderFactory = _factory; l2ForwarderImplementation = _implementation; } /// @inheritdoc IL2ForwarderPredictor function l2ForwarderAddress(address owner, address routerOrInbox, address to) public view returns (address) { return Clones.predictDeterministicAddress( l2ForwarderImplementation, _salt(owner, routerOrInbox, to), l2ForwarderFactory ); } /// @notice Creates the salt for an L2Forwarder from its owner, routerOrInbox, and to address function _salt(address owner, address routerOrInbox, address to) internal pure returns (bytes32) { return keccak256(abi.encode(owner, routerOrInbox, to)); } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.13; import {IL2ForwarderPredictor} from "./IL2ForwarderPredictor.sol"; import {IL2Forwarder} from "./IL2Forwarder.sol"; /// @title IL2ForwarderFactory /// @notice Creates L2Forwarders and calls them to bridge tokens to L3. /// L2Forwarders are created via CREATE2 / clones. interface IL2ForwarderFactory is IL2ForwarderPredictor { /// @notice Emitted when a new L2Forwarder is created event CreatedL2Forwarder(address indexed l2Forwarder, address indexed owner, address routerOrInbox, address to); /// @notice Emitted when an L2Forwarder is called to bridge tokens to L3 event CalledL2Forwarder(address indexed l2Forwarder, IL2Forwarder.L2ForwarderParams params); /// @notice Thrown when any address other than the aliased L1Teleporter calls callForwarder error OnlyL1Teleporter(); /// @notice Calls an L2Forwarder to bridge tokens to L3. Will create the L2Forwarder first if it doesn't exist. /// @dev Only callable by the aliased L1Teleporter. /// @param params Parameters for the L2Forwarder function callForwarder(IL2Forwarder.L2ForwarderParams memory params) external payable; /// @notice Creates an L2Forwarder for the given parameters. /// @param owner Owner of the L2Forwarder /// @param routerOrInbox Address of the L1GatewayRouter or Inbox /// @param to Address to bridge tokens to /// @dev This method is external to allow fund rescue when `callForwarder` reverts. function createL2Forwarder(address owner, address routerOrInbox, address to) external returns (IL2Forwarder); /// @notice Aliased address of the L1Teleporter contract function aliasedL1Teleporter() external view returns (address); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.13; import {IL2ForwarderPredictor} from "./IL2ForwarderPredictor.sol"; /// @title IL2Forwarder /// @notice L2 contract that receives ERC20 tokens to forward to L3. /// May receive either token and ETH, token and the L3 feeToken, or just feeToken if token == feeToken. /// In case funds cannot be bridged to L3, the owner can call rescue to get their funds back. interface IL2Forwarder { /// @notice Parameters for an L2Forwarder /// @param owner Address of the L2Forwarder owner. Setting this incorrectly could result in loss of funds. /// @param l2Token Address of the L2 token to bridge to L3 /// @param l3FeeTokenL2Addr Address of the L3's fee token, or 0x00 for ETH /// @param routerOrInbox Address of the L2 -> L3 GatewayRouter or Inbox if depositing only custom fee token /// @param to Address of the recipient on L3 /// @param gasLimit Gas limit for the L2 -> L3 retryable /// @param gasPriceBid Gas price for the L2 -> L3 retryable /// @param maxSubmissionCost Max submission fee for the L2 -> L3 retryable. Is ignored for Standard and OnlyCustomFee teleportation types. struct L2ForwarderParams { address owner; address l2Token; address l3FeeTokenL2Addr; address routerOrInbox; address to; uint256 gasLimit; uint256 gasPriceBid; uint256 maxSubmissionCost; } /// @notice Emitted after a successful call to rescue /// @param targets Addresses that were called /// @param values Values that were sent /// @param datas Calldata that was sent event Rescued(address[] targets, uint256[] values, bytes[] datas); /// @notice Emitted after a successful call to bridgeToL3 event BridgedToL3(uint256 tokenAmount, uint256 feeAmount); /// @notice Thrown when initialize is called more than once error AlreadyInitialized(); /// @notice Thrown when a non-owner calls rescue error OnlyOwner(); /// @notice Thrown when the length of targets, values, and datas are not equal in a call to rescue error LengthMismatch(); /// @notice Thrown when an external call in rescue fails error CallFailed(address to, uint256 value, bytes data, bytes returnData); /// @notice Thrown when bridgeToL3 is called by an address other than the L2ForwarderFactory error OnlyL2ForwarderFactory(); /// @notice Thrown when the L2Forwarder has no balance of the token to bridge error ZeroTokenBalance(address token); /// @notice Initialize the L2Forwarder with the owner function initialize(address _owner) external; /// @notice Send tokens + (fee tokens or ETH) through the bridge to a recipient on L3. /// @param params Parameters of the bridge transaction. /// @dev Can only be called by the L2ForwarderFactory. function bridgeToL3(L2ForwarderParams calldata params) external payable; /// @notice Allows the owner of this L2Forwarder to make arbitrary calls. /// If bridgeToL3 cannot succeed, the owner can call this to rescue their tokens and ETH. /// @param targets Addresses to call /// @param values Values to send /// @param datas Calldata to send function rescue(address[] calldata targets, uint256[] calldata values, bytes[] calldata datas) external payable; /// @notice The owner of this L2Forwarder. Authorized to call rescue. function owner() external view returns (address); /// @notice The address of the L2ForwarderFactory function l2ForwarderFactory() external view returns (address); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.13; import {IL2Forwarder} from "./IL2Forwarder.sol"; /// @title IL2ForwarderPredictor /// @notice Predicts the address of an L2Forwarder based on its parameters interface IL2ForwarderPredictor { /// @notice Address of the L2ForwarderFactory function l2ForwarderFactory() external view returns (address); /// @notice Address of the L2Forwarder implementation function l2ForwarderImplementation() external view returns (address); /// @notice Predicts the address of an L2Forwarder based on its owner, routerOrInbox, and to function l2ForwarderAddress(address owner, address routerOrInbox, address to) external view returns (address); }
{ "remappings": [ "@arbitrum/=node_modules/@arbitrum/", "@offchainlabs/=node_modules/@offchainlabs/", "@openzeppelin/=node_modules/@openzeppelin/", "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "hardhat/=node_modules/hardhat/" ], "optimizer": { "enabled": true, "runs": 20000 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "libraries": {} }
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_impl","type":"address"},{"internalType":"address","name":"_aliasedL1Teleporter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"OnlyL1Teleporter","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"l2Forwarder","type":"address"},{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"l2Token","type":"address"},{"internalType":"address","name":"l3FeeTokenL2Addr","type":"address"},{"internalType":"address","name":"routerOrInbox","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"uint256","name":"maxSubmissionCost","type":"uint256"}],"indexed":false,"internalType":"struct IL2Forwarder.L2ForwarderParams","name":"params","type":"tuple"}],"name":"CalledL2Forwarder","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"l2Forwarder","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"routerOrInbox","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"CreatedL2Forwarder","type":"event"},{"inputs":[],"name":"aliasedL1Teleporter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"l2Token","type":"address"},{"internalType":"address","name":"l3FeeTokenL2Addr","type":"address"},{"internalType":"address","name":"routerOrInbox","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"uint256","name":"maxSubmissionCost","type":"uint256"}],"internalType":"struct IL2Forwarder.L2ForwarderParams","name":"params","type":"tuple"}],"name":"callForwarder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"routerOrInbox","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"createL2Forwarder","outputs":[{"internalType":"contract IL2Forwarder","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"routerOrInbox","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"l2ForwarderAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ForwarderFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ForwarderImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60e060405234801561001057600080fd5b50604051610a3c380380610a3c83398101604081905261002f91610066565b306080526001600160a01b0391821660a0521660c052610099565b80516001600160a01b038116811461006157600080fd5b919050565b6000806040838503121561007957600080fd5b6100828361004a565b91506100906020840161004a565b90509250929050565b60805160a05160c05161094b6100f16000396000818161010e01526103e901526000818161014201528181610210015281816102c5015261075101526000818160da015281816101d40152610715015261094b6000f3fe6080604052600436106100655760003560e01c8063e261911b11610043578063e261911b146100fc578063ec7d4abd14610130578063fbabf0841461016457600080fd5b806302e8e7831461006a57806327a01aa6146100b3578063377f017a146100c8575b600080fd5b34801561007657600080fd5b5061008a6100853660046107f8565b61026b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100c66100c136600461083b565b6103d1565b005b3480156100d457600080fd5b5061008a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561010857600080fd5b5061008a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561013c57600080fd5b5061008a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561017057600080fd5b5061008a61017f3660046107f8565b6040805173ffffffffffffffffffffffffffffffffffffffff948516602080830191909152938516818301529190931660608083019190915283518083039091018152608082019384905280519201919091207f000000000000000000000000000000000000000000000000000000000000000060b88301526f5af43d82803e903d91602b57fd5bf3ff60a48301527f00000000000000000000000000000000000000000000000000000000000000006094830152733d602d80600a3d3981f3363d3d373d3d3d363d7390925260d88101919091526037608c82012060f8820152605560c39091012090565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660208084019190915281861683850152908416606080840191909152835180840390910181526080909201909252805191012060009081906102ea907f0000000000000000000000000000000000000000000000000000000000000000906105f6565b6040517fc4d66de800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529192509082169063c4d66de890602401600060405180830381600087803b15801561035757600080fd5b505af115801561036b573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff88811682528781166020830152808a169450851692507f99f6b41137c463e01337801d2b5ee9d1b5d057e4266739a17a3d50d2149ef9be910160405180910390a390505b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610440576040517fbf801ce900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006104598260000151836060015184608001516106c4565b604080517f822681f5000000000000000000000000000000000000000000000000000000008152845173ffffffffffffffffffffffffffffffffffffffff9081166004830152602086015181166024830152918501518216604482015260608501518216606482015260808501518216608482015260a085015160a482015260c085015160c482015260e085015160e482015291925082169063822681f5903490610104016000604051808303818588803b15801561051757600080fd5b505af115801561052b573d6000803e3d6000fd5b50505050508073ffffffffffffffffffffffffffffffffffffffff167f8f97dd18e7ab8f7c73e42de8cffe53e624385c58dce14058891e7f5eaba844aa836040516105ea919060006101008201905073ffffffffffffffffffffffffffffffffffffffff8084511683528060208501511660208401528060408501511660408401528060608501511660608401528060808501511660808401525060a083015160a083015260c083015160c083015260e083015160e083015292915050565b60405180910390a25050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f5905073ffffffffffffffffffffffffffffffffffffffff81166106be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640160405180910390fd5b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8581166020808401919091528582168385015284821660608085019190915284518085039091018152608084019485905280519101207f000000000000000000000000000000000000000000000000000000000000000060b88401526f5af43d82803e903d91602b57fd5bf3ff60a48401527f00000000000000000000000000000000000000000000000000000000000000006094840152733d602d80600a3d3981f3363d3d373d3d3d363d7390935260d88201929092526037608c82012060f8820152605560c39091012060009181163b156107bb5790506103ca565b6107c685858561026b565b95945050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107f357600080fd5b919050565b60008060006060848603121561080d57600080fd5b610816846107cf565b9250610824602085016107cf565b9150610832604085016107cf565b90509250925092565b600061010080838503121561084f57600080fd5b6040519081019067ffffffffffffffff82118183101715610899577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b816040526108a6846107cf565b81526108b4602085016107cf565b60208201526108c5604085016107cf565b60408201526108d6606085016107cf565b60608201526108e7608085016107cf565b608082015260a084013560a082015260c084013560c082015260e084013560e082015280925050509291505056fea2646970667358221220c8b0af1fdbb01cb911feea2fbb233e6f2a0634193afe0d9e7b1ac46da468f40464736f6c63430008170033000000000000000000000000bd9cad684495eeb457df39527441ede882ef49c3000000000000000000000000af97bbf020594d7ffe05bf32eede5b973579ba79
Deployed Bytecode
0x6080604052600436106100655760003560e01c8063e261911b11610043578063e261911b146100fc578063ec7d4abd14610130578063fbabf0841461016457600080fd5b806302e8e7831461006a57806327a01aa6146100b3578063377f017a146100c8575b600080fd5b34801561007657600080fd5b5061008a6100853660046107f8565b61026b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100c66100c136600461083b565b6103d1565b005b3480156100d457600080fd5b5061008a7f00000000000000000000000088febafbb4e36a4e7e8874e4c9fd73a9d59c2e7c81565b34801561010857600080fd5b5061008a7f000000000000000000000000af97bbf020594d7ffe05bf32eede5b973579ba7981565b34801561013c57600080fd5b5061008a7f000000000000000000000000bd9cad684495eeb457df39527441ede882ef49c381565b34801561017057600080fd5b5061008a61017f3660046107f8565b6040805173ffffffffffffffffffffffffffffffffffffffff948516602080830191909152938516818301529190931660608083019190915283518083039091018152608082019384905280519201919091207f00000000000000000000000088febafbb4e36a4e7e8874e4c9fd73a9d59c2e7c60b88301526f5af43d82803e903d91602b57fd5bf3ff60a48301527f000000000000000000000000bd9cad684495eeb457df39527441ede882ef49c36094830152733d602d80600a3d3981f3363d3d373d3d3d363d7390925260d88101919091526037608c82012060f8820152605560c39091012090565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660208084019190915281861683850152908416606080840191909152835180840390910181526080909201909252805191012060009081906102ea907f000000000000000000000000bd9cad684495eeb457df39527441ede882ef49c3906105f6565b6040517fc4d66de800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529192509082169063c4d66de890602401600060405180830381600087803b15801561035757600080fd5b505af115801561036b573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff88811682528781166020830152808a169450851692507f99f6b41137c463e01337801d2b5ee9d1b5d057e4266739a17a3d50d2149ef9be910160405180910390a390505b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000af97bbf020594d7ffe05bf32eede5b973579ba791614610440576040517fbf801ce900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006104598260000151836060015184608001516106c4565b604080517f822681f5000000000000000000000000000000000000000000000000000000008152845173ffffffffffffffffffffffffffffffffffffffff9081166004830152602086015181166024830152918501518216604482015260608501518216606482015260808501518216608482015260a085015160a482015260c085015160c482015260e085015160e482015291925082169063822681f5903490610104016000604051808303818588803b15801561051757600080fd5b505af115801561052b573d6000803e3d6000fd5b50505050508073ffffffffffffffffffffffffffffffffffffffff167f8f97dd18e7ab8f7c73e42de8cffe53e624385c58dce14058891e7f5eaba844aa836040516105ea919060006101008201905073ffffffffffffffffffffffffffffffffffffffff8084511683528060208501511660208401528060408501511660408401528060608501511660608401528060808501511660808401525060a083015160a083015260c083015160c083015260e083015160e083015292915050565b60405180910390a25050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f5905073ffffffffffffffffffffffffffffffffffffffff81166106be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640160405180910390fd5b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8581166020808401919091528582168385015284821660608085019190915284518085039091018152608084019485905280519101207f00000000000000000000000088febafbb4e36a4e7e8874e4c9fd73a9d59c2e7c60b88401526f5af43d82803e903d91602b57fd5bf3ff60a48401527f000000000000000000000000bd9cad684495eeb457df39527441ede882ef49c36094840152733d602d80600a3d3981f3363d3d373d3d3d363d7390935260d88201929092526037608c82012060f8820152605560c39091012060009181163b156107bb5790506103ca565b6107c685858561026b565b95945050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107f357600080fd5b919050565b60008060006060848603121561080d57600080fd5b610816846107cf565b9250610824602085016107cf565b9150610832604085016107cf565b90509250925092565b600061010080838503121561084f57600080fd5b6040519081019067ffffffffffffffff82118183101715610899577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b816040526108a6846107cf565b81526108b4602085016107cf565b60208201526108c5604085016107cf565b60408201526108d6606085016107cf565b60608201526108e7608085016107cf565b608082015260a084013560a082015260c084013560c082015260e084013560e082015280925050509291505056fea2646970667358221220c8b0af1fdbb01cb911feea2fbb233e6f2a0634193afe0d9e7b1ac46da468f40464736f6c63430008170033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000bd9cad684495eeb457df39527441ede882ef49c3000000000000000000000000af97bbf020594d7ffe05bf32eede5b973579ba79
-----Decoded View---------------
Arg [0] : _impl (address): 0xbD9CaD684495EeB457dF39527441ede882eF49c3
Arg [1] : _aliasedL1Teleporter (address): 0xAf97BBF020594d7ffE05bF32eEDe5b973579BA79
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000bd9cad684495eeb457df39527441ede882ef49c3
Arg [1] : 000000000000000000000000af97bbf020594d7ffe05bf32eede5b973579ba79
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.