Utilities
Helper contracts for batch operations and common patterns
Utilities
Helper contracts for batch operations, common patterns, and developer convenience.
Overview
| Contract | Purpose |
|---|---|
| Multicall | Aggregate multiple contract reads |
| Multicall2 | Aggregate with try/catch support |
Quick Start
import "@luxfi/standard/src/multicall/Multicall2.sol";
// Batch read token balances
Multicall2.Call[] memory calls = new Multicall2.Call[](3);
calls[0] = Multicall2.Call({
target: token1,
callData: abi.encodeWithSignature("balanceOf(address)", user)
});
calls[1] = Multicall2.Call({
target: token2,
callData: abi.encodeWithSignature("balanceOf(address)", user)
});
calls[2] = Multicall2.Call({
target: token3,
callData: abi.encodeWithSignature("balanceOf(address)", user)
});
// Single RPC call returns all balances
(, bytes[] memory results) = multicall.aggregate(calls);
uint256 balance1 = abi.decode(results[0], (uint256));
uint256 balance2 = abi.decode(results[1], (uint256));
uint256 balance3 = abi.decode(results[2], (uint256));Use Cases
- Portfolio Tracking: Fetch all token balances at once
- Price Feeds: Get multiple oracle prices atomically
- Pool Data: Query multiple AMM pools in one call
- Account State: Read account data across protocols
- Block State: Get consistent state at a specific block
Related
- Multicall - Detailed multicall documentation