Upstream shows none: polkadot-js's extension is a signer, and a balance is the dapp's business. That reasoning does not survive contact with this wallet. A Quantus account id is a Poseidon2 hash of the public key, not the public key, so somebody cannot paste an address into a block explorer they already trust and satisfy themselves it is the account they made — the extension is the only thing that knows. It is also the only way the account list can tell the truth: without it, an account nobody has funded and an account holding a thousand QTC look alike. `Balances` in the background holds one connection and reads `System::Account` through @quantus/codec's storage addressing, then watches it with `state_subscribeStorage`. Only changed keys arrive, so updates merge rather than replace — a block that moves one account must not blank the rest of the list. `System::Account` is a **Default** entry, so a node returning nothing means a zero balance, not a failure; conflating those would show an error for every account at the moment it is created. Verified against Heisenberg: four accounts read correctly including one nobody has ever funded (0, not an error), and a live transfer moved the recipient by exactly 1000000000 through the subscription while the other three stayed put. The endpoint is a setting, with the known Quantus endpoints offered and a free text field beside them. Asking a node for balances tells that node which accounts belong to one person; anyone who doubts a default should point this at their own node, and "off" is in the list, after which nothing connects at all. Nothing connects until the popup asks, and the connection closes with the last subscriber — a signer holding a socket open to somebody's node for the life of the browser would report far more than the feature needs. Kept under its own localStorage key rather than @polkadot/ui-settings' `apiUrl`: that field means the endpoint polkadot-js *apps* talks to and ships a default of `ws://127.0.0.1:9944/`, so reusing it would have pointed the extension at a local node nobody is running and shown no balances at all, with nothing on screen to say why. Formatting is string arithmetic throughout. At 12 decimal places `2^53` smallest units is about 9 007 tokens, so any balance above that loses digits to a Number — quietly, on the one screen whose whole job is saying how much money somebody has. The fraction truncates rather than rounds, so a displayed amount is never more than the account holds. Closes #12 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012uDUodEcRbBwNRi3UCmw8f
@polkadot/extension-base
Functions, classes and other utilities used in @polkadot/extension. These include:
- background script handlers,
- message passing,
- scripts injected inside pages.
They are primarily meant to be used in @polkadot/extension, and can be broken without any notice to cater for @polkadot/extension's needs.
They are exported here if you wish to use part of them in the development of your
own extension. Don't forget to add process.env.EXTENSION_PREFIX to separate
ports and stores from the current extension's ones.