Components:

  1. ExecutionResult selection (https://github.com/onflow/flow-go/issues/7546)
  2. Refactor lookup logic into modules: local vs execution node
  3. Refactor execution node lookups to use passed in ExecutionResult instead of existing approach
  4. Refactor local storage lookups to use new caching layer
  5. New request parameters
  6. New response parameters
  7. Streaming fork recovery protocol
  8. Implement improved Access API error handling

gRPC API Changes

The Access API will have the following new request parameters which are used to determine which ExecutionResults should be used to serve the request:

message ExecutionStateQuery {
	uint agreeing_executors = 1;
	repeated bytes required_executor_id = 2;
	bytes ancestor_result_id = 3;
	bool include_executor_metadata = 4;
}

Each execution state related endpoint will also optionally return the following in the response