Skip to content

feat: Stellar family support (stellar, stellar-testnet)#287

Open
artemrootman wants to merge 4 commits into
arootman/ton-supportfrom
arootman/stellar-support
Open

feat: Stellar family support (stellar, stellar-testnet)#287
artemrootman wants to merge 4 commits into
arootman/ton-supportfrom
arootman/stellar-support

Conversation

@artemrootman

Copy link
Copy Markdown
Contributor

What

Adds the Stellar blockchain family (BlockchainType = "stellar") served via stellar-rpc (Soroban RPC). The first family with no dshackle surface to inherit — stellar was never actually served by dshackle (its include-list entry references a chain dshackle doesn't know); the method spec is simply the complete 12-method stellar-rpc JSON-RPC API.

Design doc: docs/superpowers/specs/2026-07-18-stellar-support-design.md.

Stacked on #286 (ton family). Depends on drpcorg/public#239 — this branch pins the registry submodule to that commit (stellar chain entries, chain-ids = network passphrases); re-pin to the merge commit once it lands.

How

The cleanest family in the stack — standard JSON-RPC 2.0, standard error codes, zero translations:

  • stellar_specific: poll head via getLatestLedger (SCP finality — ledgers final on close, no reorgs).
  • stellar_validations: chain validation by getNetwork passphrase (the registry chain-ids are the passphrases verbatim; EqualFold compare since the registry loader lowercases chain-ids globally); health via getHealth — the node polices its own >30s head staleness, so unhealthy arrives as a -32603 error (bootstrap message → Syncing, staleness → Unavailable).
  • stellar_labels: stellar-rpc + version truncated at the commit suffix (getVersionInfo).
  • stellar_bounds: retention-window bounds from getHealth.oldestLedger as BLOCK+TX — deliberately no STATE bound, stellar-rpc has no historical state at all (getLedgerEntries is live-only).
  • sendTransaction stays default-dispatch: it's async enqueue with core statuses in the result (PENDING/DUPLICATE/TRY_AGAIN_LATER/ERROR); broadcast with DUPLICATE-as-success reconciliation is a follow-up.

Testing

  • Unit tests across all new packages.
  • Live corpus against production mainnet + testnet nodes: 34 PASS / 0 FAIL / 2 SKIP — data arrays byte-exact, NOT_FOUND and error-in-result passthroughs identical, out-of-window -32600 verified shape-wise (the message embeds live window numbers). Details in the design doc.

Also bumps the public registry submodule to the stellar chain entry
(drpcorg/public#239).
The first family with no dshackle surface to inherit - stellar was never
actually served by dshackle (dead include-list entry); the method spec is
the complete 12-method stellar-rpc (soroban-rpc) JSON-RPC API.

- stellar_specific: poll head via getLatestLedger (SCP finality - ledgers
  are final on close, no reorgs).
- stellar_validations: chain validation by getNetwork passphrase (the
  registry chain-ids ARE the network passphrases; compare is EqualFold
  because the registry loader lowercases chain-ids globally) and getHealth
  health mapping - the node polices its own >30s head staleness, data-store
  bootstrap maps to Syncing.
- stellar_labels: stellar-rpc + version truncated at the commit suffix.
- stellar_bounds: retention-window bounds from getHealth.oldestLedger as
  BLOCK+TX (no STATE - stellar-rpc has no historical state at all).
- registry: Stellar BlockchainType + factory case + method-spec name;
  chains.yaml entries come from the drpcorg/public submodule bump
  (drpcorg/public#239).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant