@talismn/scale 0.1.1 → 0.2.0
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/declarations/src/papito.d.ts +5 -3
- package/dist/declarations/src/util/Prettify.d.ts +3 -0
- package/dist/declarations/src/util/compactMetadata.d.ts +10 -8
- package/dist/declarations/src/util/decodeScale.d.ts +2 -2
- package/dist/declarations/src/util/encodeMetadata.d.ts +2 -8
- package/dist/declarations/src/util/encodeStateKey.d.ts +3 -4
- package/dist/declarations/src/util/getStorageKeyPrefix.d.ts +1 -0
- package/dist/declarations/src/util/hash.d.ts +1 -0
- package/dist/declarations/src/util/index.d.ts +3 -1
- package/dist/declarations/src/util/parseMetadataRpc.d.ts +835 -0
- package/dist/talismn-scale.cjs.dev.js +105 -77
- package/dist/talismn-scale.cjs.prod.js +105 -77
- package/dist/talismn-scale.esm.js +66 -70
- package/package.json +6 -6
- package/dist/declarations/src/util/decodeMetadata.d.ts +0 -13
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var metadataBuilders = require('@polkadot-api/metadata-builders');
|
|
4
|
-
var utils = require('@polkadot-api/utils');
|
|
5
4
|
var substrateBindings = require('@polkadot-api/substrate-bindings');
|
|
5
|
+
var utils = require('@polkadot-api/utils');
|
|
6
6
|
var anylogger = require('anylogger');
|
|
7
7
|
var scaleTs = require('scale-ts');
|
|
8
8
|
|
|
@@ -27,7 +27,10 @@ var log = anylogger__default.default(packageJson.name);
|
|
|
27
27
|
* E.g. if `palletsAndItems` is `{ pallet: "System", items: ["Account"] }`, then only the
|
|
28
28
|
* types used in the `System.Account` storage query will remain inside of metadata.lookups.
|
|
29
29
|
*/
|
|
30
|
-
const compactMetadata = (
|
|
30
|
+
const compactMetadata = (anyMetadata, palletsAndItems = [], runtimeApisAndMethods = [], extraKeepTypes = []) => {
|
|
31
|
+
if (!isCompactableMetadata(anyMetadata)) throw new Error(`Metadata version ${anyMetadata.metadata.tag} not supported in compactMetadata`);
|
|
32
|
+
const metadata = anyMetadata.metadata.value;
|
|
33
|
+
|
|
31
34
|
// remove pallets we don't care about
|
|
32
35
|
metadata.pallets = metadata.pallets.filter(pallet =>
|
|
33
36
|
// keep this pallet if it's listed in `palletsAndItems`
|
|
@@ -42,10 +45,7 @@ const compactMetadata = (metadata, palletsAndItems = [], runtimeApisAndMethods =
|
|
|
42
45
|
items: itemNames
|
|
43
46
|
}) => {
|
|
44
47
|
const pallet = metadata.pallets.find(pallet => pallet.name === palletName);
|
|
45
|
-
if (!pallet)
|
|
46
|
-
log.debug("Failed to find pallet", palletName);
|
|
47
|
-
return [];
|
|
48
|
-
}
|
|
48
|
+
if (!pallet) return [];
|
|
49
49
|
|
|
50
50
|
// remove pallet fields we don't care about
|
|
51
51
|
pallet.calls = undefined;
|
|
@@ -81,10 +81,7 @@ const compactMetadata = (metadata, palletsAndItems = [], runtimeApisAndMethods =
|
|
|
81
81
|
methods: methodNames
|
|
82
82
|
}) => {
|
|
83
83
|
const runtimeApi = metadata.apis.find(runtimeApi => runtimeApi.name === runtimeApiName);
|
|
84
|
-
if (!runtimeApi)
|
|
85
|
-
log.debug("Failed to find runtimeApi", runtimeApiName);
|
|
86
|
-
return [];
|
|
87
|
-
}
|
|
84
|
+
if (!runtimeApi) return [];
|
|
88
85
|
|
|
89
86
|
// remove runtime fields we don't care about
|
|
90
87
|
runtimeApi.docs = [];
|
|
@@ -124,14 +121,11 @@ const compactMetadata = (metadata, palletsAndItems = [], runtimeApisAndMethods =
|
|
|
124
121
|
return newTypeId ?? 0;
|
|
125
122
|
};
|
|
126
123
|
remapTypeIds(metadata, getNewTypeId);
|
|
127
|
-
if ("address" in metadata.extrinsic)
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
metadata.extrinsic.signature = 0;
|
|
133
|
-
}
|
|
134
|
-
metadata.extrinsic.signedExtensions = [];
|
|
124
|
+
if ("address" in metadata.extrinsic) metadata.extrinsic.address = 0;
|
|
125
|
+
if ("call" in metadata.extrinsic) metadata.extrinsic.call = 0;
|
|
126
|
+
if ("signature" in metadata.extrinsic) metadata.extrinsic.signature = 0;
|
|
127
|
+
if ("extra" in metadata.extrinsic) metadata.extrinsic.extra = 0;
|
|
128
|
+
if ("signedExtensions" in metadata.extrinsic) metadata.extrinsic.signedExtensions = [];
|
|
135
129
|
if ("outerEnums" in metadata) {
|
|
136
130
|
// metadata is v15 (NOT v14)
|
|
137
131
|
metadata.outerEnums.call = 0;
|
|
@@ -139,6 +133,16 @@ const compactMetadata = (metadata, palletsAndItems = [], runtimeApisAndMethods =
|
|
|
139
133
|
metadata.outerEnums.event = 0;
|
|
140
134
|
}
|
|
141
135
|
};
|
|
136
|
+
const isCompactableMetadata = metadata => {
|
|
137
|
+
switch (metadata.metadata.tag) {
|
|
138
|
+
case "v14":
|
|
139
|
+
case "v15":
|
|
140
|
+
case "v16":
|
|
141
|
+
return true;
|
|
142
|
+
default:
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
};
|
|
142
146
|
const addDependentTypes = (metadataTysMap, keepTypes, types,
|
|
143
147
|
// Prevent stack overflow when a type references itself
|
|
144
148
|
addedTypes = new Set()) => {
|
|
@@ -269,43 +273,6 @@ const remapRuntimeApisTypeIds = (metadata, getNewTypeId) => {
|
|
|
269
273
|
}
|
|
270
274
|
};
|
|
271
275
|
|
|
272
|
-
/**
|
|
273
|
-
* Extracts the `version` u8 from a SCALE-encoded metadata blob and returns it as a `number`.
|
|
274
|
-
*
|
|
275
|
-
* Only reads the first 40 bytes of the blob.
|
|
276
|
-
*/
|
|
277
|
-
const getMetadataVersion = metadataRpc => {
|
|
278
|
-
try {
|
|
279
|
-
return scaleTs.Struct({
|
|
280
|
-
magicNumber: scaleTs.u32,
|
|
281
|
-
version: scaleTs.u8
|
|
282
|
-
}).dec(metadataRpc).version;
|
|
283
|
-
} catch {
|
|
284
|
-
return 0;
|
|
285
|
-
}
|
|
286
|
-
};
|
|
287
|
-
|
|
288
|
-
const decodeMetadata = metadataRpc => {
|
|
289
|
-
const metadataVersion = getMetadataVersion(metadataRpc);
|
|
290
|
-
if (metadataVersion !== 15 && metadataVersion !== 14) return {
|
|
291
|
-
metadataVersion
|
|
292
|
-
};
|
|
293
|
-
const decoded = substrateBindings.metadata.dec(metadataRpc);
|
|
294
|
-
if (decoded.metadata.tag === "v15") return {
|
|
295
|
-
metadataVersion,
|
|
296
|
-
metadata: decoded.metadata.value,
|
|
297
|
-
tag: decoded.metadata.tag
|
|
298
|
-
};
|
|
299
|
-
if (decoded.metadata.tag === "v14") return {
|
|
300
|
-
metadataVersion,
|
|
301
|
-
metadata: decoded.metadata.value,
|
|
302
|
-
tag: decoded.metadata.tag
|
|
303
|
-
};
|
|
304
|
-
return {
|
|
305
|
-
metadataVersion
|
|
306
|
-
};
|
|
307
|
-
};
|
|
308
|
-
|
|
309
276
|
const decodeScale = (scaleCoder, change, error) => {
|
|
310
277
|
if (change === null) return null;
|
|
311
278
|
try {
|
|
@@ -316,19 +283,7 @@ const decodeScale = (scaleCoder, change, error) => {
|
|
|
316
283
|
}
|
|
317
284
|
};
|
|
318
285
|
|
|
319
|
-
const encodeMetadata = (
|
|
320
|
-
metadata,
|
|
321
|
-
tag
|
|
322
|
-
}) => utils.toHex(substrateBindings.metadata.enc({
|
|
323
|
-
magicNumber,
|
|
324
|
-
metadata: tag === "v15" ? {
|
|
325
|
-
tag,
|
|
326
|
-
value: metadata
|
|
327
|
-
} : {
|
|
328
|
-
tag,
|
|
329
|
-
value: metadata
|
|
330
|
-
}
|
|
331
|
-
}));
|
|
286
|
+
const encodeMetadata = metadata => utils.toHex(substrateBindings.metadata.enc(metadata));
|
|
332
287
|
|
|
333
288
|
const encodeStateKey = (scaleCoder, error, ...args) => {
|
|
334
289
|
try {
|
|
@@ -339,6 +294,22 @@ const encodeStateKey = (scaleCoder, error, ...args) => {
|
|
|
339
294
|
}
|
|
340
295
|
};
|
|
341
296
|
|
|
297
|
+
/**
|
|
298
|
+
* Extracts the `version` u8 from a SCALE-encoded metadata blob and returns it as a `number`.
|
|
299
|
+
*
|
|
300
|
+
* Only reads the first 40 bytes of the blob.
|
|
301
|
+
*/
|
|
302
|
+
const getMetadataVersion = metadataRpc => {
|
|
303
|
+
try {
|
|
304
|
+
return scaleTs.Struct({
|
|
305
|
+
magicNumber: scaleTs.u32,
|
|
306
|
+
version: scaleTs.u8
|
|
307
|
+
}).dec(metadataRpc).version;
|
|
308
|
+
} catch {
|
|
309
|
+
return 0;
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
|
|
342
313
|
/**
|
|
343
314
|
* For the substrate-tokens (and other) modules, we configure the `onChainId` field in chaindata to tell the module how to query each token.
|
|
344
315
|
* These queries are made to the tokens pallet.
|
|
@@ -388,6 +359,30 @@ const papiStringify = (value, space) => {
|
|
|
388
359
|
return JSON.stringify(value, replacer, space);
|
|
389
360
|
};
|
|
390
361
|
|
|
362
|
+
const parseMetadataRpc = metadataRpc => {
|
|
363
|
+
const metadata = substrateBindings.decAnyMetadata(metadataRpc);
|
|
364
|
+
const unifiedMetadata = substrateBindings.unifyMetadata(metadata);
|
|
365
|
+
const lookupFn = metadataBuilders.getLookupFn(unifiedMetadata);
|
|
366
|
+
const builder = metadataBuilders.getDynamicBuilder(lookupFn);
|
|
367
|
+
return {
|
|
368
|
+
metadata,
|
|
369
|
+
unifiedMetadata,
|
|
370
|
+
lookupFn,
|
|
371
|
+
builder
|
|
372
|
+
};
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
const getStorageKeyPrefix = (palletName, storageName) => {
|
|
376
|
+
const palletHash = substrateBindings.Twox128(new TextEncoder().encode(palletName));
|
|
377
|
+
const storageHash = substrateBindings.Twox128(new TextEncoder().encode(storageName));
|
|
378
|
+
|
|
379
|
+
// Concatenate and convert to hex
|
|
380
|
+
const combined = new Uint8Array(palletHash.length + storageHash.length);
|
|
381
|
+
combined.set(palletHash, 0);
|
|
382
|
+
combined.set(storageHash, palletHash.length);
|
|
383
|
+
return utils.toHex(combined);
|
|
384
|
+
};
|
|
385
|
+
|
|
391
386
|
Object.defineProperty(exports, "getDynamicBuilder", {
|
|
392
387
|
enumerable: true,
|
|
393
388
|
get: function () { return metadataBuilders.getDynamicBuilder; }
|
|
@@ -396,32 +391,65 @@ Object.defineProperty(exports, "getLookupFn", {
|
|
|
396
391
|
enumerable: true,
|
|
397
392
|
get: function () { return metadataBuilders.getLookupFn; }
|
|
398
393
|
});
|
|
399
|
-
Object.defineProperty(exports, "
|
|
394
|
+
Object.defineProperty(exports, "Blake2128", {
|
|
400
395
|
enumerable: true,
|
|
401
|
-
get: function () { return
|
|
396
|
+
get: function () { return substrateBindings.Blake2128; }
|
|
402
397
|
});
|
|
403
|
-
Object.defineProperty(exports, "
|
|
398
|
+
Object.defineProperty(exports, "Blake2128Concat", {
|
|
404
399
|
enumerable: true,
|
|
405
|
-
get: function () { return
|
|
400
|
+
get: function () { return substrateBindings.Blake2128Concat; }
|
|
401
|
+
});
|
|
402
|
+
Object.defineProperty(exports, "Blake2256", {
|
|
403
|
+
enumerable: true,
|
|
404
|
+
get: function () { return substrateBindings.Blake2256; }
|
|
405
|
+
});
|
|
406
|
+
Object.defineProperty(exports, "Blake3256", {
|
|
407
|
+
enumerable: true,
|
|
408
|
+
get: function () { return substrateBindings.Blake3256; }
|
|
409
|
+
});
|
|
410
|
+
Object.defineProperty(exports, "Blake3256Concat", {
|
|
411
|
+
enumerable: true,
|
|
412
|
+
get: function () { return substrateBindings.Blake3256Concat; }
|
|
413
|
+
});
|
|
414
|
+
Object.defineProperty(exports, "Twox128", {
|
|
415
|
+
enumerable: true,
|
|
416
|
+
get: function () { return substrateBindings.Twox128; }
|
|
417
|
+
});
|
|
418
|
+
Object.defineProperty(exports, "Twox256", {
|
|
419
|
+
enumerable: true,
|
|
420
|
+
get: function () { return substrateBindings.Twox256; }
|
|
421
|
+
});
|
|
422
|
+
Object.defineProperty(exports, "Twox64Concat", {
|
|
423
|
+
enumerable: true,
|
|
424
|
+
get: function () { return substrateBindings.Twox64Concat; }
|
|
425
|
+
});
|
|
426
|
+
Object.defineProperty(exports, "decAnyMetadata", {
|
|
427
|
+
enumerable: true,
|
|
428
|
+
get: function () { return substrateBindings.decAnyMetadata; }
|
|
406
429
|
});
|
|
407
430
|
Object.defineProperty(exports, "metadata", {
|
|
408
431
|
enumerable: true,
|
|
409
432
|
get: function () { return substrateBindings.metadata; }
|
|
410
433
|
});
|
|
411
|
-
Object.defineProperty(exports, "
|
|
434
|
+
Object.defineProperty(exports, "unifyMetadata", {
|
|
435
|
+
enumerable: true,
|
|
436
|
+
get: function () { return substrateBindings.unifyMetadata; }
|
|
437
|
+
});
|
|
438
|
+
Object.defineProperty(exports, "fromHex", {
|
|
412
439
|
enumerable: true,
|
|
413
|
-
get: function () { return
|
|
440
|
+
get: function () { return utils.fromHex; }
|
|
414
441
|
});
|
|
415
|
-
Object.defineProperty(exports, "
|
|
442
|
+
Object.defineProperty(exports, "toHex", {
|
|
416
443
|
enumerable: true,
|
|
417
|
-
get: function () { return
|
|
444
|
+
get: function () { return utils.toHex; }
|
|
418
445
|
});
|
|
419
446
|
exports.compactMetadata = compactMetadata;
|
|
420
|
-
exports.decodeMetadata = decodeMetadata;
|
|
421
447
|
exports.decodeScale = decodeScale;
|
|
422
448
|
exports.encodeMetadata = encodeMetadata;
|
|
423
449
|
exports.encodeStateKey = encodeStateKey;
|
|
424
450
|
exports.getMetadataVersion = getMetadataVersion;
|
|
451
|
+
exports.getStorageKeyPrefix = getStorageKeyPrefix;
|
|
425
452
|
exports.magicNumber = magicNumber;
|
|
426
453
|
exports.papiParse = papiParse;
|
|
427
454
|
exports.papiStringify = papiStringify;
|
|
455
|
+
exports.parseMetadataRpc = parseMetadataRpc;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var metadataBuilders = require('@polkadot-api/metadata-builders');
|
|
4
|
-
var utils = require('@polkadot-api/utils');
|
|
5
4
|
var substrateBindings = require('@polkadot-api/substrate-bindings');
|
|
5
|
+
var utils = require('@polkadot-api/utils');
|
|
6
6
|
var anylogger = require('anylogger');
|
|
7
7
|
var scaleTs = require('scale-ts');
|
|
8
8
|
|
|
@@ -27,7 +27,10 @@ var log = anylogger__default.default(packageJson.name);
|
|
|
27
27
|
* E.g. if `palletsAndItems` is `{ pallet: "System", items: ["Account"] }`, then only the
|
|
28
28
|
* types used in the `System.Account` storage query will remain inside of metadata.lookups.
|
|
29
29
|
*/
|
|
30
|
-
const compactMetadata = (
|
|
30
|
+
const compactMetadata = (anyMetadata, palletsAndItems = [], runtimeApisAndMethods = [], extraKeepTypes = []) => {
|
|
31
|
+
if (!isCompactableMetadata(anyMetadata)) throw new Error(`Metadata version ${anyMetadata.metadata.tag} not supported in compactMetadata`);
|
|
32
|
+
const metadata = anyMetadata.metadata.value;
|
|
33
|
+
|
|
31
34
|
// remove pallets we don't care about
|
|
32
35
|
metadata.pallets = metadata.pallets.filter(pallet =>
|
|
33
36
|
// keep this pallet if it's listed in `palletsAndItems`
|
|
@@ -42,10 +45,7 @@ const compactMetadata = (metadata, palletsAndItems = [], runtimeApisAndMethods =
|
|
|
42
45
|
items: itemNames
|
|
43
46
|
}) => {
|
|
44
47
|
const pallet = metadata.pallets.find(pallet => pallet.name === palletName);
|
|
45
|
-
if (!pallet)
|
|
46
|
-
log.debug("Failed to find pallet", palletName);
|
|
47
|
-
return [];
|
|
48
|
-
}
|
|
48
|
+
if (!pallet) return [];
|
|
49
49
|
|
|
50
50
|
// remove pallet fields we don't care about
|
|
51
51
|
pallet.calls = undefined;
|
|
@@ -81,10 +81,7 @@ const compactMetadata = (metadata, palletsAndItems = [], runtimeApisAndMethods =
|
|
|
81
81
|
methods: methodNames
|
|
82
82
|
}) => {
|
|
83
83
|
const runtimeApi = metadata.apis.find(runtimeApi => runtimeApi.name === runtimeApiName);
|
|
84
|
-
if (!runtimeApi)
|
|
85
|
-
log.debug("Failed to find runtimeApi", runtimeApiName);
|
|
86
|
-
return [];
|
|
87
|
-
}
|
|
84
|
+
if (!runtimeApi) return [];
|
|
88
85
|
|
|
89
86
|
// remove runtime fields we don't care about
|
|
90
87
|
runtimeApi.docs = [];
|
|
@@ -124,14 +121,11 @@ const compactMetadata = (metadata, palletsAndItems = [], runtimeApisAndMethods =
|
|
|
124
121
|
return newTypeId ?? 0;
|
|
125
122
|
};
|
|
126
123
|
remapTypeIds(metadata, getNewTypeId);
|
|
127
|
-
if ("address" in metadata.extrinsic)
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
metadata.extrinsic.signature = 0;
|
|
133
|
-
}
|
|
134
|
-
metadata.extrinsic.signedExtensions = [];
|
|
124
|
+
if ("address" in metadata.extrinsic) metadata.extrinsic.address = 0;
|
|
125
|
+
if ("call" in metadata.extrinsic) metadata.extrinsic.call = 0;
|
|
126
|
+
if ("signature" in metadata.extrinsic) metadata.extrinsic.signature = 0;
|
|
127
|
+
if ("extra" in metadata.extrinsic) metadata.extrinsic.extra = 0;
|
|
128
|
+
if ("signedExtensions" in metadata.extrinsic) metadata.extrinsic.signedExtensions = [];
|
|
135
129
|
if ("outerEnums" in metadata) {
|
|
136
130
|
// metadata is v15 (NOT v14)
|
|
137
131
|
metadata.outerEnums.call = 0;
|
|
@@ -139,6 +133,16 @@ const compactMetadata = (metadata, palletsAndItems = [], runtimeApisAndMethods =
|
|
|
139
133
|
metadata.outerEnums.event = 0;
|
|
140
134
|
}
|
|
141
135
|
};
|
|
136
|
+
const isCompactableMetadata = metadata => {
|
|
137
|
+
switch (metadata.metadata.tag) {
|
|
138
|
+
case "v14":
|
|
139
|
+
case "v15":
|
|
140
|
+
case "v16":
|
|
141
|
+
return true;
|
|
142
|
+
default:
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
};
|
|
142
146
|
const addDependentTypes = (metadataTysMap, keepTypes, types,
|
|
143
147
|
// Prevent stack overflow when a type references itself
|
|
144
148
|
addedTypes = new Set()) => {
|
|
@@ -269,43 +273,6 @@ const remapRuntimeApisTypeIds = (metadata, getNewTypeId) => {
|
|
|
269
273
|
}
|
|
270
274
|
};
|
|
271
275
|
|
|
272
|
-
/**
|
|
273
|
-
* Extracts the `version` u8 from a SCALE-encoded metadata blob and returns it as a `number`.
|
|
274
|
-
*
|
|
275
|
-
* Only reads the first 40 bytes of the blob.
|
|
276
|
-
*/
|
|
277
|
-
const getMetadataVersion = metadataRpc => {
|
|
278
|
-
try {
|
|
279
|
-
return scaleTs.Struct({
|
|
280
|
-
magicNumber: scaleTs.u32,
|
|
281
|
-
version: scaleTs.u8
|
|
282
|
-
}).dec(metadataRpc).version;
|
|
283
|
-
} catch {
|
|
284
|
-
return 0;
|
|
285
|
-
}
|
|
286
|
-
};
|
|
287
|
-
|
|
288
|
-
const decodeMetadata = metadataRpc => {
|
|
289
|
-
const metadataVersion = getMetadataVersion(metadataRpc);
|
|
290
|
-
if (metadataVersion !== 15 && metadataVersion !== 14) return {
|
|
291
|
-
metadataVersion
|
|
292
|
-
};
|
|
293
|
-
const decoded = substrateBindings.metadata.dec(metadataRpc);
|
|
294
|
-
if (decoded.metadata.tag === "v15") return {
|
|
295
|
-
metadataVersion,
|
|
296
|
-
metadata: decoded.metadata.value,
|
|
297
|
-
tag: decoded.metadata.tag
|
|
298
|
-
};
|
|
299
|
-
if (decoded.metadata.tag === "v14") return {
|
|
300
|
-
metadataVersion,
|
|
301
|
-
metadata: decoded.metadata.value,
|
|
302
|
-
tag: decoded.metadata.tag
|
|
303
|
-
};
|
|
304
|
-
return {
|
|
305
|
-
metadataVersion
|
|
306
|
-
};
|
|
307
|
-
};
|
|
308
|
-
|
|
309
276
|
const decodeScale = (scaleCoder, change, error) => {
|
|
310
277
|
if (change === null) return null;
|
|
311
278
|
try {
|
|
@@ -316,19 +283,7 @@ const decodeScale = (scaleCoder, change, error) => {
|
|
|
316
283
|
}
|
|
317
284
|
};
|
|
318
285
|
|
|
319
|
-
const encodeMetadata = (
|
|
320
|
-
metadata,
|
|
321
|
-
tag
|
|
322
|
-
}) => utils.toHex(substrateBindings.metadata.enc({
|
|
323
|
-
magicNumber,
|
|
324
|
-
metadata: tag === "v15" ? {
|
|
325
|
-
tag,
|
|
326
|
-
value: metadata
|
|
327
|
-
} : {
|
|
328
|
-
tag,
|
|
329
|
-
value: metadata
|
|
330
|
-
}
|
|
331
|
-
}));
|
|
286
|
+
const encodeMetadata = metadata => utils.toHex(substrateBindings.metadata.enc(metadata));
|
|
332
287
|
|
|
333
288
|
const encodeStateKey = (scaleCoder, error, ...args) => {
|
|
334
289
|
try {
|
|
@@ -339,6 +294,22 @@ const encodeStateKey = (scaleCoder, error, ...args) => {
|
|
|
339
294
|
}
|
|
340
295
|
};
|
|
341
296
|
|
|
297
|
+
/**
|
|
298
|
+
* Extracts the `version` u8 from a SCALE-encoded metadata blob and returns it as a `number`.
|
|
299
|
+
*
|
|
300
|
+
* Only reads the first 40 bytes of the blob.
|
|
301
|
+
*/
|
|
302
|
+
const getMetadataVersion = metadataRpc => {
|
|
303
|
+
try {
|
|
304
|
+
return scaleTs.Struct({
|
|
305
|
+
magicNumber: scaleTs.u32,
|
|
306
|
+
version: scaleTs.u8
|
|
307
|
+
}).dec(metadataRpc).version;
|
|
308
|
+
} catch {
|
|
309
|
+
return 0;
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
|
|
342
313
|
/**
|
|
343
314
|
* For the substrate-tokens (and other) modules, we configure the `onChainId` field in chaindata to tell the module how to query each token.
|
|
344
315
|
* These queries are made to the tokens pallet.
|
|
@@ -388,6 +359,30 @@ const papiStringify = (value, space) => {
|
|
|
388
359
|
return JSON.stringify(value, replacer, space);
|
|
389
360
|
};
|
|
390
361
|
|
|
362
|
+
const parseMetadataRpc = metadataRpc => {
|
|
363
|
+
const metadata = substrateBindings.decAnyMetadata(metadataRpc);
|
|
364
|
+
const unifiedMetadata = substrateBindings.unifyMetadata(metadata);
|
|
365
|
+
const lookupFn = metadataBuilders.getLookupFn(unifiedMetadata);
|
|
366
|
+
const builder = metadataBuilders.getDynamicBuilder(lookupFn);
|
|
367
|
+
return {
|
|
368
|
+
metadata,
|
|
369
|
+
unifiedMetadata,
|
|
370
|
+
lookupFn,
|
|
371
|
+
builder
|
|
372
|
+
};
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
const getStorageKeyPrefix = (palletName, storageName) => {
|
|
376
|
+
const palletHash = substrateBindings.Twox128(new TextEncoder().encode(palletName));
|
|
377
|
+
const storageHash = substrateBindings.Twox128(new TextEncoder().encode(storageName));
|
|
378
|
+
|
|
379
|
+
// Concatenate and convert to hex
|
|
380
|
+
const combined = new Uint8Array(palletHash.length + storageHash.length);
|
|
381
|
+
combined.set(palletHash, 0);
|
|
382
|
+
combined.set(storageHash, palletHash.length);
|
|
383
|
+
return utils.toHex(combined);
|
|
384
|
+
};
|
|
385
|
+
|
|
391
386
|
Object.defineProperty(exports, "getDynamicBuilder", {
|
|
392
387
|
enumerable: true,
|
|
393
388
|
get: function () { return metadataBuilders.getDynamicBuilder; }
|
|
@@ -396,32 +391,65 @@ Object.defineProperty(exports, "getLookupFn", {
|
|
|
396
391
|
enumerable: true,
|
|
397
392
|
get: function () { return metadataBuilders.getLookupFn; }
|
|
398
393
|
});
|
|
399
|
-
Object.defineProperty(exports, "
|
|
394
|
+
Object.defineProperty(exports, "Blake2128", {
|
|
400
395
|
enumerable: true,
|
|
401
|
-
get: function () { return
|
|
396
|
+
get: function () { return substrateBindings.Blake2128; }
|
|
402
397
|
});
|
|
403
|
-
Object.defineProperty(exports, "
|
|
398
|
+
Object.defineProperty(exports, "Blake2128Concat", {
|
|
404
399
|
enumerable: true,
|
|
405
|
-
get: function () { return
|
|
400
|
+
get: function () { return substrateBindings.Blake2128Concat; }
|
|
401
|
+
});
|
|
402
|
+
Object.defineProperty(exports, "Blake2256", {
|
|
403
|
+
enumerable: true,
|
|
404
|
+
get: function () { return substrateBindings.Blake2256; }
|
|
405
|
+
});
|
|
406
|
+
Object.defineProperty(exports, "Blake3256", {
|
|
407
|
+
enumerable: true,
|
|
408
|
+
get: function () { return substrateBindings.Blake3256; }
|
|
409
|
+
});
|
|
410
|
+
Object.defineProperty(exports, "Blake3256Concat", {
|
|
411
|
+
enumerable: true,
|
|
412
|
+
get: function () { return substrateBindings.Blake3256Concat; }
|
|
413
|
+
});
|
|
414
|
+
Object.defineProperty(exports, "Twox128", {
|
|
415
|
+
enumerable: true,
|
|
416
|
+
get: function () { return substrateBindings.Twox128; }
|
|
417
|
+
});
|
|
418
|
+
Object.defineProperty(exports, "Twox256", {
|
|
419
|
+
enumerable: true,
|
|
420
|
+
get: function () { return substrateBindings.Twox256; }
|
|
421
|
+
});
|
|
422
|
+
Object.defineProperty(exports, "Twox64Concat", {
|
|
423
|
+
enumerable: true,
|
|
424
|
+
get: function () { return substrateBindings.Twox64Concat; }
|
|
425
|
+
});
|
|
426
|
+
Object.defineProperty(exports, "decAnyMetadata", {
|
|
427
|
+
enumerable: true,
|
|
428
|
+
get: function () { return substrateBindings.decAnyMetadata; }
|
|
406
429
|
});
|
|
407
430
|
Object.defineProperty(exports, "metadata", {
|
|
408
431
|
enumerable: true,
|
|
409
432
|
get: function () { return substrateBindings.metadata; }
|
|
410
433
|
});
|
|
411
|
-
Object.defineProperty(exports, "
|
|
434
|
+
Object.defineProperty(exports, "unifyMetadata", {
|
|
435
|
+
enumerable: true,
|
|
436
|
+
get: function () { return substrateBindings.unifyMetadata; }
|
|
437
|
+
});
|
|
438
|
+
Object.defineProperty(exports, "fromHex", {
|
|
412
439
|
enumerable: true,
|
|
413
|
-
get: function () { return
|
|
440
|
+
get: function () { return utils.fromHex; }
|
|
414
441
|
});
|
|
415
|
-
Object.defineProperty(exports, "
|
|
442
|
+
Object.defineProperty(exports, "toHex", {
|
|
416
443
|
enumerable: true,
|
|
417
|
-
get: function () { return
|
|
444
|
+
get: function () { return utils.toHex; }
|
|
418
445
|
});
|
|
419
446
|
exports.compactMetadata = compactMetadata;
|
|
420
|
-
exports.decodeMetadata = decodeMetadata;
|
|
421
447
|
exports.decodeScale = decodeScale;
|
|
422
448
|
exports.encodeMetadata = encodeMetadata;
|
|
423
449
|
exports.encodeStateKey = encodeStateKey;
|
|
424
450
|
exports.getMetadataVersion = getMetadataVersion;
|
|
451
|
+
exports.getStorageKeyPrefix = getStorageKeyPrefix;
|
|
425
452
|
exports.magicNumber = magicNumber;
|
|
426
453
|
exports.papiParse = papiParse;
|
|
427
454
|
exports.papiStringify = papiStringify;
|
|
455
|
+
exports.parseMetadataRpc = parseMetadataRpc;
|