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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions