Forkchoice Ethereum Mainnet

Address Contract Verified

Address 0x52f1eCcB5af51F2AFe0Dfb2f809F8617fDAA5be4
Balance 0 ETH
Nonce 1
Code Size 1937 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

1937 bytes
0x60806040526004361061005a5760003560e01c80639acd315d116100435780639acd315d146100d1578063a7119869146100e4578063b3f006741461011857600080fd5b8063078f29cf1461005f57806328b86e8f146100bc575b600080fd5b34801561006b57600080fd5b506100937f0000000000000000000000000ca3a2fbc3d770b578223fbb6b062fa875a2ee7581565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100cf6100ca366004610549565b61014c565b005b6100cf6100df3660046105e7565b610327565b3480156100f057600080fd5b506100937f0000000000000000000000006c7198250087b29a8040ec63903bc130f4831cc981565b34801561012457600080fd5b506100937f000000000000000000000000e4a5710e81223e3534b31ea1c66cbf7d80a8222581565b6000606461015a8434610652565b610164919061068f565b9050600061017282346106ca565b9050811561026b5760007f000000000000000000000000e4a5710e81223e3534b31ea1c66cbf7d80a8222573ffffffffffffffffffffffffffffffffffffffff168360405160006040518083038185875af1925050503d80600081146101f4576040519150601f19603f3d011682016040523d82523d6000602084013e6101f9565b606091505b5050905080610269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4665655472616e736665724661696c656400000000000000000000000000000060448201526064015b60405180910390fd5b505b801561031e576040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006c7198250087b29a8040ec63903bc130f4831cc91690633dbb202b9083906102eb908b908b908b908a906004016106e1565b6000604051808303818588803b15801561030457600080fd5b505af1158015610318573d6000803e3d6000fd5b50505050505b50505050505050565b600060646103358434610652565b61033f919061068f565b9050600061034d82346106ca565b905081156104415760007f000000000000000000000000e4a5710e81223e3534b31ea1c66cbf7d80a8222573ffffffffffffffffffffffffffffffffffffffff168360405160006040518083038185875af1925050503d80600081146103cf576040519150601f19603f3d011682016040523d82523d6000602084013e6103d4565b606091505b505090508061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4665655472616e736665724661696c65640000000000000000000000000000006044820152606401610260565b505b8015610505576040517f9a2ac6d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015263ffffffff8516602483015260606044830152600060648301527f0000000000000000000000000ca3a2fbc3d770b578223fbb6b062fa875a2ee751690639a2ac6d59083906084016000604051808303818588803b1580156104eb57600080fd5b505af11580156104ff573d6000803e3d6000fd5b50505050505b5050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461053057600080fd5b919050565b803563ffffffff8116811461053057600080fd5b60008060008060006080868803121561056157600080fd5b61056a8661050c565b9450602086013567ffffffffffffffff8082111561058757600080fd5b818801915088601f83011261059b57600080fd5b8135818111156105aa57600080fd5b8960208285010111156105bc57600080fd5b602083019650809550505050604086013591506105db60608701610535565b90509295509295909350565b6000806000606084860312156105fc57600080fd5b6106058461050c565b92506020840135915061061a60408501610535565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561068a5761068a610623565b500290565b6000826106c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156106dc576106dc610623565b500390565b73ffffffffffffffffffffffffffffffffffffffff851681526060602082015282606082015282846080830137600060808483010152600060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116830101905063ffffffff831660408301529594505050505056fea2646970667358221220980212600094f5ce720aa6afeb1baae53efe38c7893ff3c9c87915e6d6768c2a64736f6c634300080f0033

Verified Source Code Full Match

Compiler: v0.8.15+commit.e14f2714 EVM: london Optimization: Yes (999999 runs)
OptimismFeeSplitter.sol 80 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

interface IL1StandardBridge {
    function depositETHTo(address _to, uint32 _minGasLimit, bytes calldata _extraData) external payable;
}

interface IL1CrossDomainMessenger {
    function sendMessage(address _target, bytes calldata _message, uint32 _minGasLimit) external payable;
}

contract OptimismFeeSplitter {
    address public immutable l1StandardBridge;
    address public immutable l1CrossDomainMessenger;
    address payable public immutable feeReceiver;

    constructor(
        address _l1StandardBridge,
        address _l1CrossDomainMessenger,
        address payable _feeReceiver
    ) {
        l1StandardBridge = _l1StandardBridge;
        l1CrossDomainMessenger = _l1CrossDomainMessenger;
        feeReceiver = _feeReceiver;
    }

    /// @notice Bridges ETH to L2 and takes a percentage fee.
    /// @param _l2Recipient The address to receive the ETH on L2.
    /// @param _feePercentage The fee percentage (e.g., 500 for 5.00% if using basis points, or 5 for simple %).
    /// @param _minGasLimit Minimum gas limit for the deposit transaction.
    function bridgeWithPercentFee(
        address _l2Recipient,
        uint256 _feePercentage,
        uint32 _minGasLimit
    ) external payable {
        uint256 feeAmount = (msg.value * _feePercentage) / 100;
        uint256 bridgeAmount = msg.value - feeAmount;

        if (feeAmount > 0) {
            (bool success, ) = feeReceiver.call{value: feeAmount}("");
            require(success, "FeeTransferFailed");
        }

        if (bridgeAmount > 0) {
            IL1StandardBridge(l1StandardBridge).depositETHTo{value: bridgeAmount}(
                _l2Recipient,
                _minGasLimit,
                ""
            );
        }
    }

    /// @notice Sends a message (and ETH) to a contract on L2 and takes a percentage fee.
    /// @param _target The target contract address on L2.
    /// @param _message The encoded calldata for the L2 contract.
    /// @param _feePercentage The fee percentage.
    /// @param _minGasLimit Minimum gas limit for the message.
    function sendMessageWithFee(
        address _target,
        bytes calldata _message,
        uint256 _feePercentage,
        uint32 _minGasLimit
    ) external payable {
        uint256 feeAmount = (msg.value * _feePercentage) / 100;
        uint256 messageValue = msg.value - feeAmount;

        if (feeAmount > 0) {
            (bool success, ) = feeReceiver.call{value: feeAmount}("");
            require(success, "FeeTransferFailed");
        }

        if (messageValue > 0) {
            IL1CrossDomainMessenger(l1CrossDomainMessenger).sendMessage{value: messageValue}(
                _target,
                _message,
                _minGasLimit
            );
        }
    }
}

Read Contract

feeReceiver 0xb3f00674 → address
l1CrossDomainMessenger 0xa7119869 → address
l1StandardBridge 0x078f29cf → address

Write Contract 2 functions

These functions modify contract state and require a wallet transaction to execute.

bridgeWithPercentFee 0x9acd315d
address _l2Recipient
uint256 _feePercentage
uint32 _minGasLimit
sendMessageWithFee 0x28b86e8f
address _target
bytes _message
uint256 _feePercentage
uint32 _minGasLimit

Recent Transactions

No transactions found for this address