@polkadot-api/substrate-bindings 0.6.0 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/codecs/blockHeader.mjs +42 -0
- package/dist/esm/codecs/blockHeader.mjs.map +1 -0
- package/dist/esm/codecs/metadata/docs.mjs +6 -0
- package/dist/esm/codecs/metadata/docs.mjs.map +1 -0
- package/dist/esm/codecs/metadata/lookup.mjs +72 -0
- package/dist/esm/codecs/metadata/lookup.mjs.map +1 -0
- package/dist/esm/codecs/metadata/metadata.mjs +35 -0
- package/dist/esm/codecs/metadata/metadata.mjs.map +1 -0
- package/dist/esm/codecs/metadata/pallets.mjs +66 -0
- package/dist/esm/codecs/metadata/pallets.mjs.map +1 -0
- package/dist/esm/codecs/metadata/runtime-api.mjs +32 -0
- package/dist/esm/codecs/metadata/runtime-api.mjs.map +1 -0
- package/dist/esm/codecs/metadata/v14.mjs +39 -0
- package/dist/esm/codecs/metadata/v14.mjs.map +1 -0
- package/dist/esm/codecs/metadata/v15.mjs +44 -0
- package/dist/esm/codecs/metadata/v15.mjs.map +1 -0
- package/dist/esm/codecs/scale/AccountId.mjs +21 -0
- package/dist/esm/codecs/scale/AccountId.mjs.map +1 -0
- package/dist/esm/codecs/scale/Binary.mjs +62 -0
- package/dist/esm/codecs/scale/Binary.mjs.map +1 -0
- package/dist/esm/codecs/scale/Hex.mjs +17 -0
- package/dist/esm/codecs/scale/Hex.mjs.map +1 -0
- package/dist/esm/codecs/scale/Self.mjs +26 -0
- package/dist/esm/codecs/scale/Self.mjs.map +1 -0
- package/dist/esm/codecs/scale/Variant.mjs +30 -0
- package/dist/esm/codecs/scale/Variant.mjs.map +1 -0
- package/dist/esm/codecs/scale/bitSequence.mjs +24 -0
- package/dist/esm/codecs/scale/bitSequence.mjs.map +1 -0
- package/dist/esm/codecs/scale/char.mjs +10 -0
- package/dist/esm/codecs/scale/char.mjs.map +1 -0
- package/dist/esm/codecs/scale/compact.mjs +7 -0
- package/dist/esm/codecs/scale/compact.mjs.map +1 -0
- package/dist/esm/codecs/scale/ethAccount.mjs +32 -0
- package/dist/esm/codecs/scale/ethAccount.mjs.map +1 -0
- package/dist/esm/codecs/scale/fixed-str.mjs +12 -0
- package/dist/esm/codecs/scale/fixed-str.mjs.map +1 -0
- package/dist/esm/hashes/blake2.mjs +11 -0
- package/dist/esm/hashes/blake2.mjs.map +1 -0
- package/dist/esm/hashes/blake3.mjs +9 -0
- package/dist/esm/hashes/blake3.mjs.map +1 -0
- package/dist/esm/hashes/h64.mjs +134 -0
- package/dist/esm/hashes/h64.mjs.map +1 -0
- package/dist/esm/hashes/identity.mjs +4 -0
- package/dist/esm/hashes/identity.mjs.map +1 -0
- package/dist/esm/hashes/twoX.mjs +24 -0
- package/dist/esm/hashes/twoX.mjs.map +1 -0
- package/dist/esm/index.mjs +24 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/storage.mjs +53 -0
- package/dist/esm/storage.mjs.map +1 -0
- package/dist/esm/types/enum.mjs +29 -0
- package/dist/esm/types/enum.mjs.map +1 -0
- package/dist/esm/utils/ss58-util.mjs +55 -0
- package/dist/esm/utils/ss58-util.mjs.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +402 -406
- package/dist/index.js.map +1 -1
- package/package.json +14 -13
- package/dist/index.d.mts +0 -1094
- package/dist/index.mjs +0 -905
- package/dist/index.mjs.map +0 -1
- package/dist/min/index.d.ts +0 -1094
- package/dist/min/index.js +0 -2
- package/dist/min/index.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact.mjs","sources":["../../../../src/codecs/scale/compact.ts"],"sourcesContent":["import { Codec, compact } from \"scale-ts\"\n\nexport const compactNumber = compact as Codec<number>\nexport const compactBn = compact as Codec<bigint>\n"],"names":[],"mappings":";;AAEO,MAAM,aAAgB,GAAA,QAAA;AACtB,MAAM,SAAY,GAAA;;;;"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { fromHex, toHex } from '@polkadot-api/utils';
|
|
2
|
+
import { Bytes, createCodec, createDecoder } from 'scale-ts';
|
|
3
|
+
import { keccak_256 } from '@noble/hashes/sha3';
|
|
4
|
+
|
|
5
|
+
const getFormattedAddress = (hexAddress) => {
|
|
6
|
+
const nonChecksum = hexAddress.slice(2);
|
|
7
|
+
const hashedAddress = toHex(keccak_256(nonChecksum)).slice(2);
|
|
8
|
+
const result = new Array(40);
|
|
9
|
+
for (let i = 0; i < 40; i++) {
|
|
10
|
+
const checksumVal = parseInt(hashedAddress[i], 16);
|
|
11
|
+
const char = nonChecksum[i];
|
|
12
|
+
result[i] = checksumVal > 7 ? char.toUpperCase() : char;
|
|
13
|
+
}
|
|
14
|
+
return `0x${result.join("")}`;
|
|
15
|
+
};
|
|
16
|
+
const bytes20Dec = Bytes(20)[1];
|
|
17
|
+
const ethAccount = createCodec(
|
|
18
|
+
(input) => {
|
|
19
|
+
const bytes = fromHex(input);
|
|
20
|
+
if (bytes.length !== 20)
|
|
21
|
+
throw new Error(`Invalid length found on EthAddress(${input})`);
|
|
22
|
+
const hexAddress = toHex(bytes);
|
|
23
|
+
if (input === hexAddress || input === hexAddress.toUpperCase()) return bytes;
|
|
24
|
+
if (getFormattedAddress(hexAddress) !== input)
|
|
25
|
+
throw new Error(`Invalid checksum found on EthAddress(${input})`);
|
|
26
|
+
return bytes;
|
|
27
|
+
},
|
|
28
|
+
createDecoder((bytes) => getFormattedAddress(toHex(bytes20Dec(bytes))))
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
export { ethAccount };
|
|
32
|
+
//# sourceMappingURL=ethAccount.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethAccount.mjs","sources":["../../../../src/codecs/scale/ethAccount.ts"],"sourcesContent":["import { fromHex, toHex } from \"@polkadot-api/utils\"\nimport { Bytes, createCodec, createDecoder } from \"scale-ts\"\nimport { keccak_256 as keccak } from \"@noble/hashes/sha3\"\n\nconst getFormattedAddress = (hexAddress: string) => {\n const nonChecksum = hexAddress.slice(2)\n const hashedAddress = toHex(keccak(nonChecksum)).slice(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":["keccak"],"mappings":";;;;AAIA,MAAM,mBAAA,GAAsB,CAAC,UAAuB,KAAA;AAClD,EAAM,MAAA,WAAA,GAAc,UAAW,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AACtC,EAAA,MAAM,gBAAgB,KAAM,CAAAA,UAAA,CAAO,WAAW,CAAC,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA;AAExD,EAAM,MAAA,MAAA,GAAS,IAAI,KAAA,CAAM,EAAE,CAAA,CAAA;AAE3B,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,EAAA,EAAI,CAAK,EAAA,EAAA;AAC3B,IAAA,MAAM,WAAc,GAAA,QAAA,CAAS,aAAc,CAAA,CAAC,GAAG,EAAE,CAAA,CAAA;AACjD,IAAM,MAAA,IAAA,GAAO,YAAY,CAAC,CAAA,CAAA;AAC1B,IAAA,MAAA,CAAO,CAAC,CAAI,GAAA,WAAA,GAAc,CAAI,GAAA,IAAA,CAAK,aAAgB,GAAA,IAAA,CAAA;AAAA,GACrD;AAEA,EAAA,OAAO,CAAK,EAAA,EAAA,MAAA,CAAO,IAAK,CAAA,EAAE,CAAC,CAAA,CAAA,CAAA;AAC7B,CAAA,CAAA;AAEA,MAAM,UAAa,GAAA,KAAA,CAAM,EAAE,CAAA,CAAE,CAAC,CAAA,CAAA;AAEvB,MAAM,UAAa,GAAA,WAAA;AAAA,EACxB,CAAC,KAAkB,KAAA;AACjB,IAAM,MAAA,KAAA,GAAQ,QAAQ,KAAK,CAAA,CAAA;AAC3B,IAAA,IAAI,MAAM,MAAW,KAAA,EAAA;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAsC,mCAAA,EAAA,KAAK,CAAG,CAAA,CAAA,CAAA,CAAA;AAEhE,IAAM,MAAA,UAAA,GAAa,MAAM,KAAK,CAAA,CAAA;AAC9B,IAAA,IAAI,UAAU,UAAc,IAAA,KAAA,KAAU,UAAW,CAAA,WAAA,IAAsB,OAAA,KAAA,CAAA;AAEvE,IAAI,IAAA,mBAAA,CAAoB,UAAU,CAAM,KAAA,KAAA;AACtC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAwC,qCAAA,EAAA,KAAK,CAAG,CAAA,CAAA,CAAA,CAAA;AAElE,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAAA,EACA,aAAA,CAAc,CAAC,KAAU,KAAA,mBAAA,CAAoB,MAAM,UAAW,CAAA,KAAK,CAAC,CAAC,CAAC,CAAA;AACxE;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { enhanceCodec, Bytes } from 'scale-ts';
|
|
2
|
+
|
|
3
|
+
const textEncoder = new TextEncoder();
|
|
4
|
+
const textDecoder = new TextDecoder();
|
|
5
|
+
const fixedStr = (nBytes) => enhanceCodec(
|
|
6
|
+
Bytes(nBytes),
|
|
7
|
+
(str) => textEncoder.encode(str),
|
|
8
|
+
(bytes) => textDecoder.decode(bytes)
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
export { fixedStr };
|
|
12
|
+
//# sourceMappingURL=fixed-str.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixed-str.mjs","sources":["../../../../src/codecs/scale/fixed-str.ts"],"sourcesContent":["import { Bytes, enhanceCodec } from \"scale-ts\"\n\nconst 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":[],"mappings":";;AAEA,MAAM,WAAA,GAAc,IAAI,WAAY,EAAA,CAAA;AACpC,MAAM,WAAA,GAAc,IAAI,WAAY,EAAA,CAAA;AAEvB,MAAA,QAAA,GAAW,CAAC,MACvB,KAAA,YAAA;AAAA,EACE,MAAM,MAAM,CAAA;AAAA,EACZ,CAAC,GAAA,KAAgB,WAAY,CAAA,MAAA,CAAO,GAAG,CAAA;AAAA,EACvC,CAAC,KAAA,KAAU,WAAY,CAAA,MAAA,CAAO,KAAK,CAAA;AACrC;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { mergeUint8 } from '@polkadot-api/utils';
|
|
2
|
+
import { blake2b } from '@noble/hashes/blake2b';
|
|
3
|
+
|
|
4
|
+
const len32 = { dkLen: 32 };
|
|
5
|
+
const Blake2256 = (encoded) => blake2b(encoded, len32);
|
|
6
|
+
const len16 = { dkLen: 16 };
|
|
7
|
+
const Blake2128 = (encoded) => blake2b(encoded, len16);
|
|
8
|
+
const Blake2128Concat = (encoded) => mergeUint8(Blake2128(encoded), encoded);
|
|
9
|
+
|
|
10
|
+
export { Blake2128, Blake2128Concat, Blake2256 };
|
|
11
|
+
//# sourceMappingURL=blake2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blake2.mjs","sources":["../../../src/hashes/blake2.ts"],"sourcesContent":["import { mergeUint8 } from \"@polkadot-api/utils\"\nimport { blake2b } from \"@noble/hashes/blake2b\"\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":[],"mappings":";;;AAGA,MAAM,KAAA,GAAQ,EAAE,KAAA,EAAO,EAAG,EAAA,CAAA;AACnB,MAAM,SAAY,GAAA,CAAC,OAAwB,KAAA,OAAA,CAAQ,SAAS,KAAK,EAAA;AAExE,MAAM,KAAA,GAAQ,EAAE,KAAA,EAAO,EAAG,EAAA,CAAA;AACnB,MAAM,SAAY,GAAA,CAAC,OAAwB,KAAA,OAAA,CAAQ,SAAS,KAAK,EAAA;AAEjE,MAAM,kBAAkB,CAAC,OAAA,KAC9B,WAAW,SAAU,CAAA,OAAO,GAAG,OAAO;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { mergeUint8 } from '@polkadot-api/utils';
|
|
2
|
+
import { blake3 } from '@noble/hashes/blake3';
|
|
3
|
+
|
|
4
|
+
const len32 = { dkLen: 32 };
|
|
5
|
+
const Blake3256 = (encoded) => blake3(encoded, len32);
|
|
6
|
+
const Blake3256Concat = (encoded) => mergeUint8(Blake3256(encoded), encoded);
|
|
7
|
+
|
|
8
|
+
export { Blake3256, Blake3256Concat };
|
|
9
|
+
//# sourceMappingURL=blake3.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blake3.mjs","sources":["../../../src/hashes/blake3.ts"],"sourcesContent":["import { mergeUint8 } from \"@polkadot-api/utils\"\nimport { blake3 } from \"@noble/hashes/blake3\"\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,EAAG,EAAA,CAAA;AACnB,MAAM,SAAY,GAAA,CAAC,OAAwB,KAAA,MAAA,CAAO,SAAS,KAAK,EAAA;AAEhE,MAAM,kBAAkB,CAAC,OAAA,KAC9B,WAAW,SAAU,CAAA,OAAO,GAAG,OAAO;;;;"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
const bigintFromU16 = (v0, v1, v2, v3) => new DataView(new Uint16Array([v0, v1, v2, v3]).buffer).getBigUint64(0, true);
|
|
2
|
+
const MASK_64 = 2n ** 64n - 1n;
|
|
3
|
+
const rotl = (input, nBits) => input << nBits & MASK_64 | input >> 64n - nBits;
|
|
4
|
+
const multiply = (a, b) => a * b & MASK_64;
|
|
5
|
+
const add = (a, b) => a + b & MASK_64;
|
|
6
|
+
const PRIME64_1 = 11400714785074694791n;
|
|
7
|
+
const PRIME64_2 = 14029467366897019727n;
|
|
8
|
+
const PRIME64_3 = 1609587929392839161n;
|
|
9
|
+
const PRIME64_4 = 9650029242287828579n;
|
|
10
|
+
const PRIME64_5 = 2870177450012600261n;
|
|
11
|
+
function h64(input, seed = 0n) {
|
|
12
|
+
let v1 = add(add(seed, PRIME64_1), PRIME64_2);
|
|
13
|
+
let v2 = add(seed, PRIME64_2);
|
|
14
|
+
let v3 = seed;
|
|
15
|
+
let v4 = seed - PRIME64_1;
|
|
16
|
+
let totalLen = input.length;
|
|
17
|
+
let memsize = 0;
|
|
18
|
+
let memory = null;
|
|
19
|
+
(function update() {
|
|
20
|
+
let p2 = 0;
|
|
21
|
+
let bEnd = p2 + totalLen;
|
|
22
|
+
if (!totalLen) return;
|
|
23
|
+
memory = new Uint8Array(32);
|
|
24
|
+
if (totalLen < 32) {
|
|
25
|
+
memory.set(input.subarray(0, totalLen), memsize);
|
|
26
|
+
memsize += totalLen;
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (p2 <= bEnd - 32) {
|
|
30
|
+
const limit = bEnd - 32;
|
|
31
|
+
do {
|
|
32
|
+
let other;
|
|
33
|
+
other = bigintFromU16(
|
|
34
|
+
input[p2 + 1] << 8 | input[p2],
|
|
35
|
+
input[p2 + 3] << 8 | input[p2 + 2],
|
|
36
|
+
input[p2 + 5] << 8 | input[p2 + 4],
|
|
37
|
+
input[p2 + 7] << 8 | input[p2 + 6]
|
|
38
|
+
);
|
|
39
|
+
v1 = multiply(rotl(add(v1, multiply(other, PRIME64_2)), 31n), PRIME64_1);
|
|
40
|
+
p2 += 8;
|
|
41
|
+
other = bigintFromU16(
|
|
42
|
+
input[p2 + 1] << 8 | input[p2],
|
|
43
|
+
input[p2 + 3] << 8 | input[p2 + 2],
|
|
44
|
+
input[p2 + 5] << 8 | input[p2 + 4],
|
|
45
|
+
input[p2 + 7] << 8 | input[p2 + 6]
|
|
46
|
+
);
|
|
47
|
+
v2 = multiply(rotl(add(v2, multiply(other, PRIME64_2)), 31n), PRIME64_1);
|
|
48
|
+
p2 += 8;
|
|
49
|
+
other = bigintFromU16(
|
|
50
|
+
input[p2 + 1] << 8 | input[p2],
|
|
51
|
+
input[p2 + 3] << 8 | input[p2 + 2],
|
|
52
|
+
input[p2 + 5] << 8 | input[p2 + 4],
|
|
53
|
+
input[p2 + 7] << 8 | input[p2 + 6]
|
|
54
|
+
);
|
|
55
|
+
v3 = multiply(rotl(add(v3, multiply(other, PRIME64_2)), 31n), PRIME64_1);
|
|
56
|
+
p2 += 8;
|
|
57
|
+
other = bigintFromU16(
|
|
58
|
+
input[p2 + 1] << 8 | input[p2],
|
|
59
|
+
input[p2 + 3] << 8 | input[p2 + 2],
|
|
60
|
+
input[p2 + 5] << 8 | input[p2 + 4],
|
|
61
|
+
input[p2 + 7] << 8 | input[p2 + 6]
|
|
62
|
+
);
|
|
63
|
+
v4 = multiply(rotl(add(v4, multiply(other, PRIME64_2)), 31n), PRIME64_1);
|
|
64
|
+
p2 += 8;
|
|
65
|
+
} while (p2 <= limit);
|
|
66
|
+
}
|
|
67
|
+
if (p2 < bEnd) {
|
|
68
|
+
memory.set(input.subarray(p2, bEnd), memsize);
|
|
69
|
+
memsize = bEnd - p2;
|
|
70
|
+
}
|
|
71
|
+
})();
|
|
72
|
+
input = memory || input;
|
|
73
|
+
let result;
|
|
74
|
+
let p = 0;
|
|
75
|
+
if (totalLen >= 32) {
|
|
76
|
+
result = rotl(v1, 1n);
|
|
77
|
+
result = add(result, rotl(v2, 7n));
|
|
78
|
+
result = add(result, rotl(v3, 12n));
|
|
79
|
+
result = add(result, rotl(v4, 18n));
|
|
80
|
+
v1 = multiply(rotl(multiply(v1, PRIME64_2), 31n), PRIME64_1);
|
|
81
|
+
result = result ^ v1;
|
|
82
|
+
result = add(multiply(result, PRIME64_1), PRIME64_4);
|
|
83
|
+
v2 = multiply(rotl(multiply(v2, PRIME64_2), 31n), PRIME64_1);
|
|
84
|
+
result = result ^ v2;
|
|
85
|
+
result = add(multiply(result, PRIME64_1), PRIME64_4);
|
|
86
|
+
v3 = multiply(rotl(multiply(v3, PRIME64_2), 31n), PRIME64_1);
|
|
87
|
+
result = result ^ v3;
|
|
88
|
+
result = add(multiply(result, PRIME64_1), PRIME64_4);
|
|
89
|
+
v4 = multiply(rotl(multiply(v4, PRIME64_2), 31n), PRIME64_1);
|
|
90
|
+
result = result ^ v4;
|
|
91
|
+
result = add(multiply(result, PRIME64_1), PRIME64_4);
|
|
92
|
+
} else {
|
|
93
|
+
result = add(seed, PRIME64_5);
|
|
94
|
+
}
|
|
95
|
+
result = add(result, BigInt(totalLen));
|
|
96
|
+
while (p <= memsize - 8) {
|
|
97
|
+
let temp2 = bigintFromU16(
|
|
98
|
+
input[p + 1] << 8 | input[p],
|
|
99
|
+
input[p + 3] << 8 | input[p + 2],
|
|
100
|
+
input[p + 5] << 8 | input[p + 4],
|
|
101
|
+
input[p + 7] << 8 | input[p + 6]
|
|
102
|
+
);
|
|
103
|
+
temp2 = multiply(rotl(multiply(temp2, PRIME64_2), 31n), PRIME64_1);
|
|
104
|
+
result = add(multiply(rotl(result ^ temp2, 27n), PRIME64_1), PRIME64_4);
|
|
105
|
+
p += 8;
|
|
106
|
+
}
|
|
107
|
+
if (p + 4 <= memsize) {
|
|
108
|
+
let temp2 = multiply(
|
|
109
|
+
bigintFromU16(
|
|
110
|
+
input[p + 1] << 8 | input[p],
|
|
111
|
+
input[p + 3] << 8 | input[p + 2],
|
|
112
|
+
0,
|
|
113
|
+
0
|
|
114
|
+
),
|
|
115
|
+
PRIME64_1
|
|
116
|
+
);
|
|
117
|
+
result = add(multiply(rotl(result ^ temp2, 23n), PRIME64_2), PRIME64_3);
|
|
118
|
+
p += 4;
|
|
119
|
+
}
|
|
120
|
+
while (p < memsize) {
|
|
121
|
+
const temp2 = multiply(bigintFromU16(input[p++], 0, 0, 0), PRIME64_5);
|
|
122
|
+
result = multiply(rotl(result ^ temp2, 11n), PRIME64_1);
|
|
123
|
+
}
|
|
124
|
+
let temp = result >> 33n;
|
|
125
|
+
result = multiply(result ^ temp, PRIME64_2);
|
|
126
|
+
temp = result >> 29n;
|
|
127
|
+
result = multiply(result ^ temp, PRIME64_3);
|
|
128
|
+
temp = result >> 32n;
|
|
129
|
+
result ^= temp;
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export { h64 };
|
|
134
|
+
//# sourceMappingURL=h64.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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 = result >> 33n\n result = multiply(result ^ temp, PRIME64_2)\n\n temp = result >> 29n\n result = multiply(result ^ temp, PRIME64_3)\n\n temp = result >> 32n\n result ^= temp\n\n return result\n}\n"],"names":["p","temp"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.mjs","sources":["../../../src/hashes/identity.ts"],"sourcesContent":["export const Identity = (encoded: Uint8Array): Uint8Array => encoded\n"],"names":[],"mappings":"AAAa,MAAA,QAAA,GAAW,CAAC,OAAoC,KAAA;;;;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { mergeUint8 } from '@polkadot-api/utils';
|
|
2
|
+
import { u64 } from 'scale-ts';
|
|
3
|
+
import { h64 } from './h64.mjs';
|
|
4
|
+
|
|
5
|
+
const Twox128 = (input) => {
|
|
6
|
+
const result = new Uint8Array(16);
|
|
7
|
+
const dv = new DataView(result.buffer);
|
|
8
|
+
dv.setBigUint64(0, h64(input), true);
|
|
9
|
+
dv.setBigUint64(8, h64(input, 1n), true);
|
|
10
|
+
return result;
|
|
11
|
+
};
|
|
12
|
+
const Twox256 = (input) => {
|
|
13
|
+
const result = new Uint8Array(32);
|
|
14
|
+
const dv = new DataView(result.buffer);
|
|
15
|
+
dv.setBigUint64(0, h64(input), true);
|
|
16
|
+
dv.setBigUint64(8, h64(input, 1n), true);
|
|
17
|
+
dv.setBigUint64(16, h64(input, 2n), true);
|
|
18
|
+
dv.setBigUint64(24, h64(input, 3n), true);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
const Twox64Concat = (encoded) => mergeUint8(u64.enc(h64(encoded)), encoded);
|
|
22
|
+
|
|
23
|
+
export { Twox128, Twox256, Twox64Concat };
|
|
24
|
+
//# sourceMappingURL=twoX.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"twoX.mjs","sources":["../../../src/hashes/twoX.ts"],"sourcesContent":["import { mergeUint8 } from \"@polkadot-api/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":";;;;AAIa,MAAA,OAAA,GAAU,CAAC,KAAkC,KAAA;AACxD,EAAM,MAAA,MAAA,GAAS,IAAI,UAAA,CAAW,EAAE,CAAA,CAAA;AAChC,EAAA,MAAM,EAAK,GAAA,IAAI,QAAS,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AAErC,EAAA,EAAA,CAAG,YAAa,CAAA,CAAA,EAAG,GAAI,CAAA,KAAK,GAAG,IAAI,CAAA,CAAA;AACnC,EAAA,EAAA,CAAG,aAAa,CAAG,EAAA,GAAA,CAAI,KAAO,EAAA,EAAE,GAAG,IAAI,CAAA,CAAA;AAEvC,EAAO,OAAA,MAAA,CAAA;AACT,EAAA;AAEa,MAAA,OAAA,GAAU,CAAC,KAAkC,KAAA;AACxD,EAAM,MAAA,MAAA,GAAS,IAAI,UAAA,CAAW,EAAE,CAAA,CAAA;AAChC,EAAA,MAAM,EAAK,GAAA,IAAI,QAAS,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AAErC,EAAA,EAAA,CAAG,YAAa,CAAA,CAAA,EAAG,GAAI,CAAA,KAAK,GAAG,IAAI,CAAA,CAAA;AACnC,EAAA,EAAA,CAAG,aAAa,CAAG,EAAA,GAAA,CAAI,KAAO,EAAA,EAAE,GAAG,IAAI,CAAA,CAAA;AACvC,EAAA,EAAA,CAAG,aAAa,EAAI,EAAA,GAAA,CAAI,KAAO,EAAA,EAAE,GAAG,IAAI,CAAA,CAAA;AACxC,EAAA,EAAA,CAAG,aAAa,EAAI,EAAA,GAAA,CAAI,KAAO,EAAA,EAAE,GAAG,IAAI,CAAA,CAAA;AAExC,EAAO,OAAA,MAAA,CAAA;AACT,EAAA;AAEa,MAAA,YAAA,GAAe,CAAC,OAAA,KAC3B,UAAW,CAAA,GAAA,CAAI,IAAI,GAAI,CAAA,OAAO,CAAC,CAAA,EAAG,OAAO;;;;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export { AccountId } from './codecs/scale/AccountId.mjs';
|
|
2
|
+
export { Bin, Binary, FixedSizeBinary } from './codecs/scale/Binary.mjs';
|
|
3
|
+
export { bitSequence } from './codecs/scale/bitSequence.mjs';
|
|
4
|
+
export { char } from './codecs/scale/char.mjs';
|
|
5
|
+
export { compactBn, compactNumber } from './codecs/scale/compact.mjs';
|
|
6
|
+
export { Hex } from './codecs/scale/Hex.mjs';
|
|
7
|
+
export { fixedStr } from './codecs/scale/fixed-str.mjs';
|
|
8
|
+
export { Bytes, Option, Result, Enum as ScaleEnum, Struct, Tuple, Vector, _void, bool, compact, createCodec, createDecoder, enhanceCodec, enhanceDecoder, enhanceEncoder, i128, i16, i256, i32, i64, i8, str, u128, u16, u256, u32, u64, u8 } from 'scale-ts';
|
|
9
|
+
export { Self, selfDecoder, selfEncoder } from './codecs/scale/Self.mjs';
|
|
10
|
+
export { Variant } from './codecs/scale/Variant.mjs';
|
|
11
|
+
export { ethAccount } from './codecs/scale/ethAccount.mjs';
|
|
12
|
+
export { blockHeader } from './codecs/blockHeader.mjs';
|
|
13
|
+
export { metadata } from './codecs/metadata/metadata.mjs';
|
|
14
|
+
export { v14 } from './codecs/metadata/v14.mjs';
|
|
15
|
+
export { v15 } from './codecs/metadata/v15.mjs';
|
|
16
|
+
export { Blake2128, Blake2128Concat, Blake2256 } from './hashes/blake2.mjs';
|
|
17
|
+
export { Blake3256, Blake3256Concat } from './hashes/blake3.mjs';
|
|
18
|
+
export { Identity } from './hashes/identity.mjs';
|
|
19
|
+
export { Twox128, Twox256, Twox64Concat } from './hashes/twoX.mjs';
|
|
20
|
+
export { h64 } from './hashes/h64.mjs';
|
|
21
|
+
export { Storage } from './storage.mjs';
|
|
22
|
+
export { Enum, _Enum } from './types/enum.mjs';
|
|
23
|
+
export { fromBufferToBase58, getSs58AddressInfo } from './utils/ss58-util.mjs';
|
|
24
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { mergeUint8, toHex } from '@polkadot-api/utils';
|
|
2
|
+
import { Blake2128Concat } from './hashes/blake2.mjs';
|
|
3
|
+
import '@noble/hashes/blake3';
|
|
4
|
+
import { Identity } from './hashes/identity.mjs';
|
|
5
|
+
import { Twox128, Twox64Concat } from './hashes/twoX.mjs';
|
|
6
|
+
|
|
7
|
+
const textEncoder = new TextEncoder();
|
|
8
|
+
const Storage = (pallet) => {
|
|
9
|
+
const palledEncoded = Twox128(textEncoder.encode(pallet));
|
|
10
|
+
return (name, dec, ...encoders) => {
|
|
11
|
+
const palletItemEncoded = mergeUint8(
|
|
12
|
+
palledEncoded,
|
|
13
|
+
Twox128(textEncoder.encode(name))
|
|
14
|
+
);
|
|
15
|
+
const palletItemEncodedHex = toHex(palletItemEncoded);
|
|
16
|
+
const bytesToSkip = encoders.map((e) => e[1]).map((x) => {
|
|
17
|
+
if (x === Identity) return 0;
|
|
18
|
+
if (x === Twox64Concat) return 8;
|
|
19
|
+
if (x === Blake2128Concat) return 16;
|
|
20
|
+
return null;
|
|
21
|
+
}).filter(Boolean);
|
|
22
|
+
const keyDecoder = (key) => {
|
|
23
|
+
if (!key.startsWith(palletItemEncodedHex))
|
|
24
|
+
throw new Error(`key does not match this storage (${pallet}.${name})`);
|
|
25
|
+
if (bytesToSkip.length !== encoders.length)
|
|
26
|
+
throw new Error("Impossible to decode this key");
|
|
27
|
+
if (encoders.length === 0) return [];
|
|
28
|
+
const argsKey = key.slice(palletItemEncodedHex.length);
|
|
29
|
+
const result = new Array(encoders.length);
|
|
30
|
+
for (let i = 0, cur = 0; i < bytesToSkip.length; i++) {
|
|
31
|
+
const codec = encoders[i][0];
|
|
32
|
+
cur += bytesToSkip[i];
|
|
33
|
+
result[i] = codec.dec(argsKey.slice(cur * 2));
|
|
34
|
+
cur += codec.enc(result[i]).length;
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
const fns = encoders.map(
|
|
39
|
+
([{ enc: enc2 }, hash]) => (val) => hash(enc2(val))
|
|
40
|
+
);
|
|
41
|
+
const enc = (...args) => toHex(
|
|
42
|
+
mergeUint8(palletItemEncoded, ...args.map((val, idx) => fns[idx](val)))
|
|
43
|
+
);
|
|
44
|
+
return {
|
|
45
|
+
enc,
|
|
46
|
+
dec,
|
|
47
|
+
keyDecoder
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export { Storage };
|
|
53
|
+
//# sourceMappingURL=storage.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.mjs","sources":["../../src/storage.ts"],"sourcesContent":["import { mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport { Codec, Decoder } from \"scale-ts\"\nimport { Blake2128Concat, Identity, Twox128, Twox64Concat } from \"./hashes\"\n\nexport type EncoderWithHash<T> = [Codec<T>, (input: Uint8Array) => Uint8Array]\n\nconst textEncoder = new TextEncoder()\n\nexport const Storage = (pallet: string) => {\n const palledEncoded = Twox128(textEncoder.encode(pallet))\n return <T, A extends Array<EncoderWithHash<any>>>(\n name: string,\n dec: Decoder<T>,\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: Decoder<T>\n keyDecoder: (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 const bytesToSkip = encoders\n .map((e) => e[1])\n .map((x) => {\n if (x === Identity) return 0\n if (x === Twox64Concat) return 8\n if (x === Blake2128Concat) return 16\n return null\n })\n .filter(Boolean) as Array<number>\n\n const keyDecoder = (\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 (bytesToSkip.length !== encoders.length)\n throw new Error(\"Impossible to decode this key\")\n\n if (encoders.length === 0) return [] as any\n\n const argsKey = key.slice(palletItemEncodedHex.length)\n const result = new Array<any>(encoders.length)\n for (let i = 0, cur = 0; i < bytesToSkip.length; i++) {\n const codec = encoders[i][0]\n cur += bytesToSkip[i]\n result[i] = codec.dec(argsKey.slice(cur * 2))\n cur += codec.enc(result[i]).length\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(palletItemEncoded, ...args.map((val, idx) => fns[idx](val))),\n )\n\n return {\n enc,\n dec,\n keyDecoder,\n }\n }\n}\n"],"names":["enc"],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const discriminant = {
|
|
2
|
+
is(value, type) {
|
|
3
|
+
return value.type === type;
|
|
4
|
+
},
|
|
5
|
+
as(value, type) {
|
|
6
|
+
if (type !== value.type)
|
|
7
|
+
throw new Error(
|
|
8
|
+
`Enum.as(enum, ${type}) used with actual type ${value.type}`
|
|
9
|
+
);
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const Enum = Object.assign((type, value) => {
|
|
14
|
+
return {
|
|
15
|
+
type,
|
|
16
|
+
value
|
|
17
|
+
};
|
|
18
|
+
}, discriminant);
|
|
19
|
+
const _Enum = new Proxy(
|
|
20
|
+
{},
|
|
21
|
+
{
|
|
22
|
+
get(_, prop) {
|
|
23
|
+
return (value) => Enum(prop, value);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
export { Enum, _Enum };
|
|
29
|
+
//# sourceMappingURL=enum.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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,YAA6B,GAAA;AAAA,EACjC,EAAA,CACE,OACA,IAC0B,EAAA;AAC1B,IAAA,OAAO,MAAM,IAAS,KAAA,IAAA,CAAA;AAAA,GACxB;AAAA,EACA,EAAA,CAAG,OAAO,IAAM,EAAA;AACd,IAAA,IAAI,SAAS,KAAM,CAAA,IAAA;AACjB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAiB,cAAA,EAAA,IAAI,CAA2B,wBAAA,EAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,OAC5D,CAAA;AACF,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;AAOO,MAAM,IAAe,GAAA,MAAA,CAAO,MAAO,CAAA,CAAC,MAAc,KAAgB,KAAA;AACvE,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,GACF,CAAA;AACF,CAAA,EAAG,YAAY,EAAA;AAUR,MAAM,QAAQ,IAAI,KAAA;AAAA,EACvB,EAAC;AAAA,EACD;AAAA,IACE,GAAA,CAAI,GAAG,IAAc,EAAA;AACnB,MAAA,OAAO,CAAC,KAAA,KAAkB,IAAK,CAAA,IAAA,EAAM,KAAK,CAAA,CAAA;AAAA,KAC5C;AAAA,GACF;AACF;;;;"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { base58 } from '@scure/base';
|
|
2
|
+
import { blake2b } from '@noble/hashes/blake2b';
|
|
3
|
+
|
|
4
|
+
const SS58_PREFIX = new TextEncoder().encode("SS58PRE");
|
|
5
|
+
const CHECKSUM_LENGTH = 2;
|
|
6
|
+
const getSs58AddressInfo = (address) => {
|
|
7
|
+
try {
|
|
8
|
+
const decoded = base58.decode(address);
|
|
9
|
+
const prefixBytes = decoded.subarray(0, decoded[0] & 64 ? 2 : 1);
|
|
10
|
+
const publicKey = decoded.subarray(
|
|
11
|
+
prefixBytes.length,
|
|
12
|
+
decoded.length - CHECKSUM_LENGTH
|
|
13
|
+
);
|
|
14
|
+
const checksum = decoded.subarray(prefixBytes.length + publicKey.length);
|
|
15
|
+
const expectedChecksum = blake2b(
|
|
16
|
+
Uint8Array.of(...SS58_PREFIX, ...prefixBytes, ...publicKey),
|
|
17
|
+
{
|
|
18
|
+
dkLen: 64
|
|
19
|
+
}
|
|
20
|
+
).subarray(0, CHECKSUM_LENGTH);
|
|
21
|
+
const isChecksumValid = checksum[0] === expectedChecksum[0] && checksum[1] === expectedChecksum[1];
|
|
22
|
+
if (!isChecksumValid) return { isValid: false };
|
|
23
|
+
return {
|
|
24
|
+
isValid: true,
|
|
25
|
+
ss58Format: prefixBytesToNumber(prefixBytes),
|
|
26
|
+
publicKey: publicKey.slice()
|
|
27
|
+
};
|
|
28
|
+
} catch (_) {
|
|
29
|
+
return { isValid: false };
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const prefixBytesToNumber = (bytes) => {
|
|
33
|
+
const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
34
|
+
return dv.byteLength === 1 ? dv.getUint8(0) : dv.getUint16(0);
|
|
35
|
+
};
|
|
36
|
+
const fromBufferToBase58 = (ss58Format) => {
|
|
37
|
+
const prefixBytes = ss58Format < 64 ? Uint8Array.of(ss58Format) : Uint8Array.of(
|
|
38
|
+
(ss58Format & 252) >> 2 | 64,
|
|
39
|
+
ss58Format >> 8 | (ss58Format & 3) << 6
|
|
40
|
+
);
|
|
41
|
+
return (publicKey) => {
|
|
42
|
+
const checksum = blake2b(
|
|
43
|
+
Uint8Array.of(...SS58_PREFIX, ...prefixBytes, ...publicKey),
|
|
44
|
+
{
|
|
45
|
+
dkLen: 64
|
|
46
|
+
}
|
|
47
|
+
).subarray(0, CHECKSUM_LENGTH);
|
|
48
|
+
return base58.encode(
|
|
49
|
+
Uint8Array.of(...prefixBytes, ...publicKey, ...checksum)
|
|
50
|
+
);
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export { fromBufferToBase58, getSs58AddressInfo };
|
|
55
|
+
//# sourceMappingURL=ss58-util.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ss58-util.mjs","sources":["../../../src/utils/ss58-util.ts"],"sourcesContent":["import { base58 } from \"@scure/base\"\nimport { blake2b } from \"@noble/hashes/blake2b\"\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\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 (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,WAAc,GAAA,IAAI,WAAY,EAAA,CAAE,OAAO,SAAS,CAAA,CAAA;AACtD,MAAM,eAAkB,GAAA,CAAA,CAAA;AAOX,MAAA,kBAAA,GAAqB,CAAC,OAAyC,KAAA;AAC1E,EAAI,IAAA;AACF,IAAM,MAAA,OAAA,GAAU,MAAO,CAAA,MAAA,CAAO,OAAO,CAAA,CAAA;AACrC,IAAM,MAAA,WAAA,GAAc,QAAQ,QAAS,CAAA,CAAA,EAAG,QAAQ,CAAC,CAAA,GAAI,EAAc,GAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AACxE,IAAA,MAAM,YAAY,OAAQ,CAAA,QAAA;AAAA,MACxB,WAAY,CAAA,MAAA;AAAA,MACZ,QAAQ,MAAS,GAAA,eAAA;AAAA,KACnB,CAAA;AAEA,IAAA,MAAM,WAAW,OAAQ,CAAA,QAAA,CAAS,WAAY,CAAA,MAAA,GAAS,UAAU,MAAM,CAAA,CAAA;AACvE,IAAA,MAAM,gBAAmB,GAAA,OAAA;AAAA,MACvB,WAAW,EAAG,CAAA,GAAG,aAAa,GAAG,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,MAC1D;AAAA,QACE,KAAO,EAAA,EAAA;AAAA,OACT;AAAA,KACF,CAAE,QAAS,CAAA,CAAA,EAAG,eAAe,CAAA,CAAA;AAE7B,IAAM,MAAA,eAAA,GACJ,QAAS,CAAA,CAAC,CAAM,KAAA,gBAAA,CAAiB,CAAC,CAAA,IAAK,QAAS,CAAA,CAAC,CAAM,KAAA,gBAAA,CAAiB,CAAC,CAAA,CAAA;AAE3E,IAAA,IAAI,CAAC,eAAA,EAAwB,OAAA,EAAE,SAAS,KAAM,EAAA,CAAA;AAE9C,IAAO,OAAA;AAAA,MACL,OAAS,EAAA,IAAA;AAAA,MACT,UAAA,EAAY,oBAAoB,WAAW,CAAA;AAAA,MAC3C,SAAA,EAAW,UAAU,KAAM,EAAA;AAAA,KAC7B,CAAA;AAAA,WACO,CAAG,EAAA;AACV,IAAO,OAAA,EAAE,SAAS,KAAM,EAAA,CAAA;AAAA,GAC1B;AACF,EAAA;AAEA,MAAM,mBAAA,GAAsB,CAAC,KAAsB,KAAA;AACjD,EAAM,MAAA,EAAA,GAAK,IAAI,QAAS,CAAA,KAAA,CAAM,QAAQ,KAAM,CAAA,UAAA,EAAY,MAAM,UAAU,CAAA,CAAA;AACxE,EAAO,OAAA,EAAA,CAAG,eAAe,CAAI,GAAA,EAAA,CAAG,SAAS,CAAC,CAAA,GAAI,EAAG,CAAA,SAAA,CAAU,CAAC,CAAA,CAAA;AAC9D,CAAA,CAAA;AAEa,MAAA,kBAAA,GAAqB,CAAC,UAAuB,KAAA;AACxD,EAAA,MAAM,cACJ,UAAa,GAAA,EAAA,GACT,WAAW,EAAG,CAAA,UAAU,IACxB,UAAW,CAAA,EAAA;AAAA,IACP,CAAA,UAAA,GAAa,QAA0B,CAAK,GAAA,EAAA;AAAA,IAC7C,UAAA,IAAc,CAAO,GAAA,CAAA,UAAA,GAAa,CAA0B,KAAA,CAAA;AAAA,GAC/D,CAAA;AAEN,EAAA,OAAO,CAAC,SAAsC,KAAA;AAC5C,IAAA,MAAM,QAAW,GAAA,OAAA;AAAA,MACf,WAAW,EAAG,CAAA,GAAG,aAAa,GAAG,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,MAC1D;AAAA,QACE,KAAO,EAAA,EAAA;AAAA,OACT;AAAA,KACF,CAAE,QAAS,CAAA,CAAA,EAAG,eAAe,CAAA,CAAA;AAC7B,IAAA,OAAO,MAAO,CAAA,MAAA;AAAA,MACZ,WAAW,EAAG,CAAA,GAAG,aAAa,GAAG,SAAA,EAAW,GAAG,QAAQ,CAAA;AAAA,KACzD,CAAA;AAAA,GACF,CAAA;AACF;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -116,8 +116,8 @@ type TuplifyUnion<T, L = LastOf<T>, N = [T] extends [never] ? true : false> = tr
|
|
|
116
116
|
type RestrictedLenTuple<T, O extends StringRecord<any>> = Tuple<T, TuplifyUnion<keyof O> extends Tuple<any, infer V> ? V : 0>;
|
|
117
117
|
declare const Variant: {
|
|
118
118
|
<O extends StringRecord<Codec<any>>>(inner: O, indexes?: RestrictedLenTuple<number, O> | undefined): Codec<Enum<{ [K in keyof O]: CodecType<O[K]>; }>>;
|
|
119
|
-
enc: <
|
|
120
|
-
dec: <
|
|
119
|
+
enc: <O extends StringRecord<Encoder<any>>>(inner: O, x?: RestrictedLenTuple<number, O> | undefined) => Encoder<Enum<{ [K in keyof O]: EncoderType<O[K]>; }>>;
|
|
120
|
+
dec: <O extends StringRecord<Decoder<any>>>(inner: O, x?: RestrictedLenTuple<number, O> | undefined) => Decoder<Enum<{ [K in keyof O]: DecoderType<O[K]>; }>>;
|
|
121
121
|
};
|
|
122
122
|
|
|
123
123
|
declare const ethAccount: scale_ts.Codec<string>;
|
|
@@ -1085,10 +1085,10 @@ declare const Twox64Concat: (encoded: Uint8Array) => Uint8Array;
|
|
|
1085
1085
|
declare function h64(input: Uint8Array, seed?: bigint): bigint;
|
|
1086
1086
|
|
|
1087
1087
|
type EncoderWithHash<T> = [Codec<T>, (input: Uint8Array) => Uint8Array];
|
|
1088
|
-
declare const Storage: (pallet: string) => <T, A extends EncoderWithHash<any
|
|
1088
|
+
declare const Storage: (pallet: string) => <T, A extends Array<EncoderWithHash<any>>>(name: string, dec: Decoder<T>, ...encoders_0: A) => {
|
|
1089
1089
|
enc: (...args: { [K in keyof A]: A[K] extends EncoderWithHash<infer V> ? V : unknown; }) => string;
|
|
1090
1090
|
dec: Decoder<T>;
|
|
1091
|
-
keyDecoder: (value: string) => { [
|
|
1091
|
+
keyDecoder: (value: string) => { [K in keyof A]: A[K] extends EncoderWithHash<infer V> ? V : unknown; };
|
|
1092
1092
|
};
|
|
1093
1093
|
|
|
1094
1094
|
export { AccountId, Bin, Binary, type BitSequence, Blake2128, Blake2128Concat, Blake2256, Blake3256, Blake3256Concat, type BlockHeader, type EncoderWithHash, Enum, type EnumVariant, type ExtractEnumValue, FixedSizeBinary, type GetEnum, Hex, type HexString, Identity, type SS58AddressInfo, type SS58String, Self, Storage, Twox128, Twox256, Twox64Concat, type V14, type V14Extrinsic, type V14Lookup, type V15, type V15Extrinsic, Variant, _Enum, bitSequence, blockHeader, char, compactBn, compactNumber, ethAccount, fixedStr, fromBufferToBase58, getSs58AddressInfo, h64, metadata, selfDecoder, selfEncoder, v14, v15 };
|