viem-goviem-go

simulateBlocks

Simulates multiple blocks 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 configure block simulations and inspect their results.

import (
"context"
"log"
"github.com/ethereum/go-ethereum/common"
"github.com/ChefBingbong/viem-go/actions/public"
"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() }()
contractAddr := common.HexToAddress("0x...")
calldata := common.FromHex("0x...")
result, err := public.SimulateBlocks(ctx, publicClient, public.SimulateBlocksParameters{
Blocks: []public.SimulateBlock{
{
Calls: []public.SimulateBlockCall{
{
To: &contractAddr,
Data: calldata,
},
},
},
},
})
if err != nil {
log.Fatal(err)
}
log.Printf("Simulated %d blocks", len(result))

Returns

[]BlockResult

An array of block results, each containing:

  • Block formatters.Block - The simulated block data
  • Calls []CallResult - The results of each call in the block

Parameters

Configuration options accepted by this action.

Blocks

  • Type: []SimulateBlock
  • Required

The blocks to simulate.

result, err := public.SimulateBlocks(ctx, publicClient, public.SimulateBlocksParameters{
Blocks: []public.SimulateBlock{
{
Calls: []public.SimulateBlockCall{
{
To: &contractAddr,
Data: calldata,
},
},
},
},
})

BlockNumber

  • Type: *uint64
  • Optional

The block number to simulate at.

blockNum := uint64(12345)
result, err := public.SimulateBlocks(ctx, publicClient, public.SimulateBlocksParameters{
Blocks: []public.SimulateBlock{...},
BlockNumber: &blockNum,
})

BlockTag

  • Type: BlockTag
  • Optional

The block tag to simulate at (e.g., "latest", "pending").

result, err := public.SimulateBlocks(ctx, publicClient, public.SimulateBlocksParameters{
Blocks: []public.SimulateBlock{...},
BlockTag: public.BlockTagSafe,
})

ReturnFullTransactions

  • Type: bool
  • Default: false
  • Optional

Whether to return full transaction objects.

result, err := public.SimulateBlocks(ctx, publicClient, public.SimulateBlocksParameters{
Blocks: []public.SimulateBlock{...},
ReturnFullTransactions: true,
})

TraceTransfers

  • Type: bool
  • Default: false
  • Optional

Enables transfer tracing.

result, err := public.SimulateBlocks(ctx, publicClient, public.SimulateBlocksParameters{
Blocks: []public.SimulateBlock{...},
TraceTransfers: true,
})

Validation

  • Type: bool
  • Default: false
  • Optional

Enables validation mode.

result, err := public.SimulateBlocks(ctx, publicClient, public.SimulateBlocksParameters{
Blocks: []public.SimulateBlock{...},
Validation: true,
})

JSON-RPC Method

Underlying JSON-RPC method used by this action.

Uses eth_simulateV1 (if supported) for block simulation.