@cfxlabsinc/b2b-services
    Preparing search index...
    Index
    instance: (...args: []) => SolanaAccountTransactionService = ...

    The process default: MINTFX_ENV read at each call.

    • Parameters

      • __namedParameters: {
            data: {
                blockTime: number;
                indexWithinBlock: number;
                meta: {
                    err: JsonValue;
                    fee: number;
                    innerInstructions: {
                        index: number;
                        instructions: {
                            accounts: number[];
                            data: string;
                            programIdIndex: number;
                        }[];
                    }[];
                    loadedAddresses: { readonly: string[]; writable: string[] };
                    logMessages: string[];
                    postBalances: number[];
                    postTokenBalances: TokenBalance[];
                    preBalances: number[];
                    preTokenBalances: TokenBalance[];
                };
                slot: number;
                transaction: {
                    message: {
                        accountKeys: string[];
                        addressTableLookups?: AddressTableLookup[]
                        | null;
                        header: {
                            numReadonlySignedAccounts: number;
                            numReadonlyUnsignedAccounts: number;
                            numRequiredSignatures: number;
                        };
                        instructions: {
                            accounts: number[];
                            data: string;
                            programIdIndex: number;
                        }[];
                        recentBlockhash: string;
                        transactionConfig?: TransactionConfig;
                    };
                    signatures: string[];
                };
                version?: 0
                | 1
                | "legacy";
            };
            refresh: boolean;
        }

      Returns Promise<void>

    • Decode parsed_events for one page of already-stored transactions.

      Reads data in place — the blob already holds the inner instructions, account keys and ALT-loaded addresses the decode needs — so a page costs no Helius call and can run over the whole history offline.

      afterId advances past every row examined, not every row written, so the IS NULL filter alone cannot make the walk quadratic: with no cursor every page would re-scan the rows earlier pages already filled in. Losing the cursor costs nothing but time.

      A payload this client cannot read no longer raises or vanishes. The decoder writes an UndecodableEvent carrying the discriminator and the raw bytes, which is reported here by signature and, being written, is not picked up again by IS NULL. refresh is how those rows are revisited after a client bump: it drops the IS NULL filter and re-decodes rows that already carry events. Recording the bytes is worth that trade — leaving the row NULL would keep it queued but discard the only evidence of what was missed.

      The catch remains for a genuine throw, which the decoder no longer produces for an unreadable payload; if one appears it is a bug rather than a version gap, and the page still advances past it.

      Parameters

      • __namedParameters: { afterId: number; limit: number; refresh: boolean }

      Returns Promise<{ ok: true; value: DecodedEventPage }>