rob thijssen 2c8cefab07
All checks were successful
deploy / build (push) Successful in 5m11s
deploy / deploy-web (push) Successful in 6s
fix: remove the fork-with options, and name the workflow step for what it does
**Fork with Chopsticks / Forklift is gone.** Neither can fork a chain in this
list. Chopsticks is built on `@polkadot/types`, which cannot decode a Quantus
block at all — it caps fixed arrays at 2048 bytes where ML-DSA signatures are
5261 and 7219, reads the extrinsic preamble byte as a version, and knows nothing
of this chain's header layout. Forklift resolves its own unpatched copy of
`@polkadot-api/substrate-bindings`, so it hits the very header bug this console
patches around.

So the two buttons offered things that could only fail, and fail without saying
why. Removed rather than disabled: a greyed-out control still asks the reader to
work out why. `forkMethod` stays in SelectedChain because the hash params and
chain.state still read it; nothing in the UI can now set it to anything but
"none", so the two light-client guards that reset it go with it.

**The workflow step called "the patch is applied"** — an assertion sitting in a
list of imperatives (install, build, ship the bundle), reading like a claim CI
was making rather than a thing it was doing. Now "verify the signers-common
patch".

Verified in a browser: the switcher shows Quantus, Heisenberg, Planck and
Localhost with both endpoints per chain and no FORK WITH row, and the explorer
still runs — Finalized 54,153, Best 54,253.

Refs #3

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012uDUodEcRbBwNRi3UCmw8f
2026-09-16 10:16:48 +03:00
2026-08-24 12:50:13 +02:00
2024-10-29 12:50:59 +01:00
WiP
2024-11-06 14:09:52 +01:00
2026-08-24 12:50:13 +02:00
2024-11-11 12:51:08 +07:00
2026-04-08 09:48:38 +02:00
2024-10-22 14:29:38 +02:00
2024-11-09 23:58:58 +07:00
2026-08-24 12:50:13 +02:00

qapi console

A fork of the papi console, pointed at the Quantus chains and patched to accept their post-quantum signature type.

Deployed at https://qapi.blackbeard.observer.

Why this fork exists

The console is built on polkadot-api, which shares no code with the polkadot-js stack the Quantus browser extension forks (quantus/extension, quantus/common, quantus/ui, quantus/wasm). That makes it an independent implementation of the same wire format — and the only way to find out whether our stack is right about Quantus or merely self-consistent.

It already is: for the same call, nonce and signature, createV4Tx here produces bytes identical to quantus/extension's tier-1 harness.

The one patch

getSignerType in @polkadot-api/signers-common reads the extrinsic's Address and Signature types out of the metadata — the right thing, and better than polkadot-js, which hardcodes ExtrinsicSignature: 'MultiSignature' in a type definition file. It then threw that answer away and required the enum to carry Ecdsa, Ed25519 and Sr25519.

Quantus's DilithiumSignatureScheme carries Dilithium87 and Dilithium65, so every signing attempt raised Unkown signer before reaching code that would have worked — createV4Tx is entirely length-agnostic, and a 7 219-byte ML-DSA-87 signature drops straight in.

patches/@polkadot-api__signers-common.patch drops the names and keeps the structural check. See quantus/papi-console#1.

Develop

pnpm install
pnpm dev

Deploy

Pushes to main deploy to oolon via .gitea/workflows/deploy.yaml. One-time host provisioning — DNS, certificate, nginx vhost, webroot — is script/infra-setup.sh, run by an operator:

./script/infra-setup.sh --pubkey ~/.ssh/id_gitea_ci.pub

Conventions: architecture/deployment-gitea-actions.md, reverse-proxies.md, external-tls.md, public-dns.md.


Upstream's own README, and the licence, are unchanged: this is a fork, not a rewrite.

Description
Fork of polkadot-api/papi-console (AGPL-3.0). A dev console for signing real Quantus extrinsics from the browser extension. Built on polkadot-api, which reads the extrinsic's Address and Signature types from metadata and assembles signed extrinsics length-agnostically — so it needs one patch, not a fork chain, and gives an independent check on the polkadot-js side.
https://qapi.blackbeard.observer
Readme AGPL-3.0 3.5 MiB
Languages
TypeScript 96.4%
Shell 2.4%
CSS 0.9%
JavaScript 0.2%