Skip to content

Add Stellar data feeds changeset suite (cache + proxy) - #23213

Draft
Fletch153 wants to merge 21 commits into
developfrom
df-25475-stellar-changesets
Draft

Add Stellar data feeds changeset suite (cache + proxy)#23213
Fletch153 wants to merge 21 commits into
developfrom
df-25475-stellar-changesets

Conversation

@Fletch153

Copy link
Copy Markdown
Collaborator

Summary

  • ChangeSetV2 suite for the Stellar Data Feeds cache and proxy under deployment/data-feeds/changeset/stellar/, mirroring the Solana suite's structure (changesets + operation/ + Operations API).
  • Drives the generated DataFeedsCache/DataFeedsProxy clients from chainlink-stellar — deploy (constructor args via create-contract-v2), feed configs, feed admins, proxy cache pointer, ownership, upgrade, token recovery.

Context

Refs: DF-25475. Brings Stellar DF deploy/configure tooling to parity with EVM/Solana/Aptos: CLD changesets drive generated bindings, no hand-rolled encoders. Consumes chainlink-stellar pinned at the head of smartcontractkit/chainlink-stellar#162 (pseudo-version 681eb03502fb); re-pin to the merged version once that lands.

Changes

  • 12 changesets: deploy_cache, deploy_proxy, configure_cache, remove_feeds, feed_admin, ownership (transfer/accept/renounce for both contracts), upgrade_cache, recover_tokens, set_proxy_cache.
  • operation/operation.go — one Operations-API operation per on-chain call; deps.go/state.go/validation.go shared skeleton; testdata/ WASM fixtures.
  • deployment/go.mod: bump chainlink-stellar + chainlink-stellar/bindings to the add filepath support for create command #162 head.

Testing

  • Unit tests (changeset_test.go, state_test.go, validation_test.go) — pass.
  • TestStellarDataFeedsE2E — full deploy→configure→ownership sequence (37 contract functions, cache + proxy) against a live protocol-26 Soroban quickstart — pass, 31s (external-container path on arm64; CTF path on amd64).
  • Reads (latest_round, find_round, round_range) execute as free simulations via the bindings' explicit read-only lists.

Notes

  • Merge order: chainlink-stellar add filepath support for create command #162 must merge first; then re-pin the two go.mod entries here to the merged pseudo-version (one-line follow-up).
  • Suite placement (monorepo vs chainlink-data-feeds) follows the existing EVM/Solana/Tron suites here; if DF-24577 relocates the family, this moves with it.
  • MCMS proposals are out of scope (no Stellar MCMS deployer/invoker wiring yet — tracked under DF-25460).

🤖 Generated with Claude Code

Fletch153 added 20 commits July 23, 2026 00:48
One-page overview of the Stellar Data Feeds changeset package: layout
(changesets -> operations -> chainlink-stellar bindings/deployer), the
permissions model (CRE forwarder flows into FeedPermission.AllowedSender
via SetFeedConfigs, no standalone "set forwarder"), how to regenerate
testdata WASM + bindings together, how to run the container-backed e2e
test including the arm64 STELLAR_E2E_RPC_URL override, and what's
explicitly out of scope (durable-pipeline registration, MCMS, forwarder
deployment).
- e2e_test.go: assert require.NotNil on get_round/find_round results so
  the test actually fails if the round comes back void instead of the
  stored value.
- state.go/deps.go: replace the duplicated Addresses().Get(...) +
  error-string pattern in loadContractClientDeps with a shared
  resolveContractDeps that also returns the AddressRef for callers that
  need more than its Address.
- operation/operation.go: drop the misleading omitempty from
  OwnershipInput's NewOwner/LiveUntilLedger json tags (zero values are
  valid input, not "absent").
- deps.go: extract the chain-exists + version-parse + AddressRef-exists
  skeleton (duplicated verbatim across every changeset's
  VerifyPreconditions) into verifyContractRef; update all nine
  changeset files to call it instead of repeating the checks inline.
- e2e_test.go fundViaFriendbot: use NewRequestWithContext (noctx)
- README/testdata README: correct wasm output path to wasm32v1-none
- document cross-contract version coupling (DeployProxy/SetProxyCache
  resolve cache refs at the proxy's own Version, not a separate field)
- verifyContractRef: drop unused *semver.Version return
- unify verifyContractRef/resolveContractDeps param order to
  (qualifier, version) across all call sites
- testutil_test.go: drop unused fakeInvoker.simResults
- configure_cache.go: reject empty Permissions in VerifyPreconditions
- README: correct e2e test coverage description (35 calls, 2
  InvalidAction error paths)
- e2e_test.go: require.Contains -> require.ErrorContains
- fix stale cache.Bound struct-literal usage left by a bindings
  regeneration elsewhere in the workspace (kept e2e compiling)
- report_encoding_test.go: pin buildReportMetadata's 64-byte on_report
  header layout and buildReport's ScMap alphabetical key order
- changeset_test.go: DeployCache invalid-owner precondition-rejection
  case, plus TestDeployCacheChangeset_ExplicitOwner pinning that an
  explicit req.Owner (not the chain signer) seeds the deploy salt
@github-actions

Copy link
Copy Markdown
Contributor

✅ No conflicts with other open PRs targeting develop

@trunk-io

trunk-io Bot commented Jul 23, 2026

Copy link
Copy Markdown

Static BadgeStatic BadgeStatic BadgeStatic Badge

View Full Report ↗︎Docs

- Bump chainlink-stellar + /bindings pseudo-versions to a5c7938
  (I256 completeness, #[topic] event decoding, deployer
  resource-fee cushion, hardened generation scripts)
- Define SorobanContractDeployer + StellarDeps locally in the
  operation package; upstream no longer exports a widened
  deployer interface
- Replace removed alias types (DataId, WasmHash, WorkflowOwner,
  WorkflowName) with their literal array types
- Bound is now an integer enum: pass cache.BoundAtOrBefore
  directly
- Rebuild testdata wasms from the current contracts (old ones
  predate Bound's explicit discriminants and trap on find_round)
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