74e1e0cc6a6dc4a6c938600687a8025161317a4b
The counterpart to the importer, and the thing that stops it being a one-way door. Without it an extension backup is readable only by polkadot-js-format tooling, so a user who brought a wallet in could not take it back out. The assumption that blocked this — that we cannot write the CLI format because we do not store a mnemonic — turns out to be false. The format has a null-mnemonic shape and the CLI writes one itself for every raw-seed wallet; crystal_alice, which `quantus developer create-test-wallets` produces, has exactly that alongside `derivation_path: "m/"`. Verified against quantus-cli 2.2.2 rather than inferred. Exports of both schemes were written into ~/.quantus/wallets and the CLI listed them with the correct address, scheme and human checkphrase, showed them under `wallet view`, and answered `export --format mnemonic` with "Mnemonic phrase is not available for this wallet" — which is a correct statement about the file, and only reachable by deriving the Argon2 key, opening the AES-GCM box and parsing the payload. Those probes were removed; the committed test round-trips through our own importer, since CI has no CLI. What a null-mnemonic export costs the user is exactly one thing, and it is not spending: the CLI cannot re-export a phrase from it or derive further accounts. That is the honest consequence of never storing a phrase we showed once, and it is the same position a raw-seed CLI wallet is already in. Argon2 parameters match the CLI's rather than being raised. They travel in the file and the CLI reads them, so in principle anything works — but "in principle" is load-bearing there, and a wallet a slightly older CLI cannot open is worse than a conservatively tuned KDF. Salt and nonce are fresh per export. metadata.exported_by marks the file, so a CLI maintainer reading a bug report can tell where it came from without inferring from shape. Refs quantus/common#8 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012uDUodEcRbBwNRi3UCmw8f
@polkadot/common
Various useful utility functions that are used across all projects in the @polkadot namespace. It provides utility functions with additional safety checks, allowing not only for consistent coding, but also reducing the general boilerplate.
overview
This repository is split up into a number of internal packages, namely utilities -
- keyring Keyring management
- util General utilities
- util-crypto Crypto and hashing utilities
development
Contributions are welcome!
To start off, this repo (along with others in the @polkadot family) uses yarn workspaces to organise the code. As such, after cloning, its dependencies should be installed via yarn, not via npm; the latter will result in broken dependencies.
To get started -
- Clone the repo locally, via
git clone https://github.com/polkadot-js/common <optional local path> - Ensure that you have a recent version of Node.js, for development purposes Node 10 is recommended.
- Ensure that you have a recent version of Yarn, for development purposes Yarn >=1.10.1 is required.
- Install the dependencies by running
yarn - Build the everything via
yarn run build - You can also launch the API Docs, via
yarn vuepress dev docs - Access the docs via http://localhost:8080
tutorials
Looking for tutorials to get started? Look at examples for guides on how to use the base utilities.
Description
Fork of polkadot-js/common. Carries the ML-DSA (Dilithium) keypair types in @polkadot/keyring and @polkadot/util-crypto: Quantus account ids are Poseidon2 hashes of 1952/2592-byte public keys, which upstream's 32-byte assumptions cannot express. Not upstreamable — see quantus/extension#1.
54 MiB
Languages
TypeScript
99.7%
JavaScript
0.2%
HTML
0.1%