Skip to content

feat: Starknet family support (starknet, starknet-sepolia)#293

Merged
artemrootman merged 1 commit into
mainfrom
arootman/starknet-support-main
Jul 21, 2026
Merged

feat: Starknet family support (starknet, starknet-sepolia)#293
artemrootman merged 1 commit into
mainfrom
arootman/starknet-support-main

Conversation

@artemrootman

Copy link
Copy Markdown
Contributor

Re-lands #285 onto main: the original PR was stacked on the ripple branch (#284) and got squashed into it by mistake. This is the same approved starknet diff, cherry-picked onto main with the ripple-only context stripped.

  • juno-backed starknet & starknet-sepolia support: chain specific object, syncing validator (gated by validate-syncing), chain validator (fatal on empty chain id), labels, constant lower bound (dshackle parity)
  • finalized head via the l1_accepted tag (RPC spec >= 0.9), polled by the block processor
  • method spec starknet.json, docs, tests

* docs: starknet family support design spec

* docs: mark starknet design approved

* feat(starknet): full family support

Fixes the half-registered state where a starknet upstream died with
"no method spec with name ''" - the BlockchainType existed but nothing else.

- starknet_specific: poll-based latest head via getBlockWithTxHashes
  (dshackle parity), poll-only (spec-v0.8 WS is a follow-up).
- starknet_validations: real chain-id validation via starknet_chainId
  (dshackle hardcodes the response and validates nothing) and syncing
  health handling all three result forms (false/true/sync object, hex or
  numeric block fields, lag threshold).
- starknet_labels: two-probe client identity (pathfinder_version ->
  juno_version fallback) as a direct LabelsDetector implementation.
- starknet_bounds: verified-archive bound - probes block 1 and emits
  STATE/BLOCK=1 only on success (dshackle hardcodes 1 blindly); pruned
  nodes fall back to UnknownBound with a logged follow-up.
- starknet method spec: the 25-method dshackle-parity surface, not-null
  dispatch on block/tx reads and the three add*Transaction submits - NOT
  broadcast: starknet returns DUPLICATE_TX=59 on identical resubmission,
  fan-out would manufacture errors (the very reason dshackle's broadcast
  is broken there).
- registry: getMethodSpecName starknet case + factory case.

* docs: record live validation results for starknet family

* docs: starknet family docs (README, upstream-config, method-specs) + self-contained spec wording

* docs: add starknet rows to the validators table

* review: starknet - l1_accepted finality, constant lower bound, no ws caps

- GetFinalizedBlock now polls the l1_accepted tag (RPC spec >= 0.9): latest is
  only ACCEPTED_ON_L2, L1 acceptance lags it by hours (verified on juno
  v0.16.4: latest=12262080 vs l1_accepted=12259300 on sepolia)
- block processor is wired to poll the finalized head (safe disabled)
- CapDetectors returns nil: no ws transport in v1 scope
- lower bound simplified to dshackle parity: constant 1, juno/pathfinder keep
  full block history so there is nothing to calculate
- empty chain id is now FatalSettingError
- tests for StarknetChainSpecificObject

* review: starknet - rename health validator to syncing validator, gate by ValidateSyncing
@artemrootman
artemrootman merged commit 24682b1 into main Jul 21, 2026
5 checks passed
@artemrootman
artemrootman deleted the arootman/starknet-support-main branch July 21, 2026 13:31
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