simulateCalls
Simulates multiple calls and returns their results
Import
Import the public actions package so you can call this action.
import "github.com/ChefBingbong/viem-go/actions/public"Usage
An example showing how to set up and run multiple simulated contract calls.
import ( "context" "log" "math/big"
"github.com/ethereum/go-ethereum/common" "github.com/ChefBingbong/viem-go/actions/public" "github.com/ChefBingbong/viem-go/abi" "github.com/ChefBingbong/viem-go/client" "github.com/ChefBingbong/viem-go/client/transport" "github.com/ChefBingbong/viem-go/chain/definitions")
ctx := context.Background()
publicClient, err := client.CreatePublicClient(client.PublicClientConfig{ Chain: definitions.Mainnet, Transport: transport.HTTP("https://eth.llamarpc.com"),})if err != nil { log.Fatal(err)}defer func() { _ = publicClient.Close() }()
tokenAddr := common.HexToAddress("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48")erc20ABI, _ := abi.ParseABI(`[{"inputs":[],"name":"totalSupply","outputs":[{"type":"uint256"}],"type":"function"}]`)
result, err := public.SimulateCalls(ctx, publicClient, public.SimulateCallsParameters{ Calls: []public.SimulateCall{ { To: &tokenAddr, ABI: erc20ABI, FunctionName: "totalSupply", }, },})if err != nil { log.Fatal(err)}log.Printf("Results: %d calls simulated", len(result.Results))Returns
*SimulateCallsReturnType
An object containing:
Results []SimulateCallResult- The results of each callAssetChanges []AssetChange- Asset balance changes (ifTraceAssetChangeswas enabled)Block formatters.Block- The simulated block data
Parameters
Configuration options accepted by this action.
Calls
- Type:
[]SimulateCall - Required
The calls to simulate.
result, err := public.SimulateCalls(ctx, publicClient, public.SimulateCallsParameters{ Calls: []public.SimulateCall{ { To: &tokenAddr, ABI: erc20ABI, FunctionName: "totalSupply", }, },})Account
- Type:
*common.Address - Optional
The account attached to the calls (msg.sender).
senderAddr := common.HexToAddress("0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266")result, err := public.SimulateCalls(ctx, publicClient, public.SimulateCallsParameters{ Account: &senderAddr, Calls: []public.SimulateCall{...},})BlockNumber
- Type:
*uint64 - Optional
The block number to simulate at.
blockNum := uint64(12345)result, err := public.SimulateCalls(ctx, publicClient, public.SimulateCallsParameters{ Calls: []public.SimulateCall{...}, BlockNumber: &blockNum,})BlockTag
- Type:
BlockTag - Optional
The block tag to simulate at (e.g., "latest", "pending").
result, err := public.SimulateCalls(ctx, publicClient, public.SimulateCallsParameters{ Calls: []public.SimulateCall{...}, BlockTag: public.BlockTagSafe,})TraceAssetChanges
- Type:
bool - Default:
false - Optional
Enables tracing of asset (ETH/ERC20) balance changes.
result, err := public.SimulateCalls(ctx, publicClient, public.SimulateCallsParameters{ Calls: []public.SimulateCall{...}, TraceAssetChanges: true,})TraceTransfers
- Type:
bool - Default:
false - Optional
Enables transfer tracing.
result, err := public.SimulateCalls(ctx, publicClient, public.SimulateCallsParameters{ Calls: []public.SimulateCall{...}, TraceTransfers: true,})Validation
- Type:
bool - Default:
false - Optional
Enables validation mode.
result, err := public.SimulateCalls(ctx, publicClient, public.SimulateCallsParameters{ Calls: []public.SimulateCall{...}, Validation: true,})StateOverrides
- Type:
types.StateOverride - Optional
State overrides for the simulation.
JSON-RPC Method
Underlying JSON-RPC methods used by this action.
Uses eth_call or eth_simulateV1 (if supported) for advanced simulation features.