Skip to content

Verify sdk 23→27 storage decode compatibility before mainnet protocol-27 upgrade #91

Description

@0xdevcollins

Severity: HIGH · Contract · boundless-events + boundless-profile · blocks mainnet protocol-27 upgrade

Context

The network (mainnet + testnet) is on Protocol 27. PR #87 bumps soroban-sdk 23.5.2 → 27.0.0 (Rust 1.93, stellar-cli 27.0.0) so the contract is built against the current protocol. That PR is safe to merge to testnet, but a mainnet upgrade to the sdk-27 wasm carries a decode-compatibility risk that must be verified first.

Problem

Mainnet is live at 1.1.0, compiled with soroban-sdk 23.x, and holds real state (EventRecord, Winner, Submission, contributor rows, etc.). If we apply_upgrade to an sdk-27 wasm, every persisted row must still decode through the new SDK. A change in how any persisted type serializes across the SDK boundary would trap on read (Error(Object, UnexpectedSize)) — the same failure class that sank #83, but across an SDK version rather than a struct change.

The host test suite starts from empty state, so it does not exercise cross-version decode. Green tests are not evidence here.

Acceptance

  • A test (or testnet exercise) that writes rows in the sdk-23 layout and reads them back through sdk-27 code for every persisted type: EventRecord, Winner, Submission, contributor amount/index, cancellation state, the 1.3.0 prize keys, and instance/config keys.
  • OR: deploy sdk-23 (1.1.0-equivalent), seed representative rows on testnet, apply_upgrade to the sdk-27 wasm via the H6 timelocked path, and confirm every read path (get_event, get_winners, claim_*, start_cancel scans) works post-upgrade.
  • Documented result in the mainnet-deploy runbook before the mainnet propose_upgrade.

Notes

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions