Skip to content

chain/test13

Latest

Choose a tag to compare

@moul moul released this 15 Jun 21:45
f45cc5c

gno test13

Test13 is a consensus-breaking release for the Gno testnet line.

Summary

Test13 is centered on the interrealm semantics overhaul. Packages under /p/ and the standard library are now persistent frozen Realms, cross-realm panics from /p/ abort instead of being catchable by recover(), and the old N_Readonly provenance taint has been removed in favor of PkgID ownership checks at pointer dereference boundaries.

The release also brings hardfork v3 support, GovDAO-driven chain halt handling, coordinated halt_height upgrades, validator-set limits, session accounts, improved genesis/replay tooling, calibrated gas and storage changes, safer markdown handling, gnoweb search and UX improvements, gnokey behavior updates, and broad VM/RPC/web/security hardening.

Breaking Changes

Interrealm Phase 3

Related PRs: #5669, #5747, #5758, #5706

Packages under /p/ and the standard library now behave as persistent frozen Realms.

Impact:

  • /p/ package state and stdlib state semantics are no longer test12-compatible.
  • Cross-realm panics from /p/ are aborts and cannot be caught with recover().
  • Code that intentionally needs to resume after a cross-realm abort must use the new revive() behavior.
  • Tests expecting recoverable panics should move to abort-aware assertions.

Migration guidance:

  • Replace recover()-based expectations for cross-realm package calls with abort checks.
  • Use revive() only where the code is explicitly designed to resume after an abort.
  • Audit realm/package boundaries where panics were used as control flow.

Realm Capability Auth

Related PRs: #5669, #5658

realm.Origin() is removed. PreviousRealm-based auth inside non-crossing helpers was not a reliable immediate-caller check and should not be used as an authorization boundary.

Migration guidance:

  • Use runtime.OriginCaller() when the origin address is needed.
  • Pass an explicit cur realm capability into helpers that need caller authorization.
  • Gate capability-sensitive operations with rlm.IsCurrent() or the newer realm classification helpers such as IsUserCall(), IsUserRun(), IsCode(), and IsEphemeral().

Readonly Provenance Taint Removed

Related PR: #5747

The old sticky N_Readonly provenance taint was removed. Direct cross-realm writes remain blocked by PkgID ownership checks, but provenance-only laundering protections are no longer provided by the VM.

Impact:

  • Some false-positive readonly panics are gone, especially around freshly allocated /p/-declared values used across realms.
  • Realm authors must enforce laundering-sensitive invariants explicitly.

Migration guidance:

  • Review any code that relied on cannot directly modify readonly tainted object as a security boundary.
  • Move those assumptions into explicit realm/package validation logic.

Persisted Type Layout

Related PR: #5544

TypeValue persistence now stores compact references to canonical declared types instead of repeatedly inlining type definitions.

Impact:

  • Persisted state layout changes.
  • This is not state-compatible with test12.
  • A fresh chain/genesis path is required.

Runtime Testing APIs

Related PR: #5321

Runtime GC/MemStats APIs moved to testing stdlibs and are no longer available to on-chain realm/package code.

Migration guidance:

  • Remove any on-chain dependency on runtime GC/MemStats.
  • Keep allocation and memory checks in filetests/testing-only code.

Validator And Operator Notes

Before upgrading or replaying test13, operators should review:

  • hardfork v3 flow: #5511
  • halt_height behavior and coordinated halt procedure: #5334, #5368
  • validator-set update and limit behavior: #5485, #4834
  • test13 deployment and genesis/replay tooling: #5653, #5693, #5696, #5702
  • GovDAO scripts and deployment wrappers: #5426, #5658
  • session-account behavior if using delegated signing keys: #5307, #5614

The release includes the test13 deployment branch work and should be treated as the immutable test13 cut.

Major Highlights

Chain, Governance, And Operations

  • Hardfork mechanism v3: #5511
  • GovDAO-based chain halt support: #5368
  • Coordinated halt_height upgrade handling: #5334
  • Validator-set updates through VM params keeper: #5485
  • Validator-set change limits: #4834
  • Test13 deployment, genesis, fork, and replay tooling: #5653, #5693, #5696, #5702
  • Validator scenario test harness and CI coverage: #5454
  • Binary releases for chain/* tags: #5420

VM And Language Semantics

  • Interrealm Phase 3 semantics: #5669
  • Removal of N_Readonly provenance taint: #5747
  • Nil-realm cross-realm write hardening: #5758
  • Type-driven PkgID stamping for allocations and realm sealing: #5706
  • Canonical type persistence at TypeValue positions: #5544
  • Exception recovery hardening: #5439
  • Nil function and nil interface method panic fixes: #5711, #5715
  • Type and runtime conformance fixes across the VM: see the full compare linked at the top.

Gas, Storage, And Performance

  • Gas and storage model recalibration from benchmarks: #5289, #5548
  • Storage and gas exact-value tests restored: #5560
  • Smaller persisted state through type deduplication: #5544
  • B+ tree work and board storage improvements: #5475, #5568, #5346

Security And Hardening

  • Path traversal protections in package download and MemPackage writing: #5219
  • Safer markdown sanitization and gno-foreign sandboxing: #5714, #5743, #5744, #5759
  • VM panic and log rendering bounds to reduce unmetered long-running transactions: #5643
  • Preprocess allocator/cap hardening: #5642
  • Consensus duplicate/conflicting vote handling improvements: #5216, #5319, #5348
  • Faucet anti-abuse and IP parsing improvements: #5352
  • CodeQL and workflow hardening: #5452, #5573

Developer Experience

  • gnokey defaults to -broadcast=true: #4965
  • Session account support in auth and gnokey flows: #5307, #5614
  • Better gnokey errors and simulation options: #5325, #5112
  • Gnoweb source/action buttons and UX polish: #5032, #5612, #5761
  • Documentation refreshes for install, getting started, editor setup, network state, and CLI usage: #5552, #5592, #5553, #5470, #5509

Packages And Examples

  • Boards2 storage, permission, rendering, markdown, and interaction improvements: #5037, #5346, #5349, #5397, #5398, #5434, #5759
  • New and updated packages: #5430, #5424, #5673
  • Quarantine of non-test13 example packages: #5726
  • IBC crypto stdlibs including bn254, cometbls, keccak256, merkle, and modexp support: #5725
  • GRC721 event improvements: #5745

Follow-Up

The stale branch chain/test-13 is not the release branch and still points to an older commit. The release tag and active release branch are chain/test13 at f45cc5c88.