GETH Node - Build Custom Golang Tracer

Job ID: 31590877

Budget: $250 – $750 USD

I am currently running a GETH node on BSC. Using one of the inbuilt "debug_traceCall" function, specifically the "callTracer". However it's very limited in its capacity. The main issue is it only returns internal contract call information and does not provide the state change from the execution of these trace calls.

The desired custom trace_call I wish to develop would allow for multiple batched trace_calls to be submitted on the current block, it would then return the state change of impacted contracts that the trace_called transactions interacted with, it.

(Similar to parity's trace calls stateDiff feature)
https://docs.alchemy.com/alchemy/documentation/enhanced-apis/trace-api#state-difference-statediff

I am looking for a Golang engineer to build a custom tracer for my node called "multiTraceCallWithReserves".

debug_multiTraceCallWithReserves(pendingTransactions, targetContractAddresses)

What it does?
Receives a batch of pending transactions to trace. These will run similar to the existing callTracer method which unfurls internal calls, looking for targetContractAddresses. If the unfurled traced call interacts with an address found with-in the targetContractAddresses array then we query the getReserve() public method on this matched contract address and store its value.

param: pendingTransactions - An array of transactions objects we wish to run a trace on to determine if they interact with any targetContractAddresses.

param: targetContractAddresses - An array of addresses used to filter through traced transaction calls and return relevant state changes to the target contract.

storage object: stateDiffMap - If a traced call interacts with any of the addresses in the targetContractAddresses array, then we should store the changed state of the filtered contract.

stateDiffMap is returned at the end of the trace execution

Notes:

Traced calls that interact with addresses matched from the targetContractAddresses array on multiple occasions should reflect the stateDiff of all traces completed sequentially.
Traces should happen in natural mining order as to ensure the most accurate stateDiffMap is returned.
Filtering of unnecessary state must be well optimised to ensure execution time is extremely quick (Goal is 100ms-1000ms).
Looking for someone who has strong experience with Golang, Ethereum & Geth Nodes.

Go-Ethereum Javascript Tracers:
https://github.com/ethereum/go-ethereum/tree/master/eth/tracers/internal/tracers

Go-Ethereum Golang Tracers:
https://github.com/ethereum/go-ethereum/tree/master/eth/tracers

Deliverables
Custom GETH tracer that run 100-400 pending transactions on the current pending block, capture traced state changes of specific contract addresses and return the changes as a hash map. Speed critical tracing and with +1000 filter addresses to monitor in trace calls.
Related categories: Golang Ethereum