Description
Problem Definition
Currently, archive nodes have some functionality that allows them to execute scripts against a local datastore:
Archive Code:
https://github.com/onflow/flow-archive/blob/a3113fce4d808b59b18841307259e234265ddc96/service/invoker/invoker.go
Supporting Execution Code:
https://github.com/onflow/flow-go/blob/master/engine/execution/computation/query/executor.go
At some point in the future, this will likely be integrated into Access nodes, allowing local script execution. One other common feature for "full nodes", is the ability to simulate a transaction at a particular block. In ethereum's RPC, it's the call
method.
The goal is to allow a user to simulate a transaction at a specific block height. The call should return the same results as if the transaction was executed at that height, except no state changes are made.
Proposed Solution
Add new methods/interfaces to support simulating transactions in a similar way to how it's done for script execution.
Definition of Done
There are new methods that allow Access and Observer nodes that have a local copy of execution state can simulate transactions against a specific block height.