dedot 0.0.1-next.fecbe32d.13 → 0.1.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/README.md +80 -86
- package/bin/dedot +3 -0
- package/chaintypes/index.d.ts +1 -1
- package/chaintypes/index.js +1 -1
- package/cjs/chaintypes/index.js +1 -1
- package/cjs/{json-rpc → codecs}/index.js +1 -1
- package/cjs/{storage → contracts}/index.js +1 -1
- package/cjs/index.js +6 -15
- package/cjs/runtime-specs/index.js +17 -0
- package/cjs/{chaintypes/substrate → shape}/index.js +1 -1
- package/cjs/{client → types}/index.js +1 -1
- package/cjs/types/json-rpc/index.js +17 -0
- package/cjs/utils/index.js +17 -0
- package/codecs/index.d.ts +1 -0
- package/codecs/index.js +1 -0
- package/contracts/index.d.ts +1 -0
- package/contracts/index.js +1 -0
- package/index.d.ts +2 -9
- package/index.js +2 -9
- package/package.json +76 -36
- package/runtime-specs/index.d.ts +1 -0
- package/runtime-specs/index.js +1 -0
- package/shape/index.d.ts +1 -0
- package/shape/index.js +1 -0
- package/types/index.d.ts +1 -0
- package/types/index.js +1 -0
- package/types/json-rpc/index.d.ts +1 -0
- package/types/json-rpc/index.js +1 -0
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- package/chaintypes/substrate/consts.d.ts +0 -1971
- package/chaintypes/substrate/consts.js +0 -1
- package/chaintypes/substrate/errors.d.ts +0 -3337
- package/chaintypes/substrate/errors.js +0 -1
- package/chaintypes/substrate/events.d.ts +0 -4777
- package/chaintypes/substrate/events.js +0 -1
- package/chaintypes/substrate/index.d.ts +0 -18
- package/chaintypes/substrate/index.js +0 -1
- package/chaintypes/substrate/json-rpc.d.ts +0 -3
- package/chaintypes/substrate/json-rpc.js +0 -1
- package/chaintypes/substrate/query.d.ts +0 -3447
- package/chaintypes/substrate/query.js +0 -1
- package/chaintypes/substrate/runtime.d.ts +0 -708
- package/chaintypes/substrate/runtime.js +0 -1
- package/chaintypes/substrate/tx.d.ts +0 -8800
- package/chaintypes/substrate/tx.js +0 -1
- package/chaintypes/substrate/types.d.ts +0 -20332
- package/chaintypes/substrate/types.js +0 -1
- package/cjs/chaintypes/substrate/consts.js +0 -2
- package/cjs/chaintypes/substrate/errors.js +0 -2
- package/cjs/chaintypes/substrate/events.js +0 -2
- package/cjs/chaintypes/substrate/json-rpc.js +0 -2
- package/cjs/chaintypes/substrate/query.js +0 -2
- package/cjs/chaintypes/substrate/runtime.js +0 -2
- package/cjs/chaintypes/substrate/tx.js +0 -2
- package/cjs/chaintypes/substrate/types.js +0 -2
- package/cjs/client/BaseSubstrateClient.js +0 -247
- package/cjs/client/Dedot.js +0 -257
- package/cjs/executor/ConstantExecutor.js +0 -20
- package/cjs/executor/ErrorExecutor.js +0 -46
- package/cjs/executor/EventExecutor.js +0 -52
- package/cjs/executor/Executor.js +0 -45
- package/cjs/executor/RuntimeApiExecutor.js +0 -113
- package/cjs/executor/StorageQueryExecutor.js +0 -109
- package/cjs/executor/TxExecutor.js +0 -158
- package/cjs/executor/index.js +0 -23
- package/cjs/extrinsic/SubmittableResult.js +0 -33
- package/cjs/extrinsic/extensions/ExtraSignedExtension.js +0 -87
- package/cjs/extrinsic/extensions/SignedExtension.js +0 -41
- package/cjs/extrinsic/extensions/index.js +0 -19
- package/cjs/extrinsic/extensions/known/ChargeAssetTxPayment.js +0 -43
- package/cjs/extrinsic/extensions/known/ChargeTransactionPayment.js +0 -16
- package/cjs/extrinsic/extensions/known/CheckGenesis.js +0 -19
- package/cjs/extrinsic/extensions/known/CheckMortality.js +0 -70
- package/cjs/extrinsic/extensions/known/CheckNonZeroSender.js +0 -10
- package/cjs/extrinsic/extensions/known/CheckNonce.js +0 -33
- package/cjs/extrinsic/extensions/known/CheckSpecVersion.js +0 -19
- package/cjs/extrinsic/extensions/known/CheckTxVersion.js +0 -19
- package/cjs/extrinsic/extensions/known/CheckWeight.js +0 -10
- package/cjs/extrinsic/extensions/known/PrevalidateAttests.js +0 -11
- package/cjs/extrinsic/extensions/known/index.js +0 -25
- package/cjs/extrinsic/index.js +0 -18
- package/cjs/json-rpc/JsonRpcClient.js +0 -157
- package/cjs/proxychain.js +0 -27
- package/cjs/storage/QueryableStorage.js +0 -161
- package/cjs/types.js +0 -2
- package/client/BaseSubstrateClient.d.ts +0 -65
- package/client/BaseSubstrateClient.js +0 -242
- package/client/Dedot.d.ts +0 -130
- package/client/Dedot.js +0 -253
- package/client/index.d.ts +0 -1
- package/client/index.js +0 -1
- package/executor/ConstantExecutor.d.ts +0 -11
- package/executor/ConstantExecutor.js +0 -16
- package/executor/ErrorExecutor.d.ts +0 -11
- package/executor/ErrorExecutor.js +0 -42
- package/executor/EventExecutor.d.ts +0 -11
- package/executor/EventExecutor.js +0 -48
- package/executor/Executor.d.ts +0 -150
- package/executor/Executor.js +0 -41
- package/executor/RuntimeApiExecutor.d.ts +0 -19
- package/executor/RuntimeApiExecutor.js +0 -109
- package/executor/StorageQueryExecutor.d.ts +0 -13
- package/executor/StorageQueryExecutor.js +0 -105
- package/executor/TxExecutor.d.ts +0 -48
- package/executor/TxExecutor.js +0 -152
- package/executor/index.d.ts +0 -7
- package/executor/index.js +0 -7
- package/extrinsic/SubmittableResult.d.ts +0 -19
- package/extrinsic/SubmittableResult.js +0 -29
- package/extrinsic/extensions/ExtraSignedExtension.d.ts +0 -14
- package/extrinsic/extensions/ExtraSignedExtension.js +0 -60
- package/extrinsic/extensions/SignedExtension.d.ts +0 -40
- package/extrinsic/extensions/SignedExtension.js +0 -37
- package/extrinsic/extensions/index.d.ts +0 -3
- package/extrinsic/extensions/index.js +0 -3
- package/extrinsic/extensions/known/ChargeAssetTxPayment.d.ts +0 -14
- package/extrinsic/extensions/known/ChargeAssetTxPayment.js +0 -39
- package/extrinsic/extensions/known/ChargeTransactionPayment.d.ts +0 -6
- package/extrinsic/extensions/known/ChargeTransactionPayment.js +0 -12
- package/extrinsic/extensions/known/CheckGenesis.d.ts +0 -10
- package/extrinsic/extensions/known/CheckGenesis.js +0 -15
- package/extrinsic/extensions/known/CheckMortality.d.ts +0 -15
- package/extrinsic/extensions/known/CheckMortality.js +0 -66
- package/extrinsic/extensions/known/CheckNonZeroSender.d.ts +0 -6
- package/extrinsic/extensions/known/CheckNonZeroSender.js +0 -6
- package/extrinsic/extensions/known/CheckNonce.d.ts +0 -10
- package/extrinsic/extensions/known/CheckNonce.js +0 -29
- package/extrinsic/extensions/known/CheckSpecVersion.d.ts +0 -9
- package/extrinsic/extensions/known/CheckSpecVersion.js +0 -15
- package/extrinsic/extensions/known/CheckTxVersion.d.ts +0 -9
- package/extrinsic/extensions/known/CheckTxVersion.js +0 -15
- package/extrinsic/extensions/known/CheckWeight.d.ts +0 -6
- package/extrinsic/extensions/known/CheckWeight.js +0 -6
- package/extrinsic/extensions/known/PrevalidateAttests.d.ts +0 -7
- package/extrinsic/extensions/known/PrevalidateAttests.js +0 -7
- package/extrinsic/extensions/known/index.d.ts +0 -3
- package/extrinsic/extensions/known/index.js +0 -22
- package/extrinsic/index.d.ts +0 -2
- package/extrinsic/index.js +0 -2
- package/json-rpc/JsonRpcClient.d.ts +0 -49
- package/json-rpc/JsonRpcClient.js +0 -153
- package/json-rpc/index.d.ts +0 -1
- package/json-rpc/index.js +0 -1
- package/proxychain.d.ts +0 -14
- package/proxychain.js +0 -23
- package/storage/QueryableStorage.d.ts +0 -35
- package/storage/QueryableStorage.js +0 -157
- package/storage/index.d.ts +0 -1
- package/storage/index.js +0 -1
- package/types.d.ts +0 -103
- package/types.js +0 -1
package/cjs/executor/Executor.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Executor = void 0;
|
|
4
|
-
const utils_1 = require("@dedot/utils");
|
|
5
|
-
/**
|
|
6
|
-
* @name Executor
|
|
7
|
-
* @description Execution abstraction for a specific action
|
|
8
|
-
*/
|
|
9
|
-
class Executor {
|
|
10
|
-
#api;
|
|
11
|
-
#atBlockHash;
|
|
12
|
-
constructor(api, atBlockHash) {
|
|
13
|
-
this.#api = api;
|
|
14
|
-
this.#atBlockHash = atBlockHash;
|
|
15
|
-
}
|
|
16
|
-
get api() {
|
|
17
|
-
return this.#api;
|
|
18
|
-
}
|
|
19
|
-
get atBlockHash() {
|
|
20
|
-
return this.#atBlockHash || this.api.atBlockHash;
|
|
21
|
-
}
|
|
22
|
-
get registry() {
|
|
23
|
-
return this.api.registry;
|
|
24
|
-
}
|
|
25
|
-
get metadata() {
|
|
26
|
-
return this.api.metadata.latest;
|
|
27
|
-
}
|
|
28
|
-
getPallet(name) {
|
|
29
|
-
const targetPallet = this.metadata.pallets.find((p) => (0, utils_1.stringCamelCase)(p.name) === name);
|
|
30
|
-
(0, utils_1.assert)(targetPallet, new utils_1.UnknownApiError(`Pallet not found: ${name}`));
|
|
31
|
-
return targetPallet;
|
|
32
|
-
}
|
|
33
|
-
execute(...paths) {
|
|
34
|
-
try {
|
|
35
|
-
return this.doExecute(...paths);
|
|
36
|
-
}
|
|
37
|
-
catch (e) {
|
|
38
|
-
if (!this.api.options?.throwOnUnknownApi && e instanceof utils_1.UnknownApiError) {
|
|
39
|
-
return undefined;
|
|
40
|
-
}
|
|
41
|
-
throw e;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
exports.Executor = Executor;
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RuntimeApiExecutor = exports.FallbackRuntimeApiSpecs = exports.FallbackRuntimeApis = void 0;
|
|
4
|
-
const specs_1 = require("@dedot/specs");
|
|
5
|
-
const utils_1 = require("@dedot/utils");
|
|
6
|
-
const Executor_js_1 = require("./Executor.js");
|
|
7
|
-
exports.FallbackRuntimeApis = { '0x37e397fc7c91f5e4': 2 };
|
|
8
|
-
exports.FallbackRuntimeApiSpecs = { Metadata: specs_1.Metadata };
|
|
9
|
-
/**
|
|
10
|
-
* @name RuntimeApiExecutor
|
|
11
|
-
* @description Execute a runtime api call,
|
|
12
|
-
* runtime api definitions/specs are either from Metadata V15
|
|
13
|
-
* or defined externally when initializing `Dedot` instance
|
|
14
|
-
* via `ApiOptions.runtimeApis` option.
|
|
15
|
-
*/
|
|
16
|
-
class RuntimeApiExecutor extends Executor_js_1.Executor {
|
|
17
|
-
doExecute(runtimeApi, method) {
|
|
18
|
-
const runtimeApiName = (0, utils_1.stringPascalCase)(runtimeApi);
|
|
19
|
-
const methodName = (0, utils_1.stringSnakeCase)(method);
|
|
20
|
-
const callName = this.#callName({ runtimeApiName, methodName });
|
|
21
|
-
const callSpec = this.#findRuntimeApiMethodSpec(runtimeApiName, methodName);
|
|
22
|
-
(0, utils_1.assert)(callSpec, new utils_1.UnknownApiError(`Runtime api spec not found for ${callName}`));
|
|
23
|
-
const callFn = async (...args) => {
|
|
24
|
-
const { params } = callSpec;
|
|
25
|
-
const formattedInputs = params.map((param, index) => this.tryEncode(param, args[index]));
|
|
26
|
-
const bytes = (0, utils_1.u8aToHex)((0, utils_1.concatU8a)(...formattedInputs));
|
|
27
|
-
const callArgs = [callName, bytes];
|
|
28
|
-
if (this.atBlockHash) {
|
|
29
|
-
callArgs.push(this.atBlockHash);
|
|
30
|
-
}
|
|
31
|
-
const result = await this.api.rpc.state_call(...callArgs);
|
|
32
|
-
return this.tryDecode(callSpec, result);
|
|
33
|
-
};
|
|
34
|
-
callFn.meta = callSpec;
|
|
35
|
-
return callFn;
|
|
36
|
-
}
|
|
37
|
-
tryDecode(callSpec, raw) {
|
|
38
|
-
const $codec = this.#findCodec(callSpec, `Codec not found to decode respond data for ${this.#callName(callSpec)}`);
|
|
39
|
-
return $codec.tryDecode(raw);
|
|
40
|
-
}
|
|
41
|
-
tryEncode(paramSpec, value) {
|
|
42
|
-
const $codec = this.#findCodec(paramSpec, `Codec not found to encode input for param ${paramSpec.name}`);
|
|
43
|
-
return $codec.tryEncode(value);
|
|
44
|
-
}
|
|
45
|
-
#findCodec(spec, error) {
|
|
46
|
-
const { codec, typeId, type } = spec;
|
|
47
|
-
if (codec)
|
|
48
|
-
return codec;
|
|
49
|
-
if ((0, utils_1.isNumber)(typeId)) {
|
|
50
|
-
return this.registry.findCodec(typeId);
|
|
51
|
-
}
|
|
52
|
-
throw new Error(error || 'Codec not found');
|
|
53
|
-
}
|
|
54
|
-
#callName({ runtimeApiName, methodName }) {
|
|
55
|
-
return `${runtimeApiName}_${methodName}`;
|
|
56
|
-
}
|
|
57
|
-
#findRuntimeApiMethodSpec(runtimeApi, method) {
|
|
58
|
-
const targetVersion = this.#findTargetRuntimeApiVersion(runtimeApi);
|
|
59
|
-
if (!(0, utils_1.isNumber)(targetVersion))
|
|
60
|
-
return undefined;
|
|
61
|
-
const userDefinedSpec = this.#findDefinedSpec(this.api.options.runtimeApis, runtimeApi, method, targetVersion);
|
|
62
|
-
if (userDefinedSpec)
|
|
63
|
-
return userDefinedSpec;
|
|
64
|
-
const methodDef = this.#findRuntimeApiMethodDef(runtimeApi, method);
|
|
65
|
-
if (methodDef) {
|
|
66
|
-
return this.#toMethodSpec(runtimeApi, methodDef);
|
|
67
|
-
}
|
|
68
|
-
return this.#findDefinedSpec(exports.FallbackRuntimeApiSpecs, runtimeApi, method, targetVersion);
|
|
69
|
-
}
|
|
70
|
-
#findRuntimeApiMethodDef(runtimeApi, method) {
|
|
71
|
-
try {
|
|
72
|
-
for (const api of this.metadata.apis) {
|
|
73
|
-
if (api.name !== runtimeApi)
|
|
74
|
-
continue;
|
|
75
|
-
for (const apiMethod of api.methods) {
|
|
76
|
-
if (apiMethod.name === method)
|
|
77
|
-
return apiMethod;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
catch { }
|
|
82
|
-
}
|
|
83
|
-
#toMethodSpec(runtimeApi, methodDef) {
|
|
84
|
-
const { name, inputs, output, docs } = methodDef;
|
|
85
|
-
return {
|
|
86
|
-
docs,
|
|
87
|
-
runtimeApiName: runtimeApi,
|
|
88
|
-
methodName: name,
|
|
89
|
-
typeId: output,
|
|
90
|
-
params: inputs.map(({ name, typeId }) => ({
|
|
91
|
-
name,
|
|
92
|
-
typeId,
|
|
93
|
-
})),
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
#findTargetRuntimeApiVersion(runtimeApi) {
|
|
97
|
-
const runtimeApiHash = (0, utils_1.calcRuntimeApiHash)(runtimeApi);
|
|
98
|
-
try {
|
|
99
|
-
return this.api.runtimeVersion.apis[runtimeApiHash] || exports.FallbackRuntimeApis[runtimeApiHash];
|
|
100
|
-
}
|
|
101
|
-
catch {
|
|
102
|
-
return exports.FallbackRuntimeApis[runtimeApiHash];
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
#findDefinedSpec(specs, runtimeApi, method, runtimeApiVersion) {
|
|
106
|
-
if (!specs)
|
|
107
|
-
return undefined;
|
|
108
|
-
const methodSpecs = (0, specs_1.toRuntimeApiSpecs)(specs).map(specs_1.toRuntimeApiMethods).flat();
|
|
109
|
-
return methodSpecs.find(({ runtimeApiName, methodName, version }) => `${(0, utils_1.stringPascalCase)(runtimeApiName)}_${(0, utils_1.stringSnakeCase)(methodName)}` === `${runtimeApi}_${method}` &&
|
|
110
|
-
runtimeApiVersion === version);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
exports.RuntimeApiExecutor = RuntimeApiExecutor;
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.StorageQueryExecutor = void 0;
|
|
4
|
-
const utils_1 = require("@dedot/utils");
|
|
5
|
-
const QueryableStorage_js_1 = require("../storage/QueryableStorage.js");
|
|
6
|
-
const Executor_js_1 = require("./Executor.js");
|
|
7
|
-
const DEFAULT_KEYS_PAGE_SIZE = 1000;
|
|
8
|
-
const DEFAULT_ENTRIES_PAGE_SIZE = 250;
|
|
9
|
-
/**
|
|
10
|
-
* @name StorageQueryExecutor
|
|
11
|
-
* @description Execute a query to on-chain storage
|
|
12
|
-
*/
|
|
13
|
-
class StorageQueryExecutor extends Executor_js_1.Executor {
|
|
14
|
-
doExecute(pallet, storage) {
|
|
15
|
-
const entry = new QueryableStorage_js_1.QueryableStorage(this.registry, pallet, storage);
|
|
16
|
-
const extractArgs = (args) => {
|
|
17
|
-
const inArgs = args.slice();
|
|
18
|
-
const lastArg = args.at(-1);
|
|
19
|
-
const callback = (0, utils_1.isFunction)(lastArg) ? inArgs.pop() : undefined;
|
|
20
|
-
return [inArgs, callback];
|
|
21
|
-
};
|
|
22
|
-
const getStorageKey = (...args) => {
|
|
23
|
-
const [inArgs] = extractArgs(args);
|
|
24
|
-
return entry.encodeKey(inArgs.at(0));
|
|
25
|
-
};
|
|
26
|
-
const getStorage = async (key) => {
|
|
27
|
-
const raw = await this.getStorage(key, this.atBlockHash);
|
|
28
|
-
return entry.decodeValue(raw);
|
|
29
|
-
};
|
|
30
|
-
const queryFn = async (...args) => {
|
|
31
|
-
const [inArgs, callback] = extractArgs(args);
|
|
32
|
-
const encodedKey = entry.encodeKey(inArgs.at(0));
|
|
33
|
-
// if a callback is passed, make a storage subscription and return an unsub function
|
|
34
|
-
if (callback) {
|
|
35
|
-
return await this.subscribeStorage([encodedKey], (changes) => {
|
|
36
|
-
if (changes.length === 0)
|
|
37
|
-
return;
|
|
38
|
-
callback(entry.decodeValue(changes[0]));
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
return getStorage(encodedKey);
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
const queryMultiFn = async (...args) => {
|
|
46
|
-
const [inArgs, callback] = extractArgs(args);
|
|
47
|
-
const multiArgs = inArgs.at(0);
|
|
48
|
-
(0, utils_1.assert)(Array.isArray(multiArgs), 'First param for multi query should be an array');
|
|
49
|
-
const encodedKeys = multiArgs.map((arg) => entry.encodeKey(arg));
|
|
50
|
-
// if a callback is passed, make a storage subscription and return an unsub function
|
|
51
|
-
if (callback) {
|
|
52
|
-
return await this.subscribeStorage(encodedKeys, (changes) => {
|
|
53
|
-
callback(changes.map((change) => entry.decodeValue(change)));
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
return await Promise.all(encodedKeys.map(getStorage));
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
queryFn.rawKey = getStorageKey;
|
|
61
|
-
queryFn.meta = {
|
|
62
|
-
pallet: entry.pallet.name,
|
|
63
|
-
palletIndex: entry.pallet.index,
|
|
64
|
-
...entry.storageEntry,
|
|
65
|
-
};
|
|
66
|
-
queryFn.multi = queryMultiFn;
|
|
67
|
-
const isMap = entry.storageEntry.type.tag === 'Map';
|
|
68
|
-
if (isMap) {
|
|
69
|
-
const rawKeys = async (pagination) => {
|
|
70
|
-
const pageSize = pagination?.pageSize || DEFAULT_KEYS_PAGE_SIZE;
|
|
71
|
-
const startKey = pagination?.startKey || entry.prefixKey;
|
|
72
|
-
return await this.api.rpc.state_getKeysPaged(entry.prefixKey, pageSize, startKey, this.atBlockHash);
|
|
73
|
-
};
|
|
74
|
-
const keys = async (pagination) => {
|
|
75
|
-
const storageKeys = await rawKeys({ pageSize: DEFAULT_KEYS_PAGE_SIZE, ...pagination });
|
|
76
|
-
return storageKeys.map((key) => entry.decodeKey(key));
|
|
77
|
-
};
|
|
78
|
-
const entries = async (pagination) => {
|
|
79
|
-
const storageKeys = await rawKeys({ pageSize: DEFAULT_ENTRIES_PAGE_SIZE, ...pagination });
|
|
80
|
-
const changeSets = await this.api.rpc.state_queryStorageAt(storageKeys, this.atBlockHash);
|
|
81
|
-
const changes = changeSets[0].changes.reduce((o, [key, value]) => {
|
|
82
|
-
o[key] = value;
|
|
83
|
-
return o;
|
|
84
|
-
}, {});
|
|
85
|
-
return storageKeys.map((key) => [entry.decodeKey(key), entry.decodeValue(changes[key])]);
|
|
86
|
-
};
|
|
87
|
-
// @ts-ignore
|
|
88
|
-
queryFn.keys = keys;
|
|
89
|
-
// @ts-ignore
|
|
90
|
-
queryFn.entries = entries;
|
|
91
|
-
}
|
|
92
|
-
return queryFn;
|
|
93
|
-
}
|
|
94
|
-
getStorage(key, at) {
|
|
95
|
-
return this.api.rpc.state_getStorage(key, at);
|
|
96
|
-
}
|
|
97
|
-
subscribeStorage(keys, callback) {
|
|
98
|
-
const lastChanges = {};
|
|
99
|
-
return this.api.rpc.state_subscribeStorage(keys, (changeSet) => {
|
|
100
|
-
changeSet.changes.forEach(([key, value]) => {
|
|
101
|
-
if (lastChanges[key] !== value) {
|
|
102
|
-
lastChanges[key] = value ?? undefined;
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
return callback(keys.map((key) => lastChanges[key]));
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
exports.StorageQueryExecutor = StorageQueryExecutor;
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TxExecutor = exports.signRaw = exports.isKeyringPair = void 0;
|
|
4
|
-
const codecs_1 = require("@dedot/codecs");
|
|
5
|
-
const utils_1 = require("@dedot/utils");
|
|
6
|
-
const index_js_1 = require("../extrinsic/index.js");
|
|
7
|
-
const Executor_js_1 = require("./Executor.js");
|
|
8
|
-
const StorageQueryExecutor_js_1 = require("./StorageQueryExecutor.js");
|
|
9
|
-
function isKeyringPair(account) {
|
|
10
|
-
return (0, utils_1.isFunction)(account.sign);
|
|
11
|
-
}
|
|
12
|
-
exports.isKeyringPair = isKeyringPair;
|
|
13
|
-
/**
|
|
14
|
-
* Sign a raw message
|
|
15
|
-
* @param signerPair
|
|
16
|
-
* @param raw
|
|
17
|
-
* @param options
|
|
18
|
-
*/
|
|
19
|
-
function signRaw(signerPair, raw, options) {
|
|
20
|
-
const u8a = (0, utils_1.hexToU8a)(raw);
|
|
21
|
-
// Ref: https://github.com/paritytech/polkadot-sdk/blob/943697fa693a4da6ef481ef93df522accb7d0583/substrate/primitives/runtime/src/generic/unchecked_extrinsic.rs#L234-L238
|
|
22
|
-
const toSignRaw = u8a.length > 256 ? (0, utils_1.blake2AsU8a)(u8a, 256) : u8a;
|
|
23
|
-
return signerPair.sign(toSignRaw, options);
|
|
24
|
-
}
|
|
25
|
-
exports.signRaw = signRaw;
|
|
26
|
-
/**
|
|
27
|
-
* @name TxExecutor
|
|
28
|
-
* @description Execute a transaction instruction, returns a submittable extrinsic
|
|
29
|
-
*/
|
|
30
|
-
class TxExecutor extends Executor_js_1.Executor {
|
|
31
|
-
doExecute(pallet, functionName) {
|
|
32
|
-
const targetPallet = this.getPallet(pallet);
|
|
33
|
-
(0, utils_1.assert)(targetPallet.calls, new utils_1.UnknownApiError(`Tx calls are not available for pallet ${targetPallet.name}`));
|
|
34
|
-
const txType = this.metadata.types[targetPallet.calls];
|
|
35
|
-
(0, utils_1.assert)(txType.type.tag === 'Enum', new utils_1.UnknownApiError('Tx type defs should be enum'));
|
|
36
|
-
const isFlatEnum = txType.type.value.members.every((m) => m.fields.length === 0);
|
|
37
|
-
const txCallDef = txType.type.value.members.find((m) => (0, utils_1.stringCamelCase)(m.name) === functionName);
|
|
38
|
-
(0, utils_1.assert)(txCallDef, new utils_1.UnknownApiError(`Tx call spec not found for ${pallet}.${functionName}`));
|
|
39
|
-
const txCallFn = (...args) => {
|
|
40
|
-
let call;
|
|
41
|
-
if (isFlatEnum) {
|
|
42
|
-
call = {
|
|
43
|
-
pallet: (0, utils_1.stringPascalCase)(targetPallet.name),
|
|
44
|
-
palletCall: (0, utils_1.stringPascalCase)(txCallDef.name),
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
const callParams = txCallDef.fields.reduce((o, { name }, idx) => {
|
|
49
|
-
o[(0, utils_1.stringCamelCase)(name)] = args[idx];
|
|
50
|
-
return o;
|
|
51
|
-
}, {});
|
|
52
|
-
call = {
|
|
53
|
-
pallet: (0, utils_1.stringPascalCase)(targetPallet.name),
|
|
54
|
-
palletCall: {
|
|
55
|
-
name: (0, utils_1.stringPascalCase)(txCallDef.name),
|
|
56
|
-
params: callParams,
|
|
57
|
-
},
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
return this.createExtrinsic(call);
|
|
61
|
-
};
|
|
62
|
-
txCallFn.meta = {
|
|
63
|
-
...txCallDef,
|
|
64
|
-
fieldCodecs: txCallDef.fields.map(({ typeId }) => this.registry.findCodec(typeId)),
|
|
65
|
-
pallet: targetPallet.name,
|
|
66
|
-
palletIndex: targetPallet.index,
|
|
67
|
-
};
|
|
68
|
-
return txCallFn;
|
|
69
|
-
}
|
|
70
|
-
createExtrinsic(call) {
|
|
71
|
-
const txExecutor = this;
|
|
72
|
-
const api = this.api;
|
|
73
|
-
class SubmittableExtrinsic extends codecs_1.Extrinsic {
|
|
74
|
-
async sign(fromAccount, options) {
|
|
75
|
-
const address = isKeyringPair(fromAccount) ? fromAccount.address : fromAccount.toString();
|
|
76
|
-
const extra = new index_js_1.ExtraSignedExtension(api, {
|
|
77
|
-
signerAddress: address,
|
|
78
|
-
payloadOptions: options,
|
|
79
|
-
});
|
|
80
|
-
await extra.init();
|
|
81
|
-
const { signer } = options || {};
|
|
82
|
-
let signature;
|
|
83
|
-
if (isKeyringPair(fromAccount)) {
|
|
84
|
-
signature = (0, utils_1.u8aToHex)(signRaw(fromAccount, extra.toRawPayload(this.callHex).data, { withType: true }));
|
|
85
|
-
}
|
|
86
|
-
else if (signer?.signPayload) {
|
|
87
|
-
const result = await signer.signPayload(extra.toPayload(this.callHex));
|
|
88
|
-
signature = result.signature;
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
throw new Error('Signer not found. Cannot sign the extrinsic!');
|
|
92
|
-
}
|
|
93
|
-
const { signatureTypeId } = this.registry.metadata.extrinsic;
|
|
94
|
-
const $Signature = this.registry.findCodec(signatureTypeId);
|
|
95
|
-
this.attachSignature({
|
|
96
|
-
address: address,
|
|
97
|
-
signature: $Signature.tryDecode(signature),
|
|
98
|
-
extra: extra.data,
|
|
99
|
-
});
|
|
100
|
-
return this;
|
|
101
|
-
}
|
|
102
|
-
async signAndSend(fromAccount, partialOptions, maybeCallback) {
|
|
103
|
-
const [options, callback] = this.#normalizeOptions(partialOptions, maybeCallback);
|
|
104
|
-
await this.sign(fromAccount, options);
|
|
105
|
-
return this.send(callback);
|
|
106
|
-
}
|
|
107
|
-
#normalizeOptions(partialOptions, callback) {
|
|
108
|
-
if ((0, utils_1.isFunction)(partialOptions)) {
|
|
109
|
-
return [{}, partialOptions];
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
return [Object.assign({}, partialOptions), callback];
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
async dryRun(account, optionsOrHash) {
|
|
116
|
-
// TODO check if system_dryRun is available
|
|
117
|
-
const dryRunFn = api.rpc.system_dryRun;
|
|
118
|
-
if ((0, utils_1.isHex)(optionsOrHash)) {
|
|
119
|
-
return dryRunFn(this.toHex(), optionsOrHash);
|
|
120
|
-
}
|
|
121
|
-
await this.sign(account, optionsOrHash);
|
|
122
|
-
return dryRunFn(this.toHex());
|
|
123
|
-
}
|
|
124
|
-
async send(callback) {
|
|
125
|
-
const isSubscription = !!callback;
|
|
126
|
-
const txHash = this.hash;
|
|
127
|
-
if (isSubscription) {
|
|
128
|
-
return api.rpc.author_submitAndWatchExtrinsic(this.toHex(), async (status) => {
|
|
129
|
-
if (status.tag === 'InBlock' || status.tag === 'Finalized') {
|
|
130
|
-
const blockHash = status.value;
|
|
131
|
-
const [signedBlock, blockEvents] = await Promise.all([
|
|
132
|
-
api.rpc.chain_getBlock(blockHash),
|
|
133
|
-
txExecutor.#getSystemEventsAt(blockHash),
|
|
134
|
-
]);
|
|
135
|
-
const txIndex = signedBlock.block.extrinsics.findIndex((tx) => this.registry.hashAsHex(tx) === txHash);
|
|
136
|
-
(0, utils_1.assert)(txIndex >= 0, 'Extrinsic not found!');
|
|
137
|
-
const events = blockEvents.filter(({ phase }) => phase.tag === 'ApplyExtrinsic' && phase.value === txIndex);
|
|
138
|
-
return callback(new index_js_1.SubmittableResult({ status, txHash, events, txIndex }));
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
return callback(new index_js_1.SubmittableResult({ status, txHash }));
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
return api.rpc.author_submitExtrinsic(this.toHex());
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return new SubmittableExtrinsic(api.registry, call);
|
|
151
|
-
}
|
|
152
|
-
async #getSystemEventsAt(hash) {
|
|
153
|
-
const executor = new StorageQueryExecutor_js_1.StorageQueryExecutor(this.api, hash);
|
|
154
|
-
const eventsQueryFn = executor.execute('system', 'events');
|
|
155
|
-
return eventsQueryFn();
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
exports.TxExecutor = TxExecutor;
|
package/cjs/executor/index.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./Executor.js"), exports);
|
|
18
|
-
__exportStar(require("./ConstantExecutor.js"), exports);
|
|
19
|
-
__exportStar(require("./StorageQueryExecutor.js"), exports);
|
|
20
|
-
__exportStar(require("./ErrorExecutor.js"), exports);
|
|
21
|
-
__exportStar(require("./EventExecutor.js"), exports);
|
|
22
|
-
__exportStar(require("./RuntimeApiExecutor.js"), exports);
|
|
23
|
-
__exportStar(require("./TxExecutor.js"), exports);
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SubmittableResult = void 0;
|
|
4
|
-
class SubmittableResult {
|
|
5
|
-
dispatchInfo;
|
|
6
|
-
dispatchError;
|
|
7
|
-
events;
|
|
8
|
-
status;
|
|
9
|
-
txHash;
|
|
10
|
-
txIndex;
|
|
11
|
-
constructor({ events, status, txHash, txIndex }) {
|
|
12
|
-
this.events = events || [];
|
|
13
|
-
this.status = status;
|
|
14
|
-
this.txHash = txHash;
|
|
15
|
-
this.txIndex = txIndex;
|
|
16
|
-
[this.dispatchInfo, this.dispatchError] = this.#extractInfo();
|
|
17
|
-
}
|
|
18
|
-
#extractInfo() {
|
|
19
|
-
for (const { event } of this.events) {
|
|
20
|
-
const { pallet, palletEvent } = event;
|
|
21
|
-
if (pallet === 'System' && palletEvent.name === 'ExtrinsicFailed') {
|
|
22
|
-
const { dispatchInfo, dispatchError } = palletEvent.data;
|
|
23
|
-
return [dispatchInfo, dispatchError];
|
|
24
|
-
}
|
|
25
|
-
else if (pallet === 'System' && palletEvent.name === 'ExtrinsicSuccess') {
|
|
26
|
-
const { dispatchInfo } = palletEvent.data;
|
|
27
|
-
return [dispatchInfo, undefined];
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return [undefined, undefined];
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
exports.SubmittableResult = SubmittableResult;
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.ExtraSignedExtension = void 0;
|
|
27
|
-
const $ = __importStar(require("@dedot/shape"));
|
|
28
|
-
const utils_1 = require("@dedot/utils");
|
|
29
|
-
const SignedExtension_js_1 = require("./SignedExtension.js");
|
|
30
|
-
const index_js_1 = require("./known/index.js");
|
|
31
|
-
class ExtraSignedExtension extends SignedExtension_js_1.SignedExtension {
|
|
32
|
-
#signedExtensions;
|
|
33
|
-
async init() {
|
|
34
|
-
this.#signedExtensions = this.#getSignedExtensions();
|
|
35
|
-
await Promise.all(this.#signedExtensions.map((se) => se.init()));
|
|
36
|
-
this.data = this.#signedExtensions.map((se) => se.data);
|
|
37
|
-
this.additionalSigned = this.#signedExtensions.map((se) => se.additionalSigned);
|
|
38
|
-
}
|
|
39
|
-
get identifier() {
|
|
40
|
-
return 'ExtraSignedExtension';
|
|
41
|
-
}
|
|
42
|
-
get dataCodec() {
|
|
43
|
-
const { extraTypeId } = this.registry.metadata.extrinsic;
|
|
44
|
-
return (0, utils_1.ensurePresence)(this.registry.findCodec(extraTypeId));
|
|
45
|
-
}
|
|
46
|
-
get additionalSignedCodec() {
|
|
47
|
-
const $AdditionalSignedCodecs = this.#signedExtensionDefs.map((se) => this.registry.findCodec(se.additionalSigned));
|
|
48
|
-
return $.Tuple(...$AdditionalSignedCodecs);
|
|
49
|
-
}
|
|
50
|
-
get payloadCodec() {
|
|
51
|
-
const { callTypeId } = this.registry.metadata.extrinsic;
|
|
52
|
-
const $Call = this.registry.findCodec(callTypeId);
|
|
53
|
-
return $.Tuple($Call, this.dataCodec, this.additionalSignedCodec);
|
|
54
|
-
}
|
|
55
|
-
get #signedExtensionDefs() {
|
|
56
|
-
return this.registry.metadata.extrinsic.signedExtensions;
|
|
57
|
-
}
|
|
58
|
-
#getSignedExtensions() {
|
|
59
|
-
return this.#signedExtensionDefs.map((extDef) => {
|
|
60
|
-
const { signedExtensions: userSignedExtensions = {} } = this.api.options;
|
|
61
|
-
const Extension = userSignedExtensions[extDef.ident] ||
|
|
62
|
-
index_js_1.knownSignedExtensions[extDef.ident];
|
|
63
|
-
(0, utils_1.assert)(Extension, `SignedExtension for ${extDef.ident} not found`);
|
|
64
|
-
return new Extension(this.api, {
|
|
65
|
-
...(0, utils_1.ensurePresence)(this.options),
|
|
66
|
-
def: extDef,
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
toPayload(call = '0x') {
|
|
71
|
-
const signedExtensions = this.#signedExtensions.map((se) => se.identifier);
|
|
72
|
-
const { version } = this.registry.metadata.extrinsic;
|
|
73
|
-
return Object.assign({ address: this.options.signerAddress, signedExtensions, version, method: call }, ...this.#signedExtensions.map((se) => se.toPayload()));
|
|
74
|
-
}
|
|
75
|
-
toRawPayload(call = '0x') {
|
|
76
|
-
const payload = this.toPayload(call);
|
|
77
|
-
const $ToSignPayload = $.Tuple($.RawHex, this.dataCodec, this.additionalSignedCodec);
|
|
78
|
-
const toSignPayload = [call, this.data, this.additionalSigned];
|
|
79
|
-
const rawPayload = $ToSignPayload.tryEncode(toSignPayload);
|
|
80
|
-
return {
|
|
81
|
-
address: payload.address,
|
|
82
|
-
data: (0, utils_1.u8aToHex)(rawPayload),
|
|
83
|
-
type: 'payload',
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
exports.ExtraSignedExtension = ExtraSignedExtension;
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SignedExtension = void 0;
|
|
4
|
-
const utils_1 = require("@dedot/utils");
|
|
5
|
-
class SignedExtension {
|
|
6
|
-
api;
|
|
7
|
-
options;
|
|
8
|
-
data;
|
|
9
|
-
additionalSigned;
|
|
10
|
-
constructor(api, options) {
|
|
11
|
-
this.api = api;
|
|
12
|
-
this.options = options;
|
|
13
|
-
this.data = {};
|
|
14
|
-
this.additionalSigned = [];
|
|
15
|
-
}
|
|
16
|
-
async init() {
|
|
17
|
-
// TODO implement this method
|
|
18
|
-
}
|
|
19
|
-
get identifier() {
|
|
20
|
-
return this.signedExtensionDef.ident;
|
|
21
|
-
}
|
|
22
|
-
get dataCodec() {
|
|
23
|
-
return (0, utils_1.ensurePresence)(this.registry.findCodec(this.signedExtensionDef.typeId));
|
|
24
|
-
}
|
|
25
|
-
get additionalSignedCodec() {
|
|
26
|
-
return (0, utils_1.ensurePresence)(this.registry.findCodec(this.signedExtensionDef.additionalSigned));
|
|
27
|
-
}
|
|
28
|
-
get registry() {
|
|
29
|
-
return this.api.registry;
|
|
30
|
-
}
|
|
31
|
-
get signedExtensionDef() {
|
|
32
|
-
return (0, utils_1.ensurePresence)(this.options.def);
|
|
33
|
-
}
|
|
34
|
-
get payloadOptions() {
|
|
35
|
-
return this.options?.payloadOptions || {};
|
|
36
|
-
}
|
|
37
|
-
toPayload(...args) {
|
|
38
|
-
return {};
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
exports.SignedExtension = SignedExtension;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./SignedExtension.js"), exports);
|
|
18
|
-
__exportStar(require("./known/index.js"), exports);
|
|
19
|
-
__exportStar(require("./ExtraSignedExtension.js"), exports);
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ChargeAssetTxPayment = void 0;
|
|
4
|
-
const utils_1 = require("@dedot/utils");
|
|
5
|
-
const SignedExtension_js_1 = require("../SignedExtension.js");
|
|
6
|
-
/**
|
|
7
|
-
* @name ChargeAssetTxPayment
|
|
8
|
-
*/
|
|
9
|
-
class ChargeAssetTxPayment extends SignedExtension_js_1.SignedExtension {
|
|
10
|
-
async init() {
|
|
11
|
-
const { tip, assetId } = this.payloadOptions;
|
|
12
|
-
this.data = {
|
|
13
|
-
tip: tip || 0n,
|
|
14
|
-
assetId,
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
toPayload() {
|
|
18
|
-
const { tip, assetId } = this.data;
|
|
19
|
-
return {
|
|
20
|
-
tip: (0, utils_1.bnToHex)(tip),
|
|
21
|
-
// @ts-ignore
|
|
22
|
-
assetId: this.#encodeAssetId(assetId),
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
#encodeAssetId(assetId) {
|
|
26
|
-
if (assetId === null || assetId === undefined) {
|
|
27
|
-
return undefined;
|
|
28
|
-
}
|
|
29
|
-
return (0, utils_1.u8aToHex)(this.$AssetId().tryEncode(assetId));
|
|
30
|
-
}
|
|
31
|
-
$AssetId() {
|
|
32
|
-
const extensionTypeDef = this.registry.findType(this.signedExtensionDef.typeId);
|
|
33
|
-
(0, utils_1.assert)(extensionTypeDef.type.tag === 'Struct');
|
|
34
|
-
const assetIdTypeDef = extensionTypeDef.type.value.fields.find((f) => f.name === 'asset_id');
|
|
35
|
-
const $codec = this.registry.findCodec(assetIdTypeDef.typeId);
|
|
36
|
-
const codecMetadata = $codec.metadata[0];
|
|
37
|
-
if (codecMetadata.name === '$.option') {
|
|
38
|
-
return codecMetadata.args[0]; // inner shape
|
|
39
|
-
}
|
|
40
|
-
return $codec;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
exports.ChargeAssetTxPayment = ChargeAssetTxPayment;
|