Three things the tier-1 case matrix needed (quantus/extension#7). **Storage keys and values (#4).** `storage_target` resolves a pallet and item to `twox128(prefix) ‖ twox128(item)` plus each map key hashed by the hasher the entry declares, and reports the value type and the entry's default. `decode_storage_value` reads the result. Nothing here knows that `System::Account` is a `Blake2_128Concat` map over an `AccountId32`; the hashers, both types and the default all come out of the metadata. The `Default` versus `Optional` distinction is carried deliberately. A `Default` entry that the node returns nothing for means the declared default — an account nobody has funded reads as a zero balance — where an `Optional` one means nothing. A wallet that conflated them would report a failure for an account that simply has no money in it. **A call nests inside a call.** A multi-field variant with named fields only accepted a positional array, so `Utility.batch_all` — whose `Vec<RuntimeCall>` holds calls spelled exactly like top-level ones — could not be encoded at all. It now takes the same object form at any depth. **Every integer renders as a decimal string**, whatever its width, and that is now stated rather than incidental. A u128 balance does not survive a JSON number (12 decimal places puts ordinary amounts past 2^53) and `scale_value` widens every unsigned integer to u128, so the width is not available to switch on. Emitting a number when it happens to fit and a string when it does not would make a consumer handle both shapes for the same field depending on the value. All of it proven against Heisenberg: an ML-DSA-65 account funded by a `batch_all` whose payload crossed the 256-byte BLAKE2b threshold, then signing and being included itself. Closes #4. Refs #3 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012uDUodEcRbBwNRi3UCmw8f
25 lines
686 B
JSON
25 lines
686 B
JSON
{
|
|
"author": "Quantus Network Developers <hello@quantus.com>",
|
|
"bugs": "https://git.lair.cafe/quantus/wasm/issues",
|
|
"description": "Metadata-driven SCALE encode/decode for the Quantus chain",
|
|
"engines": {
|
|
"node": ">=18"
|
|
},
|
|
"homepage": "https://git.lair.cafe/quantus/wasm/src/branch/main/packages/quantus-codec#readme",
|
|
"license": "Apache-2.0",
|
|
"name": "@quantus/codec",
|
|
"repository": {
|
|
"directory": "packages/quantus-codec",
|
|
"type": "git",
|
|
"url": "https://git.lair.cafe/quantus/wasm.git"
|
|
},
|
|
"sideEffects": false,
|
|
"type": "module",
|
|
"version": "0.4.0",
|
|
"main": "index.js",
|
|
"dependencies": {
|
|
"fflate": "^0.8.2",
|
|
"tslib": "^2.7.0"
|
|
}
|
|
}
|