gno test13
Test13 is a consensus-breaking release for the Gno testnet line.
- Release tag:
chain/test13 - Target commit:
f45cc5c88 - Previous release tag:
chain/test12 - Previous release commit:
dd2a9f6c - Full release compare:
tags/chain/test12...tags/chain/test13 - Test13 release-candidate PR: #5653
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 withrecover(). - 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
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 realmcapability into helpers that need caller authorization. - Gate capability-sensitive operations with
rlm.IsCurrent()or the newer realm classification helpers such asIsUserCall(),IsUserRun(),IsCode(), andIsEphemeral().
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 objectas 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_heightbehavior 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_heightupgrade 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_Readonlyprovenance taint: #5747 - Nil-realm cross-realm write hardening: #5758
- Type-driven PkgID stamping for allocations and realm sealing: #5706
- Canonical type persistence at
TypeValuepositions: #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
gnokeydefaults 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.