Lux Standard

Utilities

Helper contracts for batch operations and common patterns

Utilities

Helper contracts for batch operations, common patterns, and developer convenience.

Overview

ContractPurpose
MulticallAggregate multiple contract reads
Multicall2Aggregate 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
  • Multicall - Detailed multicall documentation

On this page