rob thijssen 6358367b61
All checks were successful
deploy / build (push) Successful in 2m19s
deploy / deploy-web (push) Successful in 8s
feat: offer every Quantus endpoint, and drop the chains that are not post-quantum
**Every known endpoint per chain.** Each Quantus network listed only one RPC, so
the CONNECTION panel offered a single choice and a node going down took the
console with it. All of these were probed and answer `system_chain` today:

  Quantus     QTC  wss://rpc1-mainnet.quantus.com   wss://rpc2-mainnet.quantus.com
  Heisenberg  HEI  wss://a1-heisenberg.quantus.cat  wss://a2-heisenberg.quantus.cat
  Planck      PLK  wss://a1-planck.quantus.cat      wss://a2-planck.quantus.cat

rpc3/rpc4, a3, a4 and the b* names do not resolve, so they are not listed.
Planck's PLK symbol is from the node rather than assumed — it was a guess in the
first version of this file.

**Polkadot, Kusama, Paseo and Westend are gone**, with their parachains. Every
one signs with sr25519, ed25519 or ecdsa — discrete-log schemes Shor's algorithm
breaks together — so none has a quantum-safe account type to offer, and this
console could not sign for them anyway. Offering them made it look like a
general-purpose Substrate tool that happens to include Quantus, which is the
wrong way round.

I had kept them deliberately as a control, on the argument that a signature
working on both proves the signers-common patch widened a check rather than
broke one. That argument does not need them in the UI: the header codec's
Substrate layout still has a test against a real Polkadot header, and Localhost
and Custom can still point anywhere, so the round-trip disambiguation has to
keep working regardless.

Verified in a browser against the real chains, not by inspection: the switcher
lists Quantus, Heisenberg, Planck, Localhost and nothing else; selecting Quantus
offers rpc1 and rpc2, Heisenberg offers a1 and a2; and the explorer shows live
mainnet data — Finalized 53,999, Best 54,099.

Refs #3

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012uDUodEcRbBwNRi3UCmw8f
2026-09-16 09:40:32 +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%