ETH Price: $2,862.01 (-2.70%)

Contract

0x0000000000002Bdbf1Bf3279983603Ec279CC6dF

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
0x66e0daa03414817592025-05-28 17:24:50242 days ago1748453090IN
Multicaller: Multicaller
0.00019187 ETH0.000000820.01
0x66e0daa03414817592025-05-28 17:24:50242 days ago1748453090IN
Multicaller: Multicaller
0.00019187 ETH0.000000820.01
0x66e0daa03414590212025-05-28 15:49:16242 days ago1748447356IN
Multicaller: Multicaller
0.02172727 ETH0.000001850.01
0x66e0daa03414060982025-05-28 12:08:05242 days ago1748434085IN
Multicaller: Multicaller
0.02998277 ETH0.000000710.01
0x66e0daa03413136622025-05-28 5:41:52242 days ago1748410912IN
Multicaller: Multicaller
0.0000047 ETH0.000000520.01
0x66e0daa03411578722025-05-27 18:50:52243 days ago1748371852IN
Multicaller: Multicaller
0.01022441 ETH0.000000830.01
0x66e0daa03410899602025-05-27 14:07:12243 days ago1748354832IN
Multicaller: Multicaller
0.00619478 ETH0.000003660.062232
0x66e0daa03410252762025-05-27 9:37:05243 days ago1748338625IN
Multicaller: Multicaller
0.01941148 ETH0.000008350.16897
0x66e0daa03410229852025-05-27 9:27:33243 days ago1748338053IN
Multicaller: Multicaller
0.01969012 ETH0.000006390.129259
0x66e0daa03410127952025-05-27 8:44:54243 days ago1748335494IN
Multicaller: Multicaller
0.00379169 ETH0.000002010.036773
0x66e0daa03409835592025-05-27 6:42:49243 days ago1748328169IN
Multicaller: Multicaller
0.02519252 ETH0.000001180.022518
0x66e0daa03407645552025-05-26 15:27:19244 days ago1748273239IN
Multicaller: Multicaller
0.02067096 ETH0.000000620.01
0x66e0daa03405519392025-05-26 0:39:07245 days ago1748219947IN
Multicaller: Multicaller
0.00013927 ETH0.000000510.01
0x66e0daa03399576502025-05-24 7:15:44246 days ago1748070944IN
Multicaller: Multicaller
0.00099674 ETH0.000000510.01
0x66e0daa03393443322025-05-22 12:29:29248 days ago1747916969IN
Multicaller: Multicaller
0.00195461 ETH0.000000790.01
0x66e0daa03392107492025-05-22 3:12:15249 days ago1747883535IN
Multicaller: Multicaller
0.00495803 ETH0.000000550.01
0x66e0daa03391957542025-05-22 2:09:50249 days ago1747879790IN
Multicaller: Multicaller
0.00195767 ETH0.000000620.011082
0x66e0daa03391126752025-05-21 20:22:19249 days ago1747858939IN
Multicaller: Multicaller
0.01758155 ETH0.00000060.01
0x66e0daa03391059252025-05-21 19:54:10249 days ago1747857250IN
Multicaller: Multicaller
0.00005871 ETH0.000000940.016715
0x66e0daa03390861622025-05-21 18:31:29249 days ago1747852289IN
Multicaller: Multicaller
1.17497318 ETH0.000002830.049766
0x66e0daa03390714492025-05-21 17:30:10249 days ago1747848610IN
Multicaller: Multicaller
0.00720094 ETH0.000046270.941999
0x66e0daa03390346222025-05-21 14:56:46249 days ago1747839406IN
Multicaller: Multicaller
0.38803539 ETH0.000005270.104662
0x66e0daa03390342562025-05-21 14:55:14249 days ago1747839314IN
Multicaller: Multicaller
0.38825195 ETH0.000004230.083121
0x66e0daa03390319882025-05-21 14:45:49249 days ago1747838749IN
Multicaller: Multicaller
0.37098582 ETH0.000000830.01
0x66e0daa03389914782025-05-21 11:56:59249 days ago1747828619IN
Multicaller: Multicaller
0.03945693 ETH0.000000530.01
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
3414817592025-05-28 17:24:50242 days ago1748453090
Multicaller: Multicaller
0.00019187 ETH
3414817592025-05-28 17:24:50242 days ago1748453090
Multicaller: Multicaller
0.00019187 ETH
3414590212025-05-28 15:49:16242 days ago1748447356
Multicaller: Multicaller
0.02172727 ETH
3414060982025-05-28 12:08:05242 days ago1748434085
Multicaller: Multicaller
0.02998277 ETH
3413136622025-05-28 5:41:52242 days ago1748410912
Multicaller: Multicaller
0.0000047 ETH
3411578722025-05-27 18:50:52243 days ago1748371852
Multicaller: Multicaller
0.01022441 ETH
3410899602025-05-27 14:07:12243 days ago1748354832
Multicaller: Multicaller
0.00619478 ETH
3410252762025-05-27 9:37:05243 days ago1748338625
Multicaller: Multicaller
0.01941148 ETH
3410229852025-05-27 9:27:33243 days ago1748338053
Multicaller: Multicaller
0.01969012 ETH
3410127952025-05-27 8:44:54243 days ago1748335494
Multicaller: Multicaller
0.00379169 ETH
3409835592025-05-27 6:42:49243 days ago1748328169
Multicaller: Multicaller
0.02519252 ETH
3407645552025-05-26 15:27:19244 days ago1748273239
Multicaller: Multicaller
0.02067096 ETH
3405519392025-05-26 0:39:07245 days ago1748219947
Multicaller: Multicaller
0.00013927 ETH
3399576502025-05-24 7:15:44246 days ago1748070944
Multicaller: Multicaller
0.00099674 ETH
3393443322025-05-22 12:29:29248 days ago1747916969
Multicaller: Multicaller
0.00195461 ETH
3392107492025-05-22 3:12:15249 days ago1747883535
Multicaller: Multicaller
0.00495803 ETH
3391957542025-05-22 2:09:50249 days ago1747879790
Multicaller: Multicaller
0.00195767 ETH
3391126752025-05-21 20:22:19249 days ago1747858939
Multicaller: Multicaller
0.01758155 ETH
3391059252025-05-21 19:54:10249 days ago1747857250
Multicaller: Multicaller
0.00005871 ETH
3390861622025-05-21 18:31:29249 days ago1747852289
Multicaller: Multicaller
1.17497318 ETH
3390714492025-05-21 17:30:10249 days ago1747848610
Multicaller: Multicaller
0.00720094 ETH
3390346222025-05-21 14:56:46249 days ago1747839406
Multicaller: Multicaller
0.38803539 ETH
3390342562025-05-21 14:55:14249 days ago1747839314
Multicaller: Multicaller
0.38825195 ETH
3390319882025-05-21 14:45:49249 days ago1747838749
Multicaller: Multicaller
0.37098582 ETH
3389914782025-05-21 11:56:59249 days ago1747828619
Multicaller: Multicaller
0.03945693 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Multicaller

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 1 : Multicaller.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/**
 * @title Multicaller
 * @author vectorized.eth
 * @notice Contract that allows for efficient aggregation
 *         of multiple calls in a single transaction.
 */
contract Multicaller {
    // =============================================================
    //                            ERRORS
    // =============================================================

    /**
     * @dev The lengths of the input arrays are not the same.
     */
    error ArrayLengthsMismatch();

    // =============================================================
    //                    AGGREGATION OPERATIONS
    // =============================================================

    /**
     * @dev Aggregates multiple calls in a single transaction.
     * @param targets  An array of addresses to call.
     * @param data     An array of calldata to forward to the targets.
     * @param values   How much ETH to forward to each target.
     * @param refundTo The address to transfer any remaining ETH in the contract after the calls.
     *                 If `address(0)`, remaining ETH will NOT be refunded.
     *                 If `address(1)`, remaining ETH will be refunded to `msg.sender`.
     *                 If anything else, remaining ETH will be refunded to `refundTo`.
     * @return An array of the returndata from each call.
     */
    function aggregate(
        address[] calldata targets,
        bytes[] calldata data,
        uint256[] calldata values,
        address refundTo
    ) external payable returns (bytes[] memory) {
        assembly {
            if iszero(and(eq(targets.length, data.length), eq(data.length, values.length))) {
                // Store the function selector of `ArrayLengthsMismatch()`.
                mstore(returndatasize(), 0x3b800a46)
                // Revert with (offset, size).
                revert(0x1c, 0x04)
            }

            let resultsSize := 0x40

            if data.length {
                let results := 0x40
                // Left shift by 5 is equivalent to multiplying by 0x20.
                data.length := shl(5, data.length)
                // Copy the offsets from calldata into memory.
                calldatacopy(results, data.offset, data.length)
                // Offset into `results`.
                let resultsOffset := data.length
                // Pointer to the end of `results`.
                let end := add(results, data.length)
                // For deriving the calldata offsets from the `results` pointer.
                let valuesOffsetDiff := sub(values.offset, results)
                let targetsOffsetDiff := sub(targets.offset, results)

                for {} 1 {} {
                    // The offset of the current bytes in the calldata.
                    let o := add(data.offset, mload(results))
                    let memPtr := add(resultsOffset, 0x40)
                    // Copy the current bytes from calldata to the memory.
                    calldatacopy(
                        memPtr,
                        add(o, 0x20), // The offset of the current bytes' bytes.
                        calldataload(o) // The length of the current bytes.
                    )
                    if iszero(
                        call(
                            gas(), // Remaining gas.
                            calldataload(add(targetsOffsetDiff, results)), // Address to call.
                            calldataload(add(valuesOffsetDiff, results)), // ETH to send.
                            memPtr, // Start of input calldata in memory.
                            calldataload(o), // Size of input calldata.
                            0x00, // We will use returndatacopy instead.
                            0x00 // We will use returndatacopy instead.
                        )
                    ) {
                        // Bubble up the revert if the call reverts.
                        returndatacopy(0x00, 0x00, returndatasize())
                        revert(0x00, returndatasize())
                    }
                    // Append the current `resultsOffset` into `results`.
                    mstore(results, resultsOffset)
                    // Append the returndatasize, and the returndata.
                    mstore(memPtr, returndatasize())
                    returndatacopy(add(memPtr, 0x20), 0x00, returndatasize())
                    // Advance the `resultsOffset` by `returndatasize() + 0x20`,
                    // rounded up to the next multiple of 0x20.
                    resultsOffset := and(add(add(resultsOffset, returndatasize()), 0x3f), not(0x1f))
                    // Advance the `results` pointer.
                    results := add(results, 0x20)
                    if eq(results, end) { break }
                }
                resultsSize := add(resultsOffset, 0x40)
            }

            if refundTo {
                // Force transfers all the remaining ETH in the contract to `refundTo`,
                // with a gas stipend of 100000, which should be enough for most use cases.
                // If sending via a regular call fails, force sends the ETH by
                // creating a temporary contract which uses `SELFDESTRUCT` to force send the ETH.
                if selfbalance() {
                    // If `refundTo` is `address(1)`, replace it with the `msg.sender`.
                    refundTo := xor(refundTo, mul(eq(refundTo, 1), xor(refundTo, caller())))
                    // Transfer the ETH and check if it succeeded or not.
                    if iszero(
                        call(100000, refundTo, selfbalance(), codesize(), 0x00, codesize(), 0x00)
                    ) {
                        mstore(0x00, refundTo) // Store the address in scratch space.
                        mstore8(0x0b, 0x73) // Opcode `PUSH20`.
                        mstore8(0x20, 0xff) // Opcode `SELFDESTRUCT`.
                        // We can directly use `SELFDESTRUCT` in the contract creation.
                        // Compatible with `SENDALL`: https://eips.ethereum.org/EIPS/eip-4758
                        if iszero(create(selfbalance(), 0x0b, 0x16)) {
                            // Coerce gas estimation to provide enough gas for the `create` above.
                            revert(codesize(), codesize())
                        }
                    }
                }
            }

            mstore(0x00, 0x20) // Store the memory offset of the `results`.
            mstore(0x20, targets.length) // Store `targets.length` into `results`.
            // Direct return.
            return(0x00, resultsSize)
        }
    }

    /**
     * @dev For receiving ETH.
     *      Does nothing and returns nothing.
     *      Called instead of `fallback()` if the calldatasize is zero.
     */
    receive() external payable {}

    /**
     * @dev Decompresses the calldata and performs a delegatecall
     *      with the decompressed calldata to itself.
     *
     *      Accompanying JavaScript library to compress the calldata:
     *      https://github.com/vectorized/solady/blob/main/js/solady.js
     *      (See: `LibZip.cdCompress`)
     */
    fallback() external payable {
        assembly {
            // If the calldata starts with the bitwise negation of
            // `bytes4(keccak256("aggregate(address[],bytes[],uint256[],address)"))`.
            let s := calldataload(returndatasize())
            if eq(shr(224, s), 0x66e0daa0) {
                mstore(returndatasize(), not(s))
                let o := 4
                for { let i := o } lt(i, calldatasize()) {} {
                    let c := byte(returndatasize(), calldataload(i))
                    i := add(i, 1)
                    if iszero(c) {
                        let d := byte(returndatasize(), calldataload(i))
                        i := add(i, 1)
                        // Fill with either 0xff or 0x00.
                        mstore(o, not(returndatasize()))
                        if iszero(gt(d, 0x7f)) { codecopy(o, codesize(), add(d, 1)) }
                        o := add(o, add(and(d, 0x7f), 1))
                        continue
                    }
                    mstore8(o, c)
                    o := add(o, 1)
                }
                let success := delegatecall(gas(), address(), 0x00, o, 0x00, 0x00)
                returndatacopy(0x00, 0x00, returndatasize())
                if iszero(success) { revert(0x00, returndatasize()) }
                return(0x00, returndatasize())
            }
            revert(returndatasize(), returndatasize())
        }
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "viaIR": true,
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"name":"ArrayLengthsMismatch","type":"error"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"address","name":"refundTo","type":"address"}],"name":"aggregate","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60808060405234610016576102b9908161001c8239f35b600080fdfe60806040526004361015610015575b366101fd57005b6000803560e01c63991f255f1461002c575061000e565b60803660031901126100aa5767ffffffffffffffff6004358181116100b5576100599036906004016100b9565b916024358181116100b1576100729036906004016100b9565b916044359081116100ad5761008b9036906004016100b9565b6064359690959194906001600160a01b03881688036100aa57506100ef565b80fd5b8580fd5b8480fd5b8280fd5b9181601f840112156100ea5782359167ffffffffffffffff83116100ea576020808501948460051b0101116100ea57565b600080fd5b959390949295606093871487871416156101f0578693604097610166575b505050505080610125575b5060206000526020526000f35b47156101185733811860018214021860003881804785620186a0f1610118576000526073600b5360ff6020536016600b47f0156101625738610118565b3838fd5b8794919395979160051b9384878737848601945b835188019087810182359081602080950182376000808093838a8c603f19918291010135908c8b0101355af1156101e7578287523d90523d908583013e603f601f19913d010116930196898689146101d45750969261017a565b975050505091505001923880808061010d565b503d81803e3d90fd5b633b800a463d526004601cfd5b3d356366e0daa08160e01c14610211573d3dfd5b193d5260043d815b36811061023a57600080808581305af43d82803e15610236573d90f35b3d90fd5b8035821a92600180920193801561025757815301905b9091610219565b503d19815283820193607f90353d1a81811115610278575b16010190610250565b83810138843961026f56fea26469706673582212200dfa3a85cbd068a99fd4d5051615c4bde5995f9e1dd4a095bb55fc5af681c44064736f6c63430008120033

Deployed Bytecode

0x60806040526004361015610015575b366101fd57005b6000803560e01c63991f255f1461002c575061000e565b60803660031901126100aa5767ffffffffffffffff6004358181116100b5576100599036906004016100b9565b916024358181116100b1576100729036906004016100b9565b916044359081116100ad5761008b9036906004016100b9565b6064359690959194906001600160a01b03881688036100aa57506100ef565b80fd5b8580fd5b8480fd5b8280fd5b9181601f840112156100ea5782359167ffffffffffffffff83116100ea576020808501948460051b0101116100ea57565b600080fd5b959390949295606093871487871416156101f0578693604097610166575b505050505080610125575b5060206000526020526000f35b47156101185733811860018214021860003881804785620186a0f1610118576000526073600b5360ff6020536016600b47f0156101625738610118565b3838fd5b8794919395979160051b9384878737848601945b835188019087810182359081602080950182376000808093838a8c603f19918291010135908c8b0101355af1156101e7578287523d90523d908583013e603f601f19913d010116930196898689146101d45750969261017a565b975050505091505001923880808061010d565b503d81803e3d90fd5b633b800a463d526004601cfd5b3d356366e0daa08160e01c14610211573d3dfd5b193d5260043d815b36811061023a57600080808581305af43d82803e15610236573d90f35b3d90fd5b8035821a92600180920193801561025757815301905b9091610219565b503d19815283820193607f90353d1a81811115610278575b16010190610250565b83810138843961026f56fea26469706673582212200dfa3a85cbd068a99fd4d5051615c4bde5995f9e1dd4a095bb55fc5af681c44064736f6c63430008120033

Deployed Bytecode Sourcemap

225:8446:0:-:0;;;;;;;;;-1:-1:-1;225:8446:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;225:8446:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;225:8446:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;1407:5298;;;;;;;225:8446;1586:14;1612:5087;;;;;;;;;;;;;;;1407:5298;1612:5087;;;;;;;;1407:5298;1612:5087;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1612:5087:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7235:1434;7273:1390;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7273:1390:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://0dfa3a85cbd068a99fd4d5051615c4bde5995f9e1dd4a095bb55fc5af681c440

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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