Skip to content

Protocol 28 Support - #213

Merged
Shaptic merged 4 commits into
mainfrom
protocol-next
Aug 4, 2026
Merged

Protocol 28 Support#213
Shaptic merged 4 commits into
mainfrom
protocol-next

Conversation

@Shaptic

@Shaptic Shaptic commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Protocol 28 GA merge for the release train (stellar/go-stellar-sdk#5967).

  • SDK pinned to the released v0.7.0; MaxSupportedProtocolVersion = 28.
  • Integration legs run [P27, P28], both on GA core 28.0.0-3486.2332980a1 (deb .jammy~buildtests, docker via stellar/unsafe-stellar-core — the swap to stellar/stellar-core is a gated release-time step) and on the post-flip rpc image stellar/stellar-rpc:28.0.0-vnext-200 (built from stellar/stellar-rpc@e6bb90bf with released env-hosts and bundled GA core), satisfying the compatible-rpc-image merge gate.
  • horizon-release.yml tag-name strip fixed (#horizon-v#v).
  • CHANGELOG has the 28.0.0 section.

Per release-train convention this merges with a merge commit (not squash).

Note: #212 was merged ahead of its CI completing (maintainer call) — this PR's full run is the authoritative signal; any fixes land here before merge.

🤖 Generated with Claude Code

sisuresh and others added 4 commits July 31, 2026 16:05
* Re-pin go-stellar-sdk to the CAP-0083 XDR regeneration and bump
MaxSupportedProtocolVersion to 28.
* Add v28 load-test fixtures
* CI: run integration tests against Protocol 28

Switch the integration matrix to protocol-version [27, 28]. P28 uses the
vnext (next-protocol-enabled) core build 27.0.1-3348.ff61f2e6d. The P28
stellar-rpc image is left as a commented placeholder until stellar-rpc#789
publishes one, so that leg stays amber rather than testing against a P27 RPC.
Repoint the cache source hash to the P28 (latest) + P27 (previous) images.

* CI: build a P28 stellar-rpc image from stellar-rpc#789 instead of failing the leg

The P28 matrix leg had no PROTOCOL_28_STELLAR_RPC_DOCKER_IMG (no published
P28-capable stellar-rpc image exists; stellar-rpc#789 is still a draft over
protocol-next and the repo only publishes images from main/release/**). The
"Pull and set Stellar RPC image" step ran `docker pull ""` -> invalid
reference format -> the P28 legs went red and fail-fast cancelled the P27
legs. Leaving the image empty was not a safe "amber": the compose default
(stellar/stellar-rpc) is a P27 RPC, so the soroban suites would have run
against the wrong RPC.

- Guard the RPC pull step so a missing prebuilt image is a no-op.
- Build a genuine P28 stellar-rpc image in-CI from stellar-rpc#789 source,
  fetched by pinned SHA via refs/pull/789/head (there is no p28-cap-0083
  branch on stellar/stellar-rpc; the head lives on a fork), plus the pinned
  P28 captive-core deb, and run all six EnableStellarRPC suites (sac,
  invokehostfunction, extend_footprint_ttl, txsub, txsub_async, transaction)
  against it on the P28 leg.
- If that build is unavailable, skip those suites loudly (tracked to
  stellar-rpc#789) rather than silently falling back to a P27 RPC.

* CI: drop P28 stellar-rpc from-source build; reuse the P27 RPC image

CAP-0083 is consensus-layer (skip ledgers); the RPC layer is unaffected,
so the P27 stellar-rpc image is functionally adequate for the P28
integration leg. Reverts the from-source-build pipeline added in a9fe4d7
in favor of the simple two-line "use previous protocol's image + TODO".

Drops:
- PROTOCOL_28_STELLAR_RPC_PR_SHA env var
- "Build P28 stellar-rpc image from stellar-rpc#789" step
- empty-IMG handling in "Pull and set Stellar RPC image"
- PR_SHA reference in the source-hash key

Restores the original "Pull and set Stellar RPC image" step. When a
real P28 stellar-rpc image is published, replace the
PROTOCOL_28_STELLAR_RPC_DOCKER_IMG value with the new tag and drop
the TODO.

* Roll integration test fixture window to {v27, v28}

The P28 integration leg reads testdata/unlimited-config-v28.xdr in
upgradeLimits() (internal/test/integration/integration.go:787); it was missed
in the P28 bump, so every P28 test going through StartHorizon setup failed with
"open testdata/unlimited-config-v28.xdr: no such file or directory". CAP-0083
adds no Soroban config settings, so the v28 ConfigUpgradeSet is byte-identical
to v27 under the P28 go-stellar-sdk pin (v26 and v27 are already byte-identical).

The protocol matrix is [27, 28], so v26 is now unreferenced; drop it to keep
testdata aligned with the matrix, matching the rolling-window precedent from
* Bump core to v27.1.0 for CI. (#198)

* SPIKE: Protocol 28 (CAP-0085)

Pin go-stellar-sdk to the unmerged fork branch carrying the regenerated
XDR for CAP-0085 (new ContractExecutable external-ref variant +
SCV_EXECUTABLE_TAG SCVal arm). Cross-links go-stellar-sdk#5965.

- go.mod: replace github.com/stellar/go-stellar-sdk => github.com/sisuresh/go
- CHANGELOG: note Protocol 28 (CAP-0085) ingestion support; MaxSupportedProtocolVersion already 28
- go.yml: add -timeout 25m to unit-test run for CI stability

* ingest: add CAP-0085 LedgerCloseMeta fixture from stellar-core#5358

Adds the create_and_invoke_external_ref_contract LedgerCloseMeta capture
(9de1ea718b77ffa2.xdr) produced by stellar-core's CAP-85 host tests
(stellar-core#5358) so TestCoreLCMIngestion exercises horizon's ingestion
of the new ContractExecutable external-ref variant and SCV_EXECUTABLE_TAG
SCVal arm. Verified the fixture decodes with the regenerated go-stellar-sdk
XDR (go-stellar-sdk#5965). index.json updated with the matching descriptor.

* ci: re-trigger integration matrix (flaky tx-submission-timeout re-run)

Empty commit to force a fresh CI run. Previous run 29947538259 failed on
flaky 'Transaction Submission Timeout' panics in TestContractTransferBetweenAccounts
and TestTrustlineRevocationEvents, with fail-fast cancelling the remaining
integration legs. No source changes.

* horizon: re-pin go-stellar-sdk to merged upstream commit

go-stellar-sdk#5965 (Protocol 28 / CAP-0085 XDR regen) merged to protocol-next
as 82df7643786e0f8e4f82f4d36e522af8c45bf101. Drop the sisuresh/go fork replace
and pin the merged commit (v0.6.1-0.20260722220414-82df7643786e). No more fork
ref, so the earlier GOPRIVATE/sumdb workaround is no longer needed.

* Revert unit-test go.yml timeout bump

Drop the -timeout 25m added on the SPIKE branch; restore the base
'go test -race -cover ./...'. The bump was an unjustified carry-over — the
unit test job runs well under Go's 10m default, so the extra ceiling bought
nothing and was out-of-scope churn on a workflow file.

---------

Co-authored-by: Dmytro Kozhevin <dmytro@stellar.org>
* Protocol 28 GA: verify-range core 28.0.0, SDK P28 pseudo-version, release workflow fix

- verify-range STELLAR_CORE_VERSION → 28.0.0-3486.2332980a1.noble (the
  integration legs' pins were already flipped on protocol-next)
- go-stellar-sdk → v0.6.1-0.20260803175255-2b16db0ecd45 (P28 GA merge);
  loadtest call sites migrated to the multi-bundle LedgersFilePaths API
  (go-stellar-sdk#5959)
- horizon-release.yml: strip 'v' (not 'horizon-v') from the tag so VERSION
  and the deprecation grep are correct — latent since the tag rename (#144)
- CHANGELOG: Unreleased → 28.0.0

Train: stellar/go-stellar-sdk#5967

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* flip: SDK v0.7.0 (released), P28 CI image via unsafe-stellar-core

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci: run the P27 leg on the updated core build

Testing the previous protocol against the previous core is redundant — the
prev leg exists to verify the NEW core binary still serves protocol 27.
Both legs now run 28.0.0-3486.2332980a1 (via unsafe-stellar-core until the
GA-repo image publishes).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci: run the P27 leg on the new rpc image too

Same reasoning as the core bump: the N-1 leg verifies the updated binaries
serve the previous protocol (the real upgrade-window configuration). The
new rpc supports P27 via its -prev host. Both legs' rpc pins get replaced
by the compatible post-flip image once stellar/stellar-rpc#913 merges.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Replaces the pre-flip 28.0.0-vnext-unstable-195 pin. The new image is built
from stellar/stellar-rpc@e6bb90bf (the P28 GA merge commit): released
soroban-env-host 28.0.1/27.0.1 and bundled GA stellar-core 28.0.0-3486.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings August 4, 2026 19:37

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds Protocol 28 GA support and updates the release train configuration.

Changes:

  • Bumps SDK and maximum protocol version to 28.
  • Adds Protocol 28 fixtures and load-test API compatibility.
  • Updates integration and release workflows for P27/P28.

Reviewed changes

Copilot reviewed 9 out of 14 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
internal/test/integration/integration.go Skips RPC tests without a configured image.
internal/integration/testdata/unlimited-config-v28.xdr Adds Protocol 28 network configuration.
internal/integration/ingestion_load_test.go Adopts multi-file ledger configuration.
internal/ingest/testdata/test-lcms/InvokeHostFunctionTests/index.json Indexes the CAP-0085 fixture.
internal/ingest/main.go Enables Protocol 28 and updates load testing.
go.sum Records SDK v0.7.0 checksums.
go.mod Pins SDK v0.7.0.
CHANGELOG.md Adds the 28.0.0 release notes.
.github/workflows/release-readiness.yml Adds RPC image-pin validation.
.github/workflows/horizon.yml Runs P27/P28 integration legs.
.github/workflows/horizon-release.yml Updates release-tag version extraction.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/release-readiness.yml
Comment thread CHANGELOG.md
Comment thread .github/workflows/horizon-release.yml
@Shaptic
Shaptic enabled auto-merge August 4, 2026 21:29
@Shaptic
Shaptic merged commit 1a299b8 into main Aug 4, 2026
26 checks passed
@Shaptic
Shaptic deleted the protocol-next branch August 4, 2026 21:29
@Shaptic
Shaptic restored the protocol-next branch August 4, 2026 21:30
@Shaptic Shaptic mentioned this pull request Aug 4, 2026
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.

4 participants