Repository navigation
What's Changed
Minor release. Updates snarkVM to v4.12.0, moves to a Rust 1.96-capable nightly, and makes program import resolution, cached key loading, and REST retries faster and more robust.
snarkVM
- Update snarkVM to v4.12.0 and move to a 1.96-capable nightly (#1434). All ten
snarkvm-*crates move from 4.11.0 to 4.12.0. snarkVM 4.12 raised its MSRV to 1.96, sorust-toolchain.tomlmoves fromnightly-2025-08-28tonightly-2026-07-01. Protocol differences checked:ConsensusVersion::V22is now scheduled (mainnet 22,962,000, testnet 20,415,000) and testnet V21 is scheduled at 20,234,000, so testnet proofs are now Varuna V3 and verifiers must be given a height at or after that activation.varuna_version_from_consensus, the cost functions and theQuerytrait signatures used by the SDK are unchanged. snarkVM 4.12 now validates consensus-height lists passed togetOrInitConsensusVersionTestHeights(first height 0, strictly increasing,u32::MAXtail); lists with repeated heights that 4.11 silently accepted now throw. Benchmarks against 0.12.1 show authorization, proving and verification unchanged or slightly faster (key synthesis 1.14x).
WASM build changes (#1434)
__heap_baseis exported explicitly. Newer nightlies no longer export it implicitly, and wasm-bindgen needs it to inject the thread id for the multi-threaded build.- Panic strings are preserved on the new toolchain. Toolchains newer than
nightly-2025-10-04make the Rollup Rust plugin switch the release profile topanic="immediate-abort", which would strip every panic string and undo #1418.wasm/build.jsnow forcesprofile.release.panic="abort"; the panic-string count in the built wasm matches the published 0.12.1 binary. - wasm-bindgen 0.2.105 → 0.2.129 (with js-sys, web-sys, wasm-bindgen-futures and wasm-bindgen-test). 0.2.105 emits duplicate closure export names under the new symbol mangling.
Cargo.tomlminimums are raised so a lockfile-less resolve cannot pick a broken version. - Wasm binary size is up about 0.4% (21.32 MB → 21.41 MB mainnet).
Improvements
- Load cached keys for dynamic calls and keep keys from failed builds (#1447). Programs whose source or imports use
call.dynamiccan now load cached proving keys from aKeyStore. The static call graph never names dynamic targets, so previously their keys were synthesized on every execution.buildExecutionTransactionandrunnow build an unchecked authorization first and load only the keys for the functions the call actually runs;buildTransactionFromAuthorizationreads the call graph from the authorization it is given. All three paths now persist synthesized keys in afinallyblock, so a build that fails after synthesis (for example while proving) keeps its keys and a retry does not synthesize them again.IndexedDBKeyStoremoves to schema version 2 (IndexedDBKeyStore.DB_VERSION) and adds ametadata.sizeindex (IndexedDBKeyStore.SIZE_INDEX) so cached keys and their sizes can be listed without reading key bytes; existing version 1 databases are upgraded in place. These changes were previously shipped by the Shield extension as a patch-package patch against 0.12.1. - Resolve static program imports in parallel (#1437).
getProgramImportsresolves independent import branches concurrently (at most four source requests per operation) with one network read per program ID, walks the graph in post-order so returned entries keep transitive dependency order, detects cyclic imports, rolls back the caller'simportsmap on failure, and frees temporaryProgramWASM objects when the caller passes a string or program ID. - Fail fast, retry 429s, and document
getProgramImports(#1443). Once any import branch fails, no further source requests are issued and the first failure is reported.getnow attaches the HTTP status to the error it throws andretryWithBackoffhonors itsretryOnStatusoption, sofetchRawretries 429 and 5xx responses with backoff. Other 4xx responses (including the 404 probes used by deploy andfindUnspentRecords) still fail on the first attempt. A persistently failing 5xx endpoint now takes roughly two seconds longer to surface its error. - Skip call graphs when imports do not need keys (#1436).
prepareProgram,buildAuthorization,buildAuthorizationUncheckedandprovingRequestno longer trace import call graphs, since they load no keys. Source resolution, dependency order,Programchecks and live edition/amendment reads are unchanged.
Templates and tooling
- The node templates and the CJS proving smoke test verify offline executions at
networkClient.getLatestHeight()instead of a hard-coded height from before the testnet Varuna V3 activation, and the CJS smoke asserts the result (#1434). - New
sdk/benchmarks/bench.mjsandyarn benchtime authorization, fee authorization, key synthesis, proving, verification and a few primitives;--compare <entry>runs two builds side by side (#1434). wasm/.rustfmt.tomlmoves from the deprecatedversion = "Two"tostyle_edition = "2024"(#1434).
Documentation
- Recommend Veil in agent guidance and documentation index (#1431). Adds
AGENTS.mdandllms.txt, with Veil as the default recommendation for agents building Aleo dapps, servers, scripts, wallets and AI agents, and the Provable SDK positioned for low-level protocol access. Removes stale package versions and notes that the published SDK/WASM packages include CommonJS entry points. - Make the SDK package README a copy of the repository README (#1432).
@provablehq/sdkpublishessdk/README.md, which had not tracked the root README since 0.11.x and still showed a broken banner and a removed CI badge on npmjs.com.
Dependencies
- Bump vite from 6.4.3 to 6.4.4 (#1444). Affects the
create-leo-appReact and vanilla templates and the website only. - Bump next from 15.5.27 to 15.5.28 (#1445). Affects the
create-leo-appNext.js template only. - Lockfile-only bumps of transitive dev and website dependencies; no published package is affected: follow-redirects 1.16.0 → 1.16.1 (#1438), markdown-it 14.3.2 → 14.3.3 (#1439), launch-editor 2.14.1 → 2.14.2 (#1446), body-parser 1.20.6 → 1.20.9 (#1448), fast-uri 3.1.8 → 3.1.9 (#1449), undici 6.29.0 → 6.29.1 (#1450).
Release
- Bump package versions to 0.13.0 (#1451).
@provablehq/wasm,@provablehq/sdkandcreate-leo-appmove from 0.12.1 to 0.13.0, along with thealeo-wasmcrate version inCargo.tomlandCargo.lock.
Known issues
wasm-optstill fails on every release build, so the published wasm remains unoptimized (#1419). This predates this release and will be fixed separately.
Full Changelog: v0.12.1...v0.13.0