@dedot/contracts 0.4.1 → 0.5.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/Contract.d.ts +2 -1
- package/Contract.js +9 -9
- package/ContractDeployer.d.ts +2 -1
- package/ContractDeployer.js +6 -6
- package/TypinkRegistry.d.ts +3 -3
- package/TypinkRegistry.js +25 -10
- package/cjs/Contract.js +9 -9
- package/cjs/ContractDeployer.js +6 -6
- package/cjs/TypinkRegistry.js +24 -9
- package/cjs/errors.js +10 -0
- package/cjs/executor/ConstructorQueryExecutor.js +3 -3
- package/cjs/executor/ConstructorTxExecutor.js +5 -4
- package/cjs/executor/EventExecutor.js +3 -3
- package/cjs/executor/Executor.js +6 -12
- package/cjs/executor/QueryExecutor.js +1 -1
- package/cjs/executor/TxExecutor.js +1 -1
- package/cjs/utils.js +2 -2
- package/errors.d.ts +6 -0
- package/errors.js +10 -0
- package/executor/ConstructorQueryExecutor.d.ts +1 -1
- package/executor/ConstructorQueryExecutor.js +3 -3
- package/executor/ConstructorTxExecutor.d.ts +1 -1
- package/executor/ConstructorTxExecutor.js +5 -4
- package/executor/EventExecutor.js +3 -3
- package/executor/Executor.d.ts +4 -4
- package/executor/Executor.js +6 -12
- package/executor/QueryExecutor.js +1 -1
- package/executor/TxExecutor.js +1 -1
- package/package.json +6 -6
- package/utils.d.ts +3 -2
- package/utils.js +2 -2
package/Contract.d.ts
CHANGED
|
@@ -5,7 +5,8 @@ import { TypinkRegistry } from './TypinkRegistry.js';
|
|
|
5
5
|
import { ContractEvent, ContractMetadata, GenericContractApi } from './types/index.js';
|
|
6
6
|
export declare class Contract<ContractApi extends GenericContractApi = GenericContractApi> {
|
|
7
7
|
#private;
|
|
8
|
-
|
|
8
|
+
readonly client: ISubstrateClient<ContractApi['types']['ChainApi']>;
|
|
9
|
+
constructor(client: ISubstrateClient<ContractApi['types']['ChainApi']>, metadata: ContractMetadata | string, address: AccountId32Like);
|
|
9
10
|
decodeEvent(eventRecord: IEventRecord): ContractEvent;
|
|
10
11
|
decodeEvents(eventRecords: IEventRecord[]): ContractEvent[];
|
|
11
12
|
get metadata(): ContractMetadata;
|
package/Contract.js
CHANGED
|
@@ -3,22 +3,22 @@ import { TypinkRegistry } from './TypinkRegistry.js';
|
|
|
3
3
|
import { EventExecutor, QueryExecutor, TxExecutor } from './executor/index.js';
|
|
4
4
|
import { ensureSupportContractsPallet, newProxyChain, parseRawMetadata } from './utils.js';
|
|
5
5
|
export class Contract {
|
|
6
|
-
|
|
6
|
+
client;
|
|
7
7
|
#registry;
|
|
8
8
|
#address;
|
|
9
9
|
#metadata;
|
|
10
|
-
constructor(
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
constructor(client, metadata, address) {
|
|
11
|
+
this.client = client;
|
|
12
|
+
ensureSupportContractsPallet(client);
|
|
13
13
|
this.#address = new AccountId32(address);
|
|
14
14
|
this.#metadata = typeof metadata === 'string' ? parseRawMetadata(metadata) : metadata;
|
|
15
15
|
this.#registry = new TypinkRegistry(this.#metadata);
|
|
16
16
|
}
|
|
17
17
|
decodeEvent(eventRecord) {
|
|
18
|
-
return this.#registry.decodeEvent(eventRecord);
|
|
18
|
+
return this.#registry.decodeEvent(eventRecord, this.address);
|
|
19
19
|
}
|
|
20
20
|
decodeEvents(eventRecords) {
|
|
21
|
-
return this.#registry.decodeEvents(eventRecords);
|
|
21
|
+
return this.#registry.decodeEvents(eventRecords, this.address);
|
|
22
22
|
}
|
|
23
23
|
get metadata() {
|
|
24
24
|
return this.#metadata;
|
|
@@ -30,12 +30,12 @@ export class Contract {
|
|
|
30
30
|
return this.#registry;
|
|
31
31
|
}
|
|
32
32
|
get query() {
|
|
33
|
-
return newProxyChain(new QueryExecutor(this
|
|
33
|
+
return newProxyChain(new QueryExecutor(this.client, this.#registry, this.#address));
|
|
34
34
|
}
|
|
35
35
|
get tx() {
|
|
36
|
-
return newProxyChain(new TxExecutor(this
|
|
36
|
+
return newProxyChain(new TxExecutor(this.client, this.#registry, this.#address));
|
|
37
37
|
}
|
|
38
38
|
get events() {
|
|
39
|
-
return newProxyChain(new EventExecutor(this
|
|
39
|
+
return newProxyChain(new EventExecutor(this.client, this.#registry, this.#address));
|
|
40
40
|
}
|
|
41
41
|
}
|
package/ContractDeployer.d.ts
CHANGED
|
@@ -4,7 +4,8 @@ import { TypinkRegistry } from './TypinkRegistry.js';
|
|
|
4
4
|
import { ContractMetadata, GenericContractApi } from './types/index.js';
|
|
5
5
|
export declare class ContractDeployer<ContractApi extends GenericContractApi = GenericContractApi> {
|
|
6
6
|
#private;
|
|
7
|
-
|
|
7
|
+
readonly client: ISubstrateClient<ContractApi['types']['ChainApi']>;
|
|
8
|
+
constructor(client: ISubstrateClient<ContractApi['types']['ChainApi']>, metadata: ContractMetadata | string, codeHashOrWasm: Hash | Uint8Array | string);
|
|
8
9
|
get metadata(): ContractMetadata;
|
|
9
10
|
get registry(): TypinkRegistry;
|
|
10
11
|
get tx(): ContractApi['constructorTx'];
|
package/ContractDeployer.js
CHANGED
|
@@ -3,13 +3,13 @@ import { ConstructorQueryExecutor } from './executor/ConstructorQueryExecutor.js
|
|
|
3
3
|
import { ConstructorTxExecutor } from './executor/index.js';
|
|
4
4
|
import { ensureSupportContractsPallet, newProxyChain, parseRawMetadata } from './utils.js';
|
|
5
5
|
export class ContractDeployer {
|
|
6
|
-
|
|
6
|
+
client;
|
|
7
7
|
#metadata;
|
|
8
8
|
#registry;
|
|
9
9
|
#code;
|
|
10
|
-
constructor(
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
constructor(client, metadata, codeHashOrWasm) {
|
|
11
|
+
this.client = client;
|
|
12
|
+
ensureSupportContractsPallet(client);
|
|
13
13
|
this.#metadata = typeof metadata === 'string' ? parseRawMetadata(metadata) : metadata;
|
|
14
14
|
this.#registry = new TypinkRegistry(this.#metadata);
|
|
15
15
|
this.#code = codeHashOrWasm;
|
|
@@ -21,9 +21,9 @@ export class ContractDeployer {
|
|
|
21
21
|
return this.#registry;
|
|
22
22
|
}
|
|
23
23
|
get tx() {
|
|
24
|
-
return newProxyChain(new ConstructorTxExecutor(this
|
|
24
|
+
return newProxyChain(new ConstructorTxExecutor(this.client, this.#registry, this.#code));
|
|
25
25
|
}
|
|
26
26
|
get query() {
|
|
27
|
-
return newProxyChain(new ConstructorQueryExecutor(this
|
|
27
|
+
return newProxyChain(new ConstructorQueryExecutor(this.client, this.#registry, this.#code));
|
|
28
28
|
}
|
|
29
29
|
}
|
package/TypinkRegistry.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { TypeRegistry } from '@dedot/codecs';
|
|
1
|
+
import { AccountId32Like, TypeRegistry } from '@dedot/codecs';
|
|
2
2
|
import { IEventRecord } from '@dedot/types';
|
|
3
3
|
import { ContractEvent, ContractMetadata } from './types/index.js';
|
|
4
4
|
export declare class TypinkRegistry extends TypeRegistry {
|
|
5
5
|
#private;
|
|
6
6
|
constructor(metadata: ContractMetadata);
|
|
7
7
|
get metadata(): ContractMetadata;
|
|
8
|
-
decodeEvents(records: IEventRecord[]): ContractEvent[];
|
|
9
|
-
decodeEvent(eventRecord: IEventRecord): ContractEvent;
|
|
8
|
+
decodeEvents(records: IEventRecord[], contract?: AccountId32Like): ContractEvent[];
|
|
9
|
+
decodeEvent(eventRecord: IEventRecord, contract?: AccountId32Like): ContractEvent;
|
|
10
10
|
}
|
package/TypinkRegistry.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TypeRegistry } from '@dedot/codecs';
|
|
1
|
+
import { AccountId32, TypeRegistry } from '@dedot/codecs';
|
|
2
2
|
import * as $ from '@dedot/shape';
|
|
3
3
|
import { DedotError, assert, hexToU8a, stringCamelCase, stringPascalCase } from '@dedot/utils';
|
|
4
4
|
import { extractContractTypes } from './utils.js';
|
|
@@ -11,12 +11,13 @@ export class TypinkRegistry extends TypeRegistry {
|
|
|
11
11
|
get metadata() {
|
|
12
12
|
return this.#metadata;
|
|
13
13
|
}
|
|
14
|
-
decodeEvents(records) {
|
|
14
|
+
decodeEvents(records, contract) {
|
|
15
15
|
return records
|
|
16
|
-
.filter(({ event }) => this.#isContractEmittedEvent(event)) // prettier-end-here
|
|
17
|
-
.map((record) => this.decodeEvent(record));
|
|
16
|
+
.filter(({ event }) => this.#isContractEmittedEvent(event, contract)) // prettier-end-here
|
|
17
|
+
.map((record) => this.decodeEvent(record, contract));
|
|
18
18
|
}
|
|
19
|
-
decodeEvent(eventRecord) {
|
|
19
|
+
decodeEvent(eventRecord, contract) {
|
|
20
|
+
assert(this.#isContractEmittedEvent(eventRecord.event, contract), 'Invalid ContractEmitted Event');
|
|
20
21
|
const { version } = this.#metadata;
|
|
21
22
|
switch (version) {
|
|
22
23
|
case 5:
|
|
@@ -27,13 +28,27 @@ export class TypinkRegistry extends TypeRegistry {
|
|
|
27
28
|
throw new DedotError('Unsupported metadata version!');
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
|
-
#isContractEmittedEvent(event) {
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
#isContractEmittedEvent(event, contract) {
|
|
32
|
+
const eventMatched = event.pallet === 'Contracts' &&
|
|
33
|
+
typeof event.palletEvent === 'object' &&
|
|
34
|
+
event.palletEvent.name === 'ContractEmitted';
|
|
35
|
+
if (!eventMatched)
|
|
36
|
+
return false;
|
|
37
|
+
if (contract) {
|
|
38
|
+
// @ts-ignore
|
|
39
|
+
const emittedContract = event.palletEvent.data?.contract;
|
|
40
|
+
if (emittedContract instanceof AccountId32) {
|
|
41
|
+
return emittedContract.eq(contract);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
33
48
|
}
|
|
34
49
|
#decodeEventV4(eventRecord) {
|
|
35
50
|
assert(this.#metadata.version === '4', 'Invalid metadata version!');
|
|
36
|
-
assert(this.#isContractEmittedEvent(eventRecord.event), '
|
|
51
|
+
assert(this.#isContractEmittedEvent(eventRecord.event), 'Invalid ContractEmitted Event');
|
|
37
52
|
const data = hexToU8a(eventRecord.event.palletEvent.data.data);
|
|
38
53
|
const index = data.at(0);
|
|
39
54
|
assert(index !== undefined, 'Unable to decode event index!');
|
|
@@ -43,7 +58,7 @@ export class TypinkRegistry extends TypeRegistry {
|
|
|
43
58
|
}
|
|
44
59
|
#decodeEventV5(eventRecord) {
|
|
45
60
|
assert(this.#metadata.version === 5, 'Invalid metadata version!');
|
|
46
|
-
assert(this.#isContractEmittedEvent(eventRecord.event), '
|
|
61
|
+
assert(this.#isContractEmittedEvent(eventRecord.event), 'Invalid ContractEmitted Event');
|
|
47
62
|
const data = hexToU8a(eventRecord.event.palletEvent.data.data);
|
|
48
63
|
const signatureTopic = eventRecord.topics.at(0);
|
|
49
64
|
let eventMeta;
|
package/cjs/Contract.js
CHANGED
|
@@ -6,22 +6,22 @@ const TypinkRegistry_js_1 = require("./TypinkRegistry.js");
|
|
|
6
6
|
const index_js_1 = require("./executor/index.js");
|
|
7
7
|
const utils_js_1 = require("./utils.js");
|
|
8
8
|
class Contract {
|
|
9
|
-
|
|
9
|
+
client;
|
|
10
10
|
#registry;
|
|
11
11
|
#address;
|
|
12
12
|
#metadata;
|
|
13
|
-
constructor(
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
constructor(client, metadata, address) {
|
|
14
|
+
this.client = client;
|
|
15
|
+
(0, utils_js_1.ensureSupportContractsPallet)(client);
|
|
16
16
|
this.#address = new codecs_1.AccountId32(address);
|
|
17
17
|
this.#metadata = typeof metadata === 'string' ? (0, utils_js_1.parseRawMetadata)(metadata) : metadata;
|
|
18
18
|
this.#registry = new TypinkRegistry_js_1.TypinkRegistry(this.#metadata);
|
|
19
19
|
}
|
|
20
20
|
decodeEvent(eventRecord) {
|
|
21
|
-
return this.#registry.decodeEvent(eventRecord);
|
|
21
|
+
return this.#registry.decodeEvent(eventRecord, this.address);
|
|
22
22
|
}
|
|
23
23
|
decodeEvents(eventRecords) {
|
|
24
|
-
return this.#registry.decodeEvents(eventRecords);
|
|
24
|
+
return this.#registry.decodeEvents(eventRecords, this.address);
|
|
25
25
|
}
|
|
26
26
|
get metadata() {
|
|
27
27
|
return this.#metadata;
|
|
@@ -33,13 +33,13 @@ class Contract {
|
|
|
33
33
|
return this.#registry;
|
|
34
34
|
}
|
|
35
35
|
get query() {
|
|
36
|
-
return (0, utils_js_1.newProxyChain)(new index_js_1.QueryExecutor(this
|
|
36
|
+
return (0, utils_js_1.newProxyChain)(new index_js_1.QueryExecutor(this.client, this.#registry, this.#address));
|
|
37
37
|
}
|
|
38
38
|
get tx() {
|
|
39
|
-
return (0, utils_js_1.newProxyChain)(new index_js_1.TxExecutor(this
|
|
39
|
+
return (0, utils_js_1.newProxyChain)(new index_js_1.TxExecutor(this.client, this.#registry, this.#address));
|
|
40
40
|
}
|
|
41
41
|
get events() {
|
|
42
|
-
return (0, utils_js_1.newProxyChain)(new index_js_1.EventExecutor(this
|
|
42
|
+
return (0, utils_js_1.newProxyChain)(new index_js_1.EventExecutor(this.client, this.#registry, this.#address));
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
exports.Contract = Contract;
|
package/cjs/ContractDeployer.js
CHANGED
|
@@ -6,13 +6,13 @@ const ConstructorQueryExecutor_js_1 = require("./executor/ConstructorQueryExecut
|
|
|
6
6
|
const index_js_1 = require("./executor/index.js");
|
|
7
7
|
const utils_js_1 = require("./utils.js");
|
|
8
8
|
class ContractDeployer {
|
|
9
|
-
|
|
9
|
+
client;
|
|
10
10
|
#metadata;
|
|
11
11
|
#registry;
|
|
12
12
|
#code;
|
|
13
|
-
constructor(
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
constructor(client, metadata, codeHashOrWasm) {
|
|
14
|
+
this.client = client;
|
|
15
|
+
(0, utils_js_1.ensureSupportContractsPallet)(client);
|
|
16
16
|
this.#metadata = typeof metadata === 'string' ? (0, utils_js_1.parseRawMetadata)(metadata) : metadata;
|
|
17
17
|
this.#registry = new TypinkRegistry_js_1.TypinkRegistry(this.#metadata);
|
|
18
18
|
this.#code = codeHashOrWasm;
|
|
@@ -24,10 +24,10 @@ class ContractDeployer {
|
|
|
24
24
|
return this.#registry;
|
|
25
25
|
}
|
|
26
26
|
get tx() {
|
|
27
|
-
return (0, utils_js_1.newProxyChain)(new index_js_1.ConstructorTxExecutor(this
|
|
27
|
+
return (0, utils_js_1.newProxyChain)(new index_js_1.ConstructorTxExecutor(this.client, this.#registry, this.#code));
|
|
28
28
|
}
|
|
29
29
|
get query() {
|
|
30
|
-
return (0, utils_js_1.newProxyChain)(new ConstructorQueryExecutor_js_1.ConstructorQueryExecutor(this
|
|
30
|
+
return (0, utils_js_1.newProxyChain)(new ConstructorQueryExecutor_js_1.ConstructorQueryExecutor(this.client, this.#registry, this.#code));
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
exports.ContractDeployer = ContractDeployer;
|
package/cjs/TypinkRegistry.js
CHANGED
|
@@ -37,12 +37,13 @@ class TypinkRegistry extends codecs_1.TypeRegistry {
|
|
|
37
37
|
get metadata() {
|
|
38
38
|
return this.#metadata;
|
|
39
39
|
}
|
|
40
|
-
decodeEvents(records) {
|
|
40
|
+
decodeEvents(records, contract) {
|
|
41
41
|
return records
|
|
42
|
-
.filter(({ event }) => this.#isContractEmittedEvent(event)) // prettier-end-here
|
|
43
|
-
.map((record) => this.decodeEvent(record));
|
|
42
|
+
.filter(({ event }) => this.#isContractEmittedEvent(event, contract)) // prettier-end-here
|
|
43
|
+
.map((record) => this.decodeEvent(record, contract));
|
|
44
44
|
}
|
|
45
|
-
decodeEvent(eventRecord) {
|
|
45
|
+
decodeEvent(eventRecord, contract) {
|
|
46
|
+
(0, utils_1.assert)(this.#isContractEmittedEvent(eventRecord.event, contract), 'Invalid ContractEmitted Event');
|
|
46
47
|
const { version } = this.#metadata;
|
|
47
48
|
switch (version) {
|
|
48
49
|
case 5:
|
|
@@ -53,13 +54,27 @@ class TypinkRegistry extends codecs_1.TypeRegistry {
|
|
|
53
54
|
throw new utils_1.DedotError('Unsupported metadata version!');
|
|
54
55
|
}
|
|
55
56
|
}
|
|
56
|
-
#isContractEmittedEvent(event) {
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
#isContractEmittedEvent(event, contract) {
|
|
58
|
+
const eventMatched = event.pallet === 'Contracts' &&
|
|
59
|
+
typeof event.palletEvent === 'object' &&
|
|
60
|
+
event.palletEvent.name === 'ContractEmitted';
|
|
61
|
+
if (!eventMatched)
|
|
62
|
+
return false;
|
|
63
|
+
if (contract) {
|
|
64
|
+
// @ts-ignore
|
|
65
|
+
const emittedContract = event.palletEvent.data?.contract;
|
|
66
|
+
if (emittedContract instanceof codecs_1.AccountId32) {
|
|
67
|
+
return emittedContract.eq(contract);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
59
74
|
}
|
|
60
75
|
#decodeEventV4(eventRecord) {
|
|
61
76
|
(0, utils_1.assert)(this.#metadata.version === '4', 'Invalid metadata version!');
|
|
62
|
-
(0, utils_1.assert)(this.#isContractEmittedEvent(eventRecord.event), '
|
|
77
|
+
(0, utils_1.assert)(this.#isContractEmittedEvent(eventRecord.event), 'Invalid ContractEmitted Event');
|
|
63
78
|
const data = (0, utils_1.hexToU8a)(eventRecord.event.palletEvent.data.data);
|
|
64
79
|
const index = data.at(0);
|
|
65
80
|
(0, utils_1.assert)(index !== undefined, 'Unable to decode event index!');
|
|
@@ -69,7 +84,7 @@ class TypinkRegistry extends codecs_1.TypeRegistry {
|
|
|
69
84
|
}
|
|
70
85
|
#decodeEventV5(eventRecord) {
|
|
71
86
|
(0, utils_1.assert)(this.#metadata.version === 5, 'Invalid metadata version!');
|
|
72
|
-
(0, utils_1.assert)(this.#isContractEmittedEvent(eventRecord.event), '
|
|
87
|
+
(0, utils_1.assert)(this.#isContractEmittedEvent(eventRecord.event), 'Invalid ContractEmitted Event');
|
|
73
88
|
const data = (0, utils_1.hexToU8a)(eventRecord.event.palletEvent.data.data);
|
|
74
89
|
const signatureTopic = eventRecord.topics.at(0);
|
|
75
90
|
let eventMeta;
|
package/cjs/errors.js
CHANGED
|
@@ -12,6 +12,7 @@ const utils_js_1 = require("./utils.js");
|
|
|
12
12
|
* @extends DedotError
|
|
13
13
|
*/
|
|
14
14
|
class ContractInstantiateError extends utils_1.DedotError {
|
|
15
|
+
name = 'ContractInstantiateError';
|
|
15
16
|
/**
|
|
16
17
|
* The raw result of the contract instantiation.
|
|
17
18
|
*/
|
|
@@ -36,6 +37,7 @@ exports.ContractInstantiateError = ContractInstantiateError;
|
|
|
36
37
|
* @extends ContractInstantiateError
|
|
37
38
|
*/
|
|
38
39
|
class ContractInstantiateDispatchError extends ContractInstantiateError {
|
|
40
|
+
name = 'ContractInstantiateDispatchError';
|
|
39
41
|
/**
|
|
40
42
|
* The error that occurred during the dispatch phase.
|
|
41
43
|
*/
|
|
@@ -49,6 +51,7 @@ class ContractInstantiateDispatchError extends ContractInstantiateError {
|
|
|
49
51
|
constructor(err, raw) {
|
|
50
52
|
super(raw);
|
|
51
53
|
this.dispatchError = err;
|
|
54
|
+
this.message = `Dispatch error: ${JSON.stringify(err)}`;
|
|
52
55
|
}
|
|
53
56
|
}
|
|
54
57
|
exports.ContractInstantiateDispatchError = ContractInstantiateDispatchError;
|
|
@@ -63,6 +66,7 @@ exports.ContractInstantiateDispatchError = ContractInstantiateDispatchError;
|
|
|
63
66
|
* @extends ContractInstantiateError
|
|
64
67
|
*/
|
|
65
68
|
class ContractInstantiateLangError extends ContractInstantiateError {
|
|
69
|
+
name = 'ContractInstantiateLangError';
|
|
66
70
|
/**
|
|
67
71
|
* The language-specific error that occurred during the instantiation.
|
|
68
72
|
*/
|
|
@@ -82,6 +86,7 @@ class ContractInstantiateLangError extends ContractInstantiateError {
|
|
|
82
86
|
super(raw);
|
|
83
87
|
this.langError = err;
|
|
84
88
|
this.flags = (0, utils_js_1.toReturnFlags)(raw.result.value.result.flags.bits);
|
|
89
|
+
this.message = `Lange error: ${JSON.stringify(err)}`;
|
|
85
90
|
}
|
|
86
91
|
}
|
|
87
92
|
exports.ContractInstantiateLangError = ContractInstantiateLangError;
|
|
@@ -94,6 +99,7 @@ exports.ContractInstantiateLangError = ContractInstantiateLangError;
|
|
|
94
99
|
* @extends DedotError
|
|
95
100
|
*/
|
|
96
101
|
class ContractExecutionError extends utils_1.DedotError {
|
|
102
|
+
name = 'ContractExecutionError';
|
|
97
103
|
/**
|
|
98
104
|
* The raw result of the contract call.
|
|
99
105
|
*/
|
|
@@ -118,6 +124,7 @@ exports.ContractExecutionError = ContractExecutionError;
|
|
|
118
124
|
* @extends ContractExecutionError
|
|
119
125
|
*/
|
|
120
126
|
class ContractDispatchError extends ContractExecutionError {
|
|
127
|
+
name = 'ContractDispatchError';
|
|
121
128
|
/**
|
|
122
129
|
* The error that occurred during the dispatch phase.
|
|
123
130
|
*/
|
|
@@ -131,6 +138,7 @@ class ContractDispatchError extends ContractExecutionError {
|
|
|
131
138
|
constructor(err, raw) {
|
|
132
139
|
super(raw);
|
|
133
140
|
this.dispatchError = err;
|
|
141
|
+
this.message = `Dispatch error: ${JSON.stringify(err)}`;
|
|
134
142
|
}
|
|
135
143
|
}
|
|
136
144
|
exports.ContractDispatchError = ContractDispatchError;
|
|
@@ -145,6 +153,7 @@ exports.ContractDispatchError = ContractDispatchError;
|
|
|
145
153
|
* @extends ContractExecutionError
|
|
146
154
|
*/
|
|
147
155
|
class ContractLangError extends ContractExecutionError {
|
|
156
|
+
name = 'ContractLangError';
|
|
148
157
|
/**
|
|
149
158
|
* The language-specific error that occurred during the execution.
|
|
150
159
|
*/
|
|
@@ -164,6 +173,7 @@ class ContractLangError extends ContractExecutionError {
|
|
|
164
173
|
super(raw);
|
|
165
174
|
this.langError = err;
|
|
166
175
|
this.flags = (0, utils_js_1.toReturnFlags)(raw.result.value.flags.bits);
|
|
176
|
+
this.message = `Lange error: ${JSON.stringify(err)}`;
|
|
167
177
|
}
|
|
168
178
|
}
|
|
169
179
|
exports.ContractLangError = ContractLangError;
|
|
@@ -7,8 +7,8 @@ const utils_js_1 = require("../utils.js");
|
|
|
7
7
|
const Executor_js_1 = require("./Executor.js");
|
|
8
8
|
class ConstructorQueryExecutor extends Executor_js_1.Executor {
|
|
9
9
|
code;
|
|
10
|
-
constructor(
|
|
11
|
-
super(
|
|
10
|
+
constructor(client, registry, code) {
|
|
11
|
+
super(client, registry);
|
|
12
12
|
this.code = code;
|
|
13
13
|
}
|
|
14
14
|
doExecute(constructor) {
|
|
@@ -27,7 +27,7 @@ class ConstructorQueryExecutor extends Executor_js_1.Executor {
|
|
|
27
27
|
type: (0, utils_1.isWasm)(this.code) ? 'Upload' : 'Existing',
|
|
28
28
|
value: this.code,
|
|
29
29
|
};
|
|
30
|
-
const raw = await this.
|
|
30
|
+
const raw = await this.client.call.contractsApi.instantiate(caller, value, gasLimit, storageDepositLimit, code, bytes, salt);
|
|
31
31
|
if (raw.result.isErr) {
|
|
32
32
|
throw new errors_js_1.ContractInstantiateDispatchError(raw.result.err, raw);
|
|
33
33
|
}
|
|
@@ -6,8 +6,8 @@ const utils_js_1 = require("../utils.js");
|
|
|
6
6
|
const Executor_js_1 = require("./Executor.js");
|
|
7
7
|
class ConstructorTxExecutor extends Executor_js_1.Executor {
|
|
8
8
|
code;
|
|
9
|
-
constructor(
|
|
10
|
-
super(
|
|
9
|
+
constructor(client, registry, code) {
|
|
10
|
+
super(client, registry);
|
|
11
11
|
this.code = code;
|
|
12
12
|
}
|
|
13
13
|
doExecute(constructor) {
|
|
@@ -23,10 +23,11 @@ class ConstructorTxExecutor extends Executor_js_1.Executor {
|
|
|
23
23
|
const formattedInputs = args.map((arg, index) => this.tryEncode(arg, params[index]));
|
|
24
24
|
const bytes = (0, utils_1.u8aToHex)((0, utils_1.concatU8a)((0, utils_1.hexToU8a)(meta.selector), ...formattedInputs));
|
|
25
25
|
if ((0, utils_1.isWasm)(this.code)) {
|
|
26
|
-
return this.
|
|
26
|
+
return this.client.tx.contracts.instantiateWithCode(value, gasLimit, storageDepositLimit, this.code, bytes, salt);
|
|
27
27
|
}
|
|
28
28
|
else {
|
|
29
|
-
return this.
|
|
29
|
+
return this.client.tx.contracts.instantiate(value, // prettier-end-here
|
|
30
|
+
gasLimit, storageDepositLimit, this.code, bytes, salt);
|
|
30
31
|
}
|
|
31
32
|
};
|
|
32
33
|
callFn.meta = meta;
|
|
@@ -11,7 +11,7 @@ class EventExecutor extends Executor_js_1.Executor {
|
|
|
11
11
|
const is = (event) => {
|
|
12
12
|
if ((0, api_1.isEventRecord)(event)) {
|
|
13
13
|
try {
|
|
14
|
-
event = this.registry.decodeEvent(event);
|
|
14
|
+
event = this.registry.decodeEvent(event, this.address);
|
|
15
15
|
}
|
|
16
16
|
catch {
|
|
17
17
|
return false;
|
|
@@ -23,7 +23,7 @@ class EventExecutor extends Executor_js_1.Executor {
|
|
|
23
23
|
if (!events || events.length === 0)
|
|
24
24
|
return undefined;
|
|
25
25
|
if ((0, api_1.isEventRecord)(events[0])) {
|
|
26
|
-
return this.registry.decodeEvents(events).find(is);
|
|
26
|
+
return this.registry.decodeEvents(events, this.address).find(is);
|
|
27
27
|
}
|
|
28
28
|
else {
|
|
29
29
|
return events.find(is);
|
|
@@ -31,7 +31,7 @@ class EventExecutor extends Executor_js_1.Executor {
|
|
|
31
31
|
};
|
|
32
32
|
const filter = (events) => {
|
|
33
33
|
if ((0, api_1.isEventRecord)(events[0])) {
|
|
34
|
-
return this.registry.decodeEvents(events).filter(is);
|
|
34
|
+
return this.registry.decodeEvents(events, this.address).filter(is);
|
|
35
35
|
}
|
|
36
36
|
else {
|
|
37
37
|
return events.filter(is);
|
package/cjs/executor/Executor.js
CHANGED
|
@@ -3,28 +3,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Executor = void 0;
|
|
4
4
|
const codecs_1 = require("@dedot/codecs");
|
|
5
5
|
class Executor {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
client;
|
|
7
|
+
registry;
|
|
8
8
|
#address;
|
|
9
|
-
constructor(
|
|
10
|
-
this
|
|
11
|
-
this
|
|
9
|
+
constructor(client, registry, address) {
|
|
10
|
+
this.client = client;
|
|
11
|
+
this.registry = registry;
|
|
12
12
|
if (address) {
|
|
13
13
|
this.#address = new codecs_1.AccountId32(address);
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
get api() {
|
|
17
|
-
return this.#api;
|
|
18
|
-
}
|
|
19
16
|
get metadata() {
|
|
20
|
-
return this
|
|
17
|
+
return this.registry.metadata;
|
|
21
18
|
}
|
|
22
19
|
get address() {
|
|
23
20
|
return this.#address;
|
|
24
21
|
}
|
|
25
|
-
get registry() {
|
|
26
|
-
return this.#registry;
|
|
27
|
-
}
|
|
28
22
|
tryEncode(param, value) {
|
|
29
23
|
const { type } = param.type;
|
|
30
24
|
const $codec = this.registry.findCodec(type);
|
|
@@ -17,7 +17,7 @@ class QueryExecutor extends Executor_js_1.Executor {
|
|
|
17
17
|
(0, utils_1.assert)(caller, 'Expected a valid caller address in ContractCallOptions');
|
|
18
18
|
const formattedInputs = args.map((arg, index) => this.tryEncode(arg, params[index]));
|
|
19
19
|
const bytes = (0, utils_1.u8aToHex)((0, utils_1.concatU8a)((0, utils_1.hexToU8a)(meta.selector), ...formattedInputs));
|
|
20
|
-
const raw = await this.
|
|
20
|
+
const raw = await this.client.call.contractsApi.call(caller, this.address, value, gasLimit, storageDepositLimit, bytes);
|
|
21
21
|
if (raw.result.isErr) {
|
|
22
22
|
throw new errors_js_1.ContractDispatchError(raw.result.err, raw);
|
|
23
23
|
}
|
|
@@ -16,7 +16,7 @@ class TxExecutor extends Executor_js_1.Executor {
|
|
|
16
16
|
(0, utils_1.assert)(gasLimit, 'Expected a gas limit in ContractTxOptions');
|
|
17
17
|
const formattedInputs = args.map((arg, index) => this.tryEncode(arg, params[index]));
|
|
18
18
|
const bytes = (0, utils_1.u8aToHex)((0, utils_1.concatU8a)((0, utils_1.hexToU8a)(meta.selector), ...formattedInputs));
|
|
19
|
-
return this.
|
|
19
|
+
return this.client.tx.contracts.call(this.address, value, gasLimit, storageDepositLimit, bytes);
|
|
20
20
|
};
|
|
21
21
|
callFn.meta = meta;
|
|
22
22
|
return callFn;
|
package/cjs/utils.js
CHANGED
|
@@ -91,9 +91,9 @@ function newProxyChain(carrier) {
|
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
93
|
exports.newProxyChain = newProxyChain;
|
|
94
|
-
function ensureSupportContractsPallet(
|
|
94
|
+
function ensureSupportContractsPallet(client) {
|
|
95
95
|
try {
|
|
96
|
-
!!
|
|
96
|
+
!!client.call.contractsApi.call.meta && !!client.tx.contracts.call.meta;
|
|
97
97
|
}
|
|
98
98
|
catch {
|
|
99
99
|
throw new Error('Contracts pallet is not available');
|
package/errors.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { ContractCallResult, ContractInstantiateResult, GenericContractApi, Retu
|
|
|
10
10
|
* @extends DedotError
|
|
11
11
|
*/
|
|
12
12
|
export declare class ContractInstantiateError<ContractApi extends GenericContractApi = GenericContractApi> extends DedotError {
|
|
13
|
+
name: string;
|
|
13
14
|
/**
|
|
14
15
|
* The raw result of the contract instantiation.
|
|
15
16
|
*/
|
|
@@ -30,6 +31,7 @@ export declare class ContractInstantiateError<ContractApi extends GenericContrac
|
|
|
30
31
|
* @extends ContractInstantiateError
|
|
31
32
|
*/
|
|
32
33
|
export declare class ContractInstantiateDispatchError<ContractApi extends GenericContractApi = GenericContractApi> extends ContractInstantiateError<ContractApi> {
|
|
34
|
+
name: string;
|
|
33
35
|
/**
|
|
34
36
|
* The error that occurred during the dispatch phase.
|
|
35
37
|
*/
|
|
@@ -53,6 +55,7 @@ export declare class ContractInstantiateDispatchError<ContractApi extends Generi
|
|
|
53
55
|
* @extends ContractInstantiateError
|
|
54
56
|
*/
|
|
55
57
|
export declare class ContractInstantiateLangError<ContractApi extends GenericContractApi = GenericContractApi> extends ContractInstantiateError<ContractApi> {
|
|
58
|
+
name: string;
|
|
56
59
|
/**
|
|
57
60
|
* The language-specific error that occurred during the instantiation.
|
|
58
61
|
*/
|
|
@@ -78,6 +81,7 @@ export declare class ContractInstantiateLangError<ContractApi extends GenericCon
|
|
|
78
81
|
* @extends DedotError
|
|
79
82
|
*/
|
|
80
83
|
export declare class ContractExecutionError<ContractApi extends GenericContractApi = GenericContractApi> extends DedotError {
|
|
84
|
+
name: string;
|
|
81
85
|
/**
|
|
82
86
|
* The raw result of the contract call.
|
|
83
87
|
*/
|
|
@@ -98,6 +102,7 @@ export declare class ContractExecutionError<ContractApi extends GenericContractA
|
|
|
98
102
|
* @extends ContractExecutionError
|
|
99
103
|
*/
|
|
100
104
|
export declare class ContractDispatchError<ContractApi extends GenericContractApi = GenericContractApi> extends ContractExecutionError<ContractApi> {
|
|
105
|
+
name: string;
|
|
101
106
|
/**
|
|
102
107
|
* The error that occurred during the dispatch phase.
|
|
103
108
|
*/
|
|
@@ -121,6 +126,7 @@ export declare class ContractDispatchError<ContractApi extends GenericContractAp
|
|
|
121
126
|
* @extends ContractExecutionError
|
|
122
127
|
*/
|
|
123
128
|
export declare class ContractLangError<ContractApi extends GenericContractApi = GenericContractApi> extends ContractExecutionError<ContractApi> {
|
|
129
|
+
name: string;
|
|
124
130
|
/**
|
|
125
131
|
* The language-specific error that occurred during the execution.
|
|
126
132
|
*/
|
package/errors.js
CHANGED
|
@@ -9,6 +9,7 @@ import { toReturnFlags } from './utils.js';
|
|
|
9
9
|
* @extends DedotError
|
|
10
10
|
*/
|
|
11
11
|
export class ContractInstantiateError extends DedotError {
|
|
12
|
+
name = 'ContractInstantiateError';
|
|
12
13
|
/**
|
|
13
14
|
* The raw result of the contract instantiation.
|
|
14
15
|
*/
|
|
@@ -32,6 +33,7 @@ export class ContractInstantiateError extends DedotError {
|
|
|
32
33
|
* @extends ContractInstantiateError
|
|
33
34
|
*/
|
|
34
35
|
export class ContractInstantiateDispatchError extends ContractInstantiateError {
|
|
36
|
+
name = 'ContractInstantiateDispatchError';
|
|
35
37
|
/**
|
|
36
38
|
* The error that occurred during the dispatch phase.
|
|
37
39
|
*/
|
|
@@ -45,6 +47,7 @@ export class ContractInstantiateDispatchError extends ContractInstantiateError {
|
|
|
45
47
|
constructor(err, raw) {
|
|
46
48
|
super(raw);
|
|
47
49
|
this.dispatchError = err;
|
|
50
|
+
this.message = `Dispatch error: ${JSON.stringify(err)}`;
|
|
48
51
|
}
|
|
49
52
|
}
|
|
50
53
|
/**
|
|
@@ -58,6 +61,7 @@ export class ContractInstantiateDispatchError extends ContractInstantiateError {
|
|
|
58
61
|
* @extends ContractInstantiateError
|
|
59
62
|
*/
|
|
60
63
|
export class ContractInstantiateLangError extends ContractInstantiateError {
|
|
64
|
+
name = 'ContractInstantiateLangError';
|
|
61
65
|
/**
|
|
62
66
|
* The language-specific error that occurred during the instantiation.
|
|
63
67
|
*/
|
|
@@ -77,6 +81,7 @@ export class ContractInstantiateLangError extends ContractInstantiateError {
|
|
|
77
81
|
super(raw);
|
|
78
82
|
this.langError = err;
|
|
79
83
|
this.flags = toReturnFlags(raw.result.value.result.flags.bits);
|
|
84
|
+
this.message = `Lange error: ${JSON.stringify(err)}`;
|
|
80
85
|
}
|
|
81
86
|
}
|
|
82
87
|
/**
|
|
@@ -88,6 +93,7 @@ export class ContractInstantiateLangError extends ContractInstantiateError {
|
|
|
88
93
|
* @extends DedotError
|
|
89
94
|
*/
|
|
90
95
|
export class ContractExecutionError extends DedotError {
|
|
96
|
+
name = 'ContractExecutionError';
|
|
91
97
|
/**
|
|
92
98
|
* The raw result of the contract call.
|
|
93
99
|
*/
|
|
@@ -111,6 +117,7 @@ export class ContractExecutionError extends DedotError {
|
|
|
111
117
|
* @extends ContractExecutionError
|
|
112
118
|
*/
|
|
113
119
|
export class ContractDispatchError extends ContractExecutionError {
|
|
120
|
+
name = 'ContractDispatchError';
|
|
114
121
|
/**
|
|
115
122
|
* The error that occurred during the dispatch phase.
|
|
116
123
|
*/
|
|
@@ -124,6 +131,7 @@ export class ContractDispatchError extends ContractExecutionError {
|
|
|
124
131
|
constructor(err, raw) {
|
|
125
132
|
super(raw);
|
|
126
133
|
this.dispatchError = err;
|
|
134
|
+
this.message = `Dispatch error: ${JSON.stringify(err)}`;
|
|
127
135
|
}
|
|
128
136
|
}
|
|
129
137
|
/**
|
|
@@ -137,6 +145,7 @@ export class ContractDispatchError extends ContractExecutionError {
|
|
|
137
145
|
* @extends ContractExecutionError
|
|
138
146
|
*/
|
|
139
147
|
export class ContractLangError extends ContractExecutionError {
|
|
148
|
+
name = 'ContractLangError';
|
|
140
149
|
/**
|
|
141
150
|
* The language-specific error that occurred during the execution.
|
|
142
151
|
*/
|
|
@@ -156,6 +165,7 @@ export class ContractLangError extends ContractExecutionError {
|
|
|
156
165
|
super(raw);
|
|
157
166
|
this.langError = err;
|
|
158
167
|
this.flags = toReturnFlags(raw.result.value.flags.bits);
|
|
168
|
+
this.message = `Lange error: ${JSON.stringify(err)}`;
|
|
159
169
|
}
|
|
160
170
|
}
|
|
161
171
|
/**
|
|
@@ -8,6 +8,6 @@ import { Executor } from './Executor.js';
|
|
|
8
8
|
export declare class ConstructorQueryExecutor<ChainApi extends GenericSubstrateApi> extends Executor<ChainApi> {
|
|
9
9
|
#private;
|
|
10
10
|
protected readonly code: Hash | Uint8Array | HexString | string;
|
|
11
|
-
constructor(
|
|
11
|
+
constructor(client: ISubstrateClient<ChainApi>, registry: TypinkRegistry, code: Hash | Uint8Array | string);
|
|
12
12
|
doExecute(constructor: string): GenericConstructorQueryCall<ChainApi>;
|
|
13
13
|
}
|
|
@@ -4,8 +4,8 @@ import { normalizeLabel, toReturnFlags } from '../utils.js';
|
|
|
4
4
|
import { Executor } from './Executor.js';
|
|
5
5
|
export class ConstructorQueryExecutor extends Executor {
|
|
6
6
|
code;
|
|
7
|
-
constructor(
|
|
8
|
-
super(
|
|
7
|
+
constructor(client, registry, code) {
|
|
8
|
+
super(client, registry);
|
|
9
9
|
this.code = code;
|
|
10
10
|
}
|
|
11
11
|
doExecute(constructor) {
|
|
@@ -24,7 +24,7 @@ export class ConstructorQueryExecutor extends Executor {
|
|
|
24
24
|
type: isWasm(this.code) ? 'Upload' : 'Existing',
|
|
25
25
|
value: this.code,
|
|
26
26
|
};
|
|
27
|
-
const raw = await this.
|
|
27
|
+
const raw = await this.client.call.contractsApi.instantiate(caller, value, gasLimit, storageDepositLimit, code, bytes, salt);
|
|
28
28
|
if (raw.result.isErr) {
|
|
29
29
|
throw new ContractInstantiateDispatchError(raw.result.err, raw);
|
|
30
30
|
}
|
|
@@ -8,6 +8,6 @@ import { Executor } from './Executor.js';
|
|
|
8
8
|
export declare class ConstructorTxExecutor<ChainApi extends GenericSubstrateApi> extends Executor<ChainApi> {
|
|
9
9
|
#private;
|
|
10
10
|
protected readonly code: Hash | Uint8Array | HexString | string;
|
|
11
|
-
constructor(
|
|
11
|
+
constructor(client: ISubstrateClient<ChainApi>, registry: TypinkRegistry, code: Hash | Uint8Array | string);
|
|
12
12
|
doExecute(constructor: string): GenericConstructorTxCall<ChainApi>;
|
|
13
13
|
}
|
|
@@ -3,8 +3,8 @@ import { normalizeLabel } from '../utils.js';
|
|
|
3
3
|
import { Executor } from './Executor.js';
|
|
4
4
|
export class ConstructorTxExecutor extends Executor {
|
|
5
5
|
code;
|
|
6
|
-
constructor(
|
|
7
|
-
super(
|
|
6
|
+
constructor(client, registry, code) {
|
|
7
|
+
super(client, registry);
|
|
8
8
|
this.code = code;
|
|
9
9
|
}
|
|
10
10
|
doExecute(constructor) {
|
|
@@ -20,10 +20,11 @@ export class ConstructorTxExecutor extends Executor {
|
|
|
20
20
|
const formattedInputs = args.map((arg, index) => this.tryEncode(arg, params[index]));
|
|
21
21
|
const bytes = u8aToHex(concatU8a(hexToU8a(meta.selector), ...formattedInputs));
|
|
22
22
|
if (isWasm(this.code)) {
|
|
23
|
-
return this.
|
|
23
|
+
return this.client.tx.contracts.instantiateWithCode(value, gasLimit, storageDepositLimit, this.code, bytes, salt);
|
|
24
24
|
}
|
|
25
25
|
else {
|
|
26
|
-
return this.
|
|
26
|
+
return this.client.tx.contracts.instantiate(value, // prettier-end-here
|
|
27
|
+
gasLimit, storageDepositLimit, this.code, bytes, salt);
|
|
27
28
|
}
|
|
28
29
|
};
|
|
29
30
|
callFn.meta = meta;
|
|
@@ -8,7 +8,7 @@ export class EventExecutor extends Executor {
|
|
|
8
8
|
const is = (event) => {
|
|
9
9
|
if (isEventRecord(event)) {
|
|
10
10
|
try {
|
|
11
|
-
event = this.registry.decodeEvent(event);
|
|
11
|
+
event = this.registry.decodeEvent(event, this.address);
|
|
12
12
|
}
|
|
13
13
|
catch {
|
|
14
14
|
return false;
|
|
@@ -20,7 +20,7 @@ export class EventExecutor extends Executor {
|
|
|
20
20
|
if (!events || events.length === 0)
|
|
21
21
|
return undefined;
|
|
22
22
|
if (isEventRecord(events[0])) {
|
|
23
|
-
return this.registry.decodeEvents(events).find(is);
|
|
23
|
+
return this.registry.decodeEvents(events, this.address).find(is);
|
|
24
24
|
}
|
|
25
25
|
else {
|
|
26
26
|
return events.find(is);
|
|
@@ -28,7 +28,7 @@ export class EventExecutor extends Executor {
|
|
|
28
28
|
};
|
|
29
29
|
const filter = (events) => {
|
|
30
30
|
if (isEventRecord(events[0])) {
|
|
31
|
-
return this.registry.decodeEvents(events).filter(is);
|
|
31
|
+
return this.registry.decodeEvents(events, this.address).filter(is);
|
|
32
32
|
}
|
|
33
33
|
else {
|
|
34
34
|
return events.filter(is);
|
package/executor/Executor.d.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { ISubstrateClient } from '@dedot/api';
|
|
2
2
|
import { SubstrateApi } from '@dedot/api/chaintypes';
|
|
3
|
-
import { AccountId32 } from '@dedot/codecs';
|
|
3
|
+
import { AccountId32, AccountId32Like } from '@dedot/codecs';
|
|
4
4
|
import { GenericSubstrateApi, RpcVersion } from '@dedot/types';
|
|
5
5
|
import { TypinkRegistry } from '../TypinkRegistry.js';
|
|
6
6
|
import { ContractMessageArg, ContractMessage } from '../types/index.js';
|
|
7
7
|
import { ContractMetadata } from '../types/index.js';
|
|
8
8
|
export declare abstract class Executor<ChainApi extends GenericSubstrateApi = SubstrateApi[RpcVersion]> {
|
|
9
9
|
#private;
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
readonly client: ISubstrateClient<ChainApi>;
|
|
11
|
+
readonly registry: TypinkRegistry;
|
|
12
|
+
constructor(client: ISubstrateClient<ChainApi>, registry: TypinkRegistry, address?: AccountId32Like);
|
|
12
13
|
get metadata(): ContractMetadata;
|
|
13
14
|
get address(): AccountId32 | undefined;
|
|
14
|
-
get registry(): TypinkRegistry;
|
|
15
15
|
abstract doExecute(...paths: string[]): unknown;
|
|
16
16
|
tryEncode(param: ContractMessageArg, value: any): Uint8Array;
|
|
17
17
|
tryDecode(meta: ContractMessage, raw: any): unknown;
|
package/executor/Executor.js
CHANGED
|
@@ -1,27 +1,21 @@
|
|
|
1
1
|
import { AccountId32 } from '@dedot/codecs';
|
|
2
2
|
export class Executor {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
client;
|
|
4
|
+
registry;
|
|
5
5
|
#address;
|
|
6
|
-
constructor(
|
|
7
|
-
this
|
|
8
|
-
this
|
|
6
|
+
constructor(client, registry, address) {
|
|
7
|
+
this.client = client;
|
|
8
|
+
this.registry = registry;
|
|
9
9
|
if (address) {
|
|
10
10
|
this.#address = new AccountId32(address);
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
get api() {
|
|
14
|
-
return this.#api;
|
|
15
|
-
}
|
|
16
13
|
get metadata() {
|
|
17
|
-
return this
|
|
14
|
+
return this.registry.metadata;
|
|
18
15
|
}
|
|
19
16
|
get address() {
|
|
20
17
|
return this.#address;
|
|
21
18
|
}
|
|
22
|
-
get registry() {
|
|
23
|
-
return this.#registry;
|
|
24
|
-
}
|
|
25
19
|
tryEncode(param, value) {
|
|
26
20
|
const { type } = param.type;
|
|
27
21
|
const $codec = this.registry.findCodec(type);
|
|
@@ -14,7 +14,7 @@ export class QueryExecutor extends Executor {
|
|
|
14
14
|
assert(caller, 'Expected a valid caller address in ContractCallOptions');
|
|
15
15
|
const formattedInputs = args.map((arg, index) => this.tryEncode(arg, params[index]));
|
|
16
16
|
const bytes = u8aToHex(concatU8a(hexToU8a(meta.selector), ...formattedInputs));
|
|
17
|
-
const raw = await this.
|
|
17
|
+
const raw = await this.client.call.contractsApi.call(caller, this.address, value, gasLimit, storageDepositLimit, bytes);
|
|
18
18
|
if (raw.result.isErr) {
|
|
19
19
|
throw new ContractDispatchError(raw.result.err, raw);
|
|
20
20
|
}
|
package/executor/TxExecutor.js
CHANGED
|
@@ -13,7 +13,7 @@ export class TxExecutor extends Executor {
|
|
|
13
13
|
assert(gasLimit, 'Expected a gas limit in ContractTxOptions');
|
|
14
14
|
const formattedInputs = args.map((arg, index) => this.tryEncode(arg, params[index]));
|
|
15
15
|
const bytes = u8aToHex(concatU8a(hexToU8a(meta.selector), ...formattedInputs));
|
|
16
|
-
return this.
|
|
16
|
+
return this.client.tx.contracts.call(this.address, value, gasLimit, storageDepositLimit, bytes);
|
|
17
17
|
};
|
|
18
18
|
callFn.meta = meta;
|
|
19
19
|
return callFn;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dedot/contracts",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Delightful ink! Contract APIs",
|
|
5
5
|
"author": "Tung Vu <tung@coongcrafts.io>",
|
|
6
6
|
"homepage": "https://github.com/dedotdev/dedot/tree/main/packages/contracts",
|
|
@@ -18,17 +18,17 @@
|
|
|
18
18
|
"test": "vitest --watch=false"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@dedot/api": "0.
|
|
22
|
-
"@dedot/codecs": "0.
|
|
23
|
-
"@dedot/types": "0.
|
|
24
|
-
"@dedot/utils": "0.
|
|
21
|
+
"@dedot/api": "0.5.0",
|
|
22
|
+
"@dedot/codecs": "0.5.0",
|
|
23
|
+
"@dedot/types": "0.5.0",
|
|
24
|
+
"@dedot/utils": "0.5.0"
|
|
25
25
|
},
|
|
26
26
|
"publishConfig": {
|
|
27
27
|
"access": "public",
|
|
28
28
|
"directory": "dist"
|
|
29
29
|
},
|
|
30
30
|
"license": "Apache-2.0",
|
|
31
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "968148ade63e07644094fc033be719b320e18a18",
|
|
32
32
|
"module": "./index.js",
|
|
33
33
|
"types": "./index.d.ts",
|
|
34
34
|
"exports": {
|
package/utils.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { ISubstrateClient } from '@dedot/api';
|
|
2
|
+
import { SubstrateApi } from '@dedot/api/chaintypes';
|
|
2
3
|
import { PortableType, TypeDef } from '@dedot/codecs';
|
|
3
|
-
import { GenericSubstrateApi } from '@dedot/types';
|
|
4
|
+
import { GenericSubstrateApi, RpcVersion } from '@dedot/types';
|
|
4
5
|
import { Executor } from './executor/index.js';
|
|
5
6
|
import { ContractMetadata, ContractTypeDef, ReturnFlags } from './types/index.js';
|
|
6
7
|
export declare const extractContractTypes: (contractMetadata: ContractMetadata) => PortableType[];
|
|
7
8
|
export declare const normalizeContractTypeDef: (def: ContractTypeDef) => TypeDef;
|
|
8
9
|
export declare const parseRawMetadata: (rawMetadata: string) => ContractMetadata;
|
|
9
10
|
export declare function newProxyChain<ChainApi extends GenericSubstrateApi>(carrier: Executor<ChainApi>): unknown;
|
|
10
|
-
export declare function ensureSupportContractsPallet
|
|
11
|
+
export declare function ensureSupportContractsPallet(client: ISubstrateClient<SubstrateApi[RpcVersion]>): void;
|
|
11
12
|
export declare function normalizeLabel(label?: string): string;
|
|
12
13
|
export declare function toReturnFlags(bits: number): ReturnFlags;
|
package/utils.js
CHANGED
|
@@ -84,9 +84,9 @@ export function newProxyChain(carrier) {
|
|
|
84
84
|
},
|
|
85
85
|
});
|
|
86
86
|
}
|
|
87
|
-
export function ensureSupportContractsPallet(
|
|
87
|
+
export function ensureSupportContractsPallet(client) {
|
|
88
88
|
try {
|
|
89
|
-
!!
|
|
89
|
+
!!client.call.contractsApi.call.meta && !!client.tx.contracts.call.meta;
|
|
90
90
|
}
|
|
91
91
|
catch {
|
|
92
92
|
throw new Error('Contracts pallet is not available');
|