Multicall3From contract
(0x522fAf9A91c41c443c66765030741e4AaCe147D0) batches calls like common
Multicall3 contracts. Unlike a common batching contract, it preserves the
original externally owned account (EOA) wallet as msg.sender for each target
call.
To send batch USDC transfers end to end, see
Send batch USDC transfers.
How a batch call works
Multicall3From routes each subcall through Arc’s CallFrom precompile.
CallFrom executes calls on behalf of the original transaction sender. The
transaction extension contracts
use this precompile to keep the original EOA wallet as msg.sender for target
calls.
For a batch of USDC transfers:
- Your wallet calls
Multicall3From.aggregate3(...). Multicall3Fromforwards each encoded USDCtransfer(...)throughCallFrom.- The USDC contract sees your wallet as the sender for each transfer.
msg.sender.
The contract exposes the aggregate3(...) entry point:
target is the contract to call. allowFailure controls whether a failed
subcall reverts the full batch. callData is the encoded calldata for the
target contract.
Event verification
Multicall3From does not emit a batch-specific event. Verify the target
contract events emitted by each subcall. For USDC transfers, a successful batch
emits one USDC Transfer event per successful transfer.
| Event | Field | Expected value |
|---|---|---|
Transfer | from | The wallet that called Multicall3From.aggregate3(...), not Multicall3From. |
Transfer | to | The recipient for that subcall. |
Transfer | value | The USDC amount in base units. |
from field is the key sender-preservation check. It confirms that the USDC
contract saw your wallet as msg.sender for each subcall.
Unsupported patterns and guardrails
Multicall3From has explicit guardrails:
- Submit
aggregate3(...)from an EOA. Calls routed through an intermediary contract with a differentmsg.senderare rejected byCallFrom’s sender-spoofing constraint. - Do not use value-forwarding patterns.
Multicall3Fromdoes not supportaggregate3ValuebecauseCallFromdoes not forward value on Arc. - Set
allowFailuretofalsewhen every subcall must succeed. If a subcall fails withallowFailure: false, the whole batch reverts. - Set
allowFailuretotrueonly when your application explicitly handles failed subcalls.