Forkchoice Ethereum Mainnet

Address Contract Partially Verified

Address 0x424bca7CE4FE49D215CA9221f677FCAdF37aA24e
Balance 0 ETH
Nonce 1
Code Size 3215 bytes
Indexed Transactions 0 (1 on-chain, 0.9% indexed)
External Etherscan · Sourcify

Contract Bytecode

3215 bytes
0x608060405260043610610021575f3560e01c8063f4ba0ccc1461002c57610028565b3661002857005b5f5ffd5b610046600480360381019061004191906107c0565b610048565b005b5f5f9054906101000a900460ff1615610096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161008d90610861565b60405180910390fd5b60015f5f6101000a81548160ff02191690831515021790555073f2154bd34f5538019aafc335c22179da742a394b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610131576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610128906108c9565b60405180910390fd5b8060200151156101c7578060a0015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3825f01518360400151604001516040518363ffffffff1660e01b8152600401610185929190610905565b6020604051808303815f875af11580156101a1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101c59190610940565b505b805f015173ffffffffffffffffffffffffffffffffffffffff1663c7c7f5b3348360400151846060015185608001516040518563ffffffff1660e01b815260040161021493929190610acc565b60a06040518083038185885af1158015610230573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906102559190610c1b565b50505f8160e0015111156102ec578060a0015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8260c001518360e001516040518363ffffffff1660e01b81526004016102aa929190610905565b6020604051808303815f875af11580156102c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ea9190610940565b505b5f5f5f6101000a81548160ff02191690831515021790555050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6103628261031c565b810181811067ffffffffffffffff821117156103815761038061032c565b5b80604052505050565b5f610393610307565b905061039f8282610359565b919050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103d1826103a8565b9050919050565b6103e1816103c7565b81146103eb575f5ffd5b50565b5f813590506103fc816103d8565b92915050565b5f8115159050919050565b61041681610402565b8114610420575f5ffd5b50565b5f813590506104318161040d565b92915050565b5f63ffffffff82169050919050565b61044f81610437565b8114610459575f5ffd5b50565b5f8135905061046a81610446565b92915050565b5f819050919050565b61048281610470565b811461048c575f5ffd5b50565b5f8135905061049d81610479565b92915050565b5f819050919050565b6104b5816104a3565b81146104bf575f5ffd5b50565b5f813590506104d0816104ac565b92915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156104f8576104f761032c565b5b6105018261031c565b9050602081019050919050565b828183375f83830152505050565b5f61052e610529846104de565b61038a565b90508281526020810184848401111561054a576105496104da565b5b61055584828561050e565b509392505050565b5f82601f830112610571576105706104d6565b5b813561058184826020860161051c565b91505092915050565b5f60e0828403121561059f5761059e610318565b5b6105a960e061038a565b90505f6105b88482850161045c565b5f8301525060206105cb8482850161048f565b60208301525060406105df848285016104c2565b60408301525060606105f3848285016104c2565b606083015250608082013567ffffffffffffffff811115610617576106166103a4565b5b6106238482850161055d565b60808301525060a082013567ffffffffffffffff811115610647576106466103a4565b5b6106538482850161055d565b60a08301525060c082013567ffffffffffffffff811115610677576106766103a4565b5b6106838482850161055d565b60c08301525092915050565b5f604082840312156106a4576106a3610318565b5b6106ae604061038a565b90505f6106bd848285016104c2565b5f8301525060206106d0848285016104c2565b60208301525092915050565b5f61012082840312156106f2576106f1610318565b5b6106fd61010061038a565b90505f61070c848285016103ee565b5f83015250602061071f84828501610423565b602083015250604082013567ffffffffffffffff811115610743576107426103a4565b5b61074f8482850161058a565b60408301525060606107638482850161068f565b60608301525060a0610777848285016103ee565b60808301525060c061078b848285016103ee565b60a08301525060e061079f848285016103ee565b60c0830152506101006107b4848285016104c2565b60e08301525092915050565b5f602082840312156107d5576107d4610310565b5b5f82013567ffffffffffffffff8111156107f2576107f1610314565b5b6107fe848285016106dc565b91505092915050565b5f82825260208201905092915050565b7f5265656e7472616e742063616c6c0000000000000000000000000000000000005f82015250565b5f61084b600e83610807565b915061085682610817565b602082019050919050565b5f6020820190508181035f8301526108788161083f565b9050919050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f6108b3600c83610807565b91506108be8261087f565b602082019050919050565b5f6020820190508181035f8301526108e0816108a7565b9050919050565b6108f0816103c7565b82525050565b6108ff816104a3565b82525050565b5f6040820190506109185f8301856108e7565b61092560208301846108f6565b9392505050565b5f8151905061093a8161040d565b92915050565b5f6020828403121561095557610954610310565b5b5f6109628482850161092c565b91505092915050565b61097481610437565b82525050565b61098381610470565b82525050565b610992816104a3565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f6109ca82610998565b6109d481856109a2565b93506109e48185602086016109b2565b6109ed8161031c565b840191505092915050565b5f60e083015f830151610a0d5f86018261096b565b506020830151610a20602086018261097a565b506040830151610a336040860182610989565b506060830151610a466060860182610989565b5060808301518482036080860152610a5e82826109c0565b91505060a083015184820360a0860152610a7882826109c0565b91505060c083015184820360c0860152610a9282826109c0565b9150508091505092915050565b604082015f820151610ab35f850182610989565b506020820151610ac66020850182610989565b50505050565b5f6080820190508181035f830152610ae481866109f8565b9050610af36020830185610a9f565b610b0060608301846108e7565b949350505050565b5f81519050610b1681610479565b92915050565b5f67ffffffffffffffff82169050919050565b610b3881610b1c565b8114610b42575f5ffd5b50565b5f81519050610b5381610b2f565b92915050565b5f81519050610b67816104ac565b92915050565b5f60608284031215610b8257610b81610318565b5b610b8c606061038a565b90505f610b9b84828501610b08565b5f830152506020610bae84828501610b45565b6020830152506040610bc284828501610b59565b60408301525092915050565b5f60408284031215610be357610be2610318565b5b610bed604061038a565b90505f610bfc84828501610b59565b5f830152506020610c0f84828501610b59565b60208301525092915050565b5f5f60a08385031215610c3157610c30610310565b5b5f610c3e85828601610b6d565b9250506060610c4f85828601610bce565b915050925092905056fea26469706673582212202c09b808b4b7270991d0593e78dbdaa83b553f2efa642e7ae8dbeca6aed028ea64736f6c634300081e0033

Verified Source Code Partial Match

Compiler: v0.8.30+commit.73712a01 EVM: prague Optimization: No
DepositAddress.sol 127 lines
// SPDX-License-Identifier: MIT

/**
 *Submitted for verification at Etherscan.io on 2018-10-22
*/

pragma solidity ^0.8.13;

interface IERC20 {
    function transfer(address to, uint256 value) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
}

/**
 * @dev Struct representing token parameters for the OFT send() operation.
 */
struct SendParam {
    uint32 dstEid;        // Destination endpoint ID.
    bytes32 to;           // Recipient address.
    uint256 amountLD;     // Amount to send in local decimals.
    uint256 minAmountLD;  // Minimum amount to send in local decimals.
    bytes extraOptions;   // Additional options supplied by the caller to be used in the LayerZero message.
    bytes composeMsg;     // The composed message for the send() operation.
    bytes oftCmd;         // The OFT command to be executed, unused in default OFT implementations.
}

struct MessagingFee {
    uint256 nativeFee; // The native fee.
    uint256 lzTokenFee; // The lzToken fee.
}

/**
 * @dev Minimal structs to model OFT send() return types.
 */
struct MessagingReceipt {
    // LayerZero msg receipt
    bytes32 guid;   // The unique identifier for the sent message.
    uint64 nonce;   // The nonce of the sent message.
    uint256 fee;    // The LayerZero fee incurred for the message.
}

struct OFTReceipt {
    uint256 amountSentLD;
    uint256 amountReceivedLD;
}

interface IOFT {
    /**
     * @dev Executes the send operation.
     * @param _sendParam The parameters for the send operation.
     * @param _fee The calculated fee for the send() operation.
     *      - nativeFee: The native fee.
     *      - lzTokenFee: The lzToken fee.
     * @param _refundAddress The address to receive any excess funds.
     * @return msgReceipt The receipt for the send operation.
     * @return oftReceipt The OFT receipt information.
     *
     * @dev MessagingReceipt: LayerZero msg receipt
     *  - guid: The unique identifier for the sent message.
     *  - nonce: The nonce of the sent message.
     *  - fee: The LayerZero fee incurred for the message.
     */
    function send(
        SendParam calldata _sendParam,
        MessagingFee calldata _fee,
        address _refundAddress
    ) external payable returns (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt);
}

struct OFTDepositParams {
    address oftContract;
    bool requiresAllowance;
    SendParam sendParam;
    MessagingFee messagingFee;
    address refundAddress;
    address erc20Contract;
    address feeRecipient;
    uint256 fees;
}

contract DepositAddress {
    // Reentrancy lock
    bool private locked;

    // Deposit address Multicall address
    address private constant AUTHORIZED_CALLER = 0xf2154Bd34f5538019AaFC335C22179dA742A394B;

    modifier nonReentrant() {
        require(!locked, "Reentrant call");
        locked = true;
        _;
        locked = false;
    }

    function transfer(OFTDepositParams memory params) external payable nonReentrant {
        require(msg.sender == AUTHORIZED_CALLER, "Unauthorized");

        if (params.requiresAllowance) {
            IERC20(params.erc20Contract).approve(params.oftContract, params.sendParam.amountLD);
        }

        IOFT(params.oftContract).send{value: msg.value}(params.sendParam, params.messagingFee, params.refundAddress);

        if (params.fees > 0) {
            IERC20(params.erc20Contract).transfer(params.feeRecipient, params.fees);
        }
    }

    receive() external payable {}
}

contract DepositAddressMulticall {
    address public authorizedCaller;
    
    constructor(address _authorizedCaller) {
        authorizedCaller = _authorizedCaller;
    }
    
    function batchTransfer(OFTDepositParams[] calldata calls, address[] calldata depositAddresses) external payable {
        require(msg.sender == authorizedCaller, "Only authorized caller can batch");
        require(calls.length == depositAddresses.length, "Calls and deposit addresses must have the same length");
        
        for (uint i = 0; i < calls.length; i++) {
            DepositAddress(payable(depositAddresses[i])).transfer{value: calls[i].messagingFee.nativeFee}(calls[i]);
        }
    }
}

Write Contract 1 functions

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

transfer 0x67f23b5e
tuple params

Recent Transactions

This address has 1 on-chain transactions, but only 0.9% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →