Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
0ece700
[Access] Add scheduled transactions extended index and endpoints
peterargue Feb 26, 2026
78ca0de
fix bootstrap order
peterargue Feb 26, 2026
4224be4
allow optionals in script response, but require the value is set
peterargue Feb 26, 2026
b59bbf8
fix script result parsing
peterargue Feb 26, 2026
ececd6e
fix schedule tx naming in script response
peterargue Feb 26, 2026
a8e04d5
add metrics
peterargue Feb 26, 2026
a6157db
add transfer metrics
peterargue Feb 26, 2026
c86eb55
Merge branch 'peter/account-transfers' into peter/schedule-tx-endpoin…
peterargue Feb 27, 2026
bf80533
fix to align with upstream
peterargue Feb 27, 2026
8043404
Merge branch 'peter/account-transfers' into peter/schedule-tx-endpoin…
peterargue Feb 27, 2026
a0e9294
move scheduled under accounts in rest api
peterargue Feb 27, 2026
0928dd0
Merge branch 'peter/account-transfers' into peter/schedule-tx-endpoin…
peterargue Feb 27, 2026
4bd36f4
Merge branch 'peter/account-transfers' into peter/schedule-tx-endpoin…
peterargue Feb 27, 2026
8ffa34d
add rangeKeys methods
peterargue Feb 27, 2026
dfaa9f0
Merge branch 'peter/account-transfers' into peter/schedule-tx-endpoin…
peterargue Feb 27, 2026
a8687d2
fix error handling in rest models
peterargue Feb 28, 2026
b2e7811
Merge branch 'master' into peter/schedule-tx-endpoints-v2
peterargue Mar 3, 2026
a4f3cbb
generate mocks
peterargue Mar 3, 2026
2b7e707
apply feedback from review
peterargue Mar 3, 2026
999525b
remove duplicate error mapping
peterargue Mar 3, 2026
85cf6c9
add created_at and completed_at timestamps to response
peterargue Mar 4, 2026
d31b999
Merge branch 'master' into peter/schedule-tx-endpoints-v2
peterargue Mar 9, 2026
ba2c847
fixes from review
peterargue Mar 10, 2026
d12cf3f
add method to get a single scheduled tx body
peterargue Mar 10, 2026
689c002
fix unittests
peterargue Mar 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions access/backends/extended/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,45 @@ type API interface {
expandOptions AccountTransferExpandOptions,
encodingVersion entities.EventEncodingVersion,
) (*accessmodel.NonFungibleTokenTransfersPage, error)

// GetScheduledTransaction returns a single scheduled transaction by its scheduler-assigned ID.
//
// Expected error returns during normal operations:
// - [codes.NotFound]: if no transaction with the given ID exists
// - [codes.FailedPrecondition]: if the index has not been initialized
GetScheduledTransaction(
ctx context.Context,
id uint64,
expandOptions ScheduledTransactionExpandOptions,
encodingVersion entities.EventEncodingVersion,
) (*accessmodel.ScheduledTransaction, error)

// GetScheduledTransactions returns a paginated list of scheduled transactions.
//
// Expected error returns during normal operations:
// - [codes.FailedPrecondition]: if the index has not been initialized
// - [codes.InvalidArgument]: if the query parameters are invalid
GetScheduledTransactions(
ctx context.Context,
limit uint32,
cursor *accessmodel.ScheduledTransactionCursor,
filter ScheduledTransactionFilter,
expandOptions ScheduledTransactionExpandOptions,
encodingVersion entities.EventEncodingVersion,
) (*accessmodel.ScheduledTransactionsPage, error)

// GetScheduledTransactionsByAddress returns a paginated list of scheduled transactions for the given address.
//
// Expected error returns during normal operations:
// - [codes.FailedPrecondition]: if the index has not been initialized
// - [codes.InvalidArgument]: if the query parameters are invalid
GetScheduledTransactionsByAddress(
ctx context.Context,
address flow.Address,
limit uint32,
cursor *accessmodel.ScheduledTransactionCursor,
filter ScheduledTransactionFilter,
expandOptions ScheduledTransactionExpandOptions,
encodingVersion entities.EventEncodingVersion,
) (*accessmodel.ScheduledTransactionsPage, error)
}
15 changes: 10 additions & 5 deletions access/backends/extended/backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
txstatus "github.com/onflow/flow-go/engine/access/rpc/backend/transactions/status"
"github.com/onflow/flow-go/model/access/systemcollection"
"github.com/onflow/flow-go/model/flow"
"github.com/onflow/flow-go/module/execution"
"github.com/onflow/flow-go/module/irrecoverable"
"github.com/onflow/flow-go/state/protocol"
"github.com/onflow/flow-go/storage"
Expand All @@ -38,6 +39,7 @@ func DefaultConfig() Config {
type Backend struct {
*AccountTransactionsBackend
*AccountTransfersBackend
*ScheduledTransactionsBackend

log zerolog.Logger
}
Expand All @@ -61,7 +63,9 @@ func New(
collections storage.CollectionsReader,
transactions storage.TransactionsReader,
scheduledTransactions storage.ScheduledTransactionsReader,
scheduledTxIndex storage.ScheduledTransactionsIndexReader,
txStatusDeriver *txstatus.TxStatusDeriver,
scriptExecutor execution.ScriptExecutor,
) (*Backend, error) {
log = log.With().Str("component", "extended_backend").Logger()

Expand All @@ -85,6 +89,7 @@ func New(
base := &backendBase{
config: config,
headers: headers,
blocks: blocks,
collections: collections,
transactions: transactions,
scheduledTransactions: scheduledTransactions,
Expand All @@ -94,9 +99,10 @@ func New(

chain := chainID.Chain()
return &Backend{
log: log,
AccountTransactionsBackend: NewAccountTransactionsBackend(log, base, store, chain),
AccountTransfersBackend: NewAccountTransfersBackend(log, base, ftStore, nftStore, chain),
log: log,
AccountTransactionsBackend: NewAccountTransactionsBackend(log, base, store, chain),
AccountTransfersBackend: NewAccountTransfersBackend(log, base, ftStore, nftStore, chain),
ScheduledTransactionsBackend: NewScheduledTransactionsBackend(log, base, chainID, scheduledTxIndex, scheduledTransactions, state, scriptExecutor),
}, nil
}

Expand All @@ -112,8 +118,7 @@ func mapReadError(ctx context.Context, label string, err error) error {
case errors.Is(err, storage.ErrNotFound):
return status.Errorf(codes.NotFound, "not found: %v", err)
default:
err = fmt.Errorf("failed to get %s: %w", label, err)
irrecoverable.Throw(ctx, err)
irrecoverable.Throw(ctx, fmt.Errorf("failed to get %s: %w", label, err))
return err
}
}
1 change: 1 addition & 0 deletions access/backends/extended/backend_base.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ type backendBase struct {
config Config

headers storage.Headers
blocks storage.Blocks
collections storage.CollectionsReader
transactions storage.TransactionsReader
scheduledTransactions storage.ScheduledTransactionsReader
Expand Down
Loading
Loading