ETH Price: $3,420.35 (+3.77%)

Contract

0x0000000000002Bdbf1Bf3279983603Ec279CC6dF
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x66e0daa0212478262024-11-23 3:43:479 hrs ago1732333427IN
Multicaller
0.01455409 ETH0.0005874213.41549845
0x66e0daa0212335202024-11-21 3:47:352 days ago1732160855IN
Multicaller
1 ETH0.000823759.96136839
0x66e0daa0212273322024-11-20 7:02:473 days ago1732086167IN
Multicaller
0.01069107 ETH0.000433199.89329718
0x66e0daa0212198252024-11-19 5:56:354 days ago1731995795IN
Multicaller
0.10505716 ETH0.001408310.8401231
0x66e0daa0212103452024-11-17 22:14:115 days ago1731881651IN
Multicaller
0.01582939 ETH0.0004917811.23124802
0x66e0daa0212005272024-11-16 13:22:356 days ago1731763355IN
Multicaller
50 ETH0.0010949513.18715336
0x66e0daa0212004972024-11-16 13:16:236 days ago1731762983IN
Multicaller
2 ETH0.0009019910.8941438
0x66e0daa0211982882024-11-16 5:53:117 days ago1731736391IN
Multicaller
0.0163232 ETH0.0005609512.81109814
0x66e0daa0211319822024-11-06 23:46:1116 days ago1730936771IN
Multicaller
1 ETH0.0012188615.5928647
0x66e0daa0211319822024-11-06 23:46:1116 days ago1730936771IN
Multicaller
3 ETH0.0012902515.59111754
Aggregate211191012024-11-05 4:36:2318 days ago1730781383IN
Multicaller
0 ETH0.000485553.1099763
0x66e0daa0211104592024-11-03 23:39:4719 days ago1730677187IN
Multicaller
0.0005 ETH0.000675498.16363782
0x66e0daa0211093412024-11-03 19:55:5919 days ago1730663759IN
Multicaller
0.00568982 ETH0.000246315.62524604
0x66e0daa0211072282024-11-03 12:50:4720 days ago1730638247IN
Multicaller
0.04549029 ETH0.000279146.35773334
Aggregate211035332024-11-03 0:28:2320 days ago1730593703IN
Multicaller
0 ETH0.000496933.81267335
Aggregate211035322024-11-03 0:28:1120 days ago1730593691IN
Multicaller
0 ETH0.000419493.59323207
0x66e0daa0210969232024-11-02 2:17:3521 days ago1730513855IN
Multicaller
0.00566375 ETH0.000213714.88076421
Aggregate210963642024-11-02 0:25:2321 days ago1730507123IN
Multicaller
0 ETH0.000414734.57207293
0x66e0daa0210820562024-10-31 0:32:2323 days ago1730334743IN
Multicaller
0.001 ETH0.000777629.39791257
0x66e0daa0210795422024-10-30 16:07:5923 days ago1730304479IN
Multicaller
0.01957659 ETH0.0015392319.66223815
0x66e0daa0210795422024-10-30 16:07:5923 days ago1730304479IN
Multicaller
0.019 ETH0.0016568820
0x66e0daa0210776622024-10-30 9:47:5924 days ago1730281679IN
Multicaller
0.02099896 ETH0.0012327214.89502917
0x66e0daa0210718382024-10-29 14:18:3524 days ago1730211515IN
Multicaller
0.022 ETH0.0012282414.88423615
0x66e0daa0210708732024-10-29 11:03:4725 days ago1730199827IN
Multicaller
0.01575332 ETH0.00058367.05171845
0x66e0daa0210706372024-10-29 10:16:3525 days ago1730196995IN
Multicaller
0.02447533 ETH0.000599527.24408988
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
212478262024-11-23 3:43:479 hrs ago1732333427
Multicaller
0.01455409 ETH
212335202024-11-21 3:47:352 days ago1732160855
Multicaller
1 ETH
212273322024-11-20 7:02:473 days ago1732086167
Multicaller
0.01069107 ETH
212198252024-11-19 5:56:354 days ago1731995795
Multicaller
0.10505716 ETH
212103452024-11-17 22:14:115 days ago1731881651
Multicaller
0.01582939 ETH
212005272024-11-16 13:22:356 days ago1731763355
Multicaller
50 ETH
212004972024-11-16 13:16:236 days ago1731762983
Multicaller
2 ETH
211982882024-11-16 5:53:117 days ago1731736391
Multicaller
0.0163232 ETH
211319822024-11-06 23:46:1116 days ago1730936771
Multicaller
1 ETH
211319822024-11-06 23:46:1116 days ago1730936771
Multicaller
3 ETH
211104592024-11-03 23:39:4719 days ago1730677187
Multicaller
0.0005 ETH
211093412024-11-03 19:55:5919 days ago1730663759
Multicaller
0.00568982 ETH
211072282024-11-03 12:50:4720 days ago1730638247
Multicaller
0.04549029 ETH
210969232024-11-02 2:17:3521 days ago1730513855
Multicaller
0.00566375 ETH
210820562024-10-31 0:32:2323 days ago1730334743
Multicaller
0.001 ETH
210795422024-10-30 16:07:5923 days ago1730304479
Multicaller
0.01957659 ETH
210795422024-10-30 16:07:5923 days ago1730304479
Multicaller
0.019 ETH
210776622024-10-30 9:47:5924 days ago1730281679
Multicaller
0.02099896 ETH
210718382024-10-29 14:18:3524 days ago1730211515
Multicaller
0.022 ETH
210708732024-10-29 11:03:4725 days ago1730199827
Multicaller
0.01575332 ETH
210706372024-10-29 10:16:3525 days ago1730196995
Multicaller
0.02447533 ETH
210704782024-10-29 9:44:4725 days ago1730195087
Multicaller
0.02 ETH
210647862024-10-28 14:40:1125 days ago1730126411
Multicaller
0.1 ETH
210636852024-10-28 10:58:3526 days ago1730113115
Multicaller
0.02095405 ETH
210589212024-10-27 19:00:5926 days ago1730055659
Multicaller
0.069 ETH
View All Internal 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

[{"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

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.