feat: add PAPI rebrand packages

- @pezkuwi/papi-utils (rebrand of @polkadot-api/utils)
- @pezkuwi/bizinikiwi-bindings (rebrand of @polkadot-api/substrate-bindings)
- @pezkuwi/metadata-builders (rebrand of @polkadot-api/metadata-builders)
- @pezkuwi/merkleize-metadata (rebrand of @polkadot-api/merkleize-metadata)

All @polkadot-api references replaced with @pezkuwi equivalents.
This commit is contained in:
Kurdistan Tech Ministry committed 2026-01-22 15:40:12 +03:00
1 parent 6e91756e5c
commit 31467f90d4
150 files changed
+22742

No files matched your search

+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Josep M Sobrepere
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+1
View File
@@ -0,0 +1 @@
# @polkadot-api/substrate-bindings
@@ -0,0 +1,45 @@
import { enhanceCodec, Bytes, _void } from 'scale-ts';
import '../utils/ss58-util.mjs';
import './scale/Binary.mjs';
import './scale/bitSequence.mjs';
import './scale/char.mjs';
import { compactNumber } from './scale/compact.mjs';
import { Hex } from './scale/Hex.mjs';
import './scale/fixed-str.mjs';
import { Variant } from './scale/Variant.mjs';
import './scale/ethAccount.mjs';
import { Struct, Vector } from './scale/shaped.mjs';
import './scale/BitSeq.mjs';
const textEncoder$1 = new TextEncoder();
const textDecoder = new TextDecoder();
const fourChars = enhanceCodec(
Bytes(4),
textEncoder$1.encode.bind(textEncoder$1),
textDecoder.decode.bind(textDecoder)
);
const diggestVal = Struct({
engine: fourChars,
payload: Hex()
});
const diggest = Variant(
{
other: Bytes(),
consensus: diggestVal,
seal: diggestVal,
preRuntime: diggestVal,
runtimeUpdated: _void
},
[0, 4, 5, 6, 8]
);
const hex32$1 = Hex(32);
const blockHeader = Struct({
parentHash: hex32$1,
number: compactNumber,
stateRoot: hex32$1,
extrinsicRoot: hex32$1,
digests: Vector(diggest)
});
export { blockHeader };
//# sourceMappingURL=blockHeader.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"blockHeader.mjs","sources":["../../../src/codecs/blockHeader.ts"],"sourcesContent":["import {\n Bytes,\n CodecType,\n Struct,\n Vector,\n _void,\n enhanceCodec,\n Hex,\n Variant,\n compactNumber,\n} from \"./scale\"\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nconst fourChars = enhanceCodec(\n Bytes(4),\n textEncoder.encode.bind(textEncoder),\n textDecoder.decode.bind(textDecoder),\n)\n\nconst diggestVal = Struct({\n engine: fourChars,\n payload: Hex(),\n})\n\nconst diggest = Variant(\n {\n other: Bytes(),\n consensus: diggestVal,\n seal: diggestVal,\n preRuntime: diggestVal,\n runtimeUpdated: _void,\n },\n [0, 4, 5, 6, 8],\n)\n\nconst hex32 = Hex(32)\nexport const blockHeader = Struct({\n parentHash: hex32,\n number: compactNumber,\n stateRoot: hex32,\n extrinsicRoot: hex32,\n digests: Vector(diggest),\n})\n\nexport type BlockHeader = CodecType<typeof blockHeader>\n"],"names":["textEncoder","hex32"],"mappings":";;;;;;;;;;;;;AAYA,MAAMA,aAAA,GAAc,IAAI,WAAA,EAAY;AACpC,MAAM,WAAA,GAAc,IAAI,WAAA,EAAY;AAEpC,MAAM,SAAA,GAAY,YAAA;AAAA,EAChB,MAAM,CAAC,CAAA;AAAA,EACPA,aAAA,CAAY,MAAA,CAAO,IAAA,CAAKA,aAAW,CAAA;AAAA,EACnC,WAAA,CAAY,MAAA,CAAO,IAAA,CAAK,WAAW;AACrC,CAAA;AAEA,MAAM,aAAa,MAAA,CAAO;AAAA,EACxB,MAAA,EAAQ,SAAA;AAAA,EACR,SAAS,GAAA;AACX,CAAC,CAAA;AAED,MAAM,OAAA,GAAU,OAAA;AAAA,EACd;AAAA,IACE,OAAO,KAAA,EAAM;AAAA,IACb,SAAA,EAAW,UAAA;AAAA,IACX,IAAA,EAAM,UAAA;AAAA,IACN,UAAA,EAAY,UAAA;AAAA,IACZ,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC;AAChB,CAAA;AAEA,MAAMC,OAAA,GAAQ,IAAI,EAAE,CAAA;AACb,MAAM,cAAc,MAAA,CAAO;AAAA,EAChC,UAAA,EAAYA,OAAA;AAAA,EACZ,MAAA,EAAQ,aAAA;AAAA,EACR,SAAA,EAAWA,OAAA;AAAA,EACX,aAAA,EAAeA,OAAA;AAAA,EACf,OAAA,EAAS,OAAO,OAAO;AACzB,CAAC;;;;"}
@@ -0,0 +1,28 @@
import { Enum, Struct, _void, Option, str, Vector, u8 } from 'scale-ts';
const itemDeprecation = Enum({
NotDeprecated: _void,
DeprecatedWithoutNote: _void,
Deprecated: Struct({
note: str,
since: Option(str)
})
});
const variantDeprecation = Vector(
Struct({
index: u8,
deprecation: Enum(
{
DeprecatedWithoutNote: _void,
Deprecated: Struct({
note: str,
since: Option(str)
})
},
[1, 2]
)
})
);
export { itemDeprecation, variantDeprecation };
//# sourceMappingURL=deprecation.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"deprecation.mjs","sources":["../../../../src/codecs/metadata/deprecation.ts"],"sourcesContent":["import { _void, Enum, Option, str, Struct, u8, Vector } from \"scale-ts\"\n\nexport const itemDeprecation = Enum({\n NotDeprecated: _void,\n DeprecatedWithoutNote: _void,\n Deprecated: Struct({\n note: str,\n since: Option(str),\n }),\n})\n\nexport const variantDeprecation = Vector(\n Struct({\n index: u8,\n deprecation: Enum(\n {\n DeprecatedWithoutNote: _void,\n Deprecated: Struct({\n note: str,\n since: Option(str),\n }),\n },\n [1, 2],\n ),\n }),\n)\n"],"names":[],"mappings":";;AAEO,MAAM,kBAAkB,IAAA,CAAK;AAAA,EAClC,aAAA,EAAe,KAAA;AAAA,EACf,qBAAA,EAAuB,KAAA;AAAA,EACvB,YAAY,MAAA,CAAO;AAAA,IACjB,IAAA,EAAM,GAAA;AAAA,IACN,KAAA,EAAO,OAAO,GAAG;AAAA,GAClB;AACH,CAAC;AAEM,MAAM,kBAAA,GAAqB,MAAA;AAAA,EAChC,MAAA,CAAO;AAAA,IACL,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,IAAA;AAAA,MACX;AAAA,QACE,qBAAA,EAAuB,KAAA;AAAA,QACvB,YAAY,MAAA,CAAO;AAAA,UACjB,IAAA,EAAM,GAAA;AAAA,UACN,KAAA,EAAO,OAAO,GAAG;AAAA,SAClB;AAAA,OACH;AAAA,MACA,CAAC,GAAG,CAAC;AAAA;AACP,GACD;AACH;;;;"}
@@ -0,0 +1,6 @@
import { Vector, str } from 'scale-ts';
const docs = Vector(str);
export { docs };
//# sourceMappingURL=docs.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"docs.mjs","sources":["../../../../src/codecs/metadata/docs.ts"],"sourcesContent":["import { Vector, str } from \"scale-ts\"\n\nexport const docs = Vector(str)\n"],"names":[],"mappings":";;AAEO,MAAM,IAAA,GAAO,OAAO,GAAG;;;;"}
@@ -0,0 +1,72 @@
import { compactNumber } from '../scale/compact.mjs';
import { Option, str, Enum, _void, Vector, Struct, u32, u8 } from 'scale-ts';
import { docs } from './docs.mjs';
const oStr = Option(str);
const primitive = Enum({
bool: _void,
char: _void,
str: _void,
u8: _void,
u16: _void,
u32: _void,
u64: _void,
u128: _void,
u256: _void,
i8: _void,
i16: _void,
i32: _void,
i64: _void,
i128: _void,
i256: _void
});
const fields = Vector(
Struct({
name: oStr,
type: compactNumber,
typeName: oStr,
docs
})
);
const arr = Struct({
len: u32,
type: compactNumber
});
const bitSequence = Struct({
bitStoreType: compactNumber,
bitOrderType: compactNumber
});
const variant = Vector(
Struct({
name: str,
fields,
index: u8,
docs
})
);
const def = Enum({
composite: fields,
variant,
sequence: compactNumber,
array: arr,
tuple: Vector(compactNumber),
primitive,
compact: compactNumber,
bitSequence
});
const param = Struct({
name: str,
type: Option(compactNumber)
});
const params = Vector(param);
const entry = Struct({
id: compactNumber,
path: docs,
params,
def,
docs
});
const lookup = Vector(entry);
export { lookup };
//# sourceMappingURL=lookup.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"lookup.mjs","sources":["../../../../src/codecs/metadata/lookup.ts"],"sourcesContent":["import { compactNumber } from \"../scale/compact\"\nimport {\n CodecType,\n Enum,\n Option,\n Struct,\n Vector,\n _void,\n str,\n u32,\n u8,\n} from \"scale-ts\"\nimport { docs } from \"./docs\"\n\nconst oStr = Option(str)\n\nconst primitive = Enum({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n})\n\nconst fields = Vector(\n Struct({\n name: oStr,\n type: compactNumber,\n typeName: oStr,\n docs,\n }),\n)\n\nconst arr = Struct({\n len: u32,\n type: compactNumber,\n})\n\nconst bitSequence = Struct({\n bitStoreType: compactNumber,\n bitOrderType: compactNumber,\n})\n\nconst variant = Vector(\n Struct({\n name: str,\n fields,\n index: u8,\n docs,\n }),\n)\n\nconst def = Enum({\n composite: fields,\n variant,\n sequence: compactNumber,\n array: arr,\n tuple: Vector(compactNumber),\n primitive,\n compact: compactNumber,\n bitSequence,\n})\n\nconst param = Struct({\n name: str,\n type: Option(compactNumber),\n})\nconst params = Vector(param)\n\nconst entry = Struct({\n id: compactNumber,\n path: docs,\n params,\n def,\n docs,\n})\n\nexport const lookup = Vector(entry)\nexport type V14Lookup = CodecType<typeof lookup>\n"],"names":[],"mappings":";;;;AAcA,MAAM,IAAA,GAAO,OAAO,GAAG,CAAA;AAEvB,MAAM,YAAY,IAAA,CAAK;AAAA,EACrB,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM,KAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,EAAA,EAAI,KAAA;AAAA,EACJ,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM,KAAA;AAAA,EACN,EAAA,EAAI,KAAA;AAAA,EACJ,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAC,CAAA;AAED,MAAM,MAAA,GAAS,MAAA;AAAA,EACb,MAAA,CAAO;AAAA,IACL,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAU,IAAA;AAAA,IACV;AAAA,GACD;AACH,CAAA;AAEA,MAAM,MAAM,MAAA,CAAO;AAAA,EACjB,GAAA,EAAK,GAAA;AAAA,EACL,IAAA,EAAM;AACR,CAAC,CAAA;AAED,MAAM,cAAc,MAAA,CAAO;AAAA,EACzB,YAAA,EAAc,aAAA;AAAA,EACd,YAAA,EAAc;AAChB,CAAC,CAAA;AAED,MAAM,OAAA,GAAU,MAAA;AAAA,EACd,MAAA,CAAO;AAAA,IACL,IAAA,EAAM,GAAA;AAAA,IACN,MAAA;AAAA,IACA,KAAA,EAAO,EAAA;AAAA,IACP;AAAA,GACD;AACH,CAAA;AAEA,MAAM,MAAM,IAAA,CAAK;AAAA,EACf,SAAA,EAAW,MAAA;AAAA,EACX,OAAA;AAAA,EACA,QAAA,EAAU,aAAA;AAAA,EACV,KAAA,EAAO,GAAA;AAAA,EACP,KAAA,EAAO,OAAO,aAAa,CAAA;AAAA,EAC3B,SAAA;AAAA,EACA,OAAA,EAAS,aAAA;AAAA,EACT;AACF,CAAC,CAAA;AAED,MAAM,QAAQ,MAAA,CAAO;AAAA,EACnB,IAAA,EAAM,GAAA;AAAA,EACN,IAAA,EAAM,OAAO,aAAa;AAC5B,CAAC,CAAA;AACD,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAE3B,MAAM,QAAQ,MAAA,CAAO;AAAA,EACnB,EAAA,EAAI,aAAA;AAAA,EACJ,IAAA,EAAM,IAAA;AAAA,EACN,MAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEM,MAAM,MAAA,GAAS,OAAO,KAAK;;;;"}
@@ -0,0 +1,59 @@
import { createCodec, Struct, Enum, u32, Bytes, Option, Tuple, compact } from 'scale-ts';
import { v14 } from './v14.mjs';
import { v15 } from './v15.mjs';
import { v16 } from './v16.mjs';
const unsupportedFn = () => {
throw new Error("Unsupported metadata version!");
};
const unsupported = createCodec(
unsupportedFn,
unsupportedFn
);
const metadata = Struct({
magicNumber: u32,
metadata: Enum({
v0: unsupported,
v1: unsupported,
v2: unsupported,
v3: unsupported,
v4: unsupported,
v5: unsupported,
v6: unsupported,
v7: unsupported,
v8: unsupported,
v9: unsupported,
v10: unsupported,
v11: unsupported,
v12: unsupported,
v13: unsupported,
v14,
v15,
v16
})
});
const opaqueBytes = Bytes();
const optionOpaque = Option(opaqueBytes);
const opaqueOpaqueBytes = Tuple(compact, opaqueBytes);
const decAnyMetadata = (input) => {
try {
return metadata.dec(input);
} catch (_) {
}
try {
return metadata.dec(optionOpaque.dec(input));
} catch (_) {
}
try {
return metadata.dec(opaqueBytes.dec(input));
} catch (_) {
}
try {
return metadata.dec(opaqueOpaqueBytes.dec(input)[1]);
} catch (_) {
}
throw null;
};
export { decAnyMetadata, metadata };
//# sourceMappingURL=metadata.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"metadata.mjs","sources":["../../../../src/codecs/metadata/metadata.ts"],"sourcesContent":["import {\n Bytes,\n type Codec,\n type CodecType,\n Enum,\n Option,\n Struct,\n Tuple,\n compact,\n createCodec,\n u32,\n} from \"scale-ts\"\nimport type { HexString } from \"../scale\"\nimport { v14 } from \"./v14\"\nimport { v15 } from \"./v15\"\nimport { v16 } from \"./v16\"\n\nconst unsupportedFn = () => {\n throw new Error(\"Unsupported metadata version!\")\n}\n\nconst unsupported = createCodec(\n unsupportedFn,\n unsupportedFn,\n) as unknown as Codec<unknown>\n\nexport const metadata = Struct({\n magicNumber: u32,\n metadata: Enum({\n v0: unsupported,\n v1: unsupported,\n v2: unsupported,\n v3: unsupported,\n v4: unsupported,\n v5: unsupported,\n v6: unsupported,\n v7: unsupported,\n v8: unsupported,\n v9: unsupported,\n v10: unsupported,\n v11: unsupported,\n v12: unsupported,\n v13: unsupported,\n v14,\n v15,\n v16,\n }),\n})\nexport type Metadata = CodecType<typeof metadata>\n\nconst opaqueBytes = Bytes()\nconst optionOpaque = Option(opaqueBytes)\nconst opaqueOpaqueBytes = Tuple(compact, opaqueBytes)\n\nexport const decAnyMetadata = (\n input: Uint8Array | HexString,\n): CodecType<typeof metadata> => {\n try {\n return metadata.dec(input)\n } catch (_) {}\n\n // comes from metadata.metadata_at_version\n try {\n return metadata.dec(optionOpaque.dec(input)!)\n } catch (_) {}\n\n // comes from state.getMetadata\n try {\n return metadata.dec(opaqueBytes.dec(input))\n } catch (_) {}\n\n // comes from metadata.metadata\n try {\n return metadata.dec(opaqueOpaqueBytes.dec(input)[1])\n } catch (_) {}\n\n throw null\n}\n"],"names":[],"mappings":";;;;;AAiBA,MAAM,gBAAgB,MAAM;AAC1B,EAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AACjD,CAAA;AAEA,MAAM,WAAA,GAAc,WAAA;AAAA,EAClB,aAAA;AAAA,EACA;AACF,CAAA;AAEO,MAAM,WAAW,MAAA,CAAO;AAAA,EAC7B,WAAA,EAAa,GAAA;AAAA,EACb,UAAU,IAAA,CAAK;AAAA,IACb,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,EAAA,EAAI,WAAA;AAAA,IACJ,GAAA,EAAK,WAAA;AAAA,IACL,GAAA,EAAK,WAAA;AAAA,IACL,GAAA,EAAK,WAAA;AAAA,IACL,GAAA,EAAK,WAAA;AAAA,IACL,GAAA;AAAA,IACA,GAAA;AAAA,IACA;AAAA,GACD;AACH,CAAC;AAGD,MAAM,cAAc,KAAA,EAAM;AAC1B,MAAM,YAAA,GAAe,OAAO,WAAW,CAAA;AACvC,MAAM,iBAAA,GAAoB,KAAA,CAAM,OAAA,EAAS,WAAW,CAAA;AAE7C,MAAM,cAAA,GAAiB,CAC5B,KAAA,KAC+B;AAC/B,EAAA,IAAI;AACF,IAAA,OAAO,QAAA,CAAS,IAAI,KAAK,CAAA;AAAA,EAC3B,SAAS,CAAA,EAAG;AAAA,EAAC;AAGb,EAAA,IAAI;AACF,IAAA,OAAO,QAAA,CAAS,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,KAAK,CAAE,CAAA;AAAA,EAC9C,SAAS,CAAA,EAAG;AAAA,EAAC;AAGb,EAAA,IAAI;AACF,IAAA,OAAO,QAAA,CAAS,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,EAC5C,SAAS,CAAA,EAAG;AAAA,EAAC;AAGb,EAAA,IAAI;AACF,IAAA,OAAO,SAAS,GAAA,CAAI,iBAAA,CAAkB,IAAI,KAAK,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,EACrD,SAAS,CAAA,EAAG;AAAA,EAAC;AAEb,EAAA,MAAM,IAAA;AACR;;;;"}
@@ -0,0 +1,110 @@
import { Enum, _void, Vector, Struct, Option, str, u8 } from 'scale-ts';
import '../../utils/ss58-util.mjs';
import '../scale/Binary.mjs';
import '../scale/bitSequence.mjs';
import '../scale/char.mjs';
import { compactNumber } from '../scale/compact.mjs';
import { Hex } from '../scale/Hex.mjs';
import '../scale/fixed-str.mjs';
import '../scale/Variant.mjs';
import '../scale/ethAccount.mjs';
import '../scale/shaped.mjs';
import '../scale/BitSeq.mjs';
import { docs } from './docs.mjs';
import { variantDeprecation, itemDeprecation } from './deprecation.mjs';
import { viewFunction } from './runtime-api.mjs';
const hashType = Enum({
Blake2128: _void,
Blake2256: _void,
Blake2128Concat: _void,
Twox128: _void,
Twox256: _void,
Twox64Concat: _void,
Identity: _void
});
const hashers$1 = Vector(hashType);
const storageMap = Struct({
hashers: hashers$1,
key: compactNumber,
value: compactNumber
});
const storageItem = {
name: str,
modifier: u8,
type: Enum({
plain: compactNumber,
map: storageMap
}),
fallback: Hex(),
docs
};
const enumRefV14 = Option(compactNumber);
const v14Pallet = {
name: str,
storage: Option(
Struct({
prefix: str,
items: Vector(Struct(storageItem))
})
),
calls: enumRefV14,
events: enumRefV14,
constants: Vector(
Struct({
name: str,
type: compactNumber,
value: Hex(),
docs
})
),
errors: enumRefV14,
index: u8
};
const v15Pallet = {
...v14Pallet,
docs
};
const enumRef = Option(
Struct({ type: compactNumber, deprecationInfo: variantDeprecation })
);
const v16Pallet = {
name: str,
storage: Option(
Struct({
prefix: str,
items: Vector(
Struct({
...storageItem,
deprecationInfo: itemDeprecation
})
)
})
),
calls: enumRef,
events: enumRef,
constants: Vector(
Struct({
name: str,
type: compactNumber,
value: Hex(),
docs,
deprecationInfo: itemDeprecation
})
),
errors: enumRef,
associatedTypes: Vector(
Struct({
name: str,
type: compactNumber,
docs
})
),
viewFns: Vector(viewFunction),
index: u8,
docs,
deprecationInfo: itemDeprecation
};
export { storageMap, v14Pallet, v15Pallet, v16Pallet };
//# sourceMappingURL=pallets.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"pallets.mjs","sources":["../../../../src/codecs/metadata/pallets.ts"],"sourcesContent":["import { Hex, compactNumber } from \"@/codecs/scale\"\nimport { Struct, Option, Vector, u8, str, Enum, _void } from \"scale-ts\"\nimport { docs } from \"./docs\"\nimport { itemDeprecation, variantDeprecation } from \"./deprecation\"\nimport { viewFunction } from \"./runtime-api\"\n\nconst hashType = Enum({\n Blake2128: _void,\n Blake2256: _void,\n Blake2128Concat: _void,\n Twox128: _void,\n Twox256: _void,\n Twox64Concat: _void,\n Identity: _void,\n})\n\nconst hashers = Vector(hashType)\n\nexport const storageMap = Struct({\n hashers,\n key: compactNumber,\n value: compactNumber,\n})\n\nconst storageItem = {\n name: str,\n modifier: u8,\n type: Enum({\n plain: compactNumber,\n map: storageMap,\n }),\n fallback: Hex(),\n docs,\n}\n\nconst enumRefV14 = Option(compactNumber)\n\nexport const v14Pallet = {\n name: str,\n storage: Option(\n Struct({\n prefix: str,\n items: Vector(Struct(storageItem)),\n }),\n ),\n calls: enumRefV14,\n events: enumRefV14,\n constants: Vector(\n Struct({\n name: str,\n type: compactNumber,\n value: Hex(),\n docs,\n }),\n ),\n errors: enumRefV14,\n index: u8,\n}\n\nexport const v15Pallet = {\n ...v14Pallet,\n docs,\n}\n\nconst enumRef = Option(\n Struct({ type: compactNumber, deprecationInfo: variantDeprecation }),\n)\n\nexport const v16Pallet = {\n name: str,\n storage: Option(\n Struct({\n prefix: str,\n items: Vector(\n Struct({\n ...storageItem,\n deprecationInfo: itemDeprecation,\n }),\n ),\n }),\n ),\n calls: enumRef,\n events: enumRef,\n constants: Vector(\n Struct({\n name: str,\n type: compactNumber,\n value: Hex(),\n docs,\n deprecationInfo: itemDeprecation,\n }),\n ),\n errors: enumRef,\n associatedTypes: Vector(\n Struct({\n name: str,\n type: compactNumber,\n docs,\n }),\n ),\n viewFns: Vector(viewFunction),\n index: u8,\n docs,\n deprecationInfo: itemDeprecation,\n}\n"],"names":["hashers"],"mappings":";;;;;;;;;;;;;;;;AAMA,MAAM,WAAW,IAAA,CAAK;AAAA,EACpB,SAAA,EAAW,KAAA;AAAA,EACX,SAAA,EAAW,KAAA;AAAA,EACX,eAAA,EAAiB,KAAA;AAAA,EACjB,OAAA,EAAS,KAAA;AAAA,EACT,OAAA,EAAS,KAAA;AAAA,EACT,YAAA,EAAc,KAAA;AAAA,EACd,QAAA,EAAU;AACZ,CAAC,CAAA;AAED,MAAMA,SAAA,GAAU,OAAO,QAAQ,CAAA;AAExB,MAAM,aAAa,MAAA,CAAO;AAAA,WAC/BA,SAAA;AAAA,EACA,GAAA,EAAK,aAAA;AAAA,EACL,KAAA,EAAO;AACT,CAAC;AAED,MAAM,WAAA,GAAc;AAAA,EAClB,IAAA,EAAM,GAAA;AAAA,EACN,QAAA,EAAU,EAAA;AAAA,EACV,MAAM,IAAA,CAAK;AAAA,IACT,KAAA,EAAO,aAAA;AAAA,IACP,GAAA,EAAK;AAAA,GACN,CAAA;AAAA,EACD,UAAU,GAAA,EAAI;AAAA,EACd;AACF,CAAA;AAEA,MAAM,UAAA,GAAa,OAAO,aAAa,CAAA;AAEhC,MAAM,SAAA,GAAY;AAAA,EACvB,IAAA,EAAM,GAAA;AAAA,EACN,OAAA,EAAS,MAAA;AAAA,IACP,MAAA,CAAO;AAAA,MACL,MAAA,EAAQ,GAAA;AAAA,MACR,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,WAAW,CAAC;AAAA,KAClC;AAAA,GACH;AAAA,EACA,KAAA,EAAO,UAAA;AAAA,EACP,MAAA,EAAQ,UAAA;AAAA,EACR,SAAA,EAAW,MAAA;AAAA,IACT,MAAA,CAAO;AAAA,MACL,IAAA,EAAM,GAAA;AAAA,MACN,IAAA,EAAM,aAAA;AAAA,MACN,OAAO,GAAA,EAAI;AAAA,MACX;AAAA,KACD;AAAA,GACH;AAAA,EACA,MAAA,EAAQ,UAAA;AAAA,EACR,KAAA,EAAO;AACT;AAEO,MAAM,SAAA,GAAY;AAAA,EACvB,GAAG,SAAA;AAAA,EACH;AACF;AAEA,MAAM,OAAA,GAAU,MAAA;AAAA,EACd,OAAO,EAAE,IAAA,EAAM,aAAA,EAAe,eAAA,EAAiB,oBAAoB;AACrE,CAAA;AAEO,MAAM,SAAA,GAAY;AAAA,EACvB,IAAA,EAAM,GAAA;AAAA,EACN,OAAA,EAAS,MAAA;AAAA,IACP,MAAA,CAAO;AAAA,MACL,MAAA,EAAQ,GAAA;AAAA,MACR,KAAA,EAAO,MAAA;AAAA,QACL,MAAA,CAAO;AAAA,UACL,GAAG,WAAA;AAAA,UACH,eAAA,EAAiB;AAAA,SAClB;AAAA;AACH,KACD;AAAA,GACH;AAAA,EACA,KAAA,EAAO,OAAA;AAAA,EACP,MAAA,EAAQ,OAAA;AAAA,EACR,SAAA,EAAW,MAAA;AAAA,IACT,MAAA,CAAO;AAAA,MACL,IAAA,EAAM,GAAA;AAAA,MACN,IAAA,EAAM,aAAA;AAAA,MACN,OAAO,GAAA,EAAI;AAAA,MACX,IAAA;AAAA,MACA,eAAA,EAAiB;AAAA,KAClB;AAAA,GACH;AAAA,EACA,MAAA,EAAQ,OAAA;AAAA,EACR,eAAA,EAAiB,MAAA;AAAA,IACf,MAAA,CAAO;AAAA,MACL,IAAA,EAAM,GAAA;AAAA,MACN,IAAA,EAAM,aAAA;AAAA,MACN;AAAA,KACD;AAAA,GACH;AAAA,EACA,OAAA,EAAS,OAAO,YAAY,CAAA;AAAA,EAC5B,KAAA,EAAO,EAAA;AAAA,EACP,IAAA;AAAA,EACA,eAAA,EAAiB;AACnB;;;;"}
@@ -0,0 +1,48 @@
import { Vector, Struct, str } from 'scale-ts';
import { docs } from './docs.mjs';
import '../../utils/ss58-util.mjs';
import '../scale/Binary.mjs';
import '../scale/bitSequence.mjs';
import '../scale/char.mjs';
import { compactNumber } from '../scale/compact.mjs';
import { Hex } from '../scale/Hex.mjs';
import '../scale/fixed-str.mjs';
import '../scale/Variant.mjs';
import '../scale/ethAccount.mjs';
import '../scale/shaped.mjs';
import '../scale/BitSeq.mjs';
import { itemDeprecation } from './deprecation.mjs';
const runtimeApiMethod = {
name: str,
inputs: Vector(
Struct({
name: str,
type: compactNumber
})
),
output: compactNumber,
docs
};
const runtimeApiV15 = Struct({
name: str,
methods: Vector(Struct(runtimeApiMethod)),
docs
});
const runtimeApi = Struct({
name: str,
methods: Vector(
Struct({ ...runtimeApiMethod, deprecationInfo: itemDeprecation })
),
docs,
version: compactNumber,
deprecationInfo: itemDeprecation
});
const viewFunction = Struct({
id: Hex(32),
...runtimeApiMethod,
deprecationInfo: itemDeprecation
});
export { runtimeApi, runtimeApiMethod, runtimeApiV15, viewFunction };
//# sourceMappingURL=runtime-api.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"runtime-api.mjs","sources":["../../../../src/codecs/metadata/runtime-api.ts"],"sourcesContent":["import { Struct, Vector, str } from \"scale-ts\"\nimport { docs } from \"./docs\"\nimport { compactNumber, Hex, compactNumber as ty } from \"../scale\"\nimport { itemDeprecation } from \"./deprecation\"\n\nexport const runtimeApiMethod = {\n name: str,\n inputs: Vector(\n Struct({\n name: str,\n type: ty,\n }),\n ),\n output: ty,\n docs,\n}\n\nexport const runtimeApiV15 = Struct({\n name: str,\n methods: Vector(Struct(runtimeApiMethod)),\n docs,\n})\n\nexport const runtimeApi = Struct({\n name: str,\n methods: Vector(\n Struct({ ...runtimeApiMethod, deprecationInfo: itemDeprecation }),\n ),\n docs,\n version: compactNumber,\n deprecationInfo: itemDeprecation,\n})\n\nexport const viewFunction = Struct({\n id: Hex(32),\n ...runtimeApiMethod,\n deprecationInfo: itemDeprecation,\n})\n"],"names":["ty"],"mappings":";;;;;;;;;;;;;;;AAKO,MAAM,gBAAA,GAAmB;AAAA,EAC9B,IAAA,EAAM,GAAA;AAAA,EACN,MAAA,EAAQ,MAAA;AAAA,IACN,MAAA,CAAO;AAAA,MACL,IAAA,EAAM,GAAA;AAAA,MACN,IAAA,EAAMA;AAAA,KACP;AAAA,GACH;AAAA,EACA,MAAA,EAAQA,aAAA;AAAA,EACR;AACF;AAEO,MAAM,gBAAgB,MAAA,CAAO;AAAA,EAClC,IAAA,EAAM,GAAA;AAAA,EACN,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAC,CAAA;AAAA,EACxC;AACF,CAAC;AAEM,MAAM,aAAa,MAAA,CAAO;AAAA,EAC/B,IAAA,EAAM,GAAA;AAAA,EACN,OAAA,EAAS,MAAA;AAAA,IACP,OAAO,EAAE,GAAG,gBAAA,EAAkB,eAAA,EAAiB,iBAAiB;AAAA,GAClE;AAAA,EACA,IAAA;AAAA,EACA,OAAA,EAAS,aAAA;AAAA,EACT,eAAA,EAAiB;AACnB,CAAC;AAEM,MAAM,eAAe,MAAA,CAAO;AAAA,EACjC,EAAA,EAAI,IAAI,EAAE,CAAA;AAAA,EACV,GAAG,gBAAA;AAAA,EACH,eAAA,EAAiB;AACnB,CAAC;;;;"}
@@ -0,0 +1,48 @@
const unifyMetadata = (metadata) => {
if ("magicNumber" in metadata) metadata = metadata.metadata;
if ("tag" in metadata) {
if (metadata.tag !== "v14" && metadata.tag !== "v15" && metadata.tag !== "v16")
throw new Error("Only metadata 14, 15, and 16 are supported");
metadata = metadata.value;
}
if ("signedExtensionsByVersion" in metadata.extrinsic) {
return { version: 16, ...metadata };
}
if ("custom" in metadata) {
const { lookup: lookup2, extrinsic: extrinsic2, custom, apis, pallets: pallets2, outerEnums } = metadata;
return {
version: 15,
lookup: lookup2,
pallets: pallets2.map((p) => ({
...p,
calls: p.calls != null ? { type: p.calls } : void 0,
events: p.events != null ? { type: p.events } : void 0,
errors: p.errors != null ? { type: p.errors } : void 0,
viewFns: [],
associatedTypes: []
})),
extrinsic: { ...extrinsic2, version: [extrinsic2.version] },
apis,
outerEnums,
custom
};
}
const { lookup, extrinsic, pallets } = metadata;
return {
version: 14,
lookup,
pallets: pallets.map((p) => ({
...p,
calls: p.calls != null ? { type: p.calls } : void 0,
events: p.events != null ? { type: p.events } : void 0,
errors: p.errors != null ? { type: p.errors } : void 0,
viewFns: [],
associatedTypes: []
})),
extrinsic: { ...extrinsic, version: [extrinsic.version] },
apis: []
};
};
export { unifyMetadata };
//# sourceMappingURL=unified.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"unified.mjs","sources":["../../../../src/codecs/metadata/unified.ts"],"sourcesContent":["import { CodecType } from \"scale-ts\"\nimport { V14Lookup } from \"./lookup\"\nimport { storageMap } from \"./pallets\"\nimport { HexString } from \"../scale\"\nimport { itemDeprecation, variantDeprecation } from \"./deprecation\"\nimport { viewFunction } from \"./runtime-api\"\nimport { V14 } from \"./v14\"\nimport { V16 } from \"./v16\"\nimport { V15 } from \"./v15\"\nimport { Metadata } from \"./metadata\"\n\ntype EnumRef<T> =\n | ({\n type: number\n } & (T extends 16\n ? { deprecationInfo: CodecType<typeof variantDeprecation> }\n : {}))\n | undefined\n\ntype DeprecationInfo<T> = T extends 16\n ? { deprecationInfo: CodecType<typeof itemDeprecation> }\n : {}\n\nexport type UnifiedMetadata<T extends 14 | 15 | 16 = 14 | 15 | 16> = {\n version: T\n lookup: V14Lookup\n pallets: Array<\n {\n name: string\n storage:\n | {\n prefix: string\n items: Array<\n {\n name: string\n modifier: number\n type:\n | { tag: \"plain\"; value: number }\n | { tag: \"map\"; value: CodecType<typeof storageMap> }\n fallback: HexString\n docs: string[]\n } & DeprecationInfo<T>\n >\n }\n | undefined\n calls: EnumRef<T>\n events: EnumRef<T>\n constants: Array<\n {\n name: string\n type: number\n value: HexString\n docs: string[]\n } & DeprecationInfo<T>\n >\n errors: EnumRef<T>\n associatedTypes: Array<{\n name: string\n type: number\n docs: string[]\n }>\n viewFns: Array<CodecType<typeof viewFunction>>\n index: number\n docs: string[]\n } & DeprecationInfo<T>\n >\n extrinsic: {\n version: number[]\n signedExtensions: Array<{\n identifier: string\n type: number\n additionalSigned: number\n }>\n } & (T extends 14\n ? {\n type: number\n }\n : { address: number; call: number; signature: number }) &\n (T extends 16\n ? { signedExtensionsByVersion: Array<[number, number[]]> }\n : {})\n apis: Array<\n {\n name: string\n methods: Array<\n {\n name: string\n inputs: Array<{ name: string; type: number }>\n output: number\n docs: string[]\n } & DeprecationInfo<T>\n >\n docs: string[]\n } & (T extends 16 ? { version: number } : {}) &\n DeprecationInfo<T>\n >\n} & (T extends 14\n ? {}\n : {\n outerEnums: { call: number; event: number; error: number }\n custom: Array<[string, { type: number; value: HexString }]>\n })\n\nexport const unifyMetadata = (\n metadata: Metadata | Metadata[\"metadata\"] | V14 | V15 | V16,\n): UnifiedMetadata => {\n // complete metadata\n if (\"magicNumber\" in metadata) metadata = metadata.metadata\n if (\"tag\" in metadata) {\n if (\n metadata.tag !== \"v14\" &&\n metadata.tag !== \"v15\" &&\n metadata.tag !== \"v16\"\n )\n throw new Error(\"Only metadata 14, 15, and 16 are supported\")\n metadata = metadata.value\n }\n\n // v16\n if (\"signedExtensionsByVersion\" in metadata.extrinsic) {\n return { version: 16, ...(metadata as V16) }\n }\n // v15\n if (\"custom\" in metadata) {\n const { lookup, extrinsic, custom, apis, pallets, outerEnums } =\n metadata as V15\n\n return {\n version: 15,\n lookup,\n pallets: pallets.map((p): UnifiedMetadata<15>[\"pallets\"][number] => ({\n ...p,\n calls: p.calls != null ? { type: p.calls } : undefined,\n events: p.events != null ? { type: p.events } : undefined,\n errors: p.errors != null ? { type: p.errors } : undefined,\n viewFns: [],\n associatedTypes: [],\n })),\n extrinsic: { ...extrinsic, version: [extrinsic.version] },\n apis,\n outerEnums,\n custom,\n }\n }\n // fallback, v14\n const { lookup, extrinsic, pallets } = metadata as V14\n return {\n version: 14,\n lookup,\n pallets: pallets.map((p): UnifiedMetadata<14>[\"pallets\"][number] => ({\n ...p,\n calls: p.calls != null ? { type: p.calls } : undefined,\n events: p.events != null ? { type: p.events } : undefined,\n errors: p.errors != null ? { type: p.errors } : undefined,\n viewFns: [],\n associatedTypes: [],\n })),\n extrinsic: { ...extrinsic, version: [extrinsic.version] },\n apis: [],\n }\n}\n"],"names":["lookup","extrinsic","pallets"],"mappings":"AAuGO,MAAM,aAAA,GAAgB,CAC3B,QAAA,KACoB;AAEpB,EAAA,IAAI,aAAA,IAAiB,QAAA,EAAU,QAAA,GAAW,QAAA,CAAS,QAAA;AACnD,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,IACE,SAAS,GAAA,KAAQ,KAAA,IACjB,SAAS,GAAA,KAAQ,KAAA,IACjB,SAAS,GAAA,KAAQ,KAAA;AAEjB,MAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAC9D,IAAA,QAAA,GAAW,QAALine truncated
@@ -0,0 +1,41 @@
import { Struct, Vector, u8, str, createCodec } from 'scale-ts';
import { lookup } from './lookup.mjs';
import '../../utils/ss58-util.mjs';
import '../scale/Binary.mjs';
import '../scale/bitSequence.mjs';
import '../scale/char.mjs';
import { compactNumber } from '../scale/compact.mjs';
import '../scale/Hex.mjs';
import '../scale/fixed-str.mjs';
import '../scale/Variant.mjs';
import '../scale/ethAccount.mjs';
import '../scale/shaped.mjs';
import '../scale/BitSeq.mjs';
import { v14Pallet } from './pallets.mjs';
const empty = new Uint8Array();
const Always = (value) => createCodec(
() => empty,
() => value
);
const extrinsic$2 = Struct({
type: compactNumber,
version: u8,
signedExtensions: Vector(
Struct({
identifier: str,
type: compactNumber,
additionalSigned: compactNumber
})
)
});
const v14 = Struct({
lookup,
pallets: Vector(Struct({ ...v14Pallet, docs: Always([]) })),
extrinsic: extrinsic$2,
type: compactNumber,
apis: Always([])
});
export { v14 };
//# sourceMappingURL=v14.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"v14.mjs","sources":["../../../../src/codecs/metadata/v14.ts"],"sourcesContent":["import { CodecType, Struct, Vector, createCodec, str, u8 } from \"scale-ts\"\nimport { lookup } from \"./lookup\"\nimport { compactNumber } from \"../scale\"\nimport { v14Pallet } from \"./pallets\"\nimport { runtimeApi } from \"./runtime-api\"\n\nconst empty = new Uint8Array()\nconst Always = <T>(value: T) =>\n createCodec<T>(\n () => empty,\n () => value,\n )\n\nconst extrinsic = Struct({\n type: compactNumber,\n version: u8,\n signedExtensions: Vector(\n Struct({\n identifier: str,\n type: compactNumber,\n additionalSigned: compactNumber,\n }),\n ),\n})\n\nexport const v14 = Struct({\n lookup,\n pallets: Vector(Struct({ ...v14Pallet, docs: Always([] as string[]) })),\n extrinsic,\n type: compactNumber,\n apis: Always([] as Array<CodecType<typeof runtimeApi>>),\n})\nexport type V14 = CodecType<typeof v14>\n"],"names":["extrinsic"],"mappings":";;;;;;;;;;;;;;;AAMA,MAAM,KAAA,GAAQ,IAAI,UAAA,EAAW;AAC7B,MAAM,MAAA,GAAS,CAAI,KAAA,KACjB,WAAA;AAAA,EACE,MAAM,KAAA;AAAA,EACN,MAAM;AACR,CAAA;AAEF,MAAMA,cAAY,MAAA,CAAO;AAAA,EACvB,IAAA,EAAM,aAAA;AAAA,EACN,OAAA,EAAS,EAAA;AAAA,EACT,gBAAA,EAAkB,MAAA;AAAA,IAChB,MAAA,CAAO;AAAA,MACL,UAAA,EAAY,GAAA;AAAA,MACZ,IAAA,EAAM,aAAA;AAAA,MACN,gBAAA,EAAkB;AAAA,KACnB;AAAA;AAEL,CAAC,CAAA;AAEM,MAAM,MAAM,MAAA,CAAO;AAAA,EACxB,MAAA;AAAA,EACA,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,EAAE,GAAG,SAAA,EAAW,IAAA,EAAM,MAAA,CAAO,EAAc,CAAA,EAAG,CAAC,CAAA;AAAA,aACtEA,WAAA;AAAA,EACA,IAAA,EAAM,aAAA;AAAA,EACN,IAAA,EAAM,MAAA,CAAO,EAAyC;AACxD,CAAC;;;;"}
@@ -0,0 +1,46 @@
import { Struct, Vector, u8, str, Tuple } from 'scale-ts';
import { lookup } from './lookup.mjs';
import { v15Pallet } from './pallets.mjs';
import '../../utils/ss58-util.mjs';
import '../scale/Binary.mjs';
import '../scale/bitSequence.mjs';
import '../scale/char.mjs';
import { compactNumber } from '../scale/compact.mjs';
import { Hex } from '../scale/Hex.mjs';
import '../scale/fixed-str.mjs';
import '../scale/Variant.mjs';
import '../scale/ethAccount.mjs';
import '../scale/shaped.mjs';
import '../scale/BitSeq.mjs';
import { runtimeApiV15 } from './runtime-api.mjs';
const extrinsic$1 = Struct({
version: u8,
address: compactNumber,
call: compactNumber,
signature: compactNumber,
extra: compactNumber,
signedExtensions: Vector(
Struct({
identifier: str,
type: compactNumber,
additionalSigned: compactNumber
})
)
});
const v15 = Struct({
lookup,
pallets: Vector(Struct(v15Pallet)),
extrinsic: extrinsic$1,
type: compactNumber,
apis: Vector(runtimeApiV15),
outerEnums: Struct({
call: compactNumber,
event: compactNumber,
error: compactNumber
}),
custom: Vector(Tuple(str, Struct({ type: compactNumber, value: Hex() })))
});
export { v15 };
//# sourceMappingURL=v15.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"v15.mjs","sources":["../../../../src/codecs/metadata/v15.ts"],"sourcesContent":["import { CodecType, Struct, Tuple, Vector, str, u8 } from \"scale-ts\"\nimport { lookup } from \"./lookup\"\nimport { v15Pallet } from \"./pallets\"\nimport { Hex, compactNumber as ty } from \"../scale\"\nimport { runtimeApiV15 } from \"./runtime-api\"\n\nconst extrinsic = Struct({\n version: u8,\n address: ty,\n call: ty,\n signature: ty,\n extra: ty,\n signedExtensions: Vector(\n Struct({\n identifier: str,\n type: ty,\n additionalSigned: ty,\n }),\n ),\n})\n\nexport const v15 = Struct({\n lookup,\n pallets: Vector(Struct(v15Pallet)),\n extrinsic,\n type: ty,\n apis: Vector(runtimeApiV15),\n outerEnums: Struct({\n call: ty,\n event: ty,\n error: ty,\n }),\n custom: Vector(Tuple(str, Struct({ type: ty, value: Hex() }))),\n})\nexport type V15 = CodecType<typeof v15>\n"],"names":["extrinsic","ty"],"mappings":";;;;;;;;;;;;;;;;AAMA,MAAMA,cAAY,MAAA,CAAO;AAAA,EACvB,OAAA,EAAS,EAAA;AAAA,EACT,OAAA,EAASC,aAAA;AAAA,EACT,IAAA,EAAMA,aAAA;AAAA,EACN,SAAA,EAAWA,aAAA;AAAA,EACX,KAAA,EAAOA,aAAA;AAAA,EACP,gBAAA,EAAkB,MAAA;AAAA,IAChB,MAAA,CAAO;AAAA,MACL,UAAA,EAAY,GAAA;AAAA,MACZ,IAAA,EAAMA,aAAA;AAAA,MACN,gBAAA,EAAkBA;AAAA,KACnB;AAAA;AAEL,CAAC,CAAA;AAEM,MAAM,MAAM,MAAA,CAAO;AAAA,EACxB,MAAA;AAAA,EACA,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,SAAS,CAAC,CAAA;AAAA,aACjCD,WAAA;AAAA,EACA,IAAA,EAAMC,aAAA;AAAA,EACN,IAAA,EAAM,OAAO,aAAa,CAAA;AAAA,EAC1B,YAAY,MAAA,CAAO;AAAA,IACjB,IAAA,EAAMA,aAAA;AAAA,IACN,KAAA,EAAOA,aAAA;AAAA,IACP,KAAA,EAAOA;AAAA,GACR,CAAA;AAAA,EACD,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,GAAA,EAAK,MAAA,CAAO,EAAE,IAAA,EAAMA,aAAA,EAAI,KAAA,EAAO,GAAA,EAAI,EAAG,CAAC,CAAC;AAC/D,CAAC;;;;"}
@@ -0,0 +1,45 @@
import { Struct, Vector, str, Tuple, u8 } from 'scale-ts';
import { lookup } from './lookup.mjs';
import { v16Pallet } from './pallets.mjs';
import '../../utils/ss58-util.mjs';
import '../scale/Binary.mjs';
import '../scale/bitSequence.mjs';
import '../scale/char.mjs';
import { compactNumber } from '../scale/compact.mjs';
import { Hex } from '../scale/Hex.mjs';
import '../scale/fixed-str.mjs';
import '../scale/Variant.mjs';
import '../scale/ethAccount.mjs';
import '../scale/shaped.mjs';
import '../scale/BitSeq.mjs';
import { runtimeApi } from './runtime-api.mjs';
const extrinsic = Struct({
version: Vector(u8),
address: compactNumber,
call: compactNumber,
signature: compactNumber,
signedExtensionsByVersion: Vector(Tuple(u8, Vector(compactNumber))),
signedExtensions: Vector(
Struct({
identifier: str,
type: compactNumber,
additionalSigned: compactNumber
})
)
});
const v16 = Struct({
lookup,
pallets: Vector(Struct(v16Pallet)),
extrinsic,
apis: Vector(runtimeApi),
outerEnums: Struct({
call: compactNumber,
event: compactNumber,
error: compactNumber
}),
custom: Vector(Tuple(str, Struct({ type: compactNumber, value: Hex() })))
});
export { v16 };
//# sourceMappingURL=v16.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"v16.mjs","sources":["../../../../src/codecs/metadata/v16.ts"],"sourcesContent":["import { CodecType, Struct, Tuple, Vector, str, u8 } from \"scale-ts\"\nimport { lookup } from \"./lookup\"\nimport { v16Pallet } from \"./pallets\"\nimport { compactNumber, Hex, compactNumber as ty } from \"../scale\"\nimport { runtimeApi } from \"./runtime-api\"\n\nconst extrinsic = Struct({\n version: Vector(u8),\n address: ty,\n call: ty,\n signature: ty,\n signedExtensionsByVersion: Vector(Tuple(u8, Vector(compactNumber))),\n signedExtensions: Vector(\n Struct({\n identifier: str,\n type: ty,\n additionalSigned: ty,\n }),\n ),\n})\n\nexport const v16 = Struct({\n lookup,\n pallets: Vector(Struct(v16Pallet)),\n extrinsic,\n apis: Vector(runtimeApi),\n outerEnums: Struct({\n call: ty,\n event: ty,\n error: ty,\n }),\n custom: Vector(Tuple(str, Struct({ type: ty, value: Hex() }))),\n})\nexport type V16 = CodecType<typeof v16>\n"],"names":["ty"],"mappings":";;;;;;;;;;;;;;;;AAMA,MAAM,YAAY,MAAA,CAAO;AAAA,EACvB,OAAA,EAAS,OAAO,EAAE,CAAA;AAAA,EAClB,OAAA,EAASA,aAAA;AAAA,EACT,IAAA,EAAMA,aAAA;AAAA,EACN,SAAA,EAAWA,aAAA;AAAA,EACX,2BAA2B,MAAA,CAAO,KAAA,CAAM,IAAI,MAAA,CAAO,aAAa,CAAC,CAAC,CAAA;AAAA,EAClE,gBAAA,EAAkB,MAAA;AAAA,IAChB,MAAA,CAAO;AAAA,MACL,UAAA,EAAY,GAAA;AAAA,MACZ,IAAA,EAAMA,aAAA;AAAA,MACN,gBAAA,EAAkBA;AAAA,KACnB;AAAA;AAEL,CAAC,CAAA;AAEM,MAAM,MAAM,MAAA,CAAO;AAAA,EACxB,MAAA;AAAA,EACA,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,SAAS,CAAC,CAAA;AAAA,EACjC,SAAA;AAAA,EACA,IAAA,EAAM,OAAO,UAAU,CAAA;AAAA,EACvB,YAAY,MAAA,CAAO;AAAA,IACjB,IAAA,EAAMA,aAAA;AAAA,IACN,KAAA,EAAOA,aAAA;AAAA,IACP,KAAA,EAAOA;AAAA,GACR,CAAA;AAAA,EACD,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,GAAA,EAAK,MAAA,CAAO,EAAE,IAAA,EAAMA,aAAA,EAAI,KAAA,EAAO,GAAA,EAAI,EAAG,CAAC,CAAC;AAC/D,CAAC;;;;"}
@@ -0,0 +1,21 @@
import { enhanceCodec, Bytes } from 'scale-ts';
import { fromBufferToBase58, getSs58AddressInfo } from '../../utils/ss58-util.mjs';
function fromBase58ToBuffer(nBytes, _ss58Format) {
return (address) => {
const info = getSs58AddressInfo(address);
if (!info.isValid) throw new Error("Invalid checksum");
const { publicKey } = info;
if (publicKey.length !== nBytes)
throw new Error("Invalid public key length");
return publicKey;
};
}
const AccountId = (ss58Format = 42, nBytes = 32) => enhanceCodec(
Bytes(nBytes),
fromBase58ToBuffer(nBytes),
fromBufferToBase58(ss58Format)
);
export { AccountId };
//# sourceMappingURL=AccountId.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"AccountId.mjs","sources":["../../../../src/codecs/scale/AccountId.ts"],"sourcesContent":["import { Bytes, enhanceCodec } from \"scale-ts\"\nimport {\n getSs58AddressInfo,\n SS58String,\n fromBufferToBase58,\n} from \"@/utils/ss58-util\"\n\nfunction fromBase58ToBuffer(nBytes: number, _ss58Format: number) {\n return (address: SS58String) => {\n const info = getSs58AddressInfo(address)\n if (!info.isValid) throw new Error(\"Invalid checksum\")\n const { publicKey } = info\n if (publicKey.length !== nBytes)\n throw new Error(\"Invalid public key length\")\n\n return publicKey\n }\n}\n\nexport const AccountId = (ss58Format: number = 42, nBytes: 32 | 33 = 32) =>\n enhanceCodec(\n Bytes(nBytes),\n fromBase58ToBuffer(nBytes, ss58Format),\n fromBufferToBase58(ss58Format),\n )\n"],"names":[],"mappings":";;;AAOA,SAAS,kBAAA,CAAmB,QAAgB,WAAA,EAAqB;AAC/D,EAAA,OAAO,CAAC,OAAA,KAAwB;AAC9B,IAAA,MAAM,IAAA,GAAO,mBAAmB,OAAO,CAAA;AACvC,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,MAAM,kBAAkB,CAAA;AACrD,IAAA,MAAM,EAAE,WAAU,GAAI,IAAA;AACtB,IAAA,IAAI,UAAU,MAAA,KAAW,MAAA;AACvB,MAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAE7C,IAAA,OAAO,SAAA;AAAA,EACT,CAAA;AACF;AAEO,MAAM,SAAA,GAAY,CAAC,UAAA,GAAqB,EAAA,EAAI,SAAkB,EAAA,KACnE,YAAA;AAAA,EACE,MAAM,MAAM,CAAA;AAAA,EACZ,kBAAA,CAAmB,MAAkB,CAAA;AAAA,EACrC,mBAAmB,UAAU;AAC/B;;;;"}
@@ -0,0 +1,94 @@
import { Tuple, compact, Bytes, createCodec } from 'scale-ts';
import { fromHex, toHex, mergeUint8 } from '@pezkuwi/papi-utils';
import { AccountId } from './AccountId.mjs';
var __defProp = Object.defineProperty;
var __typeError = (msg) => {
throw TypeError(msg);
};
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
var _bytes, _opaqueBytes, _hex, _opaqueHex, _str;
const textEncoder$3 = new TextEncoder();
const textDecoder$2 = new TextDecoder();
const opaqueBytesDec = Tuple(compact, Bytes(Infinity))[1];
class Binary {
constructor(data, opaque = false) {
__privateAdd(this, _bytes);
__privateAdd(this, _opaqueBytes, null);
__privateAdd(this, _hex, null);
__privateAdd(this, _opaqueHex, null);
__privateAdd(this, _str, null);
__publicField(this, "asText", () => __privateGet(this, _str) ?? __privateSet(this, _str, textDecoder$2.decode(__privateGet(this, _bytes))));
__publicField(this, "asHex", () => __privateGet(this, _hex) ?? __privateSet(this, _hex, toHex(__privateGet(this, _bytes))));
__publicField(this, "asOpaqueHex", () => __privateGet(this, _opaqueHex) ?? __privateSet(this, _opaqueHex, toHex(this.asOpaqueBytes())));
__publicField(this, "asBytes", () => __privateGet(this, _bytes));
__publicField(this, "asOpaqueBytes", () => __privateGet(this, _opaqueBytes) ?? __privateSet(this, _opaqueBytes, mergeUint8([
compact[0](__privateGet(this, _bytes).length),
__privateGet(this, _bytes)
])));
if (opaque) {
try {
const [len, bytes] = opaqueBytesDec(data);
if (len === bytes.length) {
__privateSet(this, _bytes, bytes);
__privateSet(this, _opaqueBytes, data);
return;
}
} catch (_) {
}
throw new Error("Invalid opaque bytes");
} else __privateSet(this, _bytes, data);
}
static fromText(input) {
return new this(textEncoder$3.encode(input));
}
static fromHex(input) {
return new this(fromHex(input));
}
static fromOpaqueHex(input) {
return new this(fromHex(input), true);
}
static fromBytes(input) {
return new this(input);
}
static fromOpaqueBytes(input) {
return new this(input, true);
}
}
_bytes = new WeakMap();
_opaqueBytes = new WeakMap();
_hex = new WeakMap();
_opaqueHex = new WeakMap();
_str = new WeakMap();
const [accountIdEncoder] = AccountId();
class FixedSizeBinary extends Binary {
constructor(data) {
super(data);
}
static fromArray(input) {
return new this(new Uint8Array(input));
}
static fromAccountId32(input) {
return new this(accountIdEncoder(input));
}
}
const enc$2 = (nBytes) => {
const _enc = Bytes.enc(nBytes);
return (value) => _enc(value.asBytes());
};
const dec$2 = (nBytes) => {
const _dec = Bytes.dec(nBytes);
const Bin2 = nBytes == null ? Binary : FixedSizeBinary;
return (value) => Bin2.fromBytes(_dec(value));
};
const Bin = (nBytes) => createCodec(enc$2(nBytes), dec$2(nBytes));
Bin.enc = enc$2;
Bin.dec = dec$2;
export { Bin, Binary, FixedSizeBinary };
//# sourceMappingURL=Binary.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"Binary.mjs","sources":["../../../../src/codecs/scale/Binary.ts"],"sourcesContent":["import {\n Bytes,\n Codec,\n Decoder,\n Encoder,\n Tuple,\n compact,\n createCodec,\n} from \"scale-ts\"\nimport { fromHex, mergeUint8, toHex } from \"@pezkuwi/papi-utils\"\nimport type { HexString } from \"./Hex\"\nimport { SS58String } from \"@/utils\"\nimport { AccountId } from \"./AccountId\"\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\nconst opaqueBytesDec = Tuple(compact, Bytes(Infinity))[1]\n\nexport class Binary {\n #bytes: Uint8Array\n #opaqueBytes: Uint8Array | null = null\n #hex: HexString | null = null\n #opaqueHex: HexString | null = null\n #str: string | null = null\n\n constructor(data: Uint8Array, opaque = false) {\n if (opaque) {\n try {\n const [len, bytes] = opaqueBytesDec(data)\n if (len === bytes.length) {\n this.#bytes = bytes\n this.#opaqueBytes = data\n return\n }\n } catch (_) {}\n throw new Error(\"Invalid opaque bytes\")\n } else this.#bytes = data\n }\n\n asText = () => (this.#str ??= textDecoder.decode(this.#bytes))\n\n asHex = () => (this.#hex ??= toHex(this.#bytes)) as `0x${string}`\n asOpaqueHex = () =>\n (this.#opaqueHex ??= toHex(this.asOpaqueBytes())) as `0x${string}`\n\n asBytes = () => this.#bytes\n asOpaqueBytes = () =>\n (this.#opaqueBytes ??= mergeUint8([\n compact[0](this.#bytes.length),\n this.#bytes,\n ]))\n\n static fromText(input: string): Binary {\n return new this(textEncoder.encode(input))\n }\n\n static fromHex(input: HexString): Binary {\n return new this(fromHex(input))\n }\n static fromOpaqueHex(input: HexString): Binary {\n return new this(fromHex(input), true)\n }\n\n static fromBytes(input: Uint8Array): Binary {\n return new this(input)\n }\n static fromOpaqueBytes(input: Uint8Array): Binary {\n return new this(input, true)\n }\n}\n\nconst [accountIdEncoder] = AccountId()\nexport class FixedSizeBinary<_L extends number> extends Binary {\n constructor(data: Uint8Array) {\n super(data)\n }\n\n static fromArray<L extends number, I extends Array<number> & { length: L }>(\n input: I,\n ) {\n return new this<L>(new Uint8Array(input))\n }\n\n static fromAccountId32<L extends number>(\n input: L extends 32 ? SS58String : never,\n ) {\n return new this<L>(accountIdEncoder(input))\n }\n}\n\nconst enc = (nBytes?: number): Encoder<Binary> => {\n const _enc = Bytes.enc(nBytes)\n return (value) => _enc(value.asBytes())\n}\n\nconst dec = (nBytes?: number): Decoder<Binary> => {\n const _dec = Bytes.dec(nBytes)\n const Bin = nBytes == null ? Binary : FixedSizeBinary\n return (value) => Bin.fromBytes(_dec(value))\n}\n\nexport const Bin = (nBytes?: number): Codec<Binary> =>\n createCodec(enc(nBytes), dec(nBytes))\n\nBin.enc = enc\nBin.dec = dec\n"],"names":["textEncoder","textDecoder","enc","dec","Bin"],"mappings":";;;;;;;;;;;;;;AAAA,IAAA,MAAA,EAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;AAcA,MAAMA,aAAA,GAAc,IAAI,WAAA,EAAY;AACpC,MAAMC,aAAA,GAAc,IAAI,WAAA,EAAY;AACpC,MAAM,iBAAiB,KAAA,CAAM,OAAA,EAAS,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAA;AAEjD,MAAM,MAAA,CAAO;AAAA,EAOlB,WAAA,CAAY,IAAA,EAAkB,MAAA,GAAS,KAAA,EAAO;AAN9C,IAAA,YAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,YAAA,EAAkC,IAAA,CAAA;AAClC,IAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAyB,IAAA,CAAA;AACzB,IAAA,YAAA,CAAA,IAAA,EAAA,UAAA,EAA+B,IAAA,CAAA;AAC/B,IAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAsB,IAAA,CAAA;AAgBtB,IAAA,aAAA,CAAA,IAAA,EAAA,QAAA,EAAS,MAAO,mBAAK,IAAA,CAAA,IAAL,YAAA,CAAA,IAAA,EAAK,MAASA,aAAA,CAAY,MAAA,CAAO,mBAAK,MAAA,CAAM,CAAA,CAAA,CAAA;AAE5D,IAAA,aAAA,CAAA,IAAA,EAAA,OAAA,EAAQ,MAAO,YAAA,CAAA,IAAA,EAAK,IAAA,CAAA,IAAL,mBAAK,IAAA,EAAS,KAAA,CAAM,mBAAK,MAAA,CAAM,CAAA,CAAA,CAAA;AAC9C,IAAA,aAAA,CAAA,IAAA,EAAA,aAAA,EAAc,MACX,mBAAK,UAAA,CAAA,IAAL,YAAA,CAAA,IAAA,EAAK,YAAe,KAAA,CAAM,IAAA,CAAK,eAAe,CAAA,CAAA,CAAA;AAEjD,IAAA,aAAA,CAAA,IAAA,EAAA,SAAA,EAAU,MAAM,YAAA,CAAA,IAAA,EAAK,MAAA,CAAA,CAAA;AACrB,IAAA,aAAA,CAAA,IAAA,EAAA,eAAA,EAAgB,MACb,YAAA,CAAA,IAAA,EAAK,YAAA,CAAA,IAAL,YAAA,CAAA,IAAA,EAAK,cAAiB,UAAA,CAAW;AAAA,MAChC,OAAA,CAAQ,CAAC,CAAA,CAAE,YAAA,CAAA,IAAA,EAAK,QAAO,MAAM,CAAA;AAAA,MAC7B,YAAA,CAAA,IAAA,EAAK,MAAA;AAAA,KACN,CAAA,CAAA,CAAA;AAxBD,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAI;AACF,QAAA,MAAM,CAAC,GAAA,EAAK,KAAK,CAAA,GAAI,eAAe,IAAI,CAAA;AACxC,QAAA,IAAI,GAAA,KAAQ,MAAM,MAAA,EAAQ;AACxB,UAAA,YAAA,CAAA,IAAA,EAAK,MAAA,EAAS,KAAA,CAAA;AACd,UAAA,YAAA,CAAA,IAAA,EAAK,YAAA,EAAe,IAAA,CAAA;AACpB,UAAA;AAAA,QACF;AAAA,MACF,SAAS,CAAA,EAAG;AAAA,MAAC;AACb,MAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,IACxC,CAAA,yBAAY,MAAA,EAAS,IAAA,CAAA;AAAA,EACvB;AAAA,EAeA,OAAO,SAAS,KAAA,EAAuB;AACrC,IAAA,OAAO,IAAI,IAAA,CAAKD,aAAA,CAAY,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC3C;AAAA,EAEA,OAAO,QAAQ,KAAA,EAA0B;AACvC,IAAA,OAAO,IAAI,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChC;AAAA,EACA,OAAO,cAAc,KAAA,EAA0B;AAC7C,IAAA,OAAO,IAAI,IAAA,CAAK,OAAA,CAAQ,KAAK,GAAG,IAAI,CAAA;AAAA,EACtC;AAAA,EAEA,OAAO,UAAU,KALine truncated
@@ -0,0 +1,37 @@
import { createCodec, createDecoder, Bytes } from 'scale-ts';
import { compactNumber } from './compact.mjs';
import { mergeUint8 } from '@pezkuwi/papi-utils';
const dec = (isLsb = true) => createDecoder((data) => {
const bitsLen = compactNumber.dec(data);
const bytesLen = Math.ceil(bitsLen / 8);
const bytes = Bytes(bytesLen).dec(data);
const result = new Array(bitsLen);
let resultIdx = 0;
bytes.forEach((val) => {
for (let i = 0; i < 8 && resultIdx < bitsLen; i++) {
const actualIdx = isLsb ? i : 7 - i;
result[resultIdx++] = val >> actualIdx & 1;
}
});
return result;
});
const enc = (isLsb = true) => (input) => {
const lenEncoded = compactNumber.enc(input.length);
const nBytes = Math.ceil(input.length / 8);
const bytes = new Uint8Array(nBytes);
for (let byteIdx = 0; byteIdx < nBytes; byteIdx++) {
let inputIdx = byteIdx * 8;
let byte = 0;
for (let i = 0; i < 8 && inputIdx < input.length; i++, inputIdx++)
byte |= input[inputIdx] << (isLsb ? i : 7 - i);
bytes[byteIdx] = byte;
}
return mergeUint8([lenEncoded, bytes]);
};
const BitSeq = (isLsb) => createCodec(enc(isLsb), dec(isLsb));
BitSeq.enc = enc;
BitSeq.dec = dec;
export { BitSeq };
//# sourceMappingURL=BitSeq.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"BitSeq.mjs","sources":["../../../../src/codecs/scale/BitSeq.ts"],"sourcesContent":["import {\n Bytes,\n Codec,\n Decoder,\n Encoder,\n createCodec,\n createDecoder,\n} from \"scale-ts\"\nimport { compactNumber } from \"./compact\"\nimport { mergeUint8 } from \"@pezkuwi/papi-utils\"\n\nexport type BitSeq = Array<0 | 1>\n\nconst dec: (isLsb?: boolean) => Decoder<BitSeq> = (isLsb = true) =>\n createDecoder((data) => {\n const bitsLen = compactNumber.dec(data)\n const bytesLen = Math.ceil(bitsLen / 8)\n const bytes = Bytes(bytesLen).dec(data)\n\n const result = new Array<0 | 1>(bitsLen)\n let resultIdx = 0\n bytes.forEach((val) => {\n for (let i = 0; i < 8 && resultIdx < bitsLen; i++) {\n const actualIdx = isLsb ? i : 7 - i\n result[resultIdx++] = ((val >> actualIdx) & 1) as 1 | 0\n }\n })\n return result\n })\n\nconst enc: (isLsb?: boolean) => Encoder<BitSeq> =\n (isLsb = true) =>\n (input) => {\n const lenEncoded = compactNumber.enc(input.length)\n const nBytes = Math.ceil(input.length / 8)\n\n const bytes = new Uint8Array(nBytes)\n for (let byteIdx = 0; byteIdx < nBytes; byteIdx++) {\n let inputIdx = byteIdx * 8\n let byte = 0\n for (let i = 0; i < 8 && inputIdx < input.length; i++, inputIdx++)\n byte |= input[inputIdx] << (isLsb ? i : 7 - i)\n bytes[byteIdx] = byte\n }\n\n return mergeUint8([lenEncoded, bytes])\n }\n\nexport const BitSeq = (isLsb?: boolean): Codec<BitSeq> =>\n createCodec(enc(isLsb), dec(isLsb))\n\nBitSeq.enc = enc\nBitSeq.dec = dec\n"],"names":[],"mappings":";;;;AAaA,MAAM,MAA4C,CAAC,KAAA,GAAQ,IAAA,KACzD,aAAA,CAAc,CAAC,IAAA,KAAS;AACtB,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,QAAQ,CAAA,CAAE,IAAI,IAAI,CAAA;AAEtC,EAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAa,OAAO,CAAA;AACvC,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACrB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,CAAA,IAAK,SAAA,GAAY,SAAS,CAAA,EAAA,EAAK;AACjD,MAAA,MAAM,SAAA,GAAY,KAAA,GAAQ,CAAA,GAAI,CAAA,GAAI,CAAA;AAClC,MAAA,MAAA,CAAO,SAAA,EAAW,CAAA,GAAM,GAAA,IAAO,SAAA,GAAa,CAAA;AAAA,IAC9C;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT,CAAC,CAAA;AAEH,MAAM,GAAA,GACJ,CAAC,KAAA,GAAQ,IAAA,KACT,CAAC,KAAA,KAAU;AACT,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,GAAA,CAAI,KAAA,CAAM,MAAM,CAAA;AACjD,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA;AAEzC,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,MAAM,CAAA;AACnC,EAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,MAAA,EAAQ,OAAA,EAAA,EAAW;AACjD,IAAA,IAAI,WAAW,OAAA,GAAU,CAAA;AACzB,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAK,QAAA,GAAW,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK,QAAA,EAAA;AACrD,MAAA,IAAA,IAAQ,KAAA,CAAM,QAAQ,CAAA,KAAM,KAAA,GAAQ,IAAI,CAAA,GAAI,CAAA,CAAA;AAC9C,IAAA,KAAA,CAAM,OAAO,CAAA,GAAI,IAAA;AAAA,EACnB;AAEA,EAAA,OAAO,UAAA,CAAW,CAAC,UAAA,EAAY,KAAK,CAAC,CAAA;AACvC,CAAA;AAEK,MAAM,MAAA,GAAS,CAAC,KAAA,KACrB,WAAA,CAAY,IAAI,KAAK,CAAA,EAAG,GAAA,CAAI,KAAK,CAAC;AAEpC,MAAA,CAAO,GAAA,GAAM,GAAA;AACb,MAAA,CAAO,GAAA,GAAM,GAAA;;;;"}
@@ -0,0 +1,17 @@
import { fromHex, toHex } from '@pezkuwi/papi-utils';
import { createCodec, Bytes } from 'scale-ts';
const enc$1 = (nBytes) => {
const _enc = Bytes.enc(nBytes);
return (value) => _enc(fromHex(value));
};
const dec$1 = (nBytes) => {
const _dec = Bytes.dec(nBytes);
return (value) => toHex(_dec(value));
};
const Hex = (nBytes) => createCodec(enc$1(nBytes), dec$1(nBytes));
Hex.enc = enc$1;
Hex.dec = dec$1;
export { Hex };
//# sourceMappingURL=Hex.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"Hex.mjs","sources":["../../../../src/codecs/scale/Hex.ts"],"sourcesContent":["import { fromHex, toHex } from \"@pezkuwi/papi-utils\"\nimport { Bytes, Codec, Decoder, Encoder, createCodec } from \"scale-ts\"\n\nexport type HexString = string & { __hexString?: unknown }\n\nconst enc = (nBytes?: number): Encoder<HexString> => {\n const _enc = Bytes.enc(nBytes)\n return (value: string) => _enc(fromHex(value))\n}\n\nconst dec = (nBytes?: number): Decoder<HexString> => {\n const _dec = Bytes.dec(nBytes)\n return (value) => toHex(_dec(value)) as HexString\n}\n\nexport const Hex = (nBytes?: number): Codec<HexString> =>\n createCodec(enc(nBytes), dec(nBytes))\n\nHex.enc = enc\nHex.dec = dec\n"],"names":["enc","dec"],"mappings":";;;AAKA,MAAMA,KAAA,GAAM,CAAC,MAAA,KAAwC;AACnD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AAC7B,EAAA,OAAO,CAAC,KAAA,KAAkB,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,CAAA;AAC/C,CAAA;AAEA,MAAMC,KAAA,GAAM,CAAC,MAAA,KAAwC;AACnD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AAC7B,EAAA,OAAO,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,CAAK,KAAK,CAAC,CAAA;AACrC,CAAA;AAEO,MAAM,GAAA,GAAM,CAAC,MAAA,KAClB,WAAA,CAAYD,MAAI,MAAM,CAAA,EAAGC,KAAA,CAAI,MAAM,CAAC;AAEtC,GAAA,CAAI,GAAA,GAAMD,KAAA;AACV,GAAA,CAAI,GAAA,GAAMC,KAAA;;;;"}
@@ -0,0 +1,26 @@
import { createCodec } from 'scale-ts';
const selfEncoder = (value) => {
let cache = (x) => {
const encoder = value();
cache = encoder;
return encoder(x);
};
return (x) => cache(x);
};
const selfDecoder = (value) => {
let cache = (x) => {
const decoder = value();
const result = decoder;
cache = decoder;
return result(x);
};
return (x) => cache(x);
};
const Self = (value) => createCodec(
selfEncoder(() => value().enc),
selfDecoder(() => value().dec)
);
export { Self, selfDecoder, selfEncoder };
//# sourceMappingURL=Self.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"Self.mjs","sources":["../../../../src/codecs/scale/Self.ts"],"sourcesContent":["import { Codec, Decoder, Encoder, createCodec, _void } from \"scale-ts\"\n\nexport const selfEncoder = <T>(value: () => Encoder<T>): Encoder<T> => {\n let cache: Encoder<T> = (x) => {\n const encoder = value()\n cache = encoder\n return encoder(x)\n }\n\n return (x) => cache(x)\n}\n\nexport const selfDecoder = <T>(value: () => Decoder<T>): Decoder<T> => {\n let cache: Decoder<T> = (x) => {\n const decoder = value()\n const result = decoder\n cache = decoder\n return result(x)\n }\n\n return (x) => cache(x)\n}\n\nexport const Self = <T>(value: () => Codec<T>): Codec<T> =>\n createCodec(\n selfEncoder(() => value().enc),\n selfDecoder(() => value().dec),\n )\n"],"names":[],"mappings":";;AAEO,MAAM,WAAA,GAAc,CAAI,KAAA,KAAwC;AACrE,EAAA,IAAI,KAAA,GAAoB,CAAC,CAAA,KAAM;AAC7B,IAAA,MAAM,UAAU,KAAA,EAAM;AACtB,IAAA,KAAA,GAAQ,OAAA;AACR,IAAA,OAAO,QAAQ,CAAC,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,OAAO,CAAC,CAAA,KAAM,KAAA,CAAM,CAAC,CAAA;AACvB;AAEO,MAAM,WAAA,GAAc,CAAI,KAAA,KAAwC;AACrE,EAAA,IAAI,KAAA,GAAoB,CAAC,CAAA,KAAM;AAC7B,IAAA,MAAM,UAAU,KAAA,EAAM;AACtB,IAAA,MAAM,MAAA,GAAS,OAAA;AACf,IAAA,KAAA,GAAQ,OAAA;AACR,IAAA,OAAO,OAAO,CAAC,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,OAAO,CAAC,CAAA,KAAM,KAAA,CAAM,CAAC,CAAA;AACvB;AAEO,MAAM,IAAA,GAAO,CAAI,KAAA,KACtB,WAAA;AAAA,EACE,WAAA,CAAY,MAAM,KAAA,EAAM,CAAE,GAAG,CAAA;AAAA,EAC7B,WAAA,CAAY,MAAM,KAAA,EAAM,CAAE,GAAG;AAC/B;;;;"}
@@ -0,0 +1,37 @@
import { createCodec, Enum } from 'scale-ts';
import { mapObject } from '@pezkuwi/papi-utils';
import { Enum as Enum$1 } from '../../types/enum.mjs';
import { withInner } from './with-inner.mjs';
const VariantEnc = (...args) => {
const enc = Enum.enc(...args);
return withInner((v) => enc({ tag: v.type, value: v.value }), args[0]);
};
const VariantDec = (...args) => {
const dec = Enum.dec(...args);
return withInner((v) => {
const { tag, value } = dec(v);
return Enum$1(tag, value);
}, args[0]);
};
const Variant = (inner, ...args) => withInner(
createCodec(
VariantEnc(
mapObject(inner, ([encoder]) => encoder),
...args
),
VariantDec(
mapObject(inner, ([, decoder]) => decoder),
...args
)
),
inner
);
Variant.enc = VariantEnc;
Variant.dec = VariantDec;
const ScaleEnum = (inner, ...args) => withInner(Enum(inner, ...args), inner);
ScaleEnum.enc = (inner, ...rest) => withInner(Enum.enc(inner, ...rest), inner);
ScaleEnum.dec = (inner, ...rest) => withInner(Enum.dec(inner, ...rest), inner);
export { ScaleEnum, Variant };
//# sourceMappingURL=Variant.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"Variant.mjs","sources":["../../../../src/codecs/scale/Variant.ts"],"sourcesContent":["import {\n Codec,\n CodecType,\n Decoder,\n DecoderType,\n Encoder,\n EncoderType,\n Enum as OEnum,\n StringRecord,\n createCodec,\n} from \"scale-ts\"\nimport { mapObject } from \"@pezkuwi/papi-utils\"\nimport { Enum } from \"@/types/enum\"\nimport { withInner } from \"./with-inner\"\n\ntype Tuple<T, N extends number> = readonly [T, ...T[]] & { length: N }\n\ntype Push<T extends any[], V> = [...T, V]\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n k: infer I,\n) => void\n ? I\n : never\n\ntype LastOf<T> =\n UnionToIntersection<T extends any ? () => T : never> extends () => infer R\n ? R\n : never\n\ntype TuplifyUnion<\n T,\n L = LastOf<T>,\n N = [T] extends [never] ? true : false,\n> = true extends N ? [] : Push<TuplifyUnion<Exclude<T, L>>, L>\n\ntype RestrictedLenTuple<T, O extends StringRecord<any>> = Tuple<\n T,\n TuplifyUnion<keyof O> extends Tuple<any, infer V> ? V : 0\n>\n\nconst VariantEnc: <O extends StringRecord<Encoder<any>>>(\n inner: O,\n x?: RestrictedLenTuple<number, O> | undefined,\n) => Encoder<\n Enum<{\n [K in keyof O]: EncoderType<O[K]>\n }>\n> & { inner: O } = (...args) => {\n const enc = OEnum.enc(...(args as [any, any]))\n return withInner((v: any) => enc({ tag: v.type, value: v.value }), args[0])\n}\n\nconst VariantDec: <O extends StringRecord<Decoder<any>>>(\n inner: O,\n x?: RestrictedLenTuple<number, O> | undefined,\n) => Decoder<\n Enum<{\n [K in keyof O]: DecoderType<O[K]>\n }>\n> & { inner: O } = (...args) => {\n const dec = OEnum.dec(...(args as [any]))\n return withInner((v: any) => {\n const { tag, value } = dec(v)\n return Enum(tag as any, value as any) as any\n }, args[0])\n}\n\nexport const Variant: {\n <O extends StringRecord<Codec<any>>>(\n inner: O,\n indexes?: RestrictedLenTuple<number, O> | undefined,\n ): Codec<\n Enum<{\n [K in keyof O]: CodecType<O[K]>\n }>\n > & { inner: O }\n enc: <O_1 extends StringRecord<Encoder<any>>>(\n inner: O_1,\n x?: RestrictedLenTuple<number, O_1> | undefined,\n ) => Encoder<\n Enum<{\n [K in keyof O_1]: EncoderType<O_1[K]>\n }>\n > & { inner: O_1 }\n dec: <O_2 extends StringRecord<Decoder<any>>>(\n inner: O_2,\n x?: RestrictedLenTuple<number, O_2> | undefined,\n ) => Decoder<\n Enum<{\n [K in keyof O_2]: DecoderType<O_2[K]>\n }>\n > & { inner: O_2 }\n} = (inner, ...args) =>\n withInner(\n createCodec(\n VariantEnc(\n mapObject(inner, ([encoder]) => encoder) as any,\n ...(args as any[]),\n ),\n VariantDec(\n mapObject(inner, ([, decoder]) => decoder) as any,\n ...(args as any[]),\n ) as any,\n ),\n inner,\n ) as any\nVariant.enc = VariantEnc\nVariant.dec = VariantDec\n\nexport const ScaleEnum: {\n <O extends StringRecord<Codec<any>>>(\n inner: O,\n indexes?: RestrictedLenTuple<number, O> | undefined,\n ): Codec<\n {\n [K in keyof O]: {\n tag: K\n value: CodecType<O[K]>\n }\n }[keyof O]\n > & { inner: O }\n enc: <O_1 extends StringRecord<Encoder<any>>>(\n inner: O_1,\n x?: RestrictedLenTuple<number, O_1> | undefined,\n ) => Encoder<\n {\n [K_1 in keyof O_1]: {\n tag: K_1\n value: EncoderType<O_1[K_1]>\n }\n }[keyof O_1]\n > & { inner: O_1 }\n dec: <O_2 extends StringRecord<Decoder<any>>>(\n inner: O_2,\n x?: RestrictedLenTuple<number, O_2> | undefined,\n ) => Decoder<\n {\n [K_2 in keyof O_2]: {\n tag: K_2\n value: DecoderType<O_2[K_2]>\n }\n }[keyof O_2]\n > & { inner: O_2 }\n} = (inner, ...args) => withInner(OEnum(inner, ...(args as any[])), inner)\nScaleEnum.enc = (inner, ...rest) =>\n withInner(OEnum.enc(inner, ...(rest as any[])), inner)\nScaleEnum.dec = (inner, ...rest) =>\n withInner(OEnum.dec(inner, ...(rest as any[])), inner)\n"],"names":["OEnum","Enum"],"mappings":";;;;;AAyCA,MAAM,UAAA,GAOa,IAAI,IAAA,KAAS;AAC9B,EAAA,MAAM,GAAA,GAAMA,IAAA,CAAM,GAAA,CAAI,GAAI,IAAmB,CAAA;AAC7C,EAAA,OAAO,SAAA,CAAU,CAAC,CAAA,KAAW,GAAA,CAAI,EAAE,GAAA,EAAK,CAAA,CAAE,IAAA,EAAM,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AAC5E,CAAA;AAEA,MAAM,UAAA,GAOa,IAAI,IAAA,KAAS;AAC9B,EAAA,MAAM,GAAA,GAAMA,IAAA,CAAM,GAAA,CAAI,GAAI,IAAc,CAAA;AACxC,EAAA,OAAO,SAAA,CAAU,CAAC,CAAA,KAAW;AAC3B,IAAA,MAAM,EAAE,GAAA,EAAK,KAAA,EAAM,GAAI,IAAI,CAAC,CAAA;AAC5B,IAAA,OAAOC,MAAA,CAAK,KAAY,KAAY,CAAA;AAAA,EACtC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AACZ,CAAA;AAEO,MAAM,OAAA,GAyBT,CAAC,KAAA,EAAA,GAAU,IAAA,KACb,SAAA;AAAA,EACE,WAAA;AAAA,IACE,UAAA;AAAA,MACE,UAAU,KAAA,EAAO,CAAC,CAAC,OAAO,MAAM,OAAO,CAAA;AAAA,MACvC,GAAI;AAAA,KACN;AAAA,IACA,UAAA;AAAA,MACE,UAAU,KAAA,EAAO,CAAC,GAAG,OAAO,MAAM,OAAO,CAAA;AAAA,MACzC,GAAI;AAAA;AACN,GACF;AAAA,EACA;AACF;AACF,OAAA,CAAQ,GAAA,GAAM,UAAA;AACd,OAAA,CAAQ,GAAA,GAAM,UAAA;AAEP,MAAM,SAAA,GAkCT,CAAC,KAAA,EAAA,GAAU,IAAA,KAAS,SAAALine truncated
@@ -0,0 +1,24 @@
import { createDecoder, Bytes, createCodec } from 'scale-ts';
import { compactNumber } from './compact.mjs';
const bitSequenceDecoder = createDecoder((data) => {
const bitsLen = compactNumber.dec(data);
const bytesLen = Math.ceil(bitsLen / 8);
const bytes = Bytes(bytesLen).dec(data);
return { bytes, bitsLen };
});
const bitSequenceEncoder = (input) => {
if (input.bitsLen > input.bytes.length * 8)
throw new Error(
`Not enough bytes. (bitsLen:${input.bitsLen}, bytesLen:${input.bytes.length})`
);
const lenEncoded = compactNumber.enc(input.bitsLen);
const result = new Uint8Array(input.bytes.length + lenEncoded.length);
result.set(lenEncoded, 0);
result.set(input.bytes, lenEncoded.length);
return result;
};
const bitSequence$1 = createCodec(bitSequenceEncoder, bitSequenceDecoder);
export { bitSequence$1 as bitSequence };
//# sourceMappingURL=bitSequence.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"bitSequence.mjs","sources":["../../../../src/codecs/scale/bitSequence.ts"],"sourcesContent":["import { Bytes, Decoder, Encoder, createCodec, createDecoder } from \"scale-ts\"\nimport { compactNumber } from \"./compact\"\n\nexport interface BitSequence {\n bitsLen: number\n bytes: Uint8Array\n}\n\nconst bitSequenceDecoder: Decoder<BitSequence> = createDecoder((data) => {\n const bitsLen = compactNumber.dec(data)\n\n const bytesLen = Math.ceil(bitsLen / 8)\n const bytes = Bytes(bytesLen).dec(data)\n return { bytes, bitsLen }\n})\n\nconst bitSequenceEncoder: Encoder<BitSequence> = (input) => {\n if (input.bitsLen > input.bytes.length * 8)\n throw new Error(\n `Not enough bytes. (bitsLen:${input.bitsLen}, bytesLen:${input.bytes.length})`,\n )\n\n const lenEncoded = compactNumber.enc(input.bitsLen)\n const result = new Uint8Array(input.bytes.length + lenEncoded.length)\n result.set(lenEncoded, 0)\n result.set(input.bytes, lenEncoded.length)\n return result\n}\n\nexport const bitSequence = createCodec(bitSequenceEncoder, bitSequenceDecoder)\n"],"names":["bitSequence"],"mappings":";;;AAQA,MAAM,kBAAA,GAA2C,aAAA,CAAc,CAAC,IAAA,KAAS;AACvE,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AAEtC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,QAAQ,CAAA,CAAE,IAAI,IAAI,CAAA;AACtC,EAAA,OAAO,EAAE,OAAO,OAAA,EAAQ;AAC1B,CAAC,CAAA;AAED,MAAM,kBAAA,GAA2C,CAAC,KAAA,KAAU;AAC1D,EAAA,IAAI,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AACvC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,8BAA8B,KAAA,CAAM,OAAO,CAAA,WAAA,EAAc,KAAA,CAAM,MAAM,MAAM,CAAA,CAAA;AAAA,KAC7E;AAEF,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA;AAClD,EAAA,MAAM,SAAS,IAAI,UAAA,CAAW,MAAM,KAAA,CAAM,MAAA,GAAS,WAAW,MAAM,CAAA;AACpE,EAAA,MAAA,CAAO,GAAA,CAAI,YAAY,CAAC,CAAA;AACxB,EAAA,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,UAAA,CAAW,MAAM,CAAA;AACzC,EAAA,OAAO,MAAA;AACT,CAAA;AAEO,MAAMA,aAAA,GAAc,WAAA,CAAY,kBAAA,EAAoB,kBAAkB;;;;"}
@@ -0,0 +1,10 @@
import { enhanceCodec, u8 } from 'scale-ts';
const char = enhanceCodec(
u8,
(str) => str.charCodeAt(0),
String.fromCharCode
);
export { char };
//# sourceMappingURL=char.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"char.mjs","sources":["../../../../src/codecs/scale/char.ts"],"sourcesContent":["import { enhanceCodec, u8 } from \"scale-ts\"\n\nexport const char = enhanceCodec(\n u8,\n (str: string) => str.charCodeAt(0),\n String.fromCharCode,\n)\n"],"names":[],"mappings":";;AAEO,MAAM,IAAA,GAAO,YAAA;AAAA,EAClB,EAAA;AAAA,EACA,CAAC,GAAA,KAAgB,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAAA,EACjC,MAAA,CAAO;AACT;;;;"}
@@ -0,0 +1,7 @@
import { enhanceCodec, compact } from 'scale-ts';
const compactNumber = enhanceCodec(compact, (v) => v, Number);
const compactBn = enhanceCodec(compact, (v) => v, BigInt);
export { compactBn, compactNumber };
//# sourceMappingURL=compact.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"compact.mjs","sources":["../../../../src/codecs/scale/compact.ts"],"sourcesContent":["import { compact, enhanceCodec } from \"scale-ts\"\n\nexport const compactNumber = enhanceCodec(compact, (v) => v, Number)\nexport const compactBn = enhanceCodec(compact, (v) => v, BigInt)\n"],"names":[],"mappings":";;AAEO,MAAM,gBAAgB,YAAA,CAAa,OAAA,EAAS,CAAC,CAAA,KAAM,GAAG,MAAM;AAC5D,MAAM,YAAY,YAAA,CAAa,OAAA,EAAS,CAAC,CAAA,KAAM,GAAG,MAAM;;;;"}
@@ -0,0 +1,37 @@
import { fromHex, toHex } from '@pezkuwi/papi-utils';
import { Bytes, createCodec, createDecoder } from 'scale-ts';
import '@noble/hashes/blake2.js';
import '@noble/hashes/blake3.js';
import { Keccak256 } from '../../hashes/keccak.mjs';
import { textEncoder } from './fixed-str.mjs';
const getFormattedAddress = (hexAddress) => {
const nonChecksum = hexAddress.slice(2);
const hashedAddress = toHex(Keccak256(textEncoder.encode(nonChecksum))).slice(
2
);
const result = new Array(40);
for (let i = 0; i < 40; i++) {
const checksumVal = parseInt(hashedAddress[i], 16);
const char = nonChecksum[i];
result[i] = checksumVal > 7 ? char.toUpperCase() : char;
}
return `0x${result.join("")}`;
};
const bytes20Dec = Bytes(20)[1];
const ethAccount = createCodec(
(input) => {
const bytes = fromHex(input);
if (bytes.length !== 20)
throw new Error(`Invalid length found on EthAddress(${input})`);
const hexAddress = toHex(bytes);
if (input === hexAddress || input === hexAddress.toUpperCase()) return bytes;
if (getFormattedAddress(hexAddress) !== input)
throw new Error(`Invalid checksum found on EthAddress(${input})`);
return bytes;
},
createDecoder((bytes) => getFormattedAddress(toHex(bytes20Dec(bytes))))
);
export { ethAccount };
//# sourceMappingURL=ethAccount.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"ethAccount.mjs","sources":["../../../../src/codecs/scale/ethAccount.ts"],"sourcesContent":["import { fromHex, toHex } from \"@pezkuwi/papi-utils\"\nimport { Bytes, createCodec, createDecoder } from \"scale-ts\"\nimport { Keccak256 } from \"../../hashes\"\nimport { textEncoder } from \"./fixed-str\"\n\nconst getFormattedAddress = (hexAddress: string) => {\n const nonChecksum = hexAddress.slice(2)\n const hashedAddress = toHex(Keccak256(textEncoder.encode(nonChecksum))).slice(\n 2,\n )\n const result = new Array(40)\n\n for (let i = 0; i < 40; i++) {\n const checksumVal = parseInt(hashedAddress[i], 16)\n const char = nonChecksum[i]\n result[i] = checksumVal > 7 ? char.toUpperCase() : char\n }\n\n return `0x${result.join(\"\")}`\n}\n\nconst bytes20Dec = Bytes(20)[1]\n\nexport const ethAccount = createCodec<string>(\n (input: string) => {\n const bytes = fromHex(input)\n if (bytes.length !== 20)\n throw new Error(`Invalid length found on EthAddress(${input})`)\n\n const hexAddress = toHex(bytes)\n if (input === hexAddress || input === hexAddress.toUpperCase()) return bytes\n\n if (getFormattedAddress(hexAddress) !== input)\n throw new Error(`Invalid checksum found on EthAddress(${input})`)\n\n return bytes\n },\n createDecoder((bytes) => getFormattedAddress(toHex(bytes20Dec(bytes)))),\n)\n"],"names":[],"mappings":";;;;;;;AAKA,MAAM,mBAAA,GAAsB,CAAC,UAAA,KAAuB;AAClD,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA;AACtC,EAAA,MAAM,aAAA,GAAgB,MAAM,SAAA,CAAU,WAAA,CAAY,OAAO,WAAW,CAAC,CAAC,CAAA,CAAE,KAAA;AAAA,IACtE;AAAA,GACF;AACA,EAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAM,EAAE,CAAA;AAE3B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,CAAA,EAAA,EAAK;AAC3B,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,aAAA,CAAc,CAAC,GAAG,EAAE,CAAA;AACjD,IAAA,MAAM,IAAA,GAAO,YAAY,CAAC,CAAA;AAC1B,IAAA,MAAA,CAAO,CAAC,CAAA,GAAI,WAAA,GAAc,CAAA,GAAI,IAAA,CAAK,aAAY,GAAI,IAAA;AAAA,EACrD;AAEA,EAAA,OAAO,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AAC7B,CAAA;AAEA,MAAM,UAAA,GAAa,KAAA,CAAM,EAAE,CAAA,CAAE,CAAC,CAAA;AAEvB,MAAM,UAAA,GAAa,WAAA;AAAA,EACxB,CAAC,KAAA,KAAkB;AACjB,IAAA,MAAM,KAAA,GAAQ,QAAQ,KAAK,CAAA;AAC3B,IAAA,IAAI,MAAM,MAAA,KAAW,EAAA;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,KAAK,CAAA,CAAA,CAAG,CAAA;AAEhE,IAAA,MAAM,UAAA,GAAa,MAAM,KAAK,CAAA;AAC9B,IAAA,IAAI,UAAU,UAAA,IAAc,KAAA,KAAU,UAAA,CAAW,WAAA,IAAe,OAAO,KAAA;AAEvE,IAAA,IAAI,mBAAA,CAAoB,UAAU,CAAA,KAAM,KAAA;AACtC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,KAAK,CAAA,CAAA,CAAG,CAAA;AAElE,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAAA,EACA,aAAA,CAAc,CAAC,KAAA,KAAU,mBAAA,CAAoB,MAAM,UAAA,CAAW,KAAK,CAAC,CAAC,CAAC;AACxE;;;;"}
@@ -0,0 +1,12 @@
import { enhanceCodec, Bytes } from 'scale-ts';
const textEncoder$2 = new TextEncoder();
const textDecoder$1 = new TextDecoder();
const fixedStr = (nBytes) => enhanceCodec(
Bytes(nBytes),
(str) => textEncoder$2.encode(str),
(bytes) => textDecoder$1.decode(bytes)
);
export { fixedStr, textEncoder$2 as textEncoder };
//# sourceMappingURL=fixed-str.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"fixed-str.mjs","sources":["../../../../src/codecs/scale/fixed-str.ts"],"sourcesContent":["import { Bytes, enhanceCodec } from \"scale-ts\"\n\nexport const textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nexport const fixedStr = (nBytes: number) =>\n enhanceCodec(\n Bytes(nBytes),\n (str: string) => textEncoder.encode(str),\n (bytes) => textDecoder.decode(bytes),\n )\n"],"names":["textEncoder","textDecoder"],"mappings":";;AAEO,MAAMA,aAAA,GAAc,IAAI,WAAA;AAC/B,MAAMC,aAAA,GAAc,IAAI,WAAA,EAAY;AAE7B,MAAM,QAAA,GAAW,CAAC,MAAA,KACvB,YAAA;AAAA,EACE,MAAM,MAAM,CAAA;AAAA,EACZ,CAAC,GAAA,KAAgBD,aAAA,CAAY,MAAA,CAAO,GAAG,CAAA;AAAA,EACvC,CAAC,KAAA,KAAUC,aAAA,CAAY,MAAA,CAAO,KAAK;AACrC;;;;"}
@@ -0,0 +1,21 @@
import { Struct as Struct$1, Vector as Vector$1, Tuple as Tuple$1, Result as Result$1, Option as Option$1 } from 'scale-ts';
import { withInner } from './with-inner.mjs';
const Struct = (codecs) => withInner(Struct$1(codecs), codecs);
Struct.enc = (x) => withInner(Struct$1.enc(x), x);
Struct.dec = (x) => withInner(Struct$1.dec(x), x);
const Tuple = (...inner) => withInner(Tuple$1(...inner), inner);
Tuple.enc = (...inner) => withInner(Tuple$1.enc(...inner), inner);
Tuple.dec = (...inner) => withInner(Tuple$1.dec(...inner), inner);
const Vector = (inner, ...rest) => withInner(Vector$1(inner, ...rest), inner);
Vector.enc = (inner, ...rest) => withInner(Vector$1.enc(inner, ...rest), inner);
Vector.dec = (inner, ...rest) => withInner(Vector$1.dec(inner, ...rest), inner);
const Result = (ok, ko) => withInner(Result$1(ok, ko), { ok, ko });
Result.enc = (ok, ko) => withInner(Result$1.enc(ok, ko), { ok, ko });
Result.dec = (ok, ko) => withInner(Result$1.dec(ok, ko), { ok, ko });
const Option = (inner) => withInner(Option$1(inner), inner);
Option.enc = (inner) => withInner(Option$1.enc(inner), inner);
Option.dec = (inner) => withInner(Option$1.dec(inner), inner);
export { Option, Result, Struct, Tuple, Vector };
//# sourceMappingURL=shaped.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"shaped.mjs","sources":["../../../../src/codecs/scale/shaped.ts"],"sourcesContent":["import {\n Struct as OStruct,\n Tuple as OTuple,\n Vector as OVector,\n Result as OResult,\n Option as OOption,\n Codec,\n Encoder,\n Decoder,\n StringRecord,\n CodecType,\n EncoderType,\n DecoderType,\n ResultPayload,\n} from \"scale-ts\"\nimport { withInner } from \"./with-inner\"\n\nexport const Struct: {\n <A extends StringRecord<Codec<any>>>(\n codecs: A,\n ): Codec<{ [K in keyof A]: CodecType<A[K]> }> & { inner: A }\n enc: <A_1 extends StringRecord<Encoder<any>>>(\n encoders: A_1,\n ) => Encoder<{ [K_1 in keyof A_1]: EncoderType<A_1[K_1]> }> & { inner: A_1 }\n dec: <A_2 extends StringRecord<Decoder<any>>>(\n decoders: A_2,\n ) => Decoder<{ [K_2 in keyof A_2]: DecoderType<A_2[K_2]> }> & { inner: A_2 }\n} = (codecs) => withInner(OStruct(codecs), codecs)\nStruct.enc = (x) => withInner(OStruct.enc(x), x)\nStruct.dec = (x) => withInner(OStruct.dec(x), x)\n\nexport const Tuple: {\n <A extends Codec<any>[]>(\n ...inner: A\n ): Codec<{ [K in keyof A]: A[K] extends Codec<infer D> ? D : unknown }> & {\n inner: A\n }\n enc: <A_1 extends Encoder<any>[]>(\n ...encoders: A_1\n ) => Encoder<{\n [K_1 in keyof A_1]: A_1[K_1] extends Encoder<infer D_1> ? D_1 : unknown\n }> & { inner: A_1 }\n dec: <A_2 extends Decoder<any>[]>(\n ...decoders: A_2\n ) => Decoder<{\n [K_2 in keyof A_2]: A_2[K_2] extends Decoder<infer D_2> ? D_2 : unknown\n }> & { inner: A_2 }\n} = (...inner) => withInner(OTuple(...inner), inner)\nTuple.enc = (...inner) => withInner(OTuple.enc(...inner), inner)\nTuple.dec = (...inner) => withInner(OTuple.dec(...inner), inner)\n\nexport const Vector: {\n <T>(\n inner: Codec<T>,\n size?: number | undefined,\n ): Codec<T[]> & { inner: Codec<T> }\n enc: <T_1>(\n inner: Encoder<T_1>,\n size?: number | undefined,\n ) => Encoder<T_1[]> & { inner: Encoder<T_1> }\n dec: <T_2>(\n getter: Decoder<T_2>,\n size?: number | undefined,\n ) => Decoder<T_2[]> & { inner: Decoder<T_2> }\n} = (inner, ...rest) => withInner(OVector(inner, ...rest), inner)\nVector.enc = (inner, ...rest) => withInner(OVector.enc(inner, ...rest), inner)\nVector.dec = (inner, ...rest) => withInner(OVector.dec(inner, ...rest), inner)\n\nexport const Result: {\n <OK, KO>(\n okCodec: Codec<OK>,\n koCodec: Codec<KO>,\n ): Codec<ResultPayload<OK, KO>> & { inner: { ok: Codec<OK>; ko: Codec<KO> } }\n dec: <OK_1, KO_1>(\n okDecoder: Decoder<OK_1>,\n koDecoder: Decoder<KO_1>,\n ) => Decoder<ResultPayload<OK_1, KO_1>> & {\n inner: { ok: Decoder<OK_1>; ko: Decoder<KO_1> }\n }\n enc: <OK_2, KO_2>(\n okEncoder: Encoder<OK_2>,\n koEncoder: Encoder<KO_2>,\n ) => Encoder<ResultPayload<OK_2, KO_2>> & {\n inner: { ok: Encoder<OK_2>; ko: Encoder<KO_2> }\n }\n} = (ok, ko) => withInner(OResult(ok, ko), { ok, ko })\nResult.enc = (ok, ko) => withInner(OResult.enc(ok, ko), { ok, ko })\nResult.dec = (ok, ko) => withInner(OResult.dec(ok, ko), { ok, ko })\n\nexport const Option: {\n <T>(inner: Codec<T>): Codec<T | undefined> & { inner: Codec<T> }\n enc: <T_1>(\n inner: Encoder<T_1>,\n ) => Encoder<T_1 | undefined> & { inner: Encoder<T_1> }\n dec: <T_2>(\n inner: Decoder<T_2>,\n ) => Decoder<T_2 | undefined> & { inner: Decoder<T_2> }\n} = (inner) => withInner(OOption(inner), inner)\nOption.enc = (inner) => withInner(OOption.enc(inner), inner)\nOption.dec = (inner) => withInner(OOption.dec(inner), inner)\n"],"names":["OStruct","OTuple","OVector","OResult","OOption"],"mappings":";;;AAiBO,MAAM,SAUT,CAAC,MAAA,KAAW,UAAUA,QAAA,CAAQ,MAAM,GAAG,MAAM;AACjD,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,KAAM,SAAA,CAAUA,SAAQ,GAAA,CAAI,CAAC,GAAG,CAAC,CAAA;AAC/C,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,KAAM,SAAA,CAAUA,SAAQ,GAAA,CAAI,CAAC,GAAG,CAAC,CAAA;AAExC,MAAM,KAAA,GAgBT,IAAI,KAAA,KAAU,SAAA,CAAUC,QAAO,GAAG,KAAK,GAAG,KAAK;AACnD,KAAA,CAAM,GAAA,GAAM,IAAI,KAAA,KAAU,SAAA,CAAUA,QAAO,GAAA,CAAI,GAAG,KAAK,CAAA,EAAG,KAAK,CAAA;AAC/D,KAAA,CAAM,GAAA,GAAM,IAAI,KAAA,KAAU,SAAA,CAAUA,QAAO,GAAA,CAAI,GAAG,KAAK,CAAA,EAAG,KAAK,CAAA;AAExD,MAAM,MAAA,GAaT,CAAC,KAAA,EAAA,GAAU,IAAA,KAAS,SAAA,CAAUC,SAAQ,KAAA,EAAO,GAAG,IAAI,CAAA,EAAG,KAAK;AAChE,MAAA,CAAO,GAAA,GAAM,CAAC,KAAA,EAAA,GAAU,IAAA,KAAS,SAAA,CAAUA,QAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,GAAG,IAAI,CAAA,EAAG,KAAK,CAAA;AAC7E,MAAA,CAAO,GAAA,GAAM,CAAC,KAAA,EAAA,GAAU,IAAA,KAAS,SAAA,CAAUA,QAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,GAAG,IAAI,CAAA,EAAG,KAAK,CAAA;AAEtE,MAAM,MAAA,GAiBT,CAAC,EAAA,EAAI,EAAA,KAAO,SAAA,CAAUC,QAAA,CAAQ,EAAA,EAAI,EAAE,CAAA,EAAG,EAAE,EAAA,EAAI,EAAA,EAAI;AACrD,MAAA,CAAO,GAAA,GAAM,CAAC,EAAA,EAAI,EAAA,KAAO,SAAA,CAAUA,QAAA,CAAQ,GAAA,CAAI,EAAA,EAAI,EAAE,CAAA,EAAG,EAAE,EAAA,EAAI,IAAI,CAAA;AAClE,MAAA,CAAO,GAAA,GAAM,CAAC,EAAA,EAAI,EAAA,KAAO,SAAA,CAAUA,QAAA,CAAQ,GAAA,CAAI,EAAA,EAAI,EAAE,CAAA,EAAG,EAAE,EAAA,EAAI,IAAI,CAAA;AAE3D,MAAM,SAQT,CAAC,KAAA,KAAU,UAAUC,QAAA,CAAQ,KAAK,GAAG,KAAK;AAC9C,MAAA,CAAO,GAAA,GAAM,CAAC,KAAA,KAAU,SAAA,CAAUA,SAAQ,GAAA,CAAI,KAAK,GAAG,KAAK,CAAA;AAC3D,MAAA,Line truncated
@@ -0,0 +1,8 @@
const withInner = (codec, inner) => {
const result = codec;
result.inner = inner;
return result;
};
export { withInner };
//# sourceMappingURL=with-inner.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"with-inner.mjs","sources":["../../../../src/codecs/scale/with-inner.ts"],"sourcesContent":["export const withInner = <T, I>(codec: T, inner: I): T & { inner: I } => {\n const result: T & { inner: I } = codec as any\n result.inner = inner\n return result\n}\n"],"names":[],"mappings":"AAAO,MAAM,SAAA,GAAY,CAAO,KAAA,EAAU,KAAA,KAA+B;AACvE,EAAA,MAAM,MAAA,GAA2B,KAAA;AACjC,EAAA,MAAA,CAAO,KAAA,GAAQ,KAAA;AACf,EAAA,OAAO,MAAA;AACT;;;;"}
@@ -0,0 +1,26 @@
import { enhanceCodec, u8 } from 'scale-ts';
const TYPES = {
bare: 0,
0: "bare",
general: 1,
1: "general",
signed: 2,
2: "signed"
};
const extrinsicFormat = enhanceCodec(
u8,
({ version, type }) => version + (TYPES[type] << 6),
(v) => {
const version = v & 63;
const type = v >> 6;
if (version === 4 && (type === TYPES.bare || type === TYPES.signed))
return { version, type: TYPES[type] };
if (version === 5 && (type === TYPES.bare || type === TYPES.general))
return { version, type: TYPES[type] };
throw new Error(`ExtrinsicFormat ${v} not valid`);
}
);
export { extrinsicFormat };
//# sourceMappingURL=extrinsic-format.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"extrinsic-format.mjs","sources":["../../../src/extrinsics/extrinsic-format.ts"],"sourcesContent":["import { enhanceCodec, u8 } from \"scale-ts\"\n\nconst TYPES = {\n bare: 0b00,\n 0b00: \"bare\",\n general: 0b01,\n 0b01: \"general\",\n signed: 0b10,\n 0b10: \"signed\",\n} as const\n\nexport type ExtrinsicFormat =\n | { version: 4; type: \"bare\" | \"signed\" }\n | { version: 5; type: \"bare\" | \"general\" }\n\nexport const extrinsicFormat = enhanceCodec<number, ExtrinsicFormat>(\n u8,\n ({ version, type }) => version + (TYPES[type] << 6),\n (v) => {\n const version = v & 0x3f // 0b0011_1111\n const type = v >> 6\n if (version === 4 && (type === TYPES.bare || type === TYPES.signed))\n return { version, type: TYPES[type] }\n if (version === 5 && (type === TYPES.bare || type === TYPES.general))\n return { version, type: TYPES[type] }\n throw new Error(`ExtrinsicFormat ${v} not valid`)\n },\n)\n"],"names":[],"mappings":";;AAEA,MAAM,KAAA,GAAQ;AAAA,EACZ,IAAA,EAAM,CAAA;AAAA,EACN,CAAA,EAAM,MAAA;AAAA,EACN,OAAA,EAAS,CAAA;AAAA,EACT,CAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,CAAA;AAAA,EACR,CAAA,EAAM;AACR,CAAA;AAMO,MAAM,eAAA,GAAkB,YAAA;AAAA,EAC7B,EAAA;AAAA,EACA,CAAC,EAAE,OAAA,EAAS,IAAA,OAAW,OAAA,IAAW,KAAA,CAAM,IAAI,CAAA,IAAK,CAAA,CAAA;AAAA,EACjD,CAAC,CAAA,KAAM;AACL,IAAA,MAAM,UAAU,CAAA,GAAI,EAAA;AACpB,IAAA,MAAM,OAAO,CAAA,IAAK,CAAA;AAClB,IAAA,IAAI,YAAY,CAAA,KAAM,IAAA,KAAS,KAAA,CAAM,IAAA,IAAQ,SAAS,KAAA,CAAM,MAAA,CAAA;AAC1D,MAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,KAAA,CAAM,IAAI,CAAA,EAAE;AACtC,IAAA,IAAI,YAAY,CAAA,KAAM,IAAA,KAAS,KAAA,CAAM,IAAA,IAAQ,SAAS,KAAA,CAAM,OAAA,CAAA;AAC1D,MAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,KAAA,CAAM,IAAI,CAAA,EAAE;AACtC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,CAAC,CAAA,UAAA,CAAY,CAAA;AAAA,EAClD;AACF;;;;"}
+11
View File
@@ -0,0 +1,11 @@
import { mergeUint8 } from '@pezkuwi/papi-utils';
import { blake2b } from '@noble/hashes/blake2.js';
const len32$1 = { dkLen: 32 };
const Blake2256 = (encoded) => blake2b(encoded, len32$1);
const len16 = { dkLen: 16 };
const Blake2128 = (encoded) => blake2b(encoded, len16);
const Blake2128Concat = (encoded) => mergeUint8([Blake2128(encoded), encoded]);
export { Blake2128, Blake2128Concat, Blake2256 };
//# sourceMappingURL=blake2.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"blake2.mjs","sources":["../../../src/hashes/blake2.ts"],"sourcesContent":["import { mergeUint8 } from \"@pezkuwi/papi-utils\"\nimport { blake2b } from \"@noble/hashes/blake2.js\"\n\nconst len32 = { dkLen: 32 }\nexport const Blake2256 = (encoded: Uint8Array) => blake2b(encoded, len32)\n\nconst len16 = { dkLen: 16 }\nexport const Blake2128 = (encoded: Uint8Array) => blake2b(encoded, len16)\n\nexport const Blake2128Concat = (encoded: Uint8Array) =>\n mergeUint8([Blake2128(encoded), encoded])\n"],"names":["len32"],"mappings":";;;AAGA,MAAMA,OAAA,GAAQ,EAAE,KAAA,EAAO,EAAA,EAAG;AACnB,MAAM,SAAA,GAAY,CAAC,OAAA,KAAwB,OAAA,CAAQ,SAASA,OAAK;AAExE,MAAM,KAAA,GAAQ,EAAE,KAAA,EAAO,EAAA,EAAG;AACnB,MAAM,SAAA,GAAY,CAAC,OAAA,KAAwB,OAAA,CAAQ,SAAS,KAAK;AAEjE,MAAM,eAAA,GAAkB,CAAC,OAAA,KAC9B,UAAA,CAAW,CAAC,SAAA,CAAU,OAAO,CAAA,EAAG,OAAO,CAAC;;;;"}
@@ -0,0 +1,9 @@
import { mergeUint8 } from '@pezkuwi/papi-utils';
import { blake3 } from '@noble/hashes/blake3.js';
const len32 = { dkLen: 32 };
const Blake3256 = (encoded) => blake3(encoded, len32);
const Blake3256Concat = (encoded) => mergeUint8([Blake3256(encoded), encoded]);
export { Blake3256, Blake3256Concat };
//# sourceMappingURL=blake3.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"blake3.mjs","sources":["../../../src/hashes/blake3.ts"],"sourcesContent":["import { mergeUint8 } from \"@pezkuwi/papi-utils\"\nimport { blake3 } from \"@noble/hashes/blake3.js\"\n\nconst len32 = { dkLen: 32 }\nexport const Blake3256 = (encoded: Uint8Array) => blake3(encoded, len32)\n\nexport const Blake3256Concat = (encoded: Uint8Array) =>\n mergeUint8([Blake3256(encoded), encoded])\n"],"names":[],"mappings":";;;AAGA,MAAM,KAAA,GAAQ,EAAE,KAAA,EAAO,EAAA,EAAG;AACnB,MAAM,SAAA,GAAY,CAAC,OAAA,KAAwB,MAAA,CAAO,SAAS,KAAK;AAEhE,MAAM,eAAA,GAAkB,CAAC,OAAA,KAC9B,UAAA,CAAW,CAAC,SAAA,CAAU,OAAO,CAAA,EAAG,OAAO,CAAC;;;;"}
+134
View File
@@ -0,0 +1,134 @@
const bigintFromU16 = (v0, v1, v2, v3) => new DataView(new Uint16Array([v0, v1, v2, v3]).buffer).getBigUint64(0, true);
const MASK_64 = 2n ** 64n - 1n;
const rotl = (input, nBits) => input << nBits & MASK_64 | input >> 64n - nBits;
const multiply = (a, b) => a * b & MASK_64;
const add = (a, b) => a + b & MASK_64;
const PRIME64_1 = 11400714785074694791n;
const PRIME64_2 = 14029467366897019727n;
const PRIME64_3 = 1609587929392839161n;
const PRIME64_4 = 9650029242287828579n;
const PRIME64_5 = 2870177450012600261n;
function h64(input, seed = 0n) {
let v1 = add(add(seed, PRIME64_1), PRIME64_2);
let v2 = add(seed, PRIME64_2);
let v3 = seed;
let v4 = seed - PRIME64_1;
let totalLen = input.length;
let memsize = 0;
let memory = null;
(function update() {
let p2 = 0;
let bEnd = p2 + totalLen;
if (!totalLen) return;
memory = new Uint8Array(32);
if (totalLen < 32) {
memory.set(input.subarray(0, totalLen), memsize);
memsize += totalLen;
return;
}
if (p2 <= bEnd - 32) {
const limit = bEnd - 32;
do {
let other;
other = bigintFromU16(
input[p2 + 1] << 8 | input[p2],
input[p2 + 3] << 8 | input[p2 + 2],
input[p2 + 5] << 8 | input[p2 + 4],
input[p2 + 7] << 8 | input[p2 + 6]
);
v1 = multiply(rotl(add(v1, multiply(other, PRIME64_2)), 31n), PRIME64_1);
p2 += 8;
other = bigintFromU16(
input[p2 + 1] << 8 | input[p2],
input[p2 + 3] << 8 | input[p2 + 2],
input[p2 + 5] << 8 | input[p2 + 4],
input[p2 + 7] << 8 | input[p2 + 6]
);
v2 = multiply(rotl(add(v2, multiply(other, PRIME64_2)), 31n), PRIME64_1);
p2 += 8;
other = bigintFromU16(
input[p2 + 1] << 8 | input[p2],
input[p2 + 3] << 8 | input[p2 + 2],
input[p2 + 5] << 8 | input[p2 + 4],
input[p2 + 7] << 8 | input[p2 + 6]
);
v3 = multiply(rotl(add(v3, multiply(other, PRIME64_2)), 31n), PRIME64_1);
p2 += 8;
other = bigintFromU16(
input[p2 + 1] << 8 | input[p2],
input[p2 + 3] << 8 | input[p2 + 2],
input[p2 + 5] << 8 | input[p2 + 4],
input[p2 + 7] << 8 | input[p2 + 6]
);
v4 = multiply(rotl(add(v4, multiply(other, PRIME64_2)), 31n), PRIME64_1);
p2 += 8;
} while (p2 <= limit);
}
if (p2 < bEnd) {
memory.set(input.subarray(p2, bEnd), memsize);
memsize = bEnd - p2;
}
})();
input = memory || input;
let result;
let p = 0;
if (totalLen >= 32) {
result = rotl(v1, 1n);
result = add(result, rotl(v2, 7n));
result = add(result, rotl(v3, 12n));
result = add(result, rotl(v4, 18n));
v1 = multiply(rotl(multiply(v1, PRIME64_2), 31n), PRIME64_1);
result = result ^ v1;
result = add(multiply(result, PRIME64_1), PRIME64_4);
v2 = multiply(rotl(multiply(v2, PRIME64_2), 31n), PRIME64_1);
result = result ^ v2;
result = add(multiply(result, PRIME64_1), PRIME64_4);
v3 = multiply(rotl(multiply(v3, PRIME64_2), 31n), PRIME64_1);
result = result ^ v3;
result = add(multiply(result, PRIME64_1), PRIME64_4);
v4 = multiply(rotl(multiply(v4, PRIME64_2), 31n), PRIME64_1);
result = result ^ v4;
result = add(multiply(result, PRIME64_1), PRIME64_4);
} else {
result = add(seed, PRIME64_5);
}
result = add(result, BigInt(totalLen));
while (p <= memsize - 8) {
let temp2 = bigintFromU16(
input[p + 1] << 8 | input[p],
input[p + 3] << 8 | input[p + 2],
input[p + 5] << 8 | input[p + 4],
input[p + 7] << 8 | input[p + 6]
);
temp2 = multiply(rotl(multiply(temp2, PRIME64_2), 31n), PRIME64_1);
result = add(multiply(rotl(result ^ temp2, 27n), PRIME64_1), PRIME64_4);
p += 8;
}
if (p + 4 <= memsize) {
let temp2 = multiply(
bigintFromU16(
input[p + 1] << 8 | input[p],
input[p + 3] << 8 | input[p + 2],
0,
0
),
PRIME64_1
);
result = add(multiply(rotl(result ^ temp2, 23n), PRIME64_2), PRIME64_3);
p += 4;
}
while (p < memsize) {
const temp2 = multiply(bigintFromU16(input[p++], 0, 0, 0), PRIME64_5);
result = multiply(rotl(result ^ temp2, 11n), PRIME64_1);
}
let temp = result >> 33n;
result = multiply(result ^ temp, PRIME64_2);
temp = result >> 29n;
result = multiply(result ^ temp, PRIME64_3);
temp = result >> 32n;
result ^= temp;
return result;
}
export { h64 };
//# sourceMappingURL=h64.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"h64.mjs","sources":["../../../src/hashes/h64.ts"],"sourcesContent":["// Adapted implementation based on: https://github.com/pierrec/js-xxhash/blob/7ff5ced282f97dba121109d7013e0fa80360398c/lib/xxhash64.js\n\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n\n// helper functions\nconst bigintFromU16 = (\n v0: number,\n v1: number,\n v2: number,\n v3: number,\n): bigint =>\n new DataView(new Uint16Array([v0, v1, v2, v3]).buffer).getBigUint64(0, true)\n\nconst MASK_64 = 2n ** 64n - 1n\n\nconst rotl = (input: bigint, nBits: bigint) =>\n ((input << nBits) & MASK_64) | (input >> (64n - nBits))\n\nconst multiply = (a: bigint, b: bigint) => (a * b) & MASK_64\n\nconst add = (a: bigint, b: bigint) => (a + b) & MASK_64\n\n// constants\nconst PRIME64_1 = 11400714785074694791n\nconst PRIME64_2 = 14029467366897019727n\nconst PRIME64_3 = 1609587929392839161n\nconst PRIME64_4 = 9650029242287828579n\nconst PRIME64_5 = 2870177450012600261n\n\nexport function h64(input: Uint8Array, seed: bigint = 0n) {\n let v1 = add(add(seed, PRIME64_1), PRIME64_2)\n let v2 = add(seed, PRIME64_2)\n let v3 = seed\n let v4 = seed - PRIME64_1\n let totalLen = input.length\n let memsize = 0\n let memory: Uint8Array | null = null\n\n ;(function update() {\n let p = 0\n let bEnd = p + totalLen\n\n if (!totalLen) return\n\n memory = new Uint8Array(32)\n\n if (totalLen < 32) {\n memory.set(input.subarray(0, totalLen), memsize)\n\n memsize += totalLen\n return\n }\n\n if (p <= bEnd - 32) {\n const limit = bEnd - 32\n\n do {\n let other\n other = bigintFromU16(\n (input[p + 1] << 8) | input[p],\n (input[p + 3] << 8) | input[p + 2],\n (input[p + 5] << 8) | input[p + 4],\n (input[p + 7] << 8) | input[p + 6],\n )\n v1 = multiply(rotl(add(v1, multiply(other, PRIME64_2)), 31n), PRIME64_1)\n p += 8\n other = bigintFromU16(\n (input[p + 1] << 8) | input[p],\n (input[p + 3] << 8) | input[p + 2],\n (input[p + 5] << 8) | input[p + 4],\n (input[p + 7] << 8) | input[p + 6],\n )\n\n v2 = multiply(rotl(add(v2, multiply(other, PRIME64_2)), 31n), PRIME64_1)\n p += 8\n other = bigintFromU16(\n (input[p + 1] << 8) | input[p],\n (input[p + 3] << 8) | input[p + 2],\n (input[p + 5] << 8) | input[p + 4],\n (input[p + 7] << 8) | input[p + 6],\n )\n\n v3 = multiply(rotl(add(v3, multiply(other, PRIME64_2)), 31n), PRIME64_1)\n p += 8\n other = bigintFromU16(\n (input[p + 1] << 8) | input[p],\n (input[p + 3] << 8) | input[p + 2],\n (input[p + 5] << 8) | input[p + 4],\n (input[p + 7] << 8) | input[p + 6],\n )\n v4 = multiply(rotl(add(v4, multiply(other, PRIME64_2)), 31n), PRIME64_1)\n p += 8\n } while (p <= limit)\n }\n\n if (p < bEnd) {\n memory.set(input.subarray(p, bEnd), memsize)\n memsize = bEnd - p\n }\n })()\n\n input = memory || input\n\n let result: bigint\n let p = 0\n\n if (totalLen >= 32) {\n result = rotl(v1, 1n)\n result = add(result, rotl(v2, 7n))\n result = add(result, rotl(v3, 12n))\n result = add(result, rotl(v4, 18n))\n\n v1 = multiply(rotl(multiply(v1, PRIME64_2), 31n), PRIME64_1)\n result = result ^ v1\n result = add(multiply(result, PRIME64_1), PRIME64_4)\n\n v2 = multiply(rotl(multiply(v2, PRIME64_2), 31n), PRIME64_1)\n result = result ^ v2\n result = add(multiply(result, PRIME64_1), PRIME64_4)\n\n v3 = multiply(rotl(multiply(v3, PRIME64_2), 31n), PRIME64_1)\n result = result ^ v3\n result = add(multiply(result, PRIME64_1), PRIME64_4)\n\n v4 = multiply(rotl(multiply(v4, PRIME64_2), 31n), PRIME64_1)\n result = result ^ v4\n result = add(multiply(result, PRIME64_1), PRIME64_4)\n } else {\n result = add(seed, PRIME64_5)\n }\n\n result = add(result, BigInt(totalLen))\n\n while (p <= memsize - 8) {\n let temp = bigintFromU16(\n (input[p + 1] << 8) | input[p],\n (input[p + 3] << 8) | input[p + 2],\n (input[p + 5] << 8) | input[p + 4],\n (input[p + 7] << 8) | input[p + 6],\n )\n temp = multiply(rotl(multiply(temp, PRIME64_2), 31n), PRIME64_1)\n result = add(multiply(rotl(result ^ temp, 27n), PRIME64_1), PRIME64_4)\n p += 8\n }\n\n if (p + 4 <= memsize) {\n let temp = multiply(\n bigintFromU16(\n (input[p + 1] << 8) | input[p],\n (input[p + 3] << 8) | input[p + 2],\n 0,\n 0,\n ),\n PRIME64_1,\n )\n\n result = add(multiply(rotl(result ^ temp, 23n), PRIME64_2), PRIME64_3)\n p += 4\n }\n\n while (p < memsize) {\n const temp = multiply(bigintFromU16(input[p++], 0, 0, 0), PRIME64_5)\n result = multiply(rotl(result ^ temp, 11n), PRIME64_1)\n }\n\n let temp = rLine truncated
@@ -0,0 +1,4 @@
const Identity = (encoded) => encoded;
export { Identity };
//# sourceMappingURL=identity.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"identity.mjs","sources":["../../../src/hashes/identity.ts"],"sourcesContent":["export const Identity = (encoded: Uint8Array): Uint8Array => encoded\n"],"names":[],"mappings":"AAAO,MAAM,QAAA,GAAW,CAAC,OAAA,KAAoC;;;;"}
@@ -0,0 +1,6 @@
import { keccak_256 } from '@noble/hashes/sha3.js';
const Keccak256 = keccak_256;
export { Keccak256 };
//# sourceMappingURL=keccak.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"keccak.mjs","sources":["../../../src/hashes/keccak.ts"],"sourcesContent":["import { keccak_256 } from \"@noble/hashes/sha3.js\"\n\nexport const Keccak256: (input: Uint8Array) => Uint8Array = keccak_256\n"],"names":[],"mappings":";;AAEO,MAAM,SAAA,GAA+C;;;;"}
+24
View File
@@ -0,0 +1,24 @@
import { mergeUint8 } from '@pezkuwi/papi-utils';
import { u64 } from 'scale-ts';
import { h64 } from './h64.mjs';
const Twox128 = (input) => {
const result = new Uint8Array(16);
const dv = new DataView(result.buffer);
dv.setBigUint64(0, h64(input), true);
dv.setBigUint64(8, h64(input, 1n), true);
return result;
};
const Twox256 = (input) => {
const result = new Uint8Array(32);
const dv = new DataView(result.buffer);
dv.setBigUint64(0, h64(input), true);
dv.setBigUint64(8, h64(input, 1n), true);
dv.setBigUint64(16, h64(input, 2n), true);
dv.setBigUint64(24, h64(input, 3n), true);
return result;
};
const Twox64Concat = (encoded) => mergeUint8([u64.enc(h64(encoded)), encoded]);
export { Twox128, Twox256, Twox64Concat };
//# sourceMappingURL=twoX.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"twoX.mjs","sources":["../../../src/hashes/twoX.ts"],"sourcesContent":["import { mergeUint8 } from \"@pezkuwi/papi-utils\"\nimport { u64 } from \"scale-ts\"\nimport { h64 } from \"./h64\"\n\nexport const Twox128 = (input: Uint8Array): Uint8Array => {\n const result = new Uint8Array(16)\n const dv = new DataView(result.buffer)\n\n dv.setBigUint64(0, h64(input), true)\n dv.setBigUint64(8, h64(input, 1n), true)\n\n return result\n}\n\nexport const Twox256 = (input: Uint8Array): Uint8Array => {\n const result = new Uint8Array(32)\n const dv = new DataView(result.buffer)\n\n dv.setBigUint64(0, h64(input), true)\n dv.setBigUint64(8, h64(input, 1n), true)\n dv.setBigUint64(16, h64(input, 2n), true)\n dv.setBigUint64(24, h64(input, 3n), true)\n\n return result\n}\n\nexport const Twox64Concat = (encoded: Uint8Array): Uint8Array =>\n mergeUint8([u64.enc(h64(encoded)), encoded])\n"],"names":[],"mappings":";;;;AAIO,MAAM,OAAA,GAAU,CAAC,KAAA,KAAkC;AACxD,EAAA,MAAM,MAAA,GAAS,IAAI,UAAA,CAAW,EAAE,CAAA;AAChC,EAAA,MAAM,EAAA,GAAK,IAAI,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA;AAErC,EAAA,EAAA,CAAG,YAAA,CAAa,CAAA,EAAG,GAAA,CAAI,KAAK,GAAG,IAAI,CAAA;AACnC,EAAA,EAAA,CAAG,aAAa,CAAA,EAAG,GAAA,CAAI,KAAA,EAAO,EAAE,GAAG,IAAI,CAAA;AAEvC,EAAA,OAAO,MAAA;AACT;AAEO,MAAM,OAAA,GAAU,CAAC,KAAA,KAAkC;AACxD,EAAA,MAAM,MAAA,GAAS,IAAI,UAAA,CAAW,EAAE,CAAA;AAChC,EAAA,MAAM,EAAA,GAAK,IAAI,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA;AAErC,EAAA,EAAA,CAAG,YAAA,CAAa,CAAA,EAAG,GAAA,CAAI,KAAK,GAAG,IAAI,CAAA;AACnC,EAAA,EAAA,CAAG,aAAa,CAAA,EAAG,GAAA,CAAI,KAAA,EAAO,EAAE,GAAG,IAAI,CAAA;AACvC,EAAA,EAAA,CAAG,aAAa,EAAA,EAAI,GAAA,CAAI,KAAA,EAAO,EAAE,GAAG,IAAI,CAAA;AACxC,EAAA,EAAA,CAAG,aAAa,EAAA,EAAI,GAAA,CAAI,KAAA,EAAO,EAAE,GAAG,IAAI,CAAA;AAExC,EAAA,OAAO,MAAA;AACT;AAEO,MAAM,YAAA,GAAe,CAAC,OAAA,KAC3B,UAAA,CAAW,CAAC,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,OAAO,CAAC,CAAA,EAAG,OAAO,CAAC;;;;"}
+35
View File
@@ -0,0 +1,35 @@
export { AccountId } from './codecs/scale/AccountId.mjs';
export { Bin, Binary, FixedSizeBinary } from './codecs/scale/Binary.mjs';
export { bitSequence } from './codecs/scale/bitSequence.mjs';
export { char } from './codecs/scale/char.mjs';
export { compactBn, compactNumber } from './codecs/scale/compact.mjs';
export { Hex } from './codecs/scale/Hex.mjs';
export { fixedStr } from './codecs/scale/fixed-str.mjs';
export { Bytes, _void, bool, compact, createCodec, createDecoder, enhanceCodec, enhanceDecoder, enhanceEncoder, i128, i16, i256, i32, i64, i8, str, u128, u16, u256, u32, u64, u8 } from 'scale-ts';
export { Self, selfDecoder, selfEncoder } from './codecs/scale/Self.mjs';
export { ScaleEnum, Variant } from './codecs/scale/Variant.mjs';
export { ethAccount } from './codecs/scale/ethAccount.mjs';
export { Option, Result, Struct, Tuple, Vector } from './codecs/scale/shaped.mjs';
export { BitSeq } from './codecs/scale/BitSeq.mjs';
export { blockHeader } from './codecs/blockHeader.mjs';
export { decAnyMetadata, metadata } from './codecs/metadata/metadata.mjs';
export { v14 } from './codecs/metadata/v14.mjs';
export { v15 } from './codecs/metadata/v15.mjs';
export { v16 } from './codecs/metadata/v16.mjs';
export { unifyMetadata } from './codecs/metadata/unified.mjs';
export { lookup as v14Lookup } from './codecs/metadata/lookup.mjs';
export { extrinsicFormat } from './extrinsics/extrinsic-format.mjs';
export { Blake2128, Blake2128Concat, Blake2256 } from './hashes/blake2.mjs';
export { Blake3256, Blake3256Concat } from './hashes/blake3.mjs';
export { Identity } from './hashes/identity.mjs';
export { Twox128, Twox256, Twox64Concat } from './hashes/twoX.mjs';
export { h64 } from './hashes/h64.mjs';
export { Keccak256 } from './hashes/keccak.mjs';
export { Storage } from './storage.mjs';
export { Enum, _Enum } from './types/enum.mjs';
export { fromBufferToBase58, getSs58AddressInfo } from './utils/ss58-util.mjs';
export { getMultisigAccountId, sortMultisigSignatories } from './utils/multisig.mjs';
export { TrieNodeHeaders } from './trie/types.mjs';
export { trieNodeDec } from './trie/node-decoder.mjs';
export { TrieNodeWithHash, validateProofs } from './trie/proofs.mjs';
//# sourceMappingURL=index.mjs.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
+65
View File
@@ -0,0 +1,65 @@
import { mergeUint8, toHex, fromHex } from '@pezkuwi/papi-utils';
import { Blake2128Concat, Blake2128, Blake2256 } from './hashes/blake2.mjs';
import '@noble/hashes/blake3.js';
import { Identity } from './hashes/identity.mjs';
import { Twox128, Twox64Concat, Twox256 } from './hashes/twoX.mjs';
import '@noble/hashes/sha3.js';
const textEncoder = new TextEncoder();
const hashers = /* @__PURE__ */ new Map([
[Identity, 0],
[Twox64Concat, 8],
[Blake2128Concat, 16],
[Blake2128, -16],
[Blake2256, -32],
[Twox128, -16],
[Twox256, -32]
]);
const Storage = (pallet) => {
const palledEncoded = Twox128(textEncoder.encode(pallet));
return (name, ...encoders) => {
const palletItemEncoded = mergeUint8([
palledEncoded,
Twox128(textEncoder.encode(name))
]);
const palletItemEncodedHex = toHex(palletItemEncoded);
const dec = (key) => {
if (!key.startsWith(palletItemEncodedHex))
throw new Error(`key does not match this storage (${pallet}.${name})`);
if (encoders.length === 0) return [];
const argsKey = fromHex(key.slice(palletItemEncodedHex.length));
const result = new Array(encoders.length);
for (let i = 0, cur = 0; i < encoders.length; i++) {
const [codec, hasher] = encoders[i];
const hBytes = hashers.get(hasher);
if (hBytes == null) throw new Error("Unknown hasher");
if (hBytes < 0) {
const opaqueBytes = hBytes * -1;
result[i] = toHex(argsKey.slice(cur, cur + opaqueBytes));
cur += opaqueBytes;
} else {
cur += hBytes;
result[i] = codec.dec(argsKey.slice(cur));
cur += codec.enc(result[i]).length;
}
}
return result;
};
const fns = encoders.map(
([{ enc: enc2 }, hash]) => (val) => hash(enc2(val))
);
const enc = (...args) => toHex(
mergeUint8([
palletItemEncoded,
...args.map((val, idx) => fns[idx](val))
])
);
return {
enc,
dec
};
};
};
export { Storage };
//# sourceMappingURL=storage.mjs.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"storage.mjs","sources":["../../src/storage.ts"],"sourcesContent":["import { fromHex, mergeUint8, toHex } from \"@pezkuwi/papi-utils\"\nimport type { Codec } from \"scale-ts\"\nimport {\n Blake2128,\n Blake2128Concat,\n Blake2256,\n Identity,\n Twox128,\n Twox256,\n Twox64Concat,\n} from \"./hashes\"\n\nexport type EncoderWithHash<T> = [Codec<T>, (input: Uint8Array) => Uint8Array]\n\nconst textEncoder = new TextEncoder()\n\n// the value indicates:\n// - when positive: the number of bytes to skip before reaching the transparent-encoded key\n// - when negative: the number of bytes that the opaque hasher will generate\nconst hashers: Map<(input: Uint8Array) => Uint8Array, number> = new Map([\n [Identity, 0],\n [Twox64Concat, 8],\n [Blake2128Concat, 16],\n [Blake2128, -16],\n [Blake2256, -32],\n [Twox128, -16],\n [Twox256, -32],\n])\n\nexport type OpaqueKeyHash = string & { __opaqueKeyHash?: unknown }\n\nexport const Storage = (pallet: string) => {\n const palledEncoded = Twox128(textEncoder.encode(pallet))\n return <A extends Array<EncoderWithHash<any>>>(\n name: string,\n ...encoders: [...A]\n ): {\n enc: (\n ...args: {\n [K in keyof A]: A[K] extends EncoderWithHash<infer V> ? V : unknown\n }\n ) => string\n dec: (value: string) => {\n [K in keyof A]: A[K] extends EncoderWithHash<infer V> ? V : unknown\n }\n } => {\n const palletItemEncoded = mergeUint8([\n palledEncoded,\n Twox128(textEncoder.encode(name)),\n ])\n\n const palletItemEncodedHex = toHex(palletItemEncoded)\n\n const dec = (\n key: string,\n ): {\n [K in keyof A]: A[K] extends EncoderWithHash<infer V> ? V : unknown\n } => {\n if (!key.startsWith(palletItemEncodedHex))\n throw new Error(`key does not match this storage (${pallet}.${name})`)\n\n if (encoders.length === 0) return [] as any\n\n const argsKey = fromHex(key.slice(palletItemEncodedHex.length))\n const result = new Array<any>(encoders.length)\n for (let i = 0, cur = 0; i < encoders.length; i++) {\n const [codec, hasher] = encoders[i]\n const hBytes = hashers.get(hasher)\n if (hBytes == null) throw new Error(\"Unknown hasher\")\n if (hBytes < 0) {\n const opaqueBytes = hBytes * -1\n result[i] = toHex(argsKey.slice(cur, cur + opaqueBytes))\n cur += opaqueBytes\n } else {\n cur += hBytes\n result[i] = codec.dec(argsKey.slice(cur))\n cur += codec.enc(result[i]).length\n }\n }\n return result as any\n }\n\n const fns = encoders.map(\n ([{ enc }, hash]) =>\n (val: any) =>\n hash(enc(val)),\n )\n\n const enc = (\n ...args: {\n [K in keyof A]: A[K] extends EncoderWithHash<infer V> ? V : unknown\n }\n ): string =>\n toHex(\n mergeUint8([\n palletItemEncoded,\n ...args.map((val, idx) => fns[idx](val)),\n ]),\n )\n\n return {\n enc,\n dec,\n }\n }\n}\n"],"names":["enc"],"mappings":";;;;;;;AAcA,MAAM,WAAA,GAAc,IAAI,WAAA,EAAY;AAKpC,MAAM,OAAA,uBAA8D,GAAA,CAAI;AAAA,EACtE,CAAC,UAAU,CAAC,CAAA;AAAA,EACZ,CAAC,cAAc,CAAC,CAAA;AAAA,EAChB,CAAC,iBAAiB,EAAE,CAAA;AAAA,EACpB,CAAC,WAAW,GAAG,CAAA;AAAA,EACf,CAAC,WAAW,GAAG,CAAA;AAAA,EACf,CAAC,SAAS,GAAG,CAAA;AAAA,EACb,CAAC,SAAS,GAAG;AACf,CAAC,CAAA;AAIM,MAAM,OAAA,GAAU,CAAC,MAAA,KAAmB;AACzC,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,WAAA,CAAY,MAAA,CAAO,MAAM,CAAC,CAAA;AACxD,EAAA,OAAO,CACL,SACG,QAAA,KAUA;AACH,IAAA,MAAM,oBAAoB,UAAA,CAAW;AAAA,MACnC,aAAA;AAAA,MACA,OAAA,CAAQ,WAAA,CAAY,MAAA,CAAO,IAAI,CAAC;AAAA,KACjC,CAAA;AAED,IAAA,MAAM,oBAAA,GAAuB,MAAM,iBAAiB,CAAA;AAEpD,IAAA,MAAM,GAAA,GAAM,CACV,GAAA,KAGG;AACH,MAAA,IAAI,CAAC,GAAA,CAAI,UAAA,CAAW,oBAAoB,CAAA;AACtC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG,CAAA;AAEvE,MAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAEnC,MAAA,MAAM,UAAU,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,oBAAA,CAAqB,MAAM,CAAC,CAAA;AAC9D,MAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAW,QAAA,CAAS,MAAM,CAAA;AAC7C,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,GAAA,GAAM,GAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACjD,QAAA,MAAM,CAAC,KAAA,EAAO,MAAM,CAAA,GAAI,SAAS,CAAC,CAAA;AAClC,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AACjC,QAAA,IAAI,MAAA,IAAU,IAAA,EAAM,MAAM,IAAI,MAAM,gBAAgB,CAAA;AACpD,QAAA,IAAI,SAAS,CAAA,EAAG;AACd,UAAA,MAAM,cAAc,MAAA,GAAS,EAAA;AAC7B,UAAA,MAAA,CAAO,CAAC,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,GAAA,EAAK,GAAA,GAAM,WAAW,CAAC,CAAA;AACvD,UAAA,GAAA,IAAO,WAAA;AAAA,QACT,CAAA,MAAO;AACL,UAAA,GAAA,IAAO,MAAA;AACP,UAAA,MAAA,CAAO,CAAC,CAAA,GAAI,KAAA,CAAM,IAAI,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAC,CAAA;AACxC,UAAA,GAAA,IAAO,KAAA,CAAM,GAAA,CAAI,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,MAAA;AAAA,QAC9B;AAAA,MACF;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,MAAM,QAAA,CAAS,GAAA;AAAA,MACnB,CAAC,CAAC,EAAE,GAAA,EAAAA,IAAAA,EAAI,EAAG,IAAI,CAAA,KACb,CAAC,GAAA,KACC,IAAA,CAAKA,IAAAA,CAAI,GAAG,CAAC;AAAA,KACnB;AAEA,IAAA,MAAM,GAAA,GAAM,IACP,IAALine truncated
@@ -0,0 +1,66 @@
import { u8, createDecoder, u16 } from 'scale-ts';
import '../utils/ss58-util.mjs';
import '../codecs/scale/Binary.mjs';
import '../codecs/scale/bitSequence.mjs';
import '../codecs/scale/char.mjs';
import '../codecs/scale/compact.mjs';
import { Hex } from '../codecs/scale/Hex.mjs';
import '../codecs/scale/fixed-str.mjs';
import '../codecs/scale/Variant.mjs';
import '../codecs/scale/ethAccount.mjs';
import '../codecs/scale/shaped.mjs';
import '../codecs/scale/BitSeq.mjs';
import '../codecs/blockHeader.mjs';
import '../codecs/metadata/metadata.mjs';
import '../codecs/metadata/v14.mjs';
import '../codecs/metadata/v15.mjs';
import '../codecs/metadata/v16.mjs';
import '../codecs/metadata/lookup.mjs';
import { TrieNodeHeaders } from './types.mjs';
const varHex = Hex().dec;
const allHex = Hex(Infinity).dec;
const hex32 = Hex(32).dec;
const byte = u8.dec;
const getHeader = (bytes) => {
const firstByte = byte(bytes);
let bitsLeft = 6;
const typeId = firstByte >> bitsLeft;
const type = typeId ? typeId === 1 ? TrieNodeHeaders.Leaf : typeId === 2 ? TrieNodeHeaders.Branch : TrieNodeHeaders.BranchWithVal : firstByte >> --bitsLeft ? TrieNodeHeaders.LeafWithHash : firstByte >> --bitsLeft ? TrieNodeHeaders.BranchWithHash : firstByte ? TrieNodeHeaders.Reserved : TrieNodeHeaders.Empty;
let nNibles = firstByte & 255 >> 8 - bitsLeft;
if (nNibles === 2 ** bitsLeft - 1) {
let current;
do
nNibles += current = byte(bytes);
while (current === 255);
}
return {
type,
partialKey: Hex(Math.ceil(nNibles / 2)).dec(bytes).slice(nNibles % 2 ? 3 : 2)
};
};
const trieNodeDec = createDecoder((bytes) => {
const header = getHeader(bytes);
const { type } = header;
if (type === "Empty" || type === "Reserved") return header;
if (type === "Leaf" || type === "LeafWithHash")
return {
...header,
value: allHex(bytes)
};
const bitmap = u16.dec(bytes);
const keys = [];
for (let i = 0; i < 16; i++) if (bitmap >> i & 1) keys.push(i.toString(16));
let value = null;
if (type === "BranchWithVal") value = varHex(bytes);
if (type === "BranchWithHash") value = hex32(bytes);
const result = {
...header,
children: Object.fromEntries(keys.map((key) => [key, varHex(bytes)]))
};
if (value !== null) result.value = value;
return result;
});
export { trieNodeDec };
//# sourceMappingURL=node-decoder.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"node-decoder.mjs","sources":["../../../src/trie/node-decoder.ts"],"sourcesContent":["import { createDecoder, Hex, u16, u8, type HexString } from \"../codecs\"\nimport { type TrieNodeHeaderKey, TrieNodeHeaders, type TrieNode } from \"./types\"\n\nconst varHex = Hex().dec\nconst allHex = Hex(Infinity).dec\nconst hex32 = Hex(32).dec\nconst byte = u8.dec\n\nconst getHeader = (\n bytes: Uint8Array,\n): { type: TrieNodeHeaderKey; partialKey: string } => {\n const firstByte = byte(bytes)\n\n let bitsLeft = 6\n const typeId = firstByte >> bitsLeft\n const type: TrieNodeHeaderKey = typeId\n ? typeId === 1\n ? TrieNodeHeaders.Leaf\n : typeId === 2\n ? TrieNodeHeaders.Branch\n : TrieNodeHeaders.BranchWithVal\n : firstByte >> --bitsLeft\n ? TrieNodeHeaders.LeafWithHash\n : firstByte >> --bitsLeft\n ? TrieNodeHeaders.BranchWithHash\n : firstByte\n ? TrieNodeHeaders.Reserved\n : TrieNodeHeaders.Empty\n\n let nNibles = firstByte & (0xff >> (8 - bitsLeft))\n if (nNibles === 2 ** bitsLeft - 1) {\n let current: number\n do nNibles += current = byte(bytes)\n while (current === 255)\n }\n\n return {\n type,\n partialKey: Hex(Math.ceil(nNibles / 2))\n .dec(bytes)\n .slice(nNibles % 2 ? 3 : 2),\n }\n}\n\nexport const trieNodeDec = createDecoder((bytes): TrieNode => {\n const header = getHeader(bytes)\n const { type } = header\n\n if (type === \"Empty\" || type === \"Reserved\") return header as TrieNode\n if (type === \"Leaf\" || type === \"LeafWithHash\")\n return {\n ...header,\n value: allHex(bytes),\n } as TrieNode\n\n const bitmap = u16.dec(bytes)\n const keys: string[] = []\n for (let i = 0; i < 16; i++) if ((bitmap >> i) & 1) keys.push(i.toString(16))\n\n let value: null | HexString = null\n if (type === \"BranchWithVal\") value = varHex(bytes)\n if (type === \"BranchWithHash\") value = hex32(bytes)\n\n const result: any = {\n ...header,\n children: Object.fromEntries(keys.map((key) => [key, varHex(bytes)])),\n }\n if (value !== null) result.value = value\n return result\n})\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAGA,MAAM,MAAA,GAAS,KAAI,CAAE,GAAA;AACrB,MAAM,MAAA,GAAS,GAAA,CAAI,QAAQ,CAAA,CAAE,GAAA;AAC7B,MAAM,KAAA,GAAQ,GAAA,CAAI,EAAE,CAAA,CAAE,GAAA;AACtB,MAAM,OAAO,EAAA,CAAG,GAAA;AAEhB,MAAM,SAAA,GAAY,CAChB,KAAA,KACoD;AACpD,EAAA,MAAM,SAAA,GAAY,KAAK,KAAK,CAAA;AAE5B,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,MAAM,SAAS,SAAA,IAAa,QAAA;AAC5B,EAAA,MAAM,IAAA,GAA0B,MAAA,GAC5B,MAAA,KAAW,CAAA,GACT,eAAA,CAAgB,OAChB,MAAA,KAAW,CAAA,GACT,eAAA,CAAgB,MAAA,GAChB,eAAA,CAAgB,aAAA,GACpB,aAAa,EAAE,QAAA,GACb,eAAA,CAAgB,YAAA,GAChB,SAAA,IAAa,EAAE,QAAA,GACb,eAAA,CAAgB,cAAA,GAChB,SAAA,GACE,eAAA,CAAgB,QAAA,GAChB,eAAA,CAAgB,KAAA;AAE1B,EAAA,IAAI,OAAA,GAAU,SAAA,GAAa,GAAA,IAAS,CAAA,GAAI,QAAA;AACxC,EAAA,IAAI,OAAA,KAAY,CAAA,IAAK,QAAA,GAAW,CAAA,EAAG;AACjC,IAAA,IAAI,OAAA;AACJ,IAAA;AAAG,MAAA,OAAA,IAAW,OAAA,GAAU,KAAK,KAAK,CAAA;AAAA,WAC3B,OAAA,KAAY,GAAA;AAAA,EACrB;AAEA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,UAAA,EAAY,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,UAAU,CAAC,CAAC,CAAA,CACnC,GAAA,CAAI,KAAK,CAAA,CACT,KAAA,CAAM,OAAA,GAAU,CAAA,GAAI,IAAI,CAAC;AAAA,GAC9B;AACF,CAAA;AAEO,MAAM,WAAA,GAAc,aAAA,CAAc,CAAC,KAAA,KAAoB;AAC5D,EAAA,MAAM,MAAA,GAAS,UAAU,KAAK,CAAA;AAC9B,EAAA,MAAM,EAAE,MAAK,GAAI,MAAA;AAEjB,EAAA,IAAI,IAAA,KAAS,OAAA,IAAW,IAAA,KAAS,UAAA,EAAY,OAAO,MAAA;AACpD,EAAA,IAAI,IAAA,KAAS,UAAU,IAAA,KAAS,cAAA;AAC9B,IAAA,OAAO;AAAA,MACL,GAAG,MAAA;AAAA,MACH,KAAA,EAAO,OAAO,KAAK;AAAA,KACrB;AAEF,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA;AAC5B,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,KAAK,IAAK,MAAA,IAAU,CAAA,GAAK,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,CAAA,CAAE,QAAA,CAAS,EAAE,CAAC,CAAA;AAE5E,EAAA,IAAI,KAAA,GAA0B,IAAA;AAC9B,EAAA,IAAI,IAAA,KAAS,eAAA,EAAiB,KAAA,GAAQ,MAAA,CAAO,KAAK,CAAA;AAClD,EAAA,IAAI,IAAA,KAAS,gBAAA,EAAkB,KAAA,GAAQ,KAAA,CAAM,KAAK,CAAA;AAElD,EAAA,MAAM,MAAA,GAAc;AAAA,IAClB,GAAG,MAAA;AAAA,IACH,QAAA,EAAU,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,CAAC,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAC,CAAC;AAAA,GACtE;AACA,EAAA,IAAI,KAAA,KAAU,IAAA,EAAM,MAAA,CAAO,KAAA,GAAQ,KAAA;AACnC,EAAA,OAAO,MAAA;AACT,CAAC;;;;"}
+75
View File
@@ -0,0 +1,75 @@
import { toHex } from '@pezkuwi/papi-utils';
import { createDecoder } from 'scale-ts';
import '../utils/ss58-util.mjs';
import '../codecs/scale/Binary.mjs';
import '../codecs/scale/bitSequence.mjs';
import '../codecs/scale/char.mjs';
import '../codecs/scale/compact.mjs';
import '../codecs/scale/Hex.mjs';
import '../codecs/scale/fixed-str.mjs';
import '../codecs/scale/Variant.mjs';
import '../codecs/scale/ethAccount.mjs';
import '../codecs/scale/shaped.mjs';
import '../codecs/scale/BitSeq.mjs';
import '../codecs/blockHeader.mjs';
import '../codecs/metadata/metadata.mjs';
import '../codecs/metadata/v14.mjs';
import '../codecs/metadata/v15.mjs';
import '../codecs/metadata/v16.mjs';
import '../codecs/metadata/lookup.mjs';
import { trieNodeDec } from './node-decoder.mjs';
import { Blake2256 } from '../hashes/blake2.mjs';
import '@noble/hashes/blake3.js';
import '@noble/hashes/sha3.js';
const TrieNodeWithHash = (hasher) => createDecoder((input) => {
const hash = toHex(hasher(new Uint8Array(input.buffer)));
try {
return {
hash,
...trieNodeDec(input)
};
} catch {
return { type: "Raw", hash, value: "" };
}
});
const validateProofs = (proofs, hasher = Blake2256) => {
const proofsList = proofs.map(TrieNodeWithHash(hasher));
const proofsRecord = Object.fromEntries(proofsList.map((p) => [p.hash, p]));
const hashes = proofsList.map((p) => p.hash);
const roots = new Set(hashes);
const setRawValue = (input) => {
if (input.value) return;
const val = proofs[hashes.indexOf(input.hash)];
input.value = typeof val === "string" ? val : toHex(val);
};
proofsList.forEach((p) => {
if ("children" in p) {
Object.values(p.children).forEach((hash) => {
const child = proofsRecord[hash];
if (child) {
child.parent = p.hash;
roots.delete(hash);
}
});
}
if (p.type === "BranchWithHash" || p.type === "LeafWithHash") {
const childHash = p.value;
const child = proofsRecord[childHash];
if (!child) return;
roots.delete(childHash);
if (child.type !== "Raw") {
Object.keys(child).forEach((k) => delete child[k]);
child.type = "Raw";
child.hash = childHash;
}
child.parent = p.hash;
setRawValue(child);
}
if (p.type === "Raw") setRawValue(p);
});
return roots.size === 1 ? { rootHash: roots.values().next().value, proofs: proofsRecord } : null;
};
export { TrieNodeWithHash, validateProofs };
//# sourceMappingURL=proofs.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"proofs.mjs","sources":["../../../src/trie/proofs.ts"],"sourcesContent":["import { toHex } from \"@pezkuwi/papi-utils\"\nimport { createDecoder, type HexString } from \"../codecs\"\nimport { trieNodeDec } from \"./node-decoder\"\nimport { Blake2256 } from \"@/hashes\"\nimport { type ProofTrieNode } from \"./types\"\n\nexport const TrieNodeWithHash = (hasher: (input: Uint8Array) => Uint8Array) =>\n createDecoder((input): ProofTrieNode => {\n const hash = toHex(hasher(new Uint8Array(input.buffer)))\n try {\n return {\n hash,\n ...trieNodeDec(input),\n }\n } catch {\n // Sometimes the proofs include random raw-values which are not trie-nodes\n return { type: \"Raw\", hash, value: \"\" }\n }\n })\n\nexport const validateProofs = <T extends HexString | Uint8Array>(\n proofs: Array<T>,\n hasher: (input: Uint8Array) => Uint8Array = Blake2256,\n): { rootHash: HexString; proofs: Record<HexString, ProofTrieNode> } | null => {\n const proofsList = proofs.map(TrieNodeWithHash(hasher))\n const proofsRecord = Object.fromEntries(proofsList.map((p) => [p.hash, p]))\n const hashes = proofsList.map((p) => p.hash)\n const roots = new Set(hashes)\n\n const setRawValue = (input: {\n type: \"Raw\"\n hash: HexString\n value: HexString\n }) => {\n if (input.value) return\n const val = proofs[hashes.indexOf(input.hash)!]\n input.value = typeof val === \"string\" ? val : toHex(val)\n }\n\n proofsList.forEach((p) => {\n if (\"children\" in p) {\n Object.values(p.children).forEach((hash) => {\n const child = proofsRecord[hash]\n if (child) {\n child.parent = p.hash\n roots.delete(hash)\n }\n })\n }\n\n if (p.type === \"BranchWithHash\" || p.type === \"LeafWithHash\") {\n const childHash = p.value\n const child = proofsRecord[childHash]\n if (!child) return\n\n roots.delete(childHash)\n if (child.type !== \"Raw\") {\n Object.keys(child).forEach((k) => delete (child as any)[k])\n ;(child as any).type = \"Raw\"\n child.hash = childHash\n }\n child.parent = p.hash\n setRawValue(child as any)\n }\n\n if (p.type === \"Raw\") setRawValue(p)\n })\n\n return roots.size === 1\n ? { rootHash: roots.values().next().value!, proofs: proofsRecord }\n : null\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAMO,MAAM,gBAAA,GAAmB,CAAC,MAAA,KAC/B,aAAA,CAAc,CAAC,KAAA,KAAyB;AACtC,EAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAI,WAAW,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA;AACvD,EAAA,IAAI;AACF,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,GAAG,YAAY,KAAK;AAAA,KACtB;AAAA,EACF,CAAA,CAAA,MAAQ;AAEN,IAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,OAAO,EAAA,EAAG;AAAA,EACxC;AACF,CAAC;AAEI,MAAM,cAAA,GAAiB,CAC5B,MAAA,EACA,MAAA,GAA4C,SAAA,KACiC;AAC7E,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,GAAA,CAAI,gBAAA,CAAiB,MAAM,CAAC,CAAA;AACtD,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,WAAA,CAAY,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA;AAC1E,EAAA,MAAM,SAAS,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAC3C,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,MAAM,CAAA;AAE5B,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAIf;AACJ,IAAA,IAAI,MAAM,KAAA,EAAO;AACjB,IAAA,MAAM,MAAM,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAE,CAAA;AAC9C,IAAA,KAAA,CAAM,QAAQ,OAAO,GAAA,KAAQ,QAAA,GAAW,GAAA,GAAM,MAAM,GAAG,CAAA;AAAA,EACzD,CAAA;AAEA,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAA,KAAM;AACxB,IAAA,IAAI,cAAc,CAAA,EAAG;AACnB,MAAA,MAAA,CAAO,OAAO,CAAA,CAAE,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC1C,QAAA,MAAM,KAAA,GAAQ,aAAa,IAAI,CAAA;AAC/B,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,KAAA,CAAM,SAAS,CAAA,CAAE,IAAA;AACjB,UAAA,KAAA,CAAM,OAAO,IAAI,CAAA;AAAA,QACnB;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,gBAAA,IAAoB,CAAA,CAAE,SAAS,cAAA,EAAgB;AAC5D,MAAA,MAAM,YAAY,CAAA,CAAE,KAAA;AACpB,MAAA,MAAM,KAAA,GAAQ,aAAa,SAAS,CAAA;AACpC,MAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,MAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AACtB,MAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AACxB,QAAA,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM,OAAQ,KAAA,CAAc,CAAC,CAAC,CAAA;AACzD,QAAC,MAAc,IAAA,GAAO,KAAA;AACvB,QAAA,KAAA,CAAM,IAAA,GAAO,SAAA;AAAA,MACf;AACA,MAAA,KAAA,CAAM,SAAS,CAAA,CAAE,IAAA;AACjB,MAAA,WAAA,CAAY,KAAY,CAAA;AAAA,IAC1B;AAEA,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,KAAA,EAAO,WAAA,CAAY,CAAC,CAAA;AAAA,EACrC,CAAC,CAAA;AAED,EAAA,OAAO,KAAA,CAAM,IAAA,KAAS,CAAA,GAClB,EAAE,QAAA,EAAU,KAAA,CAAM,MAAA,EAAO,CAAE,IAAA,EAAK,CAAE,KAAA,EAAQ,MAAA,EAAQ,cAAa,GAC/D,IAAA;AACN;;;;"}
+12
View File
@@ -0,0 +1,12 @@
const TrieNodeHeaders = {
Leaf: "Leaf",
Branch: "Branch",
BranchWithVal: "BranchWithVal",
LeafWithHash: "LeafWithHash",
BranchWithHash: "BranchWithHash",
Empty: "Empty",
Reserved: "Reserved"
};
export { TrieNodeHeaders };
//# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"types.mjs","sources":["../../../src/trie/types.ts"],"sourcesContent":["import { type HexString } from \"../codecs\"\n\nexport const TrieNodeHeaders = {\n Leaf: \"Leaf\",\n Branch: \"Branch\",\n BranchWithVal: \"BranchWithVal\",\n LeafWithHash: \"LeafWithHash\",\n BranchWithHash: \"BranchWithHash\",\n Empty: \"Empty\",\n Reserved: \"Reserved\",\n} as const\ntype TrieNodeHeaders = typeof TrieNodeHeaders\nexport type TrieNodeHeaderKey =\n (typeof TrieNodeHeaders)[keyof typeof TrieNodeHeaders]\n\nexport type Nibble =\n | \"0\"\n | \"1\"\n | \"2\"\n | \"3\"\n | \"4\"\n | \"5\"\n | \"6\"\n | \"7\"\n | \"8\"\n | \"9\"\n | \"a\"\n | \"b\"\n | \"c\"\n | \"d\"\n | \"e\"\n | \"f\"\n\nexport type TrieNode = { partialKey: string } & (\n | {\n type: TrieNodeHeaders[\"Empty\"] | TrieNodeHeaders[\"Reserved\"]\n }\n | {\n type: TrieNodeHeaders[\"Leaf\"] | TrieNodeHeaders[\"LeafWithHash\"]\n value: HexString\n }\n | ({ children: Record<Nibble, HexString> } & (\n | { type: TrieNodeHeaders[\"Branch\"] }\n | {\n type:\n | TrieNodeHeaders[\"BranchWithHash\"]\n | TrieNodeHeaders[\"BranchWithVal\"]\n value: HexString\n }\n ))\n)\nexport type ProofTrieNode = {\n hash: HexString\n parent?: HexString\n} & (TrieNode | { type: \"Raw\"; value: HexString })\n"],"names":[],"mappings":"AAEO,MAAM,eAAA,GAAkB;AAAA,EAC7B,IAAA,EAAM,MAAA;AAAA,EACN,MAAA,EAAQ,QAAA;AAAA,EACR,aAAA,EAAe,eAAA;AAAA,EACf,YAAA,EAAc,cAAA;AAAA,EACd,cAAA,EAAgB,gBAAA;AAAA,EAChB,KAAA,EAAO,OAAA;AAAA,EACP,QAAA,EAAU;AACZ;;;;"}
+29
View File
@@ -0,0 +1,29 @@
const discriminant = {
is(value, type) {
return value.type === type;
},
as(value, type) {
if (type !== value.type)
throw new Error(
`Enum.as(enum, ${type}) used with actual type ${value.type}`
);
return value;
}
};
const Enum = Object.assign((type, value) => {
return {
type,
value
};
}, discriminant);
const _Enum = new Proxy(
{},
{
get(_, prop) {
return (value) => Enum(prop, value);
}
}
);
export { Enum, _Enum };
//# sourceMappingURL=enum.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"enum.mjs","sources":["../../../src/types/enum.ts"],"sourcesContent":["export type Enum<T extends {}> = {\n [K in keyof T & string]: {\n type: K\n value: T[K]\n }\n}[keyof T & string]\n\nexport type EnumVariant<\n T extends { type: string; value?: any },\n K extends T[\"type\"],\n> = T & {\n type: K\n}\n\nexport type ExtractEnumValue<\n T extends { type: string; value?: any },\n K extends string,\n> = EnumVariant<T, K>[\"value\"]\n\ntype ValueArg<V> = undefined extends V ? [value?: V] : [value: V]\n\ninterface Discriminant {\n is<T extends { type: string; value: any }, K extends T[\"type\"]>(\n value: T,\n type: K,\n ): value is T & { type: K }\n as<T extends { type: string; value: any }, K extends T[\"type\"]>(\n value: T,\n type: K,\n ): ExtractEnumValue<T, K>\n}\nconst discriminant: Discriminant = {\n is<T extends { type: string; value: any }, K extends T[\"type\"]>(\n value: T,\n type: K,\n ): value is T & { type: K } {\n return value.type === type\n },\n as(value, type) {\n if (type !== value.type)\n throw new Error(\n `Enum.as(enum, ${type}) used with actual type ${value.type}`,\n )\n return value\n },\n}\ninterface EnumFn extends Discriminant {\n <T extends { type: string; value: any }, K extends T[\"type\"]>(\n type: K,\n ...[value]: ValueArg<ExtractEnumValue<T, K>>\n ): EnumVariant<T, K>\n}\nexport const Enum: EnumFn = Object.assign((type: string, value?: any) => {\n return {\n type,\n value,\n } as any\n}, discriminant)\n\n// well-known enums\nexport type GetEnum<T extends Enum<any>> = {\n [K in T[\"type\"]]: (\n ...args: ExtractEnumValue<T, K> extends undefined\n ? []\n : [value: ExtractEnumValue<T, K>]\n ) => EnumVariant<T, K>\n}\nexport const _Enum = new Proxy(\n {},\n {\n get(_, prop: string) {\n return (value: string) => Enum(prop, value)\n },\n },\n)\n\n// type Bar = Enum<{\n// Kaka: 1\n// Bar: 2\n// }>\n\n// type FooInput = Enum<{\n// foo: \"foo\" | undefined\n// bar: Bar\n// baz: number\n// wtf: boolean\n// }>\n\n// declare function foo(foo: FooInput): void\n// foo(Enum(\"bar\", Enum(\"Bar\", 2)))\n\n// const InputEnum: GetEnum<FooInput> = null as any;\n// InputEnum.bar(Enum('Bar', 2))\n"],"names":[],"mappings":"AA+BA,MAAM,YAAA,GAA6B;AAAA,EACjC,EAAA,CACE,OACA,IAAA,EAC0B;AAC1B,IAAA,OAAO,MAAM,IAAA,KAAS,IAAA;AAAA,EACxB,CAAA;AAAA,EACA,EAAA,CAAG,OAAO,IAAA,EAAM;AACd,IAAA,IAAI,SAAS,KAAA,CAAM,IAAA;AACjB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,cAAA,EAAiB,IAAI,CAAA,wBAAA,EAA2B,KAAA,CAAM,IAAI,CAAA;AAAA,OAC5D;AACF,IAAA,OAAO,KAAA;AAAA,EACT;AACF,CAAA;AAOO,MAAM,IAAA,GAAe,MAAA,CAAO,MAAA,CAAO,CAAC,MAAc,KAAA,KAAgB;AACvE,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA,EAAG,YAAY;AAUR,MAAM,QAAQ,IAAI,KAAA;AAAA,EACvB,EAAC;AAAA,EACD;AAAA,IACE,GAAA,CAAI,GAAG,IAAA,EAAc;AACnB,MAAA,OAAO,CAAC,KAAA,KAAkB,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AAAA,IAC5C;AAAA;AAEJ;;;;"}
@@ -0,0 +1,50 @@
import { mergeUint8 } from '@pezkuwi/papi-utils';
import { compact, u16 } from 'scale-ts';
import './ss58-util.mjs';
import { Binary } from '../codecs/scale/Binary.mjs';
import '../codecs/scale/bitSequence.mjs';
import '../codecs/scale/char.mjs';
import '../codecs/scale/compact.mjs';
import '../codecs/scale/Hex.mjs';
import '../codecs/scale/fixed-str.mjs';
import '../codecs/scale/Variant.mjs';
import '../codecs/scale/ethAccount.mjs';
import '../codecs/scale/shaped.mjs';
import '../codecs/scale/BitSeq.mjs';
import '../codecs/blockHeader.mjs';
import '../codecs/metadata/metadata.mjs';
import '../codecs/metadata/v14.mjs';
import '../codecs/metadata/v15.mjs';
import '../codecs/metadata/v16.mjs';
import '../codecs/metadata/lookup.mjs';
import { Blake2256 } from '../hashes/blake2.mjs';
import '@noble/hashes/blake3.js';
import '@noble/hashes/sha3.js';
const PREFIX = Binary.fromText("modlpy/utilisuba").asBytes();
const getMultisigAccountId = ({
threshold,
signatories
}) => {
const sortedSignatories = sortMultisigSignatories(signatories);
const payload = mergeUint8([
PREFIX,
compact.enc(sortedSignatories.length),
...sortedSignatories,
u16.enc(threshold)
]);
return Blake2256(payload);
};
const sortMultisigSignatories = (signatories) => signatories.slice().sort((a, b) => {
for (let i = 0; ; i++) {
const overA = i >= a.length;
const overB = i >= b.length;
if (overA && overB) return 0;
else if (overA) return -1;
else if (overB) return 1;
else if (a[i] !== b[i]) return a[i] > b[i] ? 1 : -1;
}
});
export { getMultisigAccountId, sortMultisigSignatories };
//# sourceMappingURL=multisig.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"multisig.mjs","sources":["../../../src/utils/multisig.ts"],"sourcesContent":["import { mergeUint8 } from \"@pezkuwi/papi-utils\"\nimport { Binary, compact, u16 } from \"../codecs\"\nimport { Blake2256 } from \"../hashes\"\n\nconst PREFIX = Binary.fromText(\"modlpy/utilisuba\").asBytes()\nexport const getMultisigAccountId = ({\n threshold,\n signatories,\n}: {\n threshold: number\n signatories: Uint8Array[]\n}) => {\n const sortedSignatories = sortMultisigSignatories(signatories)\n const payload = mergeUint8([\n PREFIX,\n compact.enc(sortedSignatories.length),\n ...sortedSignatories,\n u16.enc(threshold),\n ])\n return Blake2256(payload)\n}\n\nexport const sortMultisigSignatories = (signatories: Uint8Array[]) =>\n signatories.slice().sort((a, b) => {\n for (let i = 0; ; i++) {\n const overA = i >= a.length\n const overB = i >= b.length\n\n if (overA && overB) return 0\n else if (overA) return -1\n else if (overB) return 1\n else if (a[i] !== b[i]) return a[i] > b[i] ? 1 : -1\n }\n })\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAIA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,kBAAkB,EAAE,OAAA,EAAQ;AACpD,MAAM,uBAAuB,CAAC;AAAA,EACnC,SAAA;AAAA,EACA;AACF,CAAA,KAGM;AACJ,EAAA,MAAM,iBAAA,GAAoB,wBAAwB,WAAW,CAAA;AAC7D,EAAA,MAAM,UAAU,UAAA,CAAW;AAAA,IACzB,MAAA;AAAA,IACA,OAAA,CAAQ,GAAA,CAAI,iBAAA,CAAkB,MAAM,CAAA;AAAA,IACpC,GAAG,iBAAA;AAAA,IACH,GAAA,CAAI,IAAI,SAAS;AAAA,GAClB,CAAA;AACD,EAAA,OAAO,UAAU,OAAO,CAAA;AAC1B;AAEO,MAAM,uBAAA,GAA0B,CAAC,WAAA,KACtC,WAAA,CAAY,OAAM,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACjC,EAAA,KAAA,IAAS,CAAA,GAAI,KAAK,CAAA,EAAA,EAAK;AACrB,IAAA,MAAM,KAAA,GAAQ,KAAK,CAAA,CAAE,MAAA;AACrB,IAAA,MAAM,KAAA,GAAQ,KAAK,CAAA,CAAE,MAAA;AAErB,IAAA,IAAI,KAAA,IAAS,OAAO,OAAO,CAAA;AAAA,SAAA,IAClB,OAAO,OAAO,EAAA;AAAA,SAAA,IACd,OAAO,OAAO,CAAA;AAAA,SAAA,IACd,CAAA,CAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,EAAG,OAAO,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,IAAI,CAAA,GAAI,EAAA;AAAA,EACnD;AACF,CAAC;;;;"}
@@ -0,0 +1,77 @@
import { base58 } from '@scure/base';
import { blake2b } from '@noble/hashes/blake2.js';
const SS58_PREFIX = new TextEncoder().encode("SS58PRE");
const CHECKSUM_LENGTH = 2;
const getSs58AddressInfo = (address) => {
try {
const decoded = base58.decode(address);
const prefixBytes = decoded.subarray(0, decoded[0] & 64 ? 2 : 1);
const publicKey = decoded.subarray(
prefixBytes.length,
decoded.length - CHECKSUM_LENGTH
);
const checksum = decoded.subarray(prefixBytes.length + publicKey.length);
const expectedChecksum = blake2b(
Uint8Array.of(...SS58_PREFIX, ...prefixBytes, ...publicKey),
{
dkLen: 64
}
).subarray(0, CHECKSUM_LENGTH);
const isChecksumValid = checksum[0] === expectedChecksum[0] && checksum[1] === expectedChecksum[1];
if (!isChecksumValid) return { isValid: false };
return {
isValid: true,
ss58Format: prefixBytesToNumber(prefixBytes),
publicKey: publicKey.slice()
};
} catch (_) {
return { isValid: false };
}
};
const prefixBytesToNumber = (bytes) => {
const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
return dv.byteLength === 1 ? dv.getUint8(0) : dv.getUint16(0);
};
const withSs58Cache = (fn) => {
let cache = {};
let activityCount = 0;
let latestCount = 0;
const checkActivity = () => {
if (activityCount === latestCount) {
cache = {};
activityCount = latestCount = 0;
} else {
latestCount = activityCount;
setTimeout(checkActivity, 0);
}
};
return (publicKey) => {
var _a, _b;
if (++activityCount === 1) checkActivity();
let entry = cache;
const lastIdx = publicKey.length - 1;
for (let i = 0; i <= lastIdx; i++) entry = entry[_a = publicKey[i]] || (entry[_a] = {});
return entry[_b = publicKey[lastIdx]] || (entry[_b] = fn(publicKey));
};
};
const fromBufferToBase58 = (ss58Format) => {
const prefixBytes = ss58Format < 64 ? Uint8Array.of(ss58Format) : Uint8Array.of(
(ss58Format & 252) >> 2 | 64,
ss58Format >> 8 | (ss58Format & 3) << 6
);
return withSs58Cache((publicKey) => {
const checksum = blake2b(
Uint8Array.of(...SS58_PREFIX, ...prefixBytes, ...publicKey),
{
dkLen: 64
}
).subarray(0, CHECKSUM_LENGTH);
return base58.encode(
Uint8Array.of(...prefixBytes, ...publicKey, ...checksum)
);
});
};
export { fromBufferToBase58, getSs58AddressInfo };
//# sourceMappingURL=ss58-util.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"ss58-util.mjs","sources":["../../../src/utils/ss58-util.ts"],"sourcesContent":["import { base58 } from \"@scure/base\"\nimport { blake2b } from \"@noble/hashes/blake2.js\"\n\nconst SS58_PREFIX = new TextEncoder().encode(\"SS58PRE\")\nconst CHECKSUM_LENGTH = 2\n\nexport type SS58String = string & { __SS58String?: unknown }\nexport type SS58AddressInfo =\n | { isValid: false }\n | { isValid: true; ss58Format: number; publicKey: Uint8Array }\n\nexport const getSs58AddressInfo = (address: SS58String): SS58AddressInfo => {\n try {\n const decoded = base58.decode(address)\n const prefixBytes = decoded.subarray(0, decoded[0] & 0b0100_0000 ? 2 : 1)\n const publicKey = decoded.subarray(\n prefixBytes.length,\n decoded.length - CHECKSUM_LENGTH,\n )\n\n const checksum = decoded.subarray(prefixBytes.length + publicKey.length)\n const expectedChecksum = blake2b(\n Uint8Array.of(...SS58_PREFIX, ...prefixBytes, ...publicKey),\n {\n dkLen: 64,\n },\n ).subarray(0, CHECKSUM_LENGTH)\n\n const isChecksumValid =\n checksum[0] === expectedChecksum[0] && checksum[1] === expectedChecksum[1]\n\n if (!isChecksumValid) return { isValid: false }\n\n return {\n isValid: true,\n ss58Format: prefixBytesToNumber(prefixBytes),\n publicKey: publicKey.slice(),\n }\n } catch (_) {\n return { isValid: false }\n }\n}\n\nconst prefixBytesToNumber = (bytes: Uint8Array) => {\n const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n return dv.byteLength === 1 ? dv.getUint8(0) : dv.getUint16(0)\n}\n\nconst withSs58Cache = (fn: (publicKey: Uint8Array) => SS58String) => {\n let cache: Record<number, any> = {}\n let activityCount = 0\n let latestCount = 0\n const checkActivity = () => {\n if (activityCount === latestCount) {\n cache = {}\n activityCount = latestCount = 0\n } else {\n latestCount = activityCount\n setTimeout(checkActivity, 0)\n }\n }\n\n return (publicKey: Uint8Array): SS58String => {\n if (++activityCount === 1) checkActivity()\n\n let entry = cache\n const lastIdx = publicKey.length - 1\n for (let i = 0; i <= lastIdx; i++) entry = entry[publicKey[i]] ||= {}\n return (entry[publicKey[lastIdx]] ||= fn(publicKey))\n }\n}\n\nexport const fromBufferToBase58 = (ss58Format: number) => {\n const prefixBytes =\n ss58Format < 64\n ? Uint8Array.of(ss58Format)\n : Uint8Array.of(\n ((ss58Format & 0b0000_0000_1111_1100) >> 2) | 0b0100_0000,\n (ss58Format >> 8) | ((ss58Format & 0b0000_0000_0000_0011) << 6),\n )\n\n return withSs58Cache((publicKey: Uint8Array): SS58String => {\n const checksum = blake2b(\n Uint8Array.of(...SS58_PREFIX, ...prefixBytes, ...publicKey),\n {\n dkLen: 64,\n },\n ).subarray(0, CHECKSUM_LENGTH)\n return base58.encode(\n Uint8Array.of(...prefixBytes, ...publicKey, ...checksum),\n )\n })\n}\n"],"names":[],"mappings":";;;AAGA,MAAM,WAAA,GAAc,IAAI,WAAA,EAAY,CAAE,OAAO,SAAS,CAAA;AACtD,MAAM,eAAA,GAAkB,CAAA;AAOjB,MAAM,kBAAA,GAAqB,CAAC,OAAA,KAAyC;AAC1E,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA;AACrC,IAAA,MAAM,WAAA,GAAc,QAAQ,QAAA,CAAS,CAAA,EAAG,QAAQ,CAAC,CAAA,GAAI,EAAA,GAAc,CAAA,GAAI,CAAC,CAAA;AACxE,IAAA,MAAM,YAAY,OAAA,CAAQ,QAAA;AAAA,MACxB,WAAA,CAAY,MAAA;AAAA,MACZ,QAAQ,MAAA,GAAS;AAAA,KACnB;AAEA,IAAA,MAAM,WAAW,OAAA,CAAQ,QAAA,CAAS,WAAA,CAAY,MAAA,GAAS,UAAU,MAAM,CAAA;AACvE,IAAA,MAAM,gBAAA,GAAmB,OAAA;AAAA,MACvB,WAAW,EAAA,CAAG,GAAG,aAAa,GAAG,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,MAC1D;AAAA,QACE,KAAA,EAAO;AAAA;AACT,KACF,CAAE,QAAA,CAAS,CAAA,EAAG,eAAe,CAAA;AAE7B,IAAA,MAAM,eAAA,GACJ,QAAA,CAAS,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAC,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAC,CAAA;AAE3E,IAAA,IAAI,CAAC,eAAA,EAAiB,OAAO,EAAE,SAAS,KAAA,EAAM;AAE9C,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,UAAA,EAAY,oBAAoB,WAAW,CAAA;AAAA,MAC3C,SAAA,EAAW,UAAU,KAAA;AAAM,KAC7B;AAAA,EACF,SAAS,CAAA,EAAG;AACV,IAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,EAC1B;AACF;AAEA,MAAM,mBAAA,GAAsB,CAAC,KAAA,KAAsB;AACjD,EAAA,MAAM,EAAA,GAAK,IAAI,QAAA,CAAS,KAAA,CAAM,QAAQ,KAAA,CAAM,UAAA,EAAY,MAAM,UAAU,CAAA;AACxE,EAAA,OAAO,EAAA,CAAG,eAAe,CAAA,GAAI,EAAA,CAAG,SAAS,CAAC,CAAA,GAAI,EAAA,CAAG,SAAA,CAAU,CAAC,CAAA;AAC9D,CAAA;AAEA,MAAM,aAAA,GAAgB,CAAC,EAAA,KAA8C;AACnE,EAAA,IAAI,QAA6B,EAAC;AAClC,EAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,EAAA,IAAI,WAAA,GAAc,CAAA;AAClB,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,IAAI,kBAAkB,WAAA,EAAa;AACjC,MAAA,KAAA,GAAQ,EAAC;AACT,MAAA,aAAA,GAAgB,WAAA,GAAc,CAAA;AAAA,IAChC,CAAA,MAAO;AACL,MAAA,WAAA,GAAc,aAAA;AACd,MAAA,UAAA,CAAW,eAAe,CAAC,CAAA;AAAA,IAC7B;AAAA,EACF,CAAA;AAEA,EAAA,OAAO,CAAC,SAAA,KAAsC;AA9DhD,IAAA,IAAA,EAAA,EAAA,EAAA;AA+DI,IAAA,IAAI,EAAE,aAAA,KAAkB,CAAA,EAAG,aAAA,EAAc;AAEzC,IAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,IAAA,MAAM,OAAA,GAAU,UAAU,MAAA,GAAS,CAAA;AACnC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,OAAA,EAAS,CAAA,EAAA,EAAK,KAAA,GAAQ,KAAA,CAAA,EAAA,GAAM,SAAA,CAAU,CAAC,CAAA,CAAA,KAAjB,KAAA,CAAA,EAAA,CAAA,GAAwB,EAAC,Line truncated
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["../src/utils/ss58-util.ts","../src/codecs/scale/AccountId.ts","../src/codecs/scale/Binary.ts","../src/codecs/scale/compact.ts","../src/codecs/scale/bitSequence.ts","../src/codecs/scale/char.ts","../src/codecs/scale/Hex.ts","../src/codecs/scale/fixed-str.ts","../src/codecs/scale/Self.ts","../src/types/enum.ts","../src/codecs/scale/with-inner.ts","../src/codecs/scale/Variant.ts","../src/hashes/blake2.ts","../src/hashes/blake3.ts","../src/hashes/identity.ts","../src/hashes/h64.ts","../src/hashes/twoX.ts","../src/hashes/keccak.ts","../src/codecs/scale/ethAccount.ts","../src/codecs/scale/shaped.ts","../src/codecs/scale/BitSeq.ts","../src/codecs/blockHeader.ts","../src/codecs/metadata/docs.ts","../src/codecs/metadata/lookup.ts","../src/codecs/metadata/deprecation.ts","../src/codecs/metadata/runtime-api.ts","../src/codecs/metadata/pallets.ts","../src/codecs/metadata/v14.ts","../src/codecs/metadata/v15.ts","../src/codecs/metadata/v16.ts","../src/codecs/metadata/metadata.ts","../src/codecs/metadata/unified.ts","../src/extrinsics/extrinsic-format.ts","../src/storage.ts","../src/utils/multisig.ts","../src/trie/types.ts","../src/trie/node-decoder.ts","../src/trie/proofs.ts"],"sourcesContent":["import { base58 } from \"@scure/base\"\nimport { blake2b } from \"@noble/hashes/blake2.js\"\n\nconst SS58_PREFIX = new TextEncoder().encode(\"SS58PRE\")\nconst CHECKSUM_LENGTH = 2\n\nexport type SS58String = string & { __SS58String?: unknown }\nexport type SS58AddressInfo =\n | { isValid: false }\n | { isValid: true; ss58Format: number; publicKey: Uint8Array }\n\nexport const getSs58AddressInfo = (address: SS58String): SS58AddressInfo => {\n try {\n const decoded = base58.decode(address)\n const prefixBytes = decoded.subarray(0, decoded[0] & 0b0100_0000 ? 2 : 1)\n const publicKey = decoded.subarray(\n prefixBytes.length,\n decoded.length - CHECKSUM_LENGTH,\n )\n\n const checksum = decoded.subarray(prefixBytes.length + publicKey.length)\n const expectedChecksum = blake2b(\n Uint8Array.of(...SS58_PREFIX, ...prefixBytes, ...publicKey),\n {\n dkLen: 64,\n },\n ).subarray(0, CHECKSUM_LENGTH)\n\n const isChecksumValid =\n checksum[0] === expectedChecksum[0] && checksum[1] === expectedChecksum[1]\n\n if (!isChecksumValid) return { isValid: false }\n\n return {\n isValid: true,\n ss58Format: prefixBytesToNumber(prefixBytes),\n publicKey: publicKey.slice(),\n }\n } catch (_) {\n return { isValid: false }\n }\n}\n\nconst prefixBytesToNumber = (bytes: Uint8Array) => {\n const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n return dv.byteLength === 1 ? dv.getUint8(0) : dv.getUint16(0)\n}\n\nconst withSs58Cache = (fn: (publicKey: Uint8Array) => SS58String) => {\n let cache: Record<number, any> = {}\n let activityCount = 0\n let latestCount = 0\n const checkActivity = () => {\n if (activityCount === latestCount) {\n cache = {}\n activityCount = latestCount = 0\n } else {\n latestCount = activityCount\n setTimeout(checkActivity, 0)\n }\n }\n\n return (publicKey: Uint8Array): SS58String => {\n if (++activityCount === 1) checkActivity()\n\n let entry = cache\n const lastIdx = publicKey.length - 1\n for (let i = 0; i <= lastIdx; i++) entry = entry[publicKey[i]] ||= {}\n return (entry[publicKey[lastIdx]] ||= fn(publicKey))\n }\n}\n\nexport const fromBufferToBase58 = (ss58Format: number) => {\n const prefixBytes =\n ss58Format < 64\n ? Uint8Array.of(ss58Format)\n : Uint8Array.of(\n ((ss58Format & 0b0000_0000_1111_1100) >> 2) | 0b0100_0000,\n (ss58Format >> 8) | ((ss58Format & 0b0000_0000_0000_0011) << 6),\n )\n\n return withSs58Cache((publicKey: Uint8Array): SS58String => {\n const checksum = blake2b(\n Uint8Array.of(...SS58_PREFIX, ...prefixBytes, ...publicKey),\n {\n dkLen: 64,\n },\n ).subarray(0, CHECKSUM_LENGTH)\n return base58.encode(\n Uint8Array.of(...prefixBytes, ...publicKey, ...checksum),\n )\n })\n}\n","import { Bytes, enhanceCodec } from \"scale-ts\"\nimport {\n getSs58AddressInfo,\n SS58String,\n fromBufferToBase58,\n} from \"@/utils/ss58-util\"\n\nfunction fromBase58ToBuffer(nBytes: number, _ss58Format: number) {\n return (address: SS58String) => {\n const info = getSs58AddressInfo(address)\n if (!info.isValid) throw new Error(\"Invalid checksum\")\n const { publicKey } = info\n if (publicKey.length !== nBytes)\n throw new Error(\"Invalid public key length\")\n\n return publicKey\n }\n}\n\nexport const AccountId = (ss58Format: number = 42, nBytes: 32 | 33 = 32) =>\n enhanceCodec(\n Bytes(nBytes),\n fromBase58ToBuffer(nBytes, ss58Format),\n fromBufferToBase58(ss58Format),\n )\n","import {\n Bytes,\n Codec,\n Decoder,\n Encoder,\n Tuple,\n compact,\n createCodec,\n} from \"scale-ts\"\nimport { fromHex, mergeLine truncated
+47
View File
@@ -0,0 +1,47 @@
{
"name": "@pezkuwi/bizinikiwi-bindings",
"version": "1.0.0",
"author": "Dijital Kurdistan Tech Institute <info@pezkuwichain.io>",
"bugs": "https://github.com/pezkuwichain/pezkuwi-api/issues",
"homepage": "https://github.com/pezkuwichain/pezkuwi-api/tree/master/packages/bizinikiwi-bindings#readme",
"repository": {
"directory": "packages/bizinikiwi-bindings",
"type": "git",
"url": "https://github.com/pezkuwichain/pezkuwi-api.git"
},
"license": "MIT",
"sideEffects": false,
"type": "module",
"exports": {
".": {
"node": {
"production": {
"import": "./dist/esm/index.mjs",
"require": "./dist/index.js",
"default": "./dist/index.js"
},
"import": "./dist/esm/index.mjs",
"require": "./dist/index.js",
"default": "./dist/index.js"
},
"module": "./dist/esm/index.mjs",
"import": "./dist/esm/index.mjs",
"require": "./dist/index.js",
"default": "./dist/index.js"
},
"./package.json": "./package.json"
},
"main": "./dist/index.js",
"module": "./dist/esm/index.mjs",
"browser": "./dist/esm/index.mjs",
"types": "./dist/index.d.ts",
"files": [
"dist"
],
"dependencies": {
"@noble/hashes": "^2.0.1",
"@scure/base": "^2.0.0",
"scale-ts": "^1.6.1",
"@pezkuwi/papi-utils": "1.0.0"
}
}
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Josep M Sobrepere
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+46
View File
@@ -0,0 +1,46 @@
# @polkadot-api/merkleize-metadata
This TS package provides utils for the merkleization of [`frame_metadata`](https://docs.rs/frame-metadata/latest/frame_metadata/) as described in
[RFC78](https://polkadot-fellows.github.io/RFCs/approved/0078-merkleized-metadata.html).
## Usage
```ts
import { merkleizeMetadata } from "@polkadot-api/merkleized-metadata"
const ksmMetadata = new Uint8Array(await readFile("ksm.bin"))
const merkleizedMetadata = merkleizeMetadata(ksmMetadata, {
decimals: 12,
tokenSymbol: "KSM",
})
// it returns the digest value of the metadata (aka its merkleized root-hash)
const rootHash = merkleizedMetadata.digest()
// given an extrinsic, it returns an encoded `Proof`
const proof1: Uint8Array = merkleizedMetadata.getProofForExtrinsic(
// Hex for the transaction bytes
"c10184008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a4801127d333c8f60c0d81dd0a6e2e20ea477a06f96aaca1811872c54c244f0935c60b1f8a38aabef3d3a4ef4050d8d078e35b57b3cf4f9545f8145ce98afb8755384550000000000001448656c6c6f",
// Optionally, we can pass the tx additional signed data
"386d0f001a000000143c3561eefac7bc66facd4f0a7ec31d33b64f1827932fb3fda0ce361def535f143c3561eefac7bc66facd4f0a7ec31d33b64f1827932fb3fda0ce361def535f00",
)
// given the extrinsic "parts", it returns an encoded `Proof`
const proof2: Uint8Array = merkleizedMetadata.getProofForExtrinsicParts(
// Call data
"0x040300648ad065ea416ca1725c29979cd41e288180f3e8aefde705cd3e0bab6cd212010bcb04fb711f01",
// Signed Extension data included in the extrinsic
"0x2503000000",
// Signed Extension data included in the signature
"0x164a0f001a000000b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe878a023bcb37967b6ba0685d002bb74e6cf3b4fc4ae37eb85f756bd9b026bede00",
)
// The type `Proof` definition is as follows:
// interface Proof {
// leaves: Array<LookupEntry>,
// leafIdxs: Array<number>,
// proofs: Array<Uint8Array>,
// extrinsic: ExtrinsicMetadata,
// info: ExtraInfo
// }
```
+118
View File
@@ -0,0 +1,118 @@
import { Struct, str, u8, u16, u32, Bytes, ScaleEnum, _void, compactNumber, Option, Vector, bool, Tuple, compact, extrinsicFormat } from '@pezkuwi/bizinikiwi-bindings';
const extraInfoInner = {
specVersion: u32,
specName: str,
base58Prefix: u16,
decimals: u8,
tokenSymbol: str
};
const extraInfo = Struct(extraInfoInner);
const hash = Bytes(32);
const metadataDigest = ScaleEnum({
V0: _void,
V1: Struct({
typeInformationTreeRoot: hash,
extrinsicMetadataHash: hash,
...extraInfoInner
})
});
ScaleEnum({
bool: _void,
char: _void,
str: _void,
u8: _void,
u16: _void,
u32: _void,
u64: _void,
u128: _void,
u256: _void,
i8: _void,
i16: _void,
i32: _void,
i64: _void,
i128: _void,
i256: _void
});
const typeRef = ScaleEnum({
bool: _void,
char: _void,
str: _void,
u8: _void,
u16: _void,
u32: _void,
u64: _void,
u128: _void,
u256: _void,
i8: _void,
i16: _void,
i32: _void,
i64: _void,
i128: _void,
i256: _void,
compactU8: _void,
compactU16: _void,
compactU32: _void,
compactU64: _void,
compactU128: _void,
compactU256: _void,
void: _void,
perId: compactNumber
});
const field = Struct({
name: Option(str),
ty: typeRef,
typeName: Option(str)
});
const typeDef = ScaleEnum({
composite: Vector(field),
enumeration: Struct({
name: str,
fields: Vector(field),
index: compactNumber
}),
sequence: typeRef,
array: Struct({
len: u32,
typeParam: typeRef
}),
tuple: Vector(typeRef),
bitSequence: Struct({
numBytes: u8,
leastSignificantBitFirst: bool
})
});
const lookupType = Struct({
path: Vector(str),
typeDef,
typeId: compactNumber
});
const lookup = Vector(lookupType);
const extrinsicMetadata = Struct({
version: u8,
addressTy: typeRef,
callTy: typeRef,
signatureTy: typeRef,
signedExtensions: Vector(
Struct({
identifier: str,
includedInExtrinsic: typeRef,
includedInSignedData: typeRef
})
)
});
const extrinsicDec = Tuple.dec(
compact[1],
extrinsicFormat[1],
Bytes(Infinity)[1]
);
const proof = Struct({
leaves: lookup,
leafIdxs: Vector(u32),
proofs: Vector(hash),
extrinsic: extrinsicMetadata,
info: extraInfo
});
export { extraInfo, extrinsicDec, extrinsicMetadata, hash, lookup, lookupType, metadataDigest, proof, typeDef, typeRef };
//# sourceMappingURL=codecs.mjs.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"codecs.mjs","sources":["../../src/codecs.ts"],"sourcesContent":["import {\n Bytes,\n Codec,\n CodecType,\n Option,\n ScaleEnum,\n Struct,\n Tuple,\n V14Lookup,\n Vector,\n _void,\n bool,\n compact,\n compactNumber,\n extrinsicFormat,\n str,\n u16,\n u32,\n u8,\n} from \"@pezkuwi/bizinikiwi-bindings\"\n\nconst extraInfoInner = {\n specVersion: u32,\n specName: str,\n base58Prefix: u16,\n decimals: u8,\n tokenSymbol: str,\n}\nexport const extraInfo = Struct(extraInfoInner)\nexport type ExtraInfo = CodecType<typeof extraInfo>\n\nexport const hash = Bytes(32)\nexport const metadataDigest = ScaleEnum({\n V0: _void,\n V1: Struct({\n typeInformationTreeRoot: hash,\n extrinsicMetadataHash: hash,\n ...extraInfoInner,\n }),\n})\nexport type MetadataDigest = CodecType<typeof metadataDigest>\n\nexport const scalePrimitive = ScaleEnum({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n})\nexport type ScalePrimitive = CodecType<typeof scalePrimitive>\n\nexport const typeRef = ScaleEnum({\n bool: _void,\n char: _void,\n str: _void,\n u8: _void,\n u16: _void,\n u32: _void,\n u64: _void,\n u128: _void,\n u256: _void,\n i8: _void,\n i16: _void,\n i32: _void,\n i64: _void,\n i128: _void,\n i256: _void,\n compactU8: _void,\n compactU16: _void,\n compactU32: _void,\n compactU64: _void,\n compactU128: _void,\n compactU256: _void,\n void: _void,\n perId: compactNumber,\n})\nexport type TypeRef = CodecType<typeof typeRef>\n\nconst field = Struct({\n name: Option(str),\n ty: typeRef,\n typeName: Option(str),\n})\nexport const typeDef = ScaleEnum({\n composite: Vector(field),\n enumeration: Struct({\n name: str,\n fields: Vector(field),\n index: compactNumber,\n }),\n sequence: typeRef,\n array: Struct({\n len: u32,\n typeParam: typeRef,\n }),\n tuple: Vector(typeRef),\n bitSequence: Struct({\n numBytes: u8,\n leastSignificantBitFirst: bool,\n }),\n})\nexport type TypeDef = CodecType<typeof typeDef>\n\nexport const lookupType = Struct({\n path: Vector(str),\n typeDef: typeDef,\n typeId: compactNumber,\n})\nexport type LookupEntry = CodecType<typeof lookupType>\nexport type Lookup = Array<LookupEntry>\nexport const lookup: Codec<Lookup> = Vector(lookupType)\n\nexport const extrinsicMetadata = Struct({\n version: u8,\n addressTy: typeRef,\n callTy: typeRef,\n signatureTy: typeRef,\n signedExtensions: Vector(\n Struct({\n identifier: str,\n includedInExtrinsic: typeRef,\n includedInSignedData: typeRef,\n }),\n ),\n})\nexport type ExtrinsicMetadata = CodecType<typeof extrinsicMetadata>\nexport type LookupValue = V14Lookup[number]\n\nexport const extrinsicDec = Tuple.dec(\n compact[1],\n extrinsicFormat[1],\n Bytes(Infinity)[1],\n)\n\nexport const proof = Struct({\n leaves: lookup,\n leafIdxs: Vector(u32),\n proofs: Vector(hash),\n extrinsic: extrinsicMetadata,\n info: extraInfo,\n})\nexport type Proof = CodecType<typeof proof>\n"],"names":[],"mappings":";;AAqBA,MAAM,cAAA,GAAiB;AAAA,EACrB,WAAA,EAAa,GAAA;AAAA,EACb,QAAA,EAAU,GAAA;AAAA,EACV,YAAA,EAAc,GAAA;AAAA,EACd,QAAA,EAAU,EAAA;AAAA,EACV,WAAA,EAAa;AACf,CAAA;AACO,MAAM,SAAA,GAAY,OAAO,cAAc;AAGvC,MAAM,IAAA,GAAO,MAAM,EAAE;AACrB,MAAM,iBAAiB,SAAA,CAAU;AAAA,EACtC,EAAA,EAAI,KAAA;AAAA,EACJ,IAAI,MAAA,CAAO;AAAA,IACT,uBAAA,EAAyB,IAAA;AAAA,IACzB,qBAAA,EAAuB,IAAA;AAAA,IACvB,GAAG;AAAA,GACJ;AACH,CAAC;AAG6B,SAAA,CAAU;AAAA,EACtC,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM,KAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,EAAA,EAAI,KAAA;AAAA,EACJ,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM,KAAA;AAAA,EACN,EAAA,EAAI,KAAA;AAAA,EACJ,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAC;AAGM,MAAM,UAAU,SAAA,CAAU;AAAA,EAC/B,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM,KAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,EAAA,EAAI,KAAA;AAAA,EACJ,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM,KAAA;AAAA,EACN,EAAA,EAAI,KAAA;AAAA,EACJ,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,GAAA,EAAK,KAAA;AAAA,EACL,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM,KAAA;AAAA,EACN,SAAA,EAAW,KAAA;AAAA,EACX,UAAA,EAAY,KAAA;AAAA,EACZ,UAAA,EAAY,KAAA;AAAA,EACZ,UAAA,EAAY,KAAA;AAAA,EACZ,WAAA,EAAa,KAAA;AAAA,EACb,WAAA,EAAa,KAAA;AAAA,EACb,IAAA,EAAM,KAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAC;AAGD,MAAM,QAAQ,MAAA,CAAO;AAAA,EACnB,IAAA,EAAM,OAAO,GAAG,CAAA;AAAA,EAChB,EAAA,EAAI,OAAA;AAAA,EACJ,QAAA,EAAU,OAAO,GAAG;AACtB,CAAC,CAAA;AACM,MAAM,UAAU,SAAA,CAAU;AAAA,EAC/B,SAAA,EAAW,OAAO,KAAK,CAAA;AAAA,EACvB,aAAa,MAAA,CAAO;AAAA,IAClB,IAAA,EAAM,GAAA;AAAA,IACN,MAAA,EAAQ,OAAO,KAAK,CAAA;AAAA,IACpB,KAAA,EAAO;AAAA,GACR,CAAA;AAAA,EACD,QAAA,EAAU,OAAA;AAAA,EACV,OAAO,MAAA,CAAO;AAAA,IACZ,GAAA,EAAK,GAAA;AAAA,IACL,SLine truncated
@@ -0,0 +1,94 @@
import { createDecoder, compact, _void, i256, i128, i64, i32, i16, i8, u256, u128, u64, u32, u16, u8, str } from '@pezkuwi/bizinikiwi-bindings';
const typeRefDecoders = {
bool: u8,
char: u8,
str,
u8,
u16,
u32,
u64,
u128,
u256,
i8,
i16,
i32,
i64,
i128,
i256,
void: _void,
compactU8: compact,
compactU16: compact,
compactU32: compact,
compactU64: compact,
compactU128: compact,
compactU256: compact
};
const innerDecodeAndCollect = (input, typeRef, idToLookups, lookup, collected) => {
if (typeRef.tag !== "perId") {
typeRefDecoders[typeRef.tag][1](input);
return;
}
const handleTypeRef = (typeRef2) => {
innerDecodeAndCollect(input, typeRef2, idToLookups, lookup, collected);
};
const lookupIdxs = idToLookups.get(typeRef.value);
const [currentIdx] = lookupIdxs;
const current = lookup[currentIdx];
if (lookupIdxs.length === 1) collected.add(currentIdx);
switch (current.typeDef.tag) {
case "enumeration": {
const selectedIdx = u8.dec(input);
const [selected, collectedIdx] = lookupIdxs.map(
(lookupIdx) => [lookup[lookupIdx].typeDef, lookupIdx]
).find(([x]) => x.value.index === selectedIdx);
collected.add(collectedIdx);
selected.value.fields.forEach(({ ty }) => {
handleTypeRef(ty);
});
break;
}
case "sequence": {
const len = compact.dec(input);
for (let i = 0; i < len; i++) handleTypeRef(current.typeDef.value);
break;
}
case "array": {
for (let i = 0; i < current.typeDef.value.len; i++)
handleTypeRef(current.typeDef.value.typeParam);
break;
}
case "composite": {
current.typeDef.value.forEach((x) => {
handleTypeRef(x.ty);
});
break;
}
case "tuple": {
current.typeDef.value.forEach(handleTypeRef);
break;
}
case "bitSequence":
throw new Error("bitSequence is not supported");
}
};
const decodeAndCollectKnownLeafs = (data, typeRefs, lookup) => {
let input = new Uint8Array();
createDecoder((_input) => {
input = _input;
})(data);
const idToLookups = /* @__PURE__ */ new Map();
lookup.forEach((lookup2, idx) => {
const arr = idToLookups.get(lookup2.typeId);
if (arr) arr.push(idx);
else idToLookups.set(lookup2.typeId, [idx]);
});
const result = /* @__PURE__ */ new Set();
typeRefs.forEach((typeRef) => {
innerDecodeAndCollect(input, typeRef, idToLookups, lookup, result);
});
return [...result].sort((a, b) => a - b);
};
export { decodeAndCollectKnownLeafs };
//# sourceMappingURL=decode-and-collect.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"decode-and-collect.mjs","sources":["../../src/decode-and-collect.ts"],"sourcesContent":["import {\n HexString,\n _void,\n compact,\n createDecoder,\n i128,\n i16,\n i256,\n i32,\n i64,\n i8,\n str,\n u128,\n u16,\n u256,\n u32,\n u64,\n u8,\n} from \"@pezkuwi/bizinikiwi-bindings\"\nimport { Lookup, TypeDef, TypeRef } from \"./codecs\"\n\nconst typeRefDecoders = {\n bool: u8,\n char: u8,\n str,\n u8,\n u16,\n u32,\n u64,\n u128,\n u256,\n i8,\n i16,\n i32,\n i64,\n i128,\n i256,\n void: _void,\n compactU8: compact,\n compactU16: compact,\n compactU32: compact,\n compactU64: compact,\n compactU128: compact,\n compactU256: compact,\n}\n\nconst innerDecodeAndCollect = (\n input: Uint8Array,\n typeRef: TypeRef,\n idToLookups: Map<number, Array<number>>,\n lookup: Lookup,\n collected: Set<number>,\n) => {\n if (typeRef.tag !== \"perId\") {\n typeRefDecoders[typeRef.tag][1](input)\n return\n }\n\n const handleTypeRef = (typeRef: TypeRef) => {\n innerDecodeAndCollect(input, typeRef, idToLookups, lookup, collected)\n }\n\n const lookupIdxs = idToLookups.get(typeRef.value)!\n const [currentIdx] = lookupIdxs\n const current = lookup[currentIdx]\n\n if (lookupIdxs.length === 1) collected.add(currentIdx)\n\n switch (current.typeDef.tag) {\n case \"enumeration\": {\n const selectedIdx = u8.dec(input)\n const [selected, collectedIdx] = lookupIdxs\n .map(\n (lookupIdx) =>\n [lookup[lookupIdx].typeDef, lookupIdx] as [\n TypeDef & { tag: \"enumeration\" },\n number,\n ],\n )\n .find(([x]) => x.value.index === selectedIdx)!\n collected.add(collectedIdx)\n selected.value.fields.forEach(({ ty }) => {\n handleTypeRef(ty)\n })\n break\n }\n case \"sequence\": {\n const len = compact.dec(input)\n for (let i = 0; i < len; i++) handleTypeRef(current.typeDef.value)\n break\n }\n case \"array\": {\n for (let i = 0; i < current.typeDef.value.len; i++)\n handleTypeRef(current.typeDef.value.typeParam)\n break\n }\n case \"composite\": {\n current.typeDef.value.forEach((x) => {\n handleTypeRef(x.ty)\n })\n break\n }\n case \"tuple\": {\n current.typeDef.value.forEach(handleTypeRef)\n break\n }\n case \"bitSequence\":\n throw new Error(\"bitSequence is not supported\")\n }\n}\n\nexport const decodeAndCollectKnownLeafs = (\n data: Uint8Array | HexString,\n typeRefs: Array<TypeRef>,\n lookup: Lookup,\n): Array<number> => {\n let input: Uint8Array<ArrayBufferLike> = new Uint8Array()\n createDecoder((_input) => {\n input = _input\n })(data)\n\n const idToLookups = new Map<number, number[]>()\n lookup.forEach((lookup, idx) => {\n const arr = idToLookups.get(lookup.typeId)\n if (arr) arr.push(idx)\n else idToLookups.set(lookup.typeId, [idx])\n })\n\n const result = new Set<number>()\n typeRefs.forEach((typeRef) => {\n innerDecodeAndCollect(input, typeRef, idToLookups, lookup, result)\n })\n\n return [...result].sort((a, b) => a - b)\n}\n"],"names":["typeRef","lookup"],"mappings":";;AAqBA,MAAM,eAAA,GAAkB;AAAA,EACtB,IAAA,EAAM,EAAA;AAAA,EACN,IAAA,EAAM,EAAA;AAAA,EACN,GAAA;AAAA,EACA,EAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,EAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA,EAAM,KAAA;AAAA,EACN,SAAA,EAAW,OAAA;AAAA,EACX,UAAA,EAAY,OAAA;AAAA,EACZ,UAAA,EAAY,OAAA;AAAA,EACZ,UAAA,EAAY,OAAA;AAAA,EACZ,WAAA,EAAa,OAAA;AAAA,EACb,WAAA,EAAa;AACf,CAAA;AAEA,MAAM,wBAAwB,CAC5B,KAAA,EACA,OAAA,EACA,WAAA,EACA,QACA,SAAA,KACG;AACH,EAAA,IAAI,OAAA,CAAQ,QAAQ,OAAA,EAAS;AAC3B,IAAA,eAAA,CAAgB,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAC,EAAE,KAAK,CAAA;AACrC,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,CAACA,QAAAA,KAAqB;AAC1C,IAAA,qBAAA,CAAsB,KAAA,EAAOA,QAAAA,EAAS,WAAA,EAAa,MAAA,EAAQ,SAAS,CAAA;AAAA,EACtE,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,UAAU,CAAA,GAAI,UAAA;AACrB,EAAA,MAAM,OAAA,GAAU,OAAO,UAAU,CAAA;AAEjC,EAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,SAAA,CAAU,IAAI,UAAU,CAAA;AAErD,EAAA,QAAQ,OAAA,CAAQ,QAAQ,GAAA;AAAK,IAC3B,KAAK,aAAA,EAAe;AAClB,MAAA,MAAM,WAAA,GAAc,EAAA,CAAG,GAAA,CAAI,KAAK,CAAA;AAChC,MAAA,MAAM,CAAC,QAAA,EAAU,YAAY,CAAA,GAAI,UAAA,CAC9B,GAAA;AAAA,QACC,CAAC,SAAA,KACC,CAAC,OAAO,SAAS,CAAA,CAAE,SAAS,SAAS;AAAA,OAIzC,CACC,KAAK,CAAC,CAAC,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,KAAA,KAAU,WAAW,CAAA;AAC9C,MAAA,SAAA,CAAU,IAAI,YAAY,CAAA;AAC1B,MAAA,QAAA,CAAS,MAAM,MAAA,CAAO,OAAA,CAAQ,CAAC,EAAE,IAAG,KAAM;AACxC,QAAA,aAAA,CAAc,EAAE,CAAA;AAAA,MAClB,CAAC,CAAA;AACD,MAAA;AAAA,IACF;AAAA,IACA,KAAK,UAAA,EAAY;AACf,MAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA;AAC7B,MAAA,KAAA,IAAS,CAAA,GAAI,GAAG,CAAA,GAAI,GAAA,EAAK,KAAK,aAAA,CAAc,OAAA,CAAQ,QAAQ,KAAK,CAAA;AACjE,MAAA;AAAA,IACF;AAAA,IACA,KAAK,OAAA,EAAS;AACZ,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,Line truncated
@@ -0,0 +1,52 @@
const getAccessibleTypes = (metadata, definitions) => {
const types = /* @__PURE__ */ new Set();
const collectTypesFromId = (id) => {
if (types.has(id)) return;
const { tag, value } = definitions.get(id).def;
switch (tag) {
case "composite":
if (!value.length) break;
types.add(id);
value.forEach(({ type }) => {
collectTypesFromId(type);
});
break;
case "variant":
if (!value.length) break;
types.add(id);
value.forEach(({ fields }) => {
fields.forEach(({ type }) => {
collectTypesFromId(type);
});
});
break;
case "tuple":
if (!value.length) break;
types.add(id);
value.forEach(collectTypesFromId);
break;
case "sequence":
types.add(id);
collectTypesFromId(value);
break;
case "array":
types.add(id);
collectTypesFromId(value.type);
break;
case "bitSequence":
types.add(id);
}
};
collectTypesFromId(metadata.extrinsic.call);
collectTypesFromId(metadata.extrinsic.address);
collectTypesFromId(metadata.extrinsic.signature);
metadata.extrinsic.signedExtensions.forEach(({ type, additionalSigned }) => {
collectTypesFromId(type);
collectTypesFromId(additionalSigned);
});
const sortedTypes = [...types].sort((a, b) => a - b);
return new Map(sortedTypes.map((value, idx) => [value, idx]));
};
export { getAccessibleTypes };
//# sourceMappingURL=get-accessible-types.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"get-accessible-types.mjs","sources":["../../src/get-accessible-types.ts"],"sourcesContent":["import { UnifiedMetadata } from \"@pezkuwi/bizinikiwi-bindings\"\nimport { LookupValue } from \"./codecs\"\n\nexport const getAccessibleTypes = (\n metadata: UnifiedMetadata<15 | 16>,\n definitions: Map<number, LookupValue>,\n): Map<number, number> => {\n const types = new Set<number>()\n\n const collectTypesFromId = (id: number) => {\n if (types.has(id)) return\n\n const { tag, value } = definitions.get(id)!.def\n switch (tag) {\n case \"composite\":\n if (!value.length) break\n types.add(id)\n value.forEach(({ type }) => {\n collectTypesFromId(type)\n })\n break\n case \"variant\":\n if (!value.length) break\n types.add(id)\n value.forEach(({ fields }) => {\n fields.forEach(({ type }) => {\n collectTypesFromId(type)\n })\n })\n break\n case \"tuple\":\n if (!value.length) break\n types.add(id)\n value.forEach(collectTypesFromId)\n break\n case \"sequence\":\n types.add(id)\n collectTypesFromId(value)\n break\n case \"array\":\n types.add(id)\n collectTypesFromId(value.type)\n break\n case \"bitSequence\": // bitSequence inner types are not stored\n types.add(id)\n // primitive and compact are not stored\n }\n }\n\n collectTypesFromId(metadata.extrinsic.call)\n collectTypesFromId(metadata.extrinsic.address)\n collectTypesFromId(metadata.extrinsic.signature)\n metadata.extrinsic.signedExtensions.forEach(({ type, additionalSigned }) => {\n collectTypesFromId(type)\n collectTypesFromId(additionalSigned)\n })\n\n const sortedTypes = [...types].sort((a, b) => a - b)\n return new Map(sortedTypes.map((value, idx) => [value, idx]))\n}\n"],"names":[],"mappings":"AAGO,MAAM,kBAAA,GAAqB,CAChC,QAAA,EACA,WAAA,KACwB;AACxB,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAE9B,EAAA,MAAM,kBAAA,GAAqB,CAAC,EAAA,KAAe;AACzC,IAAA,IAAI,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,EAAG;AAEnB,IAAA,MAAM,EAAE,GAAA,EAAK,KAAA,KAAU,WAAA,CAAY,GAAA,CAAI,EAAE,CAAA,CAAG,GAAA;AAC5C,IAAA,QAAQ,GAAA;AAAK,MACX,KAAK,WAAA;AACH,QAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AACnB,QAAA,KAAA,CAAM,IAAI,EAAE,CAAA;AACZ,QAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,EAAE,IAAA,EAAK,KAAM;AAC1B,UAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,QACzB,CAAC,CAAA;AACD,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AACnB,QAAA,KAAA,CAAM,IAAI,EAAE,CAAA;AACZ,QAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,EAAE,MAAA,EAAO,KAAM;AAC5B,UAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,EAAE,IAAA,EAAK,KAAM;AAC3B,YAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,UACzB,CAAC,CAAA;AAAA,QACH,CAAC,CAAA;AACD,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AACnB,QAAA,KAAA,CAAM,IAAI,EAAE,CAAA;AACZ,QAAA,KAAA,CAAM,QAAQ,kBAAkB,CAAA;AAChC,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,KAAA,CAAM,IAAI,EAAE,CAAA;AACZ,QAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,KAAA,CAAM,IAAI,EAAE,CAAA;AACZ,QAAA,kBAAA,CAAmB,MAAM,IAAI,CAAA;AAC7B,QAAA;AAAA,MACF,KAAK,aAAA;AACH,QAAA,KAAA,CAAM,IAAI,EAAE,CAAA;AAAA;AAEhB,EACF,CAAA;AAEA,EAAA,kBAAA,CAAmB,QAAA,CAAS,UAAU,IAAI,CAAA;AAC1C,EAAA,kBAAA,CAAmB,QAAA,CAAS,UAAU,OAAO,CAAA;AAC7C,EAAA,kBAAA,CAAmB,QAAA,CAAS,UAAU,SAAS,CAAA;AAC/C,EAAA,QAAA,CAAS,UAAU,gBAAA,CAAiB,OAAA,CAAQ,CAAC,EAAE,IAAA,EAAM,kBAAiB,KAAM;AAC1E,IAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,IAAA,kBAAA,CAAmB,gBAAgB,CAAA;AAAA,EACrC,CAAC,CAAA;AAED,EAAA,MAAM,WAAA,GAAc,CAAC,GAAG,KAAK,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AACnD,EAAA,OAAO,IAAI,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,CAAC,KAAA,EAAO,GAAA,KAAQ,CAAC,KAAA,EAAO,GAAG,CAAC,CAAC,CAAA;AAC9D;;;;"}
+103
View File
@@ -0,0 +1,103 @@
const bitSequenceBytes = {
u8: 1,
u16: 2,
u32: 4,
u64: 8
};
const constructTypeDef = (definitions, getTypeRef, getPrimitive, frameId) => {
const {
def: { tag, value }
} = definitions.get(frameId);
switch (tag) {
case "composite":
return [
{
tag,
value: value.map((f) => ({
name: f.name,
typeName: f.typeName,
ty: getTypeRef(f.type)
}))
}
];
case "variant": {
return value.map((v) => ({
tag: "enumeration",
value: {
name: v.name,
index: v.index,
fields: v.fields.map((f) => ({
name: f.name,
typeName: f.typeName,
ty: getTypeRef(f.type)
}))
}
}));
}
case "sequence":
return [
{
tag,
value: getTypeRef(value)
}
];
case "array":
return [
{
tag,
value: {
len: value.len,
typeParam: getTypeRef(value.type)
}
}
];
case "tuple":
return [
{
tag,
value: value.map(getTypeRef)
}
];
case "bitSequence": {
const primitive = getPrimitive(value.bitStoreType);
const numBytes = bitSequenceBytes[primitive];
if (!numBytes) throw new Error("Invalid primitive for BitSequence");
const storeOrderPath = definitions.get(value.bitOrderType).path;
const leastSignificantBitFirst = storeOrderPath.includes("Lsb0");
if (!leastSignificantBitFirst && !storeOrderPath.includes("Msb0"))
throw new Error("BitOrderType not recognized");
return [
{
tag: "bitSequence",
value: { numBytes, leastSignificantBitFirst }
}
];
}
}
throw new Error(`FrameId(${frameId}) should have been filtered out`);
};
const getLookup = (definitions, accessibleTypes, getTypeRef, getPrimitive) => {
const typeTree = [];
[...accessibleTypes.entries()].forEach(([frameId, typeId]) => {
const { path } = definitions.get(frameId);
constructTypeDef(definitions, getTypeRef, getPrimitive, frameId).forEach(
(typeDef) => {
typeTree.push({
path,
typeId,
typeDef
});
}
);
});
typeTree.sort((a, b) => {
if (a.typeId !== b.typeId) return a.typeId - b.typeId;
if (a.typeDef.tag !== "enumeration" || b.typeDef.tag !== "enumeration")
throw new Error("Found two types with same id");
return a.typeDef.value.index - b.typeDef.value.index;
});
return typeTree;
};
export { getLookup };
//# sourceMappingURL=get-lookup.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"get-lookup.mjs","sources":["../../src/get-lookup.ts"],"sourcesContent":["import { Lookup, LookupValue, ScalePrimitive, TypeDef, TypeRef } from \"./codecs\"\n\nconst bitSequenceBytes = {\n u8: 1,\n u16: 2,\n u32: 4,\n u64: 8,\n}\n\nconst constructTypeDef = (\n definitions: Map<number, LookupValue>,\n getTypeRef: (frameId: number) => TypeRef,\n getPrimitive: (frameId: number) => ScalePrimitive[\"tag\"] | null,\n frameId: number,\n): TypeDef[] => {\n const {\n def: { tag, value },\n } = definitions.get(frameId)!\n switch (tag) {\n case \"composite\":\n return [\n {\n tag,\n value: value.map((f) => ({\n name: f.name,\n typeName: f.typeName,\n ty: getTypeRef(f.type),\n })),\n },\n ]\n case \"variant\": {\n return value.map((v) => ({\n tag: \"enumeration\",\n value: {\n name: v.name,\n index: v.index,\n fields: v.fields.map((f) => ({\n name: f.name,\n typeName: f.typeName,\n ty: getTypeRef(f.type),\n })),\n },\n }))\n }\n case \"sequence\":\n return [\n {\n tag,\n value: getTypeRef(value),\n },\n ]\n case \"array\":\n return [\n {\n tag,\n value: {\n len: value.len,\n typeParam: getTypeRef(value.type),\n },\n },\n ]\n case \"tuple\":\n return [\n {\n tag,\n value: value.map(getTypeRef),\n },\n ]\n case \"bitSequence\": {\n const primitive = getPrimitive(value.bitStoreType)\n const numBytes = bitSequenceBytes[primitive as \"u8\"]\n if (!numBytes) throw new Error(\"Invalid primitive for BitSequence\")\n\n const storeOrderPath = definitions.get(value.bitOrderType)!.path\n const leastSignificantBitFirst = storeOrderPath.includes(\"Lsb0\")\n if (!leastSignificantBitFirst && !storeOrderPath.includes(\"Msb0\"))\n throw new Error(\"BitOrderType not recognized\")\n\n return [\n {\n tag: \"bitSequence\",\n value: { numBytes, leastSignificantBitFirst },\n },\n ]\n }\n }\n\n throw new Error(`FrameId(${frameId}) should have been filtered out`)\n}\n\nexport const getLookup = (\n definitions: Map<number, LookupValue>,\n accessibleTypes: Map<number, number>,\n getTypeRef: (frameId: number) => TypeRef,\n getPrimitive: (frameId: number) => ScalePrimitive[\"tag\"] | null,\n) => {\n const typeTree: Lookup = []\n ;[...accessibleTypes.entries()].forEach(([frameId, typeId]) => {\n const { path } = definitions.get(frameId)!\n constructTypeDef(definitions, getTypeRef, getPrimitive, frameId).forEach(\n (typeDef) => {\n typeTree.push({\n path,\n typeId,\n typeDef,\n })\n },\n )\n })\n\n typeTree.sort((a, b) => {\n if (a.typeId !== b.typeId) return a.typeId - b.typeId // in general\n // should only happen for variants\n if (a.typeDef.tag !== \"enumeration\" || b.typeDef.tag !== \"enumeration\")\n throw new Error(\"Found two types with same id\")\n return a.typeDef.value.index - b.typeDef.value.index\n })\n return typeTree\n}\n"],"names":[],"mappings":"AAEA,MAAM,gBAAA,GAAmB;AAAA,EACvB,EAAA,EAAI,CAAA;AAAA,EACJ,GAAA,EAAK,CAAA;AAAA,EACL,GAAA,EAAK,CAAA;AAAA,EACL,GAAA,EAAK;AACP,CAAA;AAEA,MAAM,gBAAA,GAAmB,CACvB,WAAA,EACA,UAAA,EACA,cACA,OAAA,KACc;AACd,EAAA,MAAM;AAAA,IACJ,GAAA,EAAK,EAAE,GAAA,EAAK,KAAA;AAAM,GACpB,GAAI,WAAA,CAAY,GAAA,CAAI,OAAO,CAAA;AAC3B,EAAA,QAAQ,GAAA;AAAK,IACX,KAAK,WAAA;AACH,MAAA,OAAO;AAAA,QACL;AAAA,UACE,GAAA;AAAA,UACA,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,YACvB,MAAM,CAAA,CAAE,IAAA;AAAA,YACR,UAAU,CAAA,CAAE,QAAA;AAAA,YACZ,EAAA,EAAI,UAAA,CAAW,CAAA,CAAE,IAAI;AAAA,WACvB,CAAE;AAAA;AACJ,OACF;AAAA,IACF,KAAK,SAAA,EAAW;AACd,MAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACvB,GAAA,EAAK,aAAA;AAAA,QACL,KAAA,EAAO;AAAA,UACL,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,OAAO,CAAA,CAAE,KAAA;AAAA,UACT,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,YAC3B,MAAM,CAAA,CAAE,IAAA;AAAA,YACR,UAAU,CAAA,CAAE,QAAA;AAAA,YACZ,EAAA,EAAI,UAAA,CAAW,CAAA,CAAE,IAAI;AAAA,WACvB,CAAE;AAAA;AACJ,OACF,CAAE,CAAA;AAAA,IACJ;AAAA,IACA,KAAK,UAAA;AACH,MAAA,OAAO;AAAA,QACL;AAAA,UACE,GAAA;AAAA,UACA,KAAA,EAAO,WAAW,KAAK;AAAA;AACzB,OACF;AAAA,IACF,KAAK,OAAA;AACH,MAAA,OAAO;AAAA,QACL;AAAA,UACE,GAAA;AAAA,UACA,KAAA,EAAO;AAAA,YACL,KAAK,KAAA,CAAM,GAAA;AAAA,YACX,SAAA,EAAW,UAAA,CAAW,KAAA,CAAM,IAAI;AAAA;AAClC;AACF,OACF;AAAA,IACF,KAAK,OAAA;AACH,MAAA,OAAO;AAAA,QACL;AAAA,UACE,GAAA;AAAA,UACA,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,UAAU;AAAA;AAC7B,OACF;AAAA,IACF,KAAK,aAAA,EAAe;AAClB,MAAA,MAAM,SAAA,GAAY,YAAA,CAAa,KAAA,CAAM,YAAY,CAAA;AACjD,MAAA,MAAM,QAAA,GAAW,iBAAiB,SAAiB,CAAA;AACnD,MAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAElE,MAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,GAAA,CAAI,KAAA,CAAM,YAAY,CAAA,CAAG,IAAA;AAC5D,MAAA,MAAM,wBAAA,GAA2B,cAAALine truncated
+14
View File
@@ -0,0 +1,14 @@
import { unifyMetadata, decAnyMetadata } from '@pezkuwi/bizinikiwi-bindings';
const getMetadata = (input) => {
try {
const metadata = unifyMetadata(decAnyMetadata(input));
if (metadata.version <= 14) throw new Error("Wrong metadata version");
return metadata;
} catch (e) {
throw e || new Error("Unable to decode metadata");
}
};
export { getMetadata };
//# sourceMappingURL=get-metadata.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"get-metadata.mjs","sources":["../../src/get-metadata.ts"],"sourcesContent":["import {\n decAnyMetadata,\n UnifiedMetadata,\n type HexString,\n unifyMetadata,\n} from \"@pezkuwi/bizinikiwi-bindings\"\n\nexport const getMetadata = (\n input: Uint8Array | HexString,\n): UnifiedMetadata<15 | 16> => {\n try {\n const metadata = unifyMetadata(decAnyMetadata(input))\n if (metadata.version <= 14) throw new Error(\"Wrong metadata version\")\n return metadata as UnifiedMetadata<15 | 16>\n } catch (e) {\n throw e || new Error(\"Unable to decode metadata\")\n }\n}\n"],"names":[],"mappings":";;AAOO,MAAM,WAAA,GAAc,CACzB,KAAA,KAC6B;AAC7B,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,aAAA,CAAc,cAAA,CAAe,KAAK,CAAC,CAAA;AACpD,IAAA,IAAI,SAAS,OAAA,IAAW,EAAA,EAAI,MAAM,IAAI,MAAM,wBAAwB,CAAA;AACpE,IAAA,OAAO,QAAA;AAAA,EACT,SAAS,CAAA,EAAG;AACV,IAAA,MAAM,CAAA,IAAK,IAAI,KAAA,CAAM,2BAA2B,CAAA;AAAA,EAClD;AACF;;;;"}
+3
View File
@@ -0,0 +1,3 @@
export { merkleizeMetadata } from './main.mjs';
export { extraInfo, extrinsicMetadata, hash, lookup, lookupType, proof } from './codecs.mjs';
//# sourceMappingURL=index.mjs.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
+175
View File
@@ -0,0 +1,175 @@
import { Blake3256, compact, u32 } from '@pezkuwi/bizinikiwi-bindings';
import { lookupType, extrinsicDec, extrinsicMetadata, metadataDigest, extraInfo } from './codecs.mjs';
import { getAccessibleTypes } from './get-accessible-types.mjs';
import { getLookup } from './get-lookup.mjs';
import { getMetadata } from './get-metadata.mjs';
import { compactTypeRefs, toBytes } from './utils.mjs';
import { decodeAndCollectKnownLeafs } from './decode-and-collect.mjs';
import { getProofData } from './proof.mjs';
import { getDynamicBuilder, getLookupFn } from '@pezkuwi/metadata-builders';
import { mergeUint8 } from '@pezkuwi/papi-utils';
const assertExpected = (name, expected, received) => {
if (received != null && received !== expected)
throw new Error(
`${name} not expected. Received ${received} expected ${expected}`
);
};
const merkleizeMetadata = (metadataBytes, {
decimals,
tokenSymbol,
...hinted
}) => {
const metadata = getMetadata(metadataBytes);
const checkedVersion = metadata.extrinsic.version.includes(4) ? 4 : null;
if (checkedVersion == null) throw new Error("Only extrinsic v4 is supported");
const { ss58Prefix, buildDefinition } = getDynamicBuilder(
getLookupFn(metadata)
);
if (ss58Prefix == null) throw new Error("SS58 prefix not found in metadata");
assertExpected("SS58 prefix", ss58Prefix, hinted.base58Prefix);
const version = metadata.pallets.find((x) => x.name === "System")?.constants.find((x) => x.name === "Version");
if (version == null) throw new Error("System.Version constant not found");
const { spec_name: specName, spec_version: specVersion } = buildDefinition(
version.type
).dec(version.value);
if (typeof specName !== "string" || typeof specVersion !== "number")
throw new Error("Spec name or spec version not found");
assertExpected("Spec name", specName, hinted.specName);
assertExpected("Spec version", specVersion, hinted.specVersion);
const info = {
decimals,
tokenSymbol,
specVersion,
specName,
base58Prefix: ss58Prefix
};
const definitions = new Map(
metadata.lookup.map((value) => [value.id, value])
);
const accessibleTypes = getAccessibleTypes(metadata, definitions);
const getPrimitive = (frameId) => {
const {
def: { tag, value }
} = definitions.get(frameId);
if (tag === "primitive") return value.tag;
if (tag !== "composite" && tag !== "tuple" || value.length > 1)
throw new Error("The provided definition doesn't map to a primitive");
return value.length === 0 ? null : getPrimitive(tag === "tuple" ? value[0] : value[0].type);
};
const getTypeRef = (frameId) => {
const { def } = definitions.get(frameId);
if (def.tag === "primitive") return { tag: def.value.tag, value: void 0 };
if (def.tag === "compact") {
const primitive = getPrimitive(def.value);
const tag = compactTypeRefs[primitive];
if (!tag) throw new Error("Invalid primitive for Compact");
return { tag, value: void 0 };
}
return accessibleTypes.has(frameId) ? { tag: "perId", value: accessibleTypes.get(frameId) } : { tag: "void", value: void 0 };
};
const extrinsic = {
version: checkedVersion,
addressTy: getTypeRef(metadata.extrinsic.address),
callTy: getTypeRef(metadata.extrinsic.call),
signatureTy: getTypeRef(metadata.extrinsic.signature),
signedExtensions: metadata.extrinsic.signedExtensions.map((se) => ({
identifier: se.identifier,
includedInExtrinsic: getTypeRef(se.type),
includedInSignedData: getTypeRef(se.additionalSigned)
}))
};
const lookup = getLookup(
definitions,
accessibleTypes,
getTypeRef,
getPrimitive
);
const lookupEncoded = lookup.map(lookupType.enc);
let hashTree;
const getHashTree = () => {
if (hashTree) return hashTree;
if (!lookupEncoded.length) return hashTree = [new Uint8Array(32).fill(0)];
hashTree = new Array(lookupEncoded.length * 2 - 1);
let leavesStartIdx = lookupEncoded.length - 1;
for (let i = 0; i < lookupEncoded.length; i++)
hashTree[leavesStartIdx + i] = Blake3256(lookupEncoded[i]);
for (let i = hashTree.length - 2; i > 0; i -= 2)
hashTree[(i - 1) / 2] = Blake3256(
mergeUint8([hashTree[i], hashTree[i + 1]])
);
return hashTree;
};
let digested;
const digest = () => {
if (digested) return digested;
const rootLookupHash = getHashTree()[0];
const digest2 = {
tag: "V1",
value: {
typeInformationTreeRoot: rootLookupHash,
extrinsicMetadataHash: Blake3256(extrinsicMetadata.enc(extrinsic)),
...info
}
};
return digested = Blake3256(metadataDigest.enc(digest2));
};
const generateProof = (knownIndexes) => {
const proofData = getProofData(lookupEncoded, knownIndexes);
const hashTree2 = getHashTree();
const proofs = proofData.proofIdxs.map((idx) => hashTree2[idx]);
return mergeUint8([
compact.enc(proofData.leaves.length),
...proofData.leaves,
compact.enc(proofData.leafIdxs.length),
...proofData.leafIdxs.map((x) => u32.enc(x)),
compact.enc(proofs.length),
...proofs,
extrinsicMetadata.enc(extrinsic),
extraInfo.enc(info)
]);
};
const getProofForExtrinsicPayload = (extrinsicPayload) => {
const typeRefs = [
extrinsic.callTy,
...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),
...extrinsic.signedExtensions.map((x) => x.includedInSignedData)
];
return generateProof(
decodeAndCollectKnownLeafs(extrinsicPayload, typeRefs, lookup)
);
};
const getProofForExtrinsicParts = (callData, includedInExtrinsic, includedInSignedData) => {
const bytes = mergeUint8(
[callData, includedInExtrinsic, includedInSignedData].map(toBytes)
);
return getProofForExtrinsicPayload(bytes);
};
const getProofForExtrinsic = (transaction, txAdditionalSigned) => {
let [, { version: version2, type }, bytes] = extrinsicDec(transaction);
if (version2 !== extrinsic.version)
throw new Error("Incorrect extrinsic version");
const typeRefs = type === "signed" ? [
extrinsic.addressTy,
extrinsic.signatureTy,
...extrinsic.signedExtensions.map((x) => x.includedInExtrinsic),
extrinsic.callTy
] : [extrinsic.callTy];
if (txAdditionalSigned) {
bytes = mergeUint8([bytes, toBytes(txAdditionalSigned)]);
typeRefs.push(
...extrinsic.signedExtensions.map((x) => x.includedInSignedData)
);
}
return generateProof(decodeAndCollectKnownLeafs(bytes, typeRefs, lookup));
};
return {
digest,
getProofForExtrinsic,
getProofForExtrinsicParts,
getProofForExtrinsicPayload
};
};
export { merkleizeMetadata };
//# sourceMappingURL=main.mjs.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"main.mjs","sources":["../../src/main.ts"],"sourcesContent":["import {\n Blake3256,\n HexString,\n compact,\n u32,\n} from \"@pezkuwi/bizinikiwi-bindings\"\nimport {\n ExtraInfo,\n ExtrinsicMetadata,\n LookupValue,\n MetadataDigest,\n ScalePrimitive,\n TypeRef,\n extraInfo,\n extrinsicMetadata,\n lookupType,\n metadataDigest,\n extrinsicDec,\n} from \"./codecs\"\nimport { getAccessibleTypes } from \"./get-accessible-types\"\nimport { getLookup } from \"./get-lookup\"\nimport { getMetadata } from \"./get-metadata\"\nimport { compactTypeRefs, toBytes } from \"./utils\"\nimport { decodeAndCollectKnownLeafs } from \"./decode-and-collect\"\nimport { getProofData } from \"./proof\"\nimport { getDynamicBuilder, getLookupFn } from \"@pezkuwi/metadata-builders\"\nimport { mergeUint8 } from \"@pezkuwi/papi-utils\"\n\nexport interface MetadataMerkleizer {\n /**\n * @returns Digest value of the metadata (aka its merkleized root-hash)\n */\n digest: () => Uint8Array\n\n /**\n * Get proof for an `Extrinsic`.\n *\n * @param transaction Encoded `Extrinsic`, both signed or unsigned.\n * @param txAdditionalSigned Optionally collect types for given\n * `additionalSigned` part of signedExtensions.\n * @returns Encoded `Proof`\n */\n getProofForExtrinsic: (\n transaction: Uint8Array | HexString,\n txAdditionalSigned?: Uint8Array | HexString,\n ) => Uint8Array\n\n /**\n * Get proof for `ExtrinsicPayload` parts.\n *\n * @param callData Call data of the transaction. It has to be\n * bare; i.e.\n * without prepended compact length.\n * @param includedInExtrinsic Extra part of the signed extensions, all of\n * them concatenated.\n * @param includedInSignedData Additional signed part of the signed\n * extensions, all of them concatenated.\n * @returns Encoded `Proof`\n */\n getProofForExtrinsicParts: (\n callData: Uint8Array | HexString,\n includedInExtrinsic: Uint8Array | HexString,\n includedInSignedData: Uint8Array | HexString,\n ) => Uint8Array\n\n /**\n * Get proof for `ExtrinsicPayload`.\n *\n * @param extrinsicPayload Call data, extra part of signedExtensions and\n * additional signed part of signedExtensions\n * concatenated. It has to be bare; i.e. without\n * prepended compact length.\n * @returns Encoded `Proof`\n */\n getProofForExtrinsicPayload: (\n extrinsicPayload: Uint8Array | HexString,\n ) => Uint8Array\n}\n\nconst assertExpected = <T>(name: string, expected: T, received?: T): void => {\n if (received != null && received !== expected)\n throw new Error(\n `${name} not expected. Received ${received} expected ${expected}`,\n )\n}\n\nexport const merkleizeMetadata = (\n metadataBytes: Uint8Array | HexString,\n {\n decimals,\n tokenSymbol,\n ...hinted\n }: { decimals: number; tokenSymbol: string } & Partial<ExtraInfo>,\n): MetadataMerkleizer => {\n const metadata = getMetadata(metadataBytes)\n\n const checkedVersion = metadata.extrinsic.version.includes(4) ? 4 : null\n if (checkedVersion == null) throw new Error(\"Only extrinsic v4 is supported\")\n\n const { ss58Prefix, buildDefinition } = getDynamicBuilder(\n getLookupFn(metadata),\n )\n if (ss58Prefix == null) throw new Error(\"SS58 prefix not found in metadata\")\n assertExpected(\"SS58 prefix\", ss58Prefix, hinted.base58Prefix)\n const version = metadata.pallets\n .find((x) => x.name === \"System\")\n ?.constants.find((x) => x.name === \"Version\")\n if (version == null) throw new Error(\"System.Version constant not found\")\n const { spec_name: specName, spec_version: specVersion } = buildDefinition(\n version.type,\n ).dec(version.value)\n if (typeof specName !== \"string\" || typeof specVersion !== \"number\")\n throw new Error(\"Spec name or spec version not found\")\n assertExpected(\"Spec name\", specName, hinted.specName)\n assertExpected(\"Spec version\", specVersion, hinted.specVersion)\n\n const info: ExtraInfo = {\n decimals,\n tokenSymbol,\n specVersion,\n specName,\n base58Prefix: ss58Prefix,\n }\n const definitions = new Map<number, LookupValue>(\n metadata.lookup.map((value) => [value.id, value]),\n )\n const accessibleTypes = getAccessibleTypes(metadata, definitions)\n const getPrimitive = (frameId: number): ScalePrimitive[\"tag\"] | null => {\n const {\n def: { tag, value },\n } = definitions.get(frameId)!\n\n if (tag === \"primitive\") return value.tag\n\n if ((tag !== \"composite\" && tag !== \"tuple\") || value.length > 1)\n throw new Error(\"The provided definition doesn't map to a primitive\")\n\n return value.length === 0\n ? null // signals `void`\n : getPrimitive(tag === \Line truncated
Loaded 100 of 150 files, more files were not shown because too many files have changed in this diff. Show more