Documentation ¶
Index ¶
- Constants
- func IsInsufficientExecutionReceipts(err error) bool
- func NewNetworkAPI(state protocol.State, chainID flow.ChainID, headers storage.Headers, ...) *backendNetwork
- type Backend
- func (b *Backend) ExecuteScriptAtBlockHeight(ctx context.Context, blockHeight uint64, script []byte, arguments [][]byte) ([]byte, error)
- func (b *Backend) ExecuteScriptAtBlockID(ctx context.Context, blockID flow.Identifier, script []byte, ...) ([]byte, error)
- func (b *Backend) ExecuteScriptAtLatestBlock(ctx context.Context, script []byte, arguments [][]byte) ([]byte, error)
- func (b *Backend) GetAccount(ctx context.Context, address flow.Address) (*flow.Account, error)
- func (b *Backend) GetAccountAtBlockHeight(ctx context.Context, address flow.Address, height uint64) (*flow.Account, error)
- func (b *Backend) GetAccountAtLatestBlock(ctx context.Context, address flow.Address) (*flow.Account, error)
- func (b *Backend) GetBlockByHeight(ctx context.Context, height uint64) (*flow.Block, flow.BlockStatus, error)
- func (b *Backend) GetBlockByID(ctx context.Context, id flow.Identifier) (*flow.Block, flow.BlockStatus, error)
- func (b *Backend) GetBlockHeaderByHeight(ctx context.Context, height uint64) (*flow.Header, flow.BlockStatus, error)
- func (b *Backend) GetBlockHeaderByID(ctx context.Context, id flow.Identifier) (*flow.Header, flow.BlockStatus, error)
- func (b *Backend) GetCollectionByID(_ context.Context, colID flow.Identifier) (*flow.LightCollection, error)
- func (b *Backend) GetEventsForBlockIDs(ctx context.Context, eventType string, blockIDs []flow.Identifier, ...) ([]flow.BlockEvents, error)
- func (b *Backend) GetEventsForHeightRange(ctx context.Context, eventType string, startHeight, endHeight uint64, ...) ([]flow.BlockEvents, error)
- func (b *Backend) GetExecutionResultByID(ctx context.Context, id flow.Identifier) (*flow.ExecutionResult, error)
- func (b *Backend) GetExecutionResultForBlockID(ctx context.Context, blockID flow.Identifier) (*flow.ExecutionResult, error)
- func (b *Backend) GetFullCollectionByID(_ context.Context, colID flow.Identifier) (*flow.Collection, error)
- func (b *Backend) GetLatestBlock(ctx context.Context, isSealed bool) (*flow.Block, flow.BlockStatus, error)
- func (b *Backend) GetLatestBlockHeader(ctx context.Context, isSealed bool) (*flow.Header, flow.BlockStatus, error)
- func (b *Backend) GetLatestProtocolStateSnapshot(_ context.Context) ([]byte, error)
- func (b *Backend) GetNetworkParameters(_ context.Context) access.NetworkParameters
- func (b *Backend) GetNodeVersionInfo(_ context.Context) (*access.NodeVersionInfo, error)
- func (b *Backend) GetProtocolStateSnapshotByBlockID(_ context.Context, blockID flow.Identifier) ([]byte, error)
- func (b *Backend) GetProtocolStateSnapshotByHeight(_ context.Context, blockHeight uint64) ([]byte, error)
- func (b *Backend) GetSystemTransaction(ctx context.Context, _ flow.Identifier) (*flow.TransactionBody, error)
- func (b *Backend) GetSystemTransactionResult(ctx context.Context, blockID flow.Identifier, ...) (*access.TransactionResult, error)
- func (b *Backend) GetTransaction(ctx context.Context, txID flow.Identifier) (*flow.TransactionBody, error)
- func (b *Backend) GetTransactionResult(ctx context.Context, txID flow.Identifier, blockID flow.Identifier, ...) (*access.TransactionResult, error)
- func (b *Backend) GetTransactionResultByIndex(ctx context.Context, blockID flow.Identifier, index uint32, ...) (*access.TransactionResult, error)
- func (b *Backend) GetTransactionResultsByBlockID(ctx context.Context, blockID flow.Identifier, ...) ([]*access.TransactionResult, error)
- func (b *Backend) GetTransactionsByBlockID(_ context.Context, blockID flow.Identifier) ([]*flow.TransactionBody, error)
- func (b *Backend) LookupErrorMessageByIndex(ctx context.Context, blockID flow.Identifier, height uint64, index uint32) (string, error)
- func (b *Backend) LookupErrorMessageByTransactionID(ctx context.Context, blockID flow.Identifier, transactionID flow.Identifier) (string, error)
- func (b *Backend) LookupErrorMessagesByBlockID(ctx context.Context, blockID flow.Identifier, height uint64) (map[flow.Identifier]string, error)
- func (b *Backend) Ping(ctx context.Context) error
- func (b *Backend) ProcessFinalizedBlockHeight(height uint64) error
- func (b *Backend) SendRawTransaction(ctx context.Context, tx *flow.TransactionBody) error
- func (b *Backend) SendTransaction(ctx context.Context, tx *flow.TransactionBody) error
- type Communicator
- type Config
- type EventsIndex
- func (e *EventsIndex) ByBlockID(blockID flow.Identifier, height uint64) ([]flow.Event, error)
- func (e *EventsIndex) ByBlockIDTransactionID(blockID flow.Identifier, height uint64, transactionID flow.Identifier) ([]flow.Event, error)
- func (e *EventsIndex) ByBlockIDTransactionIndex(blockID flow.Identifier, height uint64, txIndex uint32) ([]flow.Event, error)
- func (e *EventsIndex) HighestIndexedHeight() (uint64, error)
- func (e *EventsIndex) Initialize(indexReporter state_synchronization.IndexReporter) error
- func (e *EventsIndex) LowestIndexedHeight() (uint64, error)
- type IndexQueryMode
- type InsufficientExecutionReceipts
- type MainNodeSelector
- type NodeCommunicator
- type NodeSelector
- type NodeSelectorFactory
- type Params
- type Retry
- type ScriptExecutor
- func (s *ScriptExecutor) ExecuteAtBlockHeight(ctx context.Context, script []byte, arguments [][]byte, height uint64) ([]byte, error)
- func (s *ScriptExecutor) GetAccountAtBlockHeight(ctx context.Context, address flow.Address, height uint64) (*flow.Account, error)
- func (s *ScriptExecutor) Initialize(indexReporter state_synchronization.IndexReporter, ...) error
- func (s *ScriptExecutor) SetMaxCompatibleHeight(height uint64)
- func (s *ScriptExecutor) SetMinCompatibleHeight(height uint64)
- type TransactionErrorMessage
- type TransactionResultsIndex
- func (t *TransactionResultsIndex) ByBlockID(blockID flow.Identifier, height uint64) ([]flow.LightTransactionResult, error)
- func (t *TransactionResultsIndex) ByBlockIDTransactionID(blockID flow.Identifier, height uint64, txID flow.Identifier) (*flow.LightTransactionResult, error)
- func (t *TransactionResultsIndex) ByBlockIDTransactionIndex(blockID flow.Identifier, height uint64, index uint32) (*flow.LightTransactionResult, error)
- func (t *TransactionResultsIndex) HighestIndexedHeight() (uint64, error)
- func (t *TransactionResultsIndex) Initialize(indexReporter state_synchronization.IndexReporter) error
- func (t *TransactionResultsIndex) LowestIndexedHeight() (uint64, error)
- type TransactionsLocalDataProvider
- func (t *TransactionsLocalDataProvider) GetTransactionResultByIndexFromStorage(ctx context.Context, block *flow.Block, index uint32, ...) (*access.TransactionResult, error)
- func (t *TransactionsLocalDataProvider) GetTransactionResultFromStorage(ctx context.Context, block *flow.Block, transactionID flow.Identifier, ...) (*access.TransactionResult, error)
- func (t *TransactionsLocalDataProvider) GetTransactionResultsByBlockIDFromStorage(ctx context.Context, block *flow.Block, ...) ([]*access.TransactionResult, error)
Constants ¶
const DefaultConnectionPoolSize = 250
DefaultConnectionPoolSize is the default size for the connection pool to collection and execution nodes
const DefaultLoggedScriptsCacheSize = 1_000_000
DefaultLoggedScriptsCacheSize is the default size of the lookup cache used to dedupe logs of scripts sent to ENs limiting cache size to 16MB and does not affect script execution, only for keeping logs tidy
const DefaultMaxHeightRange = 250
DefaultMaxHeightRange is the default maximum size of range requests.
const DefaultSnapshotHistoryLimit = 500
DefaultSnapshotHistoryLimit the amount of blocks to look back in state when recursively searching for a valid snapshot
Variables ¶
This section is empty.
Functions ¶
func IsInsufficientExecutionReceipts ¶ added in v0.30.0
func NewNetworkAPI ¶ added in v0.28.0
func NewNetworkAPI( state protocol.State, chainID flow.ChainID, headers storage.Headers, snapshotHistoryLimit int, ) *backendNetwork
NetworkAPI func
The observer and access nodes need to be able to handle GetNetworkParameters and GetLatestProtocolStateSnapshot RPCs so this logic was split into the backendNetwork so that we can ignore the rest of the backend logic
Types ¶
type Backend ¶
type Backend struct {
// contains filtered or unexported fields
}
Backend implements the Access API.
It is composed of several sub-backends that implement part of the Access API.
Script related calls are handled by backendScripts. Transaction related calls are handled by backendTransactions. Block Header related calls are handled by backendBlockHeaders. Block details related calls are handled by backendBlockDetails. Event related calls are handled by backendEvents. Account related calls are handled by backendAccounts.
All remaining calls are handled by the base Backend in this file.
func (*Backend) ExecuteScriptAtBlockHeight ¶
func (b *Backend) ExecuteScriptAtBlockHeight( ctx context.Context, blockHeight uint64, script []byte, arguments [][]byte, ) ([]byte, error)
ExecuteScriptAtBlockHeight executes provided script at the provided block height.
func (*Backend) ExecuteScriptAtBlockID ¶
func (b *Backend) ExecuteScriptAtBlockID( ctx context.Context, blockID flow.Identifier, script []byte, arguments [][]byte, ) ([]byte, error)
ExecuteScriptAtBlockID executes provided script at the provided block ID.
func (*Backend) ExecuteScriptAtLatestBlock ¶
func (b *Backend) ExecuteScriptAtLatestBlock( ctx context.Context, script []byte, arguments [][]byte, ) ([]byte, error)
ExecuteScriptAtLatestBlock executes provided script at the latest sealed block.
func (*Backend) GetAccount ¶
GetAccount returns the account details at the latest sealed block. Alias for GetAccountAtLatestBlock
func (*Backend) GetAccountAtBlockHeight ¶
func (b *Backend) GetAccountAtBlockHeight( ctx context.Context, address flow.Address, height uint64, ) (*flow.Account, error)
GetAccountAtBlockHeight returns the account details at the given block height
func (*Backend) GetAccountAtLatestBlock ¶
func (b *Backend) GetAccountAtLatestBlock(ctx context.Context, address flow.Address) (*flow.Account, error)
GetAccountAtLatestBlock returns the account details at the latest sealed block.
func (*Backend) GetBlockByHeight ¶
func (*Backend) GetBlockByID ¶
func (b *Backend) GetBlockByID(ctx context.Context, id flow.Identifier) (*flow.Block, flow.BlockStatus, error)
func (*Backend) GetBlockHeaderByHeight ¶
func (*Backend) GetBlockHeaderByID ¶
func (b *Backend) GetBlockHeaderByID(ctx context.Context, id flow.Identifier) (*flow.Header, flow.BlockStatus, error)
func (*Backend) GetCollectionByID ¶
func (b *Backend) GetCollectionByID(_ context.Context, colID flow.Identifier) (*flow.LightCollection, error)
func (*Backend) GetEventsForBlockIDs ¶
func (b *Backend) GetEventsForBlockIDs( ctx context.Context, eventType string, blockIDs []flow.Identifier, requiredEventEncodingVersion entities.EventEncodingVersion, ) ([]flow.BlockEvents, error)
GetEventsForBlockIDs retrieves events for all the specified block IDs that have the given type
func (*Backend) GetEventsForHeightRange ¶
func (b *Backend) GetEventsForHeightRange( ctx context.Context, eventType string, startHeight, endHeight uint64, requiredEventEncodingVersion entities.EventEncodingVersion, ) ([]flow.BlockEvents, error)
GetEventsForHeightRange retrieves events for all sealed blocks between the start block height and the end block height (inclusive) that have the given type.
func (*Backend) GetExecutionResultByID ¶ added in v0.23.5
func (b *Backend) GetExecutionResultByID(ctx context.Context, id flow.Identifier) (*flow.ExecutionResult, error)
GetExecutionResultByID gets an execution result by its ID.
func (*Backend) GetExecutionResultForBlockID ¶ added in v0.21.0
func (b *Backend) GetExecutionResultForBlockID(ctx context.Context, blockID flow.Identifier) (*flow.ExecutionResult, error)
func (*Backend) GetFullCollectionByID ¶ added in v0.33.26
func (b *Backend) GetFullCollectionByID(_ context.Context, colID flow.Identifier) (*flow.Collection, error)
func (*Backend) GetLatestBlock ¶
func (*Backend) GetLatestBlockHeader ¶
func (*Backend) GetLatestProtocolStateSnapshot ¶ added in v0.15.0
GetLatestProtocolStateSnapshot returns the latest finalized snapshot
func (*Backend) GetNetworkParameters ¶
func (b *Backend) GetNetworkParameters(_ context.Context) access.NetworkParameters
func (*Backend) GetNodeVersionInfo ¶ added in v0.31.0
GetNodeVersionInfo returns node version information such as semver, commit, sporkID, protocolVersion, etc
func (*Backend) GetProtocolStateSnapshotByBlockID ¶ added in v0.33.1
func (b *Backend) GetProtocolStateSnapshotByBlockID(_ context.Context, blockID flow.Identifier) ([]byte, error)
GetProtocolStateSnapshotByBlockID returns serializable Snapshot for a block, by blockID. The requested block must be finalized, otherwise an error is returned. Expected errors during normal operation:
- status.Error[codes.NotFound] - No block with the given ID was found
- status.Error[codes.InvalidArgument] - Block ID will never have a valid snapshot: 1. A block was found, but it is not finalized and is below the finalized height, so it will never be finalized. 2. A block was found, however its sealing segment spans an epoch phase transition, yielding an invalid snapshot.
- status.Error[codes.FailedPrecondition] - A block was found, but it is not finalized and is above the finalized height. The block may or may not be finalized in the future; the client can retry later.
func (*Backend) GetProtocolStateSnapshotByHeight ¶ added in v0.33.1
func (b *Backend) GetProtocolStateSnapshotByHeight(_ context.Context, blockHeight uint64) ([]byte, error)
GetProtocolStateSnapshotByHeight returns serializable Snapshot by block height. The block must be finalized (otherwise the by-height query is ambiguous). Expected errors during normal operation:
- status.Error[codes.NotFound] - No block with the given height was found. The block height may or may not be finalized in the future; the client can retry later.
- status.Error[codes.InvalidArgument] - A block was found, however its sealing segment spans an epoch phase transition, yielding an invalid snapshot. Therefore we will never return a snapshot for this block height.
func (*Backend) GetSystemTransaction ¶ added in v0.33.1
func (b *Backend) GetSystemTransaction(ctx context.Context, _ flow.Identifier) (*flow.TransactionBody, error)
GetSystemTransaction returns system transaction
func (*Backend) GetSystemTransactionResult ¶ added in v0.33.1
func (b *Backend) GetSystemTransactionResult(ctx context.Context, blockID flow.Identifier, requiredEventEncodingVersion entities.EventEncodingVersion) (*access.TransactionResult, error)
GetSystemTransactionResult returns system transaction result
func (*Backend) GetTransaction ¶
func (b *Backend) GetTransaction(ctx context.Context, txID flow.Identifier) (*flow.TransactionBody, error)
func (*Backend) GetTransactionResult ¶
func (b *Backend) GetTransactionResult( ctx context.Context, txID flow.Identifier, blockID flow.Identifier, collectionID flow.Identifier, requiredEventEncodingVersion entities.EventEncodingVersion, ) (*access.TransactionResult, error)
func (*Backend) GetTransactionResultByIndex ¶ added in v0.24.8
func (b *Backend) GetTransactionResultByIndex( ctx context.Context, blockID flow.Identifier, index uint32, requiredEventEncodingVersion entities.EventEncodingVersion, ) (*access.TransactionResult, error)
GetTransactionResultByIndex returns transactions Results for an index in a block that is executed, pending or finalized transactions return errors
func (*Backend) GetTransactionResultsByBlockID ¶ added in v0.24.11
func (b *Backend) GetTransactionResultsByBlockID( ctx context.Context, blockID flow.Identifier, requiredEventEncodingVersion entities.EventEncodingVersion, ) ([]*access.TransactionResult, error)
func (*Backend) GetTransactionsByBlockID ¶ added in v0.24.11
func (b *Backend) GetTransactionsByBlockID( _ context.Context, blockID flow.Identifier, ) ([]*flow.TransactionBody, error)
func (*Backend) LookupErrorMessageByIndex ¶ added in v0.33.13
func (b *Backend) LookupErrorMessageByIndex( ctx context.Context, blockID flow.Identifier, height uint64, index uint32, ) (string, error)
LookupErrorMessageByIndex returns transaction error message for specified transaction using its index. If an error message for transaction can be found in cache then it will be used to serve the request, otherwise an RPC call will be made to the EN to fetch that error message, fetched value will be cached in the LRU cache. Expected errors during normal operation:
- status.Error[codes.NotFound] - transaction result for given block ID and tx index is not available.
- InsufficientExecutionReceipts - found insufficient receipts for given block ID.
- status.Error - remote GRPC call to EN has failed.
func (*Backend) LookupErrorMessageByTransactionID ¶ added in v0.33.13
func (b *Backend) LookupErrorMessageByTransactionID( ctx context.Context, blockID flow.Identifier, transactionID flow.Identifier, ) (string, error)
LookupErrorMessageByTransactionID returns transaction error message for specified transaction. If an error message for transaction can be found in the cache then it will be used to serve the request, otherwise an RPC call will be made to the EN to fetch that error message, fetched value will be cached in the LRU cache. Expected errors during normal operation:
- InsufficientExecutionReceipts - found insufficient receipts for given block ID.
- status.Error - remote GRPC call to EN has failed.
func (*Backend) LookupErrorMessagesByBlockID ¶ added in v0.33.13
func (b *Backend) LookupErrorMessagesByBlockID( ctx context.Context, blockID flow.Identifier, height uint64, ) (map[flow.Identifier]string, error)
LookupErrorMessagesByBlockID returns all error messages for failed transactions by blockID. An RPC call will be made to the EN to fetch missing errors messages, fetched value will be cached in the LRU cache. Expected errors during normal operation:
- status.Error[codes.NotFound] - transaction results for given block ID are not available.
- InsufficientExecutionReceipts - found insufficient receipts for given block ID.
- status.Error - remote GRPC call to EN has failed.
func (*Backend) ProcessFinalizedBlockHeight ¶ added in v0.33.1
ATTENTION: might be a source of problems in future. We run this code on finalization gorotuine, potentially lagging finalization events if operations take long time. We might need to move this logic on dedicated goroutine and provide a way to skip finalization events if they are delivered too often for this engine. An example of similar approach - https://github.com/onflow/flow-go/blob/10b0fcbf7e2031674c00f3cdd280f27bd1b16c47/engine/common/follower/compliance_engine.go#L201.. No errors expected during normal operations.
func (*Backend) SendRawTransaction ¶
func (b *Backend) SendRawTransaction( ctx context.Context, tx *flow.TransactionBody, ) error
SendRawTransaction sends a raw transaction to the collection node
func (*Backend) SendTransaction ¶
func (b *Backend) SendTransaction( ctx context.Context, tx *flow.TransactionBody, ) error
SendTransaction forwards the transaction to the collection node
type Communicator ¶ added in v0.32.0
type Config ¶ added in v0.32.0
type Config struct { ExecutionClientTimeout time.Duration // execution API GRPC client timeout CollectionClientTimeout time.Duration // collection API GRPC client timeout ConnectionPoolSize uint // size of the cache for storing collection and execution connections MaxHeightRange uint // max size of height range requests PreferredExecutionNodeIDs []string // preferred list of upstream execution node IDs FixedExecutionNodeIDs []string // fixed list of execution node IDs to choose from if no node ID can be chosen from the PreferredExecutionNodeIDs CircuitBreakerConfig connection.CircuitBreakerConfig // the configuration for circuit breaker ScriptExecutionMode string // the mode in which scripts are executed EventQueryMode string // the mode in which events are queried TxResultQueryMode string // the mode in which tx results are queried }
Config defines the configurable options for creating Backend
type EventsIndex ¶ added in v0.33.9
type EventsIndex struct {
// contains filtered or unexported fields
}
EventsIndex implements a wrapper around `storage.Events` ensuring that needed data has been synced and is available to the client. Note: `EventsIndex` is created with empty report due to the next reasoning: When the index is initially bootstrapped, the indexer needs to load an execution state checkpoint from disk and index all the data. This process can take more than 1 hour on some systems. Consequently, the Initialize pattern is implemented to enable the Access API to start up and serve queries before the index is fully ready. During the initialization phase, all calls to retrieve data from this struct should return indexer.ErrIndexNotInitialized. The caller is responsible for handling this error appropriately for the method.
func NewEventsIndex ¶ added in v0.33.9
func NewEventsIndex(events storage.Events) *EventsIndex
func (*EventsIndex) ByBlockID ¶ added in v0.33.13
func (e *EventsIndex) ByBlockID(blockID flow.Identifier, height uint64) ([]flow.Event, error)
ByBlockID checks data availability and returns events for a block Expected errors:
- indexer.ErrIndexNotInitialized if the `EventsIndex` has not been initialized
- storage.ErrHeightNotIndexed when data is unavailable
- codes.NotFound if result cannot be provided by storage due to the absence of data.
func (*EventsIndex) ByBlockIDTransactionID ¶ added in v0.33.13
func (e *EventsIndex) ByBlockIDTransactionID(blockID flow.Identifier, height uint64, transactionID flow.Identifier) ([]flow.Event, error)
ByBlockIDTransactionID checks data availability and return events for the given block ID and transaction ID Expected errors:
- indexer.ErrIndexNotInitialized if the `EventsIndex` has not been initialized
- storage.ErrHeightNotIndexed when data is unavailable
- codes.NotFound if result cannot be provided by storage due to the absence of data.
func (*EventsIndex) ByBlockIDTransactionIndex ¶ added in v0.33.13
func (e *EventsIndex) ByBlockIDTransactionIndex(blockID flow.Identifier, height uint64, txIndex uint32) ([]flow.Event, error)
ByBlockIDTransactionIndex checks data availability and return events for the transaction at given index in a given block Expected errors:
- indexer.ErrIndexNotInitialized if the `EventsIndex` has not been initialized
- storage.ErrHeightNotIndexed when data is unavailable
- codes.NotFound if result cannot be provided by storage due to the absence of data.
func (*EventsIndex) HighestIndexedHeight ¶ added in v0.33.9
func (e *EventsIndex) HighestIndexedHeight() (uint64, error)
HighestIndexedHeight returns the highest height indexed by the execution state indexer. Expected errors: - indexer.ErrIndexNotInitialized if the EventsIndex has not been initialized
func (*EventsIndex) Initialize ¶ added in v0.33.9
func (e *EventsIndex) Initialize(indexReporter state_synchronization.IndexReporter) error
Initialize replaces a previously non-initialized reporter. Can be called once. No errors are expected during normal operations.
func (*EventsIndex) LowestIndexedHeight ¶ added in v0.33.9
func (e *EventsIndex) LowestIndexedHeight() (uint64, error)
LowestIndexedHeight returns the lowest height indexed by the execution state indexer. Expected errors: - indexer.ErrIndexNotInitialized if the EventsIndex has not been initialized
type IndexQueryMode ¶ added in v0.33.1
type IndexQueryMode int
const ( // IndexQueryModeLocalOnly executes scripts and gets accounts using only local storage IndexQueryModeLocalOnly IndexQueryMode = iota + 1 // IndexQueryModeExecutionNodesOnly executes scripts and gets accounts using only // execution nodes IndexQueryModeExecutionNodesOnly // IndexQueryModeFailover executes scripts and gets accounts using local storage first, // then falls back to execution nodes if data is not available for the height or if request // failed due to a non-user error. IndexQueryModeFailover // IndexQueryModeCompare executes scripts and gets accounts using both local storage and // execution nodes and compares the results. The execution node result is always returned. IndexQueryModeCompare )
func ParseIndexQueryMode ¶ added in v0.33.1
func ParseIndexQueryMode(s string) (IndexQueryMode, error)
func (IndexQueryMode) String ¶ added in v0.33.1
func (m IndexQueryMode) String() string
type InsufficientExecutionReceipts ¶ added in v0.17.0
type InsufficientExecutionReceipts struct {
// contains filtered or unexported fields
}
InsufficientExecutionReceipts indicates that no execution receipt were found for a given block ID
func (InsufficientExecutionReceipts) Error ¶ added in v0.17.0
func (e InsufficientExecutionReceipts) Error() string
type MainNodeSelector ¶ added in v0.32.0
type MainNodeSelector struct {
// contains filtered or unexported fields
}
MainNodeSelector is a specific implementation of the node selector. Which performs in-order node selection using fixed list of pre-defined nodes.
func NewMainNodeSelector ¶ added in v0.32.0
func NewMainNodeSelector(nodes flow.IdentityList) *MainNodeSelector
func (*MainNodeSelector) HasNext ¶ added in v0.32.0
func (e *MainNodeSelector) HasNext() bool
HasNext returns true if next node is available.
func (*MainNodeSelector) Next ¶ added in v0.32.0
func (e *MainNodeSelector) Next() *flow.Identity
Next returns the next node in the selector.
type NodeCommunicator ¶ added in v0.32.0
type NodeCommunicator struct {
// contains filtered or unexported fields
}
NodeCommunicator is responsible for calling available nodes in the backend.
func NewNodeCommunicator ¶ added in v0.32.0
func NewNodeCommunicator(circuitBreakerEnabled bool) *NodeCommunicator
NewNodeCommunicator creates a new instance of NodeCommunicator.
func (*NodeCommunicator) CallAvailableNode ¶ added in v0.32.0
func (b *NodeCommunicator) CallAvailableNode( nodes flow.IdentityList, call func(id *flow.Identity) error, shouldTerminateOnError func(node *flow.Identity, err error) bool, ) error
CallAvailableNode calls the provided function on the available nodes. It iterates through the nodes and executes the function. If an error occurs, it applies the custom error terminator (if provided) and keeps track of the errors. If the error occurs in circuit breaker, it continues to the next node. If the maximum failed request count is reached, it returns the accumulated errors.
type NodeSelector ¶ added in v0.32.0
NodeSelector is an interface that represents the ability to select node identities that the access node is trying to reach. It encapsulates the internal logic of node selection and provides a way to change implementations for different types of nodes. Implementations of this interface should define the Next method, which returns the next node identity to be selected. HasNext checks if there is next node available.
type NodeSelectorFactory ¶ added in v0.32.0
type NodeSelectorFactory struct {
// contains filtered or unexported fields
}
NodeSelectorFactory is a factory for creating node selectors based on factory configuration and node type. Supported configurations: circuitBreakerEnabled = true - nodes will be pseudo-randomly sampled and picked in-order. circuitBreakerEnabled = false - nodes will be picked from proposed list in-order without any changes.
func (*NodeSelectorFactory) SelectNodes ¶ added in v0.32.0
func (n *NodeSelectorFactory) SelectNodes(nodes flow.IdentityList) (NodeSelector, error)
SelectNodes selects the configured number of node identities from the provided list of nodes and returns the node selector to iterate through them.
type Params ¶ added in v0.32.0
type Params struct { State protocol.State CollectionRPC accessproto.AccessAPIClient HistoricalAccessNodes []accessproto.AccessAPIClient Blocks storage.Blocks Headers storage.Headers Collections storage.Collections Transactions storage.Transactions ExecutionReceipts storage.ExecutionReceipts ExecutionResults storage.ExecutionResults ChainID flow.ChainID AccessMetrics module.AccessMetrics ConnFactory connection.ConnectionFactory RetryEnabled bool MaxHeightRange uint PreferredExecutionNodeIDs []string FixedExecutionNodeIDs []string Log zerolog.Logger SnapshotHistoryLimit int Communicator Communicator TxResultCacheSize uint TxErrorMessagesCacheSize uint ScriptExecutor execution.ScriptExecutor ScriptExecutionMode IndexQueryMode EventQueryMode IndexQueryMode EventsIndex *EventsIndex TxResultQueryMode IndexQueryMode TxResultsIndex *TransactionResultsIndex }
type Retry ¶
type Retry struct {
// contains filtered or unexported fields
}
Retry implements a simple retry mechanism for transaction submission.
func (*Retry) RegisterTransaction ¶
func (r *Retry) RegisterTransaction(height uint64, tx *flow.TransactionBody)
RegisterTransaction adds a transaction that could possibly be retried
func (*Retry) Retry ¶
Retry attempts to resend transactions for a specified block height. It performs cleanup operations, including pruning old transactions, and retries sending transactions that are still pending. The method takes a block height as input. If the provided height is lower than flow.DefaultTransactionExpiry, no retries are performed, and the method returns nil. No errors expected during normal operations.
func (*Retry) SetBackend ¶
type ScriptExecutor ¶ added in v0.32.2
type ScriptExecutor struct {
// contains filtered or unexported fields
}
func NewScriptExecutor ¶ added in v0.32.2
func NewScriptExecutor(log zerolog.Logger, minHeight, maxHeight uint64) *ScriptExecutor
func (*ScriptExecutor) ExecuteAtBlockHeight ¶ added in v0.32.2
func (s *ScriptExecutor) ExecuteAtBlockHeight(ctx context.Context, script []byte, arguments [][]byte, height uint64) ([]byte, error)
ExecuteAtBlockHeight executes provided script at the provided block height against a local execution state.
Expected errors:
- storage.ErrNotFound if the register or block height is not found
- storage.ErrHeightNotIndexed if the data for the block height is not available. this could be because the height is not within the index block range, or the index is not ready.
func (*ScriptExecutor) GetAccountAtBlockHeight ¶ added in v0.32.2
func (s *ScriptExecutor) GetAccountAtBlockHeight(ctx context.Context, address flow.Address, height uint64) (*flow.Account, error)
GetAccountAtBlockHeight returns the account at the provided block height from a local execution state.
Expected errors:
- storage.ErrNotFound if the account or block height is not found
- storage.ErrHeightNotIndexed if the data for the block height is not available. this could be because the height is not within the index block range, or the index is not ready.
func (*ScriptExecutor) Initialize ¶ added in v0.33.9
func (s *ScriptExecutor) Initialize(indexReporter state_synchronization.IndexReporter, scriptExecutor *execution.Scripts) error
Initialize initializes the indexReporter and script executor This method can be called at any time after the ScriptExecutor object is created. Any requests made to the other methods will return storage.ErrHeightNotIndexed until this method is called.
func (*ScriptExecutor) SetMaxCompatibleHeight ¶ added in v0.32.10
func (s *ScriptExecutor) SetMaxCompatibleHeight(height uint64)
SetMaxCompatibleHeight sets the highest block height (inclusive) that can be queried using local execution Use this to limit the executable block range supported by the node's current software version.
func (*ScriptExecutor) SetMinCompatibleHeight ¶ added in v0.32.10
func (s *ScriptExecutor) SetMinCompatibleHeight(height uint64)
SetMinCompatibleHeight sets the lowest block height (inclusive) that can be queried using local execution Use this to limit the executable block range supported by the node's current software version.
type TransactionErrorMessage ¶ added in v0.33.13
type TransactionErrorMessage interface { // LookupErrorMessageByTransactionID is a function type for getting transaction error message by block ID and transaction ID. // Expected errors during normal operation: // - InsufficientExecutionReceipts - found insufficient receipts for given block ID. // - status.Error - remote GRPC call to EN has failed. LookupErrorMessageByTransactionID(ctx context.Context, blockID flow.Identifier, transactionID flow.Identifier) (string, error) // LookupErrorMessageByIndex is a function type for getting transaction error message by index. // Expected errors during normal operation: // - status.Error[codes.NotFound] - transaction result for given block ID and tx index is not available. // - InsufficientExecutionReceipts - found insufficient receipts for given block ID. // - status.Error - remote GRPC call to EN has failed. LookupErrorMessageByIndex(ctx context.Context, blockID flow.Identifier, height uint64, index uint32) (string, error) // LookupErrorMessagesByBlockID is a function type for getting transaction error messages by block ID. // Expected errors during normal operation: // - status.Error[codes.NotFound] - transaction results for given block ID are not available. // - InsufficientExecutionReceipts - found insufficient receipts for given block ID. // - status.Error - remote GRPC call to EN has failed. LookupErrorMessagesByBlockID(ctx context.Context, blockID flow.Identifier, height uint64) (map[flow.Identifier]string, error) }
TransactionErrorMessage declares the lookup transaction error methods by different input parameters.
type TransactionResultsIndex ¶ added in v0.33.13
type TransactionResultsIndex struct {
// contains filtered or unexported fields
}
TransactionResultsIndex implements a wrapper around `storage.LightTransactionResult` ensuring that needed data has been synced and is available to the client. Note: `TransactionResultsIndex` is created with empty report due to the next reasoning: When the index is initially bootstrapped, the indexer needs to load an execution state checkpoint from disk and index all the data. This process can take more than 1 hour on some systems. Consequently, the Initialize pattern is implemented to enable the Access API to start up and serve queries before the index is fully ready. During the initialization phase, all calls to retrieve data from this struct should return indexer.ErrIndexNotInitialized. The caller is responsible for handling this error appropriately for the method.
func NewTransactionResultsIndex ¶ added in v0.33.13
func NewTransactionResultsIndex(results storage.LightTransactionResults) *TransactionResultsIndex
func (*TransactionResultsIndex) ByBlockID ¶ added in v0.33.13
func (t *TransactionResultsIndex) ByBlockID(blockID flow.Identifier, height uint64) ([]flow.LightTransactionResult, error)
ByBlockID checks data availability and returns all transaction results for a block Expected errors:
- indexer.ErrIndexNotInitialized if the `TransactionResultsIndex` has not been initialized
- storage.ErrHeightNotIndexed when data is unavailable
- codes.NotFound if result cannot be provided by storage due to the absence of data.
func (*TransactionResultsIndex) ByBlockIDTransactionID ¶ added in v0.33.13
func (t *TransactionResultsIndex) ByBlockIDTransactionID(blockID flow.Identifier, height uint64, txID flow.Identifier) (*flow.LightTransactionResult, error)
ByBlockIDTransactionID checks data availability and return the transaction result for the given block ID and transaction ID Expected errors:
- indexer.ErrIndexNotInitialized if the `TransactionResultsIndex` has not been initialized
- storage.ErrHeightNotIndexed when data is unavailable
- codes.NotFound if result cannot be provided by storage due to the absence of data.
func (*TransactionResultsIndex) ByBlockIDTransactionIndex ¶ added in v0.33.13
func (t *TransactionResultsIndex) ByBlockIDTransactionIndex(blockID flow.Identifier, height uint64, index uint32) (*flow.LightTransactionResult, error)
ByBlockIDTransactionIndex checks data availability and return the transaction result for the given blockID and transaction index Expected errors:
- indexer.ErrIndexNotInitialized if the `TransactionResultsIndex` has not been initialized
- storage.ErrHeightNotIndexed when data is unavailable
- codes.NotFound when result cannot be provided by storage due to the absence of data.
func (*TransactionResultsIndex) HighestIndexedHeight ¶ added in v0.33.13
func (t *TransactionResultsIndex) HighestIndexedHeight() (uint64, error)
HighestIndexedHeight returns the highest height indexed by the execution state indexer. Expected errors: - indexer.ErrIndexNotInitialized if the `TransactionResultsIndex` has not been initialized
func (*TransactionResultsIndex) Initialize ¶ added in v0.33.13
func (t *TransactionResultsIndex) Initialize(indexReporter state_synchronization.IndexReporter) error
Initialize replaces a previously non-initialized reporter. Can be called once. No errors are expected during normal operations.
func (*TransactionResultsIndex) LowestIndexedHeight ¶ added in v0.33.13
func (t *TransactionResultsIndex) LowestIndexedHeight() (uint64, error)
LowestIndexedHeight returns the lowest height indexed by the execution state indexer. Expected errors: - indexer.ErrIndexNotInitialized if the `TransactionResultsIndex` has not been initialized
type TransactionsLocalDataProvider ¶ added in v0.33.13
type TransactionsLocalDataProvider struct {
// contains filtered or unexported fields
}
TransactionsLocalDataProvider provides functionality for retrieving transaction results and error messages from local storages
func (*TransactionsLocalDataProvider) GetTransactionResultByIndexFromStorage ¶ added in v0.33.13
func (t *TransactionsLocalDataProvider) GetTransactionResultByIndexFromStorage( ctx context.Context, block *flow.Block, index uint32, requiredEventEncodingVersion entities.EventEncodingVersion, ) (*access.TransactionResult, error)
GetTransactionResultByIndexFromStorage retrieves a transaction result by index from storage. Expected errors during normal operation:
- codes.NotFound if result cannot be provided by storage due to the absence of data.
- codes.Internal when event payload conversion failed.
- indexer.ErrIndexNotInitialized when txResultsIndex not initialized
- storage.ErrHeightNotIndexed when data is unavailable
All other errors are considered as state corruption (fatal) or internal errors in the transaction error message getter or when deriving transaction status.
func (*TransactionsLocalDataProvider) GetTransactionResultFromStorage ¶ added in v0.33.13
func (t *TransactionsLocalDataProvider) GetTransactionResultFromStorage( ctx context.Context, block *flow.Block, transactionID flow.Identifier, requiredEventEncodingVersion entities.EventEncodingVersion, ) (*access.TransactionResult, error)
GetTransactionResultFromStorage retrieves a transaction result from storage by block ID and transaction ID. Expected errors during normal operation:
- codes.NotFound when result cannot be provided by storage due to the absence of data.
- codes.Internal if event payload conversion failed.
- indexer.ErrIndexNotInitialized when txResultsIndex not initialized
- storage.ErrHeightNotIndexed when data is unavailable
All other errors are considered as state corruption (fatal) or internal errors in the transaction error message getter or when deriving transaction status.
func (*TransactionsLocalDataProvider) GetTransactionResultsByBlockIDFromStorage ¶ added in v0.33.13
func (t *TransactionsLocalDataProvider) GetTransactionResultsByBlockIDFromStorage( ctx context.Context, block *flow.Block, requiredEventEncodingVersion entities.EventEncodingVersion, ) ([]*access.TransactionResult, error)
GetTransactionResultsByBlockIDFromStorage retrieves transaction results by block ID from storage Expected errors during normal operation:
- codes.NotFound if result cannot be provided by storage due to the absence of data.
- codes.Internal when event payload conversion failed.
- indexer.ErrIndexNotInitialized when txResultsIndex not initialized
- storage.ErrHeightNotIndexed when data is unavailable
All other errors are considered as state corruption (fatal) or internal errors in the transaction error message getter or when deriving transaction status.
Source Files ¶
- backend.go
- backend_accounts.go
- backend_block_details.go
- backend_block_headers.go
- backend_events.go
- backend_execution_results.go
- backend_network.go
- backend_scripts.go
- backend_transactions.go
- config.go
- errors.go
- events_index.go
- node_communicator.go
- node_selector.go
- retry.go
- script_comparer.go
- script_executor.go
- transaction_results_indexer.go
- transactions_local_data_provider.go