Arbitrum Sepolia Testnet

Contract

0x88feBaFBb4E36A4E7E8874E4c9Fd73A9D59C2E7c

Overview

ETH Balance

0 ETH

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Call Forwarder1217317972025-02-07 5:58:2675 days ago1738907906IN
0x88feBaFB...9D59C2E7c
0 ETH0.000029920.1
Call Forwarder1217252572025-02-07 5:26:2575 days ago1738905985IN
0x88feBaFB...9D59C2E7c
0 ETH0.000029920.1
Call Forwarder1217184432025-02-07 4:54:2575 days ago1738904065IN
0x88feBaFB...9D59C2E7c
0 ETH0.000029920.1
Call Forwarder1217157332025-02-07 4:41:4075 days ago1738903300IN
0x88feBaFB...9D59C2E7c
0 ETH0.000004720.1
Call Forwarder1217006202025-02-07 3:31:2475 days ago1738899084IN
0x88feBaFB...9D59C2E7c
0 ETH0.000037820.1
Call Forwarder1216900352025-02-07 2:39:5375 days ago1738895993IN
0x88feBaFB...9D59C2E7c
0 ETH0.000015880.1
Call Forwarder1216837372025-02-07 2:08:5375 days ago1738894133IN
0x88feBaFB...9D59C2E7c
0 ETH0.000015880.1
Call Forwarder1216730412025-02-07 1:16:3775 days ago1738890997IN
0x88feBaFB...9D59C2E7c
0 ETH0.000015880.1
Call Forwarder1214888382025-02-06 9:17:3475 days ago1738833454IN
0x88feBaFB...9D59C2E7c
0 ETH0.000015880.1
Call Forwarder1214772872025-02-06 7:27:4875 days ago1738826868IN
0x88feBaFB...9D59C2E7c
0 ETH0.000022550.1
Call Forwarder1085234812024-12-19 9:48:47124 days ago1734601727IN
0x88feBaFB...9D59C2E7c
0 ETH0.000029920.1
Call Forwarder1085156812024-12-19 9:16:46124 days ago1734599806IN
0x88feBaFB...9D59C2E7c
0 ETH0.000029920.1
Call Forwarder1085140922024-12-19 9:10:16124 days ago1734599416IN
0x88feBaFB...9D59C2E7c
0 ETH0.000004720.1
Call Forwarder1085077792024-12-19 8:44:46124 days ago1734597886IN
0x88feBaFB...9D59C2E7c
0 ETH0.000029440.1
Call Forwarder1084968422024-12-19 8:00:01124 days ago1734595201IN
0x88feBaFB...9D59C2E7c
0 ETH0.000029440.1
Call Forwarder1084859872024-12-19 7:15:00124 days ago1734592500IN
0x88feBaFB...9D59C2E7c
0 ETH0.000037820.1
Call Forwarder1084783372024-12-19 6:43:15125 days ago1734590595IN
0x88feBaFB...9D59C2E7c
0 ETH0.000015880.1
Call Forwarder1084736982024-12-19 6:23:59125 days ago1734589439IN
0x88feBaFB...9D59C2E7c
0 ETH0.000015880.1
Call Forwarder1084644242024-12-19 5:45:29125 days ago1734587129IN
0x88feBaFB...9D59C2E7c
0 ETH0.000015880.1
Call Forwarder1084583192024-12-19 5:19:59125 days ago1734585599IN
0x88feBaFB...9D59C2E7c
0 ETH0.000015880.1
Call Forwarder1084537092024-12-19 5:00:43125 days ago1734584443IN
0x88feBaFB...9D59C2E7c
0 ETH0.000015880.1
Call Forwarder1084336662024-12-19 3:37:28125 days ago1734579448IN
0x88feBaFB...9D59C2E7c
0 ETH0.000015880.1
Call Forwarder1084049602024-12-19 1:36:11125 days ago1734572171IN
0x88feBaFB...9D59C2E7c
0 ETH0.000022550.1
Call Forwarder1036823992024-12-05 7:53:25138 days ago1733385205IN
0x88feBaFB...9D59C2E7c
0 ETH0.000036590.1
Call Forwarder1036793742024-12-05 7:40:55138 days ago1733384455IN
0x88feBaFB...9D59C2E7c
0 ETH0.000036110.1
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
1217006202025-02-07 3:31:2475 days ago1738899084
0x88feBaFB...9D59C2E7c
 Contract Creation0 ETH
1214772872025-02-06 7:27:4875 days ago1738826868
0x88feBaFB...9D59C2E7c
 Contract Creation0 ETH
1084859872024-12-19 7:15:00124 days ago1734592500
0x88feBaFB...9D59C2E7c
 Contract Creation0 ETH
1084049602024-12-19 1:36:11125 days ago1734572171
0x88feBaFB...9D59C2E7c
 Contract Creation0 ETH
1036823992024-12-05 7:53:25138 days ago1733385205
0x88feBaFB...9D59C2E7c
 Contract Creation0 ETH
1036793742024-12-05 7:40:55138 days ago1733384455
0x88feBaFB...9D59C2E7c
 Contract Creation0 ETH
1036778142024-12-05 7:34:25138 days ago1733384065
0x88feBaFB...9D59C2E7c
 Contract Creation0 ETH
1036778102024-12-05 7:34:25138 days ago1733384065
0x88feBaFB...9D59C2E7c
 Contract Creation0 ETH
1036778052024-12-05 7:34:25138 days ago1733384065
0x88feBaFB...9D59C2E7c
 Contract Creation0 ETH
1033622252024-12-04 9:35:54139 days ago1733304954
0x88feBaFB...9D59C2E7c
 Contract Creation0 ETH
1033606872024-12-04 9:29:24139 days ago1733304564
0x88feBaFB...9D59C2E7c
 Contract Creation0 ETH
854120222024-10-01 16:06:38203 days ago1727798798
0x88feBaFB...9D59C2E7c
0.00065553 ETH
666992312024-07-26 9:13:31270 days ago1721985211
0x88feBaFB...9D59C2E7c
0.00001401 ETH
642776992024-07-16 14:00:23280 days ago1721138423
0x88feBaFB...9D59C2E7c
0.00001401 ETH
642739062024-07-16 13:39:51280 days ago1721137191
0x88feBaFB...9D59C2E7c
0.00013 ETH
642739062024-07-16 13:39:51280 days ago1721137191
0x88feBaFB...9D59C2E7c
 Contract Creation0 ETH
627374692024-07-10 12:22:30286 days ago1720614150
0x88feBaFB...9D59C2E7c
0.00065558 ETH
627374692024-07-10 12:22:30286 days ago1720614150
0x88feBaFB...9D59C2E7c
 Contract Creation0 ETH
603677372024-07-02 10:52:50294 days ago1719917570
0x88feBaFB...9D59C2E7c
0.00010918 ETH
562178732024-06-19 9:29:38307 days ago1718789378
0x88feBaFB...9D59C2E7c
0.00010918 ETH
542247332024-06-13 9:31:42313 days ago1718271102
0x88feBaFB...9D59C2E7c
0.00001797 ETH
542118512024-06-13 8:38:06313 days ago1718267886
0x88feBaFB...9D59C2E7c
0.00010918 ETH
518671842024-06-06 14:01:45320 days ago1717682505
0x88feBaFB...9D59C2E7c
0.00001401 ETH
518572322024-06-06 13:20:21320 days ago1717680021
0x88feBaFB...9D59C2E7c
0.00001407 ETH
512131092024-06-04 16:48:42322 days ago1717519722
0x88feBaFB...9D59C2E7c
0.00001401 ETH
View All Internal Transactions

Loading...
Loading

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)

File 1 of 6 : L2ForwarderFactory.sol
// 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);
    }
}

File 2 of 6 : Clones.sol
// 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));
    }
}

File 3 of 6 : L2ForwarderPredictor.sol
// 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));
    }
}

File 4 of 6 : IL2ForwarderFactory.sol
// 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);
}

File 5 of 6 : IL2Forwarder.sol
// 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);
}

File 6 of 6 : IL2ForwarderPredictor.sol
// 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);
}

Settings
{
  "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"}]

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


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.