paritytech / paritytech/host-rust-core
Released builds still derive the old statement-slot proof context, so products can't get a StatementStore allowance
@filvecchiato is already working on this.
Since Sep 14, 2026.
- Dominant language
- Swift
- Stars
- 10
- Forks
- 3
- Avg merge
- 1d 10h
- Merged PRs (30d)
- 148
Description
Every host build that has actually been released still derives the statement-slot proof context the old way, so a product can't get a StatementStore allowance and therefore can't submit any statement. The fix is already merged as #587, it just hasn't shipped anywhere yet.
This is reproducible on Polkadot Desktop and on iOS Nightly and Safetynet 0.10.0.
How I isolated it
On the same phone, same account, a few minutes apart:
- Debug Settings, "TrUAPI Runtime" on (the current default for testnet builds): the allowance is refused and nothing can be submitted.
- Debug Settings, "TrUAPI Runtime" off, so products run on the legacy native bridge: everything works normally.
Nothing else changed between the two runs, so the failure is specific to the TrUAPI Rust core path rather than to the product, the account or the chain.
What I think is happening
#587 "adopt current People proof contexts" changed how the statement-slot proof context is derived, and the before and after aren't just different bytes, they are different kinds of value:
released:
derive_slot_context(period, seq)
returns the literal "SSS_SLOT:" + u32be(period) + u32be(seq) + 0x20 fill
current main:
derive_slot_context(network_suffix, period, seq)
returns blake2_256("product/peopl." + network_suffix + "/" + suffix)
The commit message on #587 says proofs must carry the live network suffix or the People runtime rejects them as BadProof, which matches the behaviour exactly.
Which releases are affected
As far as I can tell, all of them:
- Desktop consumes
@parity/truapi-host0.10.1 - iOS pins
host-rust-core0.12.0 via SPM - the newest SPM tag that exists at all is 0.13.1
I opened the trees at both 0.12.0 and 0.13.1 rather than going by tag dates, and both still carry the old two-argument derive_slot_context. So there is currently no published artifact on either channel that works.
It also explains why the two platforms started failing at different points from a single cause. Desktop always runs products through the Rust core, so it broke as soon as the People runtime began requiring the new context. iOS kept working longer because products ran on the native bridge until the runtime default was switched to TrUAPI for Nightly and Safetynet.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.