From 053f58f966b886c7d828777c4d9dde811016bf81 Mon Sep 17 00:00:00 2001 From: Abhay Singh <113886234+abhayiscoding@users.noreply.github.com> Date: Thu, 9 Oct 2025 20:28:57 +0530 Subject: [PATCH] Expose eth_simulateV1 RPC method via ethclient --- ethclient/ethclient.go | 7 +++++++ ethclient/ethclient_test.go | 25 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/ethclient/ethclient.go b/ethclient/ethclient.go index 1195929f7d..7cc9f096c0 100644 --- a/ethclient/ethclient.go +++ b/ethclient/ethclient.go @@ -36,6 +36,13 @@ type Client struct { c *rpc.Client } +// SimulateV1 calls the eth_simulateV1 RPC method. +func (ec *Client) SimulateV1(ctx context.Context, opts map[string]interface{}, blockParam string) (map[string]interface{}, error) { + var result map[string]interface{} + err := ec.c.CallContext(ctx, &result, "eth_simulateV1", opts, blockParam) + return result, err +} + // Dial connects a client to the given URL. func Dial(rawurl string) (*Client, error) { return DialContext(context.Background(), rawurl) diff --git a/ethclient/ethclient_test.go b/ethclient/ethclient_test.go index 815bc29de4..2ba854ea58 100644 --- a/ethclient/ethclient_test.go +++ b/ethclient/ethclient_test.go @@ -754,3 +754,28 @@ func ExampleRevertErrorData() { // revert: 08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a75736572206572726f72 // message: user error } + +// Test for SimulateV1 +func TestSimulateV1(t *testing.T) { + client := ethclient.NewClient(rpc.DialContext) + opts := map[string]interface{}{ + "traceTransfers": true, + "validation": true, + "blockStateCalls": []interface{}{ + map[string]interface{}{ + "calls": []interface{}{ + map[string]interface{}{ + "from": "0x...", + "to": "0x...", + "data": "0x...", + }, + }, + }, + }, + } + resp, err := client.SimulateV1(context.Background(), opts, "latest") + if err != nil { + t.Fatalf("SimulateV1 failed: %v", err) + } + t.Logf("Response: %+v", resp) +}