@sentio/sdk 2.13.0-rc.1 → 2.13.0-rc.10
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/lib/aptos/aptos-chain-adapter.d.ts +14 -0
- package/lib/aptos/aptos-chain-adapter.js +69 -0
- package/lib/aptos/aptos-chain-adapter.js.map +1 -0
- package/lib/aptos/aptos-plugin.js +2 -0
- package/lib/aptos/aptos-plugin.js.map +1 -1
- package/lib/aptos/aptos-processor.d.ts +7 -7
- package/lib/aptos/aptos-processor.js +15 -22
- package/lib/aptos/aptos-processor.js.map +1 -1
- package/lib/aptos/builtin/0x1.d.ts +1138 -493
- package/lib/aptos/builtin/0x1.js +1939 -1458
- package/lib/aptos/builtin/0x1.js.map +1 -1
- package/lib/aptos/builtin/0x3.d.ts +227 -104
- package/lib/aptos/builtin/0x3.js +373 -333
- package/lib/aptos/builtin/0x3.js.map +1 -1
- package/lib/aptos/codegen/codegen.d.ts +1 -1
- package/lib/aptos/codegen/codegen.js +6 -47
- package/lib/aptos/codegen/codegen.js.map +1 -1
- package/lib/aptos/codegen/run.js +1 -1
- package/lib/aptos/codegen/run.js.map +1 -1
- package/lib/aptos/context.d.ts +3 -0
- package/lib/aptos/context.js +5 -0
- package/lib/aptos/context.js.map +1 -1
- package/lib/aptos/ext/aptos-dex.d.ts +2 -1
- package/lib/aptos/ext/aptos-dex.js +1 -2
- package/lib/aptos/ext/aptos-dex.js.map +1 -1
- package/lib/aptos/index.d.ts +1 -0
- package/lib/aptos/index.js +1 -0
- package/lib/aptos/index.js.map +1 -1
- package/lib/aptos/models.d.ts +3 -11
- package/lib/aptos/models.js.map +1 -1
- package/lib/aptos/module-client.js +1 -1
- package/lib/aptos/module-client.js.map +1 -1
- package/lib/aptos/move-coder.d.ts +10 -10
- package/lib/aptos/move-coder.js +37 -18
- package/lib/aptos/move-coder.js.map +1 -1
- package/lib/eth/base-processor-template.d.ts +4 -3
- package/lib/eth/base-processor-template.js +7 -7
- package/lib/eth/base-processor-template.js.map +1 -1
- package/lib/eth/base-processor.d.ts +9 -8
- package/lib/eth/base-processor.js +13 -11
- package/lib/eth/base-processor.js.map +1 -1
- package/lib/eth/eth-plugin.js +2 -0
- package/lib/eth/eth-plugin.js.map +1 -1
- package/lib/eth/eth.d.ts +7 -2
- package/lib/eth/eth.js +8 -1
- package/lib/eth/eth.js.map +1 -1
- package/lib/move/abstract-codegen.d.ts +11 -11
- package/lib/move/abstract-codegen.js +59 -22
- package/lib/move/abstract-codegen.js.map +1 -1
- package/lib/move/abstract-move-coder.d.ts +19 -25
- package/lib/move/abstract-move-coder.js +74 -51
- package/lib/move/abstract-move-coder.js.map +1 -1
- package/lib/move/chain-adapter.d.ts +11 -0
- package/lib/move/chain-adapter.js +3 -0
- package/lib/move/chain-adapter.js.map +1 -0
- package/lib/move/index.d.ts +1 -0
- package/lib/move/index.js +1 -0
- package/lib/move/index.js.map +1 -1
- package/lib/move/types.d.ts +28 -1
- package/lib/move/types.js +65 -16
- package/lib/move/types.js.map +1 -1
- package/lib/sui/builtin/0x1.d.ts +37 -18
- package/lib/sui/builtin/0x1.js +58 -32
- package/lib/sui/builtin/0x1.js.map +1 -1
- package/lib/sui/builtin/0x2.d.ts +275 -125
- package/lib/sui/builtin/0x2.js +463 -322
- package/lib/sui/builtin/0x2.js.map +1 -1
- package/lib/sui/builtin/0x3.d.ts +135 -60
- package/lib/sui/builtin/0x3.js +229 -272
- package/lib/sui/builtin/0x3.js.map +1 -1
- package/lib/sui/codegen/codegen.d.ts +1 -1
- package/lib/sui/codegen/codegen.js +10 -36
- package/lib/sui/codegen/codegen.js.map +1 -1
- package/lib/sui/codegen/run.js +1 -1
- package/lib/sui/codegen/run.js.map +1 -1
- package/lib/sui/context.d.ts +5 -1
- package/lib/sui/context.js +8 -1
- package/lib/sui/context.js.map +1 -1
- package/lib/sui/index.d.ts +1 -0
- package/lib/sui/index.js +1 -0
- package/lib/sui/index.js.map +1 -1
- package/lib/sui/models.d.ts +3 -11
- package/lib/sui/models.js.map +1 -1
- package/lib/sui/move-coder.d.ts +15 -15
- package/lib/sui/move-coder.js +43 -39
- package/lib/sui/move-coder.js.map +1 -1
- package/lib/sui/sui-chain-adapter.d.ts +14 -0
- package/lib/sui/sui-chain-adapter.js +69 -0
- package/lib/sui/sui-chain-adapter.js.map +1 -0
- package/lib/sui/sui-plugin.js +1 -0
- package/lib/sui/sui-plugin.js.map +1 -1
- package/lib/sui/sui-processor.d.ts +6 -3
- package/lib/sui/sui-processor.js +23 -14
- package/lib/sui/sui-processor.js.map +1 -1
- package/lib/sui/utils.d.ts +0 -2
- package/lib/sui/utils.js +0 -6
- package/lib/sui/utils.js.map +1 -1
- package/lib/testing/sui-facet.d.ts +2 -2
- package/lib/testing/sui-facet.js +16 -26
- package/lib/testing/sui-facet.js.map +1 -1
- package/package.json +4 -4
- package/src/aptos/aptos-chain-adapter.ts +81 -0
- package/src/aptos/aptos-plugin.ts +2 -0
- package/src/aptos/aptos-processor.ts +35 -31
- package/src/aptos/builtin/0x1.ts +2742 -500
- package/src/aptos/builtin/0x3.ts +529 -106
- package/src/aptos/codegen/codegen.ts +13 -57
- package/src/aptos/codegen/run.ts +1 -1
- package/src/aptos/context.ts +5 -0
- package/src/aptos/ext/aptos-dex.ts +4 -12
- package/src/aptos/index.ts +2 -0
- package/src/aptos/models.ts +3 -13
- package/src/aptos/module-client.ts +1 -1
- package/src/aptos/move-coder.ts +48 -25
- package/src/eth/base-processor-template.ts +20 -10
- package/src/eth/base-processor.ts +45 -25
- package/src/eth/eth-plugin.ts +2 -0
- package/src/eth/eth.ts +15 -2
- package/src/move/abstract-codegen.ts +74 -37
- package/src/move/abstract-move-coder.ts +87 -75
- package/src/move/chain-adapter.ts +17 -0
- package/src/move/index.ts +1 -0
- package/src/move/types.ts +83 -17
- package/src/sui/builtin/0x1.ts +75 -20
- package/src/sui/builtin/0x2.ts +670 -126
- package/src/sui/builtin/0x3.ts +326 -61
- package/src/sui/codegen/codegen.ts +17 -43
- package/src/sui/codegen/run.ts +1 -1
- package/src/sui/context.ts +9 -1
- package/src/sui/index.ts +1 -0
- package/src/sui/models.ts +3 -13
- package/src/sui/move-coder.ts +58 -53
- package/src/sui/sui-chain-adapter.ts +86 -0
- package/src/sui/sui-plugin.ts +1 -0
- package/src/sui/sui-processor.ts +39 -26
- package/src/sui/utils.ts +0 -8
- package/src/testing/sui-facet.ts +15 -30
- package/lib/aptos/utils.d.ts +0 -2
- package/lib/aptos/utils.js +0 -10
- package/lib/aptos/utils.js.map +0 -1
- package/src/aptos/utils.ts +0 -11
@@ -1 +1 @@
|
|
1
|
-
export declare function codegen(abisDir: string, outDir?: string, genExample?: boolean): Promise<void>;
|
1
|
+
export declare function codegen(abisDir: string, outDir?: string, genExample?: boolean, builtin?: boolean): Promise<void>;
|
@@ -1,58 +1,29 @@
|
|
1
|
-
import { Connection, JsonRpcProvider } from '@mysten/sui.js';
|
2
1
|
import { SuiNetwork } from '../network.js';
|
3
2
|
import * as fs from 'fs';
|
4
3
|
import chalk from 'chalk';
|
5
4
|
import { AbstractCodegen } from '../../move/abstract-codegen.js';
|
6
|
-
import {
|
7
|
-
import { moduleQname, SPLITTER, structQname } from '../../move/index.js';
|
8
|
-
import { getMeaningfulFunctionParams } from '../utils.js';
|
5
|
+
import { structQname } from '../../move/index.js';
|
9
6
|
import { join } from 'path';
|
10
|
-
|
7
|
+
import { SuiChainAdapter } from '../sui-chain-adapter.js';
|
8
|
+
export async function codegen(abisDir, outDir = join('src', 'types', 'sui'), genExample = false, builtin = false) {
|
11
9
|
if (!fs.existsSync(abisDir)) {
|
12
10
|
return;
|
13
11
|
}
|
14
12
|
const gen = new SuiCodegen();
|
15
|
-
const numFiles = await gen.generate(abisDir, outDir);
|
13
|
+
const numFiles = await gen.generate(abisDir, outDir, builtin);
|
16
14
|
console.log(chalk.green(`Generated ${numFiles} for Sui`));
|
17
15
|
}
|
18
|
-
function getRpcEndpoint(network) {
|
19
|
-
switch (network) {
|
20
|
-
case SuiNetwork.TEST_NET:
|
21
|
-
return 'https://fullnode.testnet.sui.io/';
|
22
|
-
}
|
23
|
-
return 'https://fullnode.mainnet.sui.io/';
|
24
|
-
}
|
25
|
-
function getRpcClient(network) {
|
26
|
-
return new JsonRpcProvider(new Connection({ fullnode: getRpcEndpoint(network) }));
|
27
|
-
}
|
28
16
|
class SuiCodegen extends AbstractCodegen {
|
29
17
|
ADDRESS_TYPE = 'SuiAddress';
|
18
|
+
// ADDRESS_TYPE = 'string'
|
30
19
|
MAIN_NET = SuiNetwork.MAIN_NET;
|
31
20
|
TEST_NET = SuiNetwork.TEST_NET;
|
32
21
|
PREFIX = 'Sui';
|
33
22
|
// STRUCT_FIELD_NAME = 'fields'
|
34
23
|
// GENERATE_ON_ENTRY = true
|
35
24
|
PAYLOAD_OPTIONAL = true;
|
36
|
-
|
37
|
-
|
38
|
-
return await client.getNormalizedMoveModulesByPackage({ package: account });
|
39
|
-
}
|
40
|
-
getMeaningfulFunctionParams(params) {
|
41
|
-
return getMeaningfulFunctionParams(params);
|
42
|
-
}
|
43
|
-
toInternalModules(modules) {
|
44
|
-
return Object.values(modules).map(toInternalModule);
|
45
|
-
}
|
46
|
-
getEventStructs(module) {
|
47
|
-
const qname = moduleQname(module);
|
48
|
-
const eventMap = new Map();
|
49
|
-
for (const struct of module.structs) {
|
50
|
-
const abilities = new Set(struct.abilities);
|
51
|
-
if (abilities.has('Drop') && abilities.has('Copy')) {
|
52
|
-
eventMap.set(qname + SPLITTER + struct.name, struct);
|
53
|
-
}
|
54
|
-
}
|
55
|
-
return eventMap;
|
25
|
+
constructor() {
|
26
|
+
super(new SuiChainAdapter());
|
56
27
|
}
|
57
28
|
readModulesFile(fullPath) {
|
58
29
|
const res = super.readModulesFile(fullPath);
|
@@ -67,6 +38,8 @@ class SuiCodegen extends AbstractCodegen {
|
|
67
38
|
return `export type ${struct.name} = string`;
|
68
39
|
case '0x2::coin::Coin':
|
69
40
|
return `export type ${struct.name}<T> = string`;
|
41
|
+
case '0x2::balance::Balance':
|
42
|
+
return `export type ${struct.name}<T> = string`;
|
70
43
|
case '0x1::option::Option':
|
71
44
|
return `export type Option<T> = T | undefined`;
|
72
45
|
}
|
@@ -77,6 +50,7 @@ class SuiCodegen extends AbstractCodegen {
|
|
77
50
|
case '0x2::object::ID':
|
78
51
|
case '0x2::coin::Coin':
|
79
52
|
case '0x1::option::Option':
|
53
|
+
case '0x2::balance::Balance':
|
80
54
|
return '';
|
81
55
|
}
|
82
56
|
return super.generateOnEvents(module, struct);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../../src/sui/codegen/codegen.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../../src/sui/codegen/codegen.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,OAAe,EACf,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EACpC,UAAU,GAAG,KAAK,EAClB,OAAO,GAAG,KAAK;IAEf,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAM;KACP;IACD,MAAM,GAAG,GAAG,IAAI,UAAU,EAAE,CAAA;IAC5B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,QAAQ,UAAU,CAAC,CAAC,CAAA;AAC3D,CAAC;AAED,MAAM,UAAW,SAAQ,eAA8E;IACrG,YAAY,GAAG,YAAY,CAAA;IAC3B,0BAA0B;IAC1B,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;IAC9B,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;IAC9B,MAAM,GAAG,KAAK,CAAA;IACd,+BAA+B;IAC/B,2BAA2B;IAC3B,gBAAgB,GAAG,IAAI,CAAA;IAEvB;QACE,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC,CAAA;IAC9B,CAAC;IAED,eAAe,CAAC,QAAgB;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAI,GAAG,CAAC,MAAM,EAAE;YACd,OAAO,GAAG,CAAC,MAAM,CAAA;SAClB;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,eAAe,CAAC,MAA0B,EAAE,MAA0B,EAAE,MAAmB;QACzF,QAAQ,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YACnC,KAAK,iBAAiB;gBACpB,OAAO,eAAe,MAAM,CAAC,IAAI,WAAW,CAAA;YAC9C,KAAK,iBAAiB;gBACpB,OAAO,eAAe,MAAM,CAAC,IAAI,cAAc,CAAA;YACjD,KAAK,uBAAuB;gBAC1B,OAAO,eAAe,MAAM,CAAC,IAAI,cAAc,CAAA;YACjD,KAAK,qBAAqB;gBACxB,OAAO,uCAAuC,CAAA;SACjD;QACD,OAAO,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACtD,CAAC;IAED,gBAAgB,CAAC,MAA0B,EAAE,MAA0B;QACrE,QAAQ,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YACnC,KAAK,iBAAiB,CAAC;YACvB,KAAK,iBAAiB,CAAC;YACvB,KAAK,qBAAqB,CAAC;YAC3B,KAAK,uBAAuB;gBAC1B,OAAO,EAAE,CAAA;SACZ;QACD,OAAO,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/C,CAAC;CACF","sourcesContent":["import { SuiMoveNormalizedModule, SuiEvent, SuiMoveObject } from '@mysten/sui.js'\n\nimport { SuiNetwork } from '../network.js'\nimport * as fs from 'fs'\nimport chalk from 'chalk'\nimport { InternalMoveModule, InternalMoveStruct } from '../../move/internal-models.js'\nimport { AbstractCodegen } from '../../move/abstract-codegen.js'\nimport { structQname } from '../../move/index.js'\nimport { join } from 'path'\nimport { SuiChainAdapter } from '../sui-chain-adapter.js'\n\nexport async function codegen(\n abisDir: string,\n outDir = join('src', 'types', 'sui'),\n genExample = false,\n builtin = false\n) {\n if (!fs.existsSync(abisDir)) {\n return\n }\n const gen = new SuiCodegen()\n const numFiles = await gen.generate(abisDir, outDir, builtin)\n console.log(chalk.green(`Generated ${numFiles} for Sui`))\n}\n\nclass SuiCodegen extends AbstractCodegen<SuiNetwork, SuiMoveNormalizedModule, SuiEvent | SuiMoveObject> {\n ADDRESS_TYPE = 'SuiAddress'\n // ADDRESS_TYPE = 'string'\n MAIN_NET = SuiNetwork.MAIN_NET\n TEST_NET = SuiNetwork.TEST_NET\n PREFIX = 'Sui'\n // STRUCT_FIELD_NAME = 'fields'\n // GENERATE_ON_ENTRY = true\n PAYLOAD_OPTIONAL = true\n\n constructor() {\n super(new SuiChainAdapter())\n }\n\n readModulesFile(fullPath: string) {\n const res = super.readModulesFile(fullPath)\n if (res.result) {\n return res.result\n }\n return res\n }\n\n generateStructs(module: InternalMoveModule, struct: InternalMoveStruct, events: Set<string>): string {\n switch (structQname(module, struct)) {\n case '0x2::object::ID':\n return `export type ${struct.name} = string`\n case '0x2::coin::Coin':\n return `export type ${struct.name}<T> = string`\n case '0x2::balance::Balance':\n return `export type ${struct.name}<T> = string`\n case '0x1::option::Option':\n return `export type Option<T> = T | undefined`\n }\n return super.generateStructs(module, struct, events)\n }\n\n generateOnEvents(module: InternalMoveModule, struct: InternalMoveStruct): string {\n switch (structQname(module, struct)) {\n case '0x2::object::ID':\n case '0x2::coin::Coin':\n case '0x1::option::Option':\n case '0x2::balance::Balance':\n return ''\n }\n return super.generateOnEvents(module, struct)\n }\n}\n"]}
|
package/lib/sui/codegen/run.js
CHANGED
@@ -3,7 +3,7 @@ import { codegen } from './codegen.js';
|
|
3
3
|
if (process.argv.length > 3) {
|
4
4
|
const abisDir = process.argv[2];
|
5
5
|
const targetDir = process.argv[3];
|
6
|
-
await codegen(abisDir, targetDir);
|
6
|
+
await codegen(abisDir, targetDir, false, true);
|
7
7
|
}
|
8
8
|
else {
|
9
9
|
console.error('Not enough argument');
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/sui/codegen/run.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEjC,MAAM,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/sui/codegen/run.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEjC,MAAM,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;CAC/C;KAAM;IACL,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;CAChB","sourcesContent":["// #!/usr/bin/env node\n\nimport { codegen } from './codegen.js'\n\nif (process.argv.length > 3) {\n const abisDir = process.argv[2]\n const targetDir = process.argv[3]\n\n await codegen(abisDir, targetDir, false, true)\n} else {\n console.error('Not enough argument')\n process.exit(1)\n}\n"]}
|
package/lib/sui/context.d.ts
CHANGED
@@ -2,6 +2,7 @@ import { RecordMetaData } from '@sentio/protos';
|
|
2
2
|
import { type Labels, BaseContext } from '../index.js';
|
3
3
|
import { SuiNetwork } from './network.js';
|
4
4
|
import { SuiTransactionBlockResponse } from '@mysten/sui.js';
|
5
|
+
import { MoveCoder } from './move-coder.js';
|
5
6
|
export declare class SuiContext extends BaseContext {
|
6
7
|
address: string;
|
7
8
|
network: SuiNetwork;
|
@@ -9,7 +10,9 @@ export declare class SuiContext extends BaseContext {
|
|
9
10
|
timestamp: Date;
|
10
11
|
slot: bigint;
|
11
12
|
transaction: SuiTransactionBlockResponse;
|
12
|
-
|
13
|
+
eventIndex: number;
|
14
|
+
coder: MoveCoder;
|
15
|
+
constructor(moduleName: string, network: SuiNetwork, address: string, timestamp: Date, slot: bigint, transaction: SuiTransactionBlockResponse, eventIndex: number);
|
13
16
|
getChainId(): string;
|
14
17
|
getMetaData(name: string, labels: Labels): RecordMetaData;
|
15
18
|
}
|
@@ -18,6 +21,7 @@ export declare class SuiObjectsContext extends BaseContext {
|
|
18
21
|
network: SuiNetwork;
|
19
22
|
slot: bigint;
|
20
23
|
timestamp: Date;
|
24
|
+
coder: MoveCoder;
|
21
25
|
constructor(network: SuiNetwork, address: string, slot: bigint, timestamp: Date);
|
22
26
|
getChainId(): string;
|
23
27
|
getMetaData(name: string, labels: Labels): RecordMetaData;
|
package/lib/sui/context.js
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import { BaseContext, normalizeLabels } from '../index.js';
|
2
2
|
import { getChainId } from './network.js';
|
3
|
+
import { defaultMoveCoder } from './move-coder.js';
|
3
4
|
export class SuiContext extends BaseContext {
|
4
5
|
address;
|
5
6
|
network;
|
@@ -7,13 +8,17 @@ export class SuiContext extends BaseContext {
|
|
7
8
|
timestamp;
|
8
9
|
slot;
|
9
10
|
transaction;
|
10
|
-
|
11
|
+
eventIndex;
|
12
|
+
coder;
|
13
|
+
constructor(moduleName, network, address, timestamp, slot, transaction, eventIndex) {
|
11
14
|
super();
|
12
15
|
this.address = address.toLowerCase();
|
13
16
|
this.network = network;
|
14
17
|
this.moduleName = moduleName;
|
15
18
|
this.timestamp = timestamp;
|
16
19
|
this.slot = slot;
|
20
|
+
this.eventIndex = eventIndex;
|
21
|
+
this.coder = defaultMoveCoder(network);
|
17
22
|
if (transaction) {
|
18
23
|
this.transaction = transaction;
|
19
24
|
}
|
@@ -40,12 +45,14 @@ export class SuiObjectsContext extends BaseContext {
|
|
40
45
|
network;
|
41
46
|
slot;
|
42
47
|
timestamp;
|
48
|
+
coder;
|
43
49
|
constructor(network, address, slot, timestamp) {
|
44
50
|
super();
|
45
51
|
this.address = address;
|
46
52
|
this.network = network;
|
47
53
|
this.slot = slot;
|
48
54
|
this.timestamp = timestamp;
|
55
|
+
this.coder = defaultMoveCoder(network);
|
49
56
|
}
|
50
57
|
getChainId() {
|
51
58
|
return getChainId(this.network);
|
package/lib/sui/context.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/sui/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAc,UAAU,EAAE,MAAM,cAAc,CAAA;
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/sui/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAc,UAAU,EAAE,MAAM,cAAc,CAAA;AAErD,OAAO,EAAa,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAE7D,MAAM,OAAO,UAAW,SAAQ,WAAW;IACzC,OAAO,CAAQ;IACf,OAAO,CAAY;IACnB,UAAU,CAAQ;IAClB,SAAS,CAAM;IACf,IAAI,CAAQ;IACZ,WAAW,CAA6B;IACxC,UAAU,CAAQ;IAClB,KAAK,CAAW;IAEhB,YACE,UAAkB,EAClB,OAAmB,EACnB,OAAe,EACf,SAAe,EACf,IAAY,EACZ,WAAwC,EACxC,UAAkB;QAElB,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;SAC/B;IACH,CAAC;IAED,UAAU;QACR,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC;IAED,WAAW,CAAC,IAAY,EAAE,MAAc;QACtC,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,YAAY,EAAE,IAAI,CAAC,UAAU;YAC7B,WAAW,EAAE,IAAI,CAAC,IAAI;YACtB,gBAAgB,EAAE,CAAC;YACnB,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,EAAE;YAC/C,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;YAC1B,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;SAChC,CAAA;IACH,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IAChD,OAAO,CAAQ;IACf,OAAO,CAAY;IACnB,IAAI,CAAQ;IACZ,SAAS,CAAM;IACf,KAAK,CAAW;IAEhB,YAAY,OAAmB,EAAE,OAAe,EAAE,IAAY,EAAE,SAAe;QAC7E,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACxC,CAAC;IAED,UAAU;QACR,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC;IAED,WAAW,CAAC,IAAY,EAAE,MAAc;QACtC,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,YAAY,EAAE,SAAS;YACvB,WAAW,EAAE,IAAI,CAAC,IAAI;YACtB,gBAAgB,EAAE,CAAC;YACnB,eAAe,EAAE,EAAE;YACnB,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;YAC1B,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;SAChC,CAAA;IACH,CAAC;CACF","sourcesContent":["import { RecordMetaData } from '@sentio/protos'\nimport { type Labels, BaseContext, normalizeLabels } from '../index.js'\nimport { SuiNetwork, getChainId } from './network.js'\nimport { SuiTransactionBlockResponse } from '@mysten/sui.js'\nimport { MoveCoder, defaultMoveCoder } from './move-coder.js'\n\nexport class SuiContext extends BaseContext {\n address: string\n network: SuiNetwork\n moduleName: string\n timestamp: Date\n slot: bigint\n transaction: SuiTransactionBlockResponse\n eventIndex: number\n coder: MoveCoder\n\n constructor(\n moduleName: string,\n network: SuiNetwork,\n address: string,\n timestamp: Date,\n slot: bigint,\n transaction: SuiTransactionBlockResponse,\n eventIndex: number\n ) {\n super()\n this.address = address.toLowerCase()\n this.network = network\n this.moduleName = moduleName\n this.timestamp = timestamp\n this.slot = slot\n this.eventIndex = eventIndex\n this.coder = defaultMoveCoder(network)\n if (transaction) {\n this.transaction = transaction\n }\n }\n\n getChainId(): string {\n return getChainId(this.network)\n }\n\n getMetaData(name: string, labels: Labels): RecordMetaData {\n return {\n address: this.address,\n contractName: this.moduleName,\n blockNumber: this.slot,\n transactionIndex: 0,\n transactionHash: this.transaction?.digest || '', // TODO\n logIndex: 0,\n chainId: this.getChainId(),\n name: name,\n labels: normalizeLabels(labels),\n }\n }\n}\n\nexport class SuiObjectsContext extends BaseContext {\n address: string\n network: SuiNetwork\n slot: bigint\n timestamp: Date\n coder: MoveCoder\n\n constructor(network: SuiNetwork, address: string, slot: bigint, timestamp: Date) {\n super()\n this.address = address\n this.network = network\n this.slot = slot\n this.timestamp = timestamp\n this.coder = defaultMoveCoder(network)\n }\n\n getChainId(): string {\n return getChainId(this.network)\n }\n\n getMetaData(name: string, labels: Labels): RecordMetaData {\n return {\n address: this.address,\n contractName: 'objects',\n blockNumber: this.slot,\n transactionIndex: 0,\n transactionHash: '',\n logIndex: 0,\n chainId: this.getChainId(),\n name: name,\n labels: normalizeLabels(labels),\n }\n }\n}\n"]}
|
package/lib/sui/index.d.ts
CHANGED
@@ -3,6 +3,7 @@ export * from './network.js';
|
|
3
3
|
export * from './context.js';
|
4
4
|
export * from './models.js';
|
5
5
|
export type { SuiAddress } from './move-types.js';
|
6
|
+
export { BUILTIN_TYPES } from '../move/types.js';
|
6
7
|
export * from './move-coder.js';
|
7
8
|
export { SuiPlugin } from './sui-plugin.js';
|
8
9
|
export { ModuleClient } from './module-client.js';
|
package/lib/sui/index.js
CHANGED
@@ -2,6 +2,7 @@ export { SuiBaseProcessor, SuiAddressObjectsProcessor, SuiDynamicFieldObjectsPro
|
|
2
2
|
export * from './network.js';
|
3
3
|
export * from './context.js';
|
4
4
|
export * from './models.js';
|
5
|
+
export { BUILTIN_TYPES } from '../move/types.js';
|
5
6
|
export * from './move-coder.js';
|
6
7
|
export { SuiPlugin } from './sui-plugin.js';
|
7
8
|
export { ModuleClient } from './module-client.js';
|
package/lib/sui/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,+BAA+B,EAC/B,cAAc,EACd,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAE3B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,+BAA+B,EAC/B,cAAc,EACd,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAE3B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAG3B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,cAAc,iBAAiB,CAAA;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA","sourcesContent":["export {\n SuiBaseProcessor,\n SuiAddressObjectsProcessor,\n SuiDynamicFieldObjectsProcessor,\n SuiBindOptions,\n SuiObjectBindOptions,\n} from './sui-processor.js'\n\nexport * from './network.js'\nexport * from './context.js'\nexport * from './models.js'\n\nexport type { SuiAddress } from './move-types.js'\nexport { BUILTIN_TYPES } from '../move/types.js'\n\nexport * from './move-coder.js'\n\nexport { SuiPlugin } from './sui-plugin.js'\n\nexport { ModuleClient } from './module-client.js'\n"]}
|
package/lib/sui/models.d.ts
CHANGED
@@ -1,18 +1,10 @@
|
|
1
1
|
import type { SuiEvent, MoveCallSuiTransaction, SuiMoveObject } from '@mysten/sui.js';
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
*/
|
6
|
-
data_decoded: T;
|
7
|
-
type_arguments: string[];
|
8
|
-
};
|
2
|
+
import { DecodedStruct } from '../move/types.js';
|
3
|
+
export type TypedEventInstance<T> = DecodedStruct<SuiEvent, T>;
|
4
|
+
export type TypedSuiMoveObject<T> = DecodedStruct<SuiMoveObject, T>;
|
9
5
|
export type TypedFunctionPayload<T extends Array<any>> = MoveCallSuiTransaction & {
|
10
6
|
/**
|
11
7
|
* decoded argument data using ABI, undefined if there is decoding error, usually because the ABI/data mismatch
|
12
8
|
*/
|
13
9
|
arguments_decoded: T;
|
14
10
|
};
|
15
|
-
export type TypedSuiMoveObject<T> = SuiMoveObject & {
|
16
|
-
data_decoded: T;
|
17
|
-
type_arguments: string[];
|
18
|
-
};
|
package/lib/sui/models.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/sui/models.ts"],"names":[],"mappings":"","sourcesContent":["import type { SuiEvent, MoveCallSuiTransaction, SuiMoveObject } from '@mysten/sui.js'\n\nexport type TypedEventInstance<T> = SuiEvent
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/sui/models.ts"],"names":[],"mappings":"","sourcesContent":["import type { SuiEvent, MoveCallSuiTransaction, SuiMoveObject } from '@mysten/sui.js'\nimport { DecodedStruct } from '../move/types.js'\n\nexport type TypedEventInstance<T> = DecodedStruct<SuiEvent, T>\nexport type TypedSuiMoveObject<T> = DecodedStruct<SuiMoveObject, T>\n\nexport type TypedFunctionPayload<T extends Array<any>> = MoveCallSuiTransaction & {\n /**\n * decoded argument data using ABI, undefined if there is decoding error, usually because the ABI/data mismatch\n */\n arguments_decoded: T\n}\n"]}
|
package/lib/sui/move-coder.d.ts
CHANGED
@@ -1,18 +1,18 @@
|
|
1
|
-
import { TypedEventInstance
|
2
|
-
import { AbstractMoveCoder
|
3
|
-
import { MoveCallSuiTransaction, SuiEvent, SuiMoveNormalizedModule,
|
4
|
-
import { TypeDescriptor } from '../move/index.js';
|
1
|
+
import { TypedEventInstance } from './models.js';
|
2
|
+
import { AbstractMoveCoder } from '../move/abstract-move-coder.js';
|
3
|
+
import { MoveCallSuiTransaction, SuiCallArg, SuiEvent, SuiMoveNormalizedModule, SuiMoveObject } from '@mysten/sui.js';
|
4
|
+
import { DecodedStruct, TypeDescriptor } from '../move/index.js';
|
5
|
+
import { SuiNetwork } from './network.js';
|
6
|
+
import { InternalMoveModule } from '../move/internal-models.js';
|
5
7
|
import { dynamic_field } from './builtin/0x2.js';
|
6
|
-
export declare class MoveCoder extends AbstractMoveCoder<SuiEvent | SuiMoveObject> {
|
7
|
-
|
8
|
+
export declare class MoveCoder extends AbstractMoveCoder<SuiNetwork, SuiMoveNormalizedModule, SuiEvent | SuiMoveObject> {
|
9
|
+
constructor(network: SuiNetwork);
|
10
|
+
load(module: SuiMoveNormalizedModule): InternalMoveModule;
|
8
11
|
decode(data: any, type: TypeDescriptor): any;
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
getMeaningfulFunctionParams(params: TypeDescriptor[]): TypeDescriptor[];
|
15
|
-
decodeFunctionPayload(payload: MoveCallSuiTransaction, inputs: SuiCallArg[]): MoveCallSuiTransaction;
|
12
|
+
decodeEvent<T>(event: SuiEvent): Promise<TypedEventInstance<T> | undefined>;
|
13
|
+
filterAndDecodeEvents<T>(type: TypeDescriptor<T> | string, resources: SuiEvent[]): Promise<TypedEventInstance<T>[]>;
|
14
|
+
getDynamicFields<T1, T2>(objects: SuiMoveObject[], keyType?: TypeDescriptor<T1>, valueType?: TypeDescriptor<T2>): Promise<dynamic_field.Field<T1, T2>[]>;
|
15
|
+
filterAndDecodeObjects<T>(type: TypeDescriptor<T>, objects: SuiMoveObject[]): Promise<DecodedStruct<SuiMoveObject, T>[]>;
|
16
|
+
decodeFunctionPayload(payload: MoveCallSuiTransaction, inputs: SuiCallArg[]): Promise<MoveCallSuiTransaction>;
|
16
17
|
}
|
17
|
-
export declare
|
18
|
-
export declare function defaultMoveCoder(): MoveCoder;
|
18
|
+
export declare function defaultMoveCoder(network?: SuiNetwork): MoveCoder;
|
package/lib/sui/move-coder.js
CHANGED
@@ -1,61 +1,61 @@
|
|
1
1
|
import { AbstractMoveCoder } from '../move/abstract-move-coder.js';
|
2
|
-
import { SuiEvent, SuiRawData, } from '@mysten/sui.js';
|
3
2
|
import { toInternalModule } from './move-types.js';
|
4
|
-
import { SPLITTER } from '../move/index.js';
|
5
|
-
import {
|
3
|
+
import { ANY_TYPE, parseMoveType, SPLITTER, TypeDescriptor } from '../move/index.js';
|
4
|
+
import { SuiNetwork } from './network.js';
|
5
|
+
import { SuiChainAdapter } from './sui-chain-adapter.js';
|
6
6
|
export class MoveCoder extends AbstractMoveCoder {
|
7
|
+
constructor(network) {
|
8
|
+
super(network);
|
9
|
+
this.adapter = new SuiChainAdapter();
|
10
|
+
}
|
7
11
|
load(module) {
|
8
|
-
|
9
|
-
|
12
|
+
let m = this.moduleMapping.get(module.address + '::' + module.name);
|
13
|
+
if (m) {
|
14
|
+
return m;
|
10
15
|
}
|
11
|
-
|
16
|
+
m = toInternalModule(module);
|
17
|
+
this.loadInternal(m);
|
18
|
+
return m;
|
12
19
|
}
|
13
20
|
decode(data, type) {
|
14
21
|
switch (type.qname) {
|
15
22
|
case '0x2::object::ID':
|
16
23
|
case '0x2::coin::Coin':
|
24
|
+
case '0x2::balance::Balance':
|
17
25
|
return data;
|
18
26
|
case '0x1::option::Option':
|
19
|
-
|
20
|
-
|
27
|
+
if (data === null) {
|
28
|
+
return data;
|
29
|
+
}
|
30
|
+
return this.decode(data, type.typeArgs[0]);
|
21
31
|
default:
|
22
32
|
return super.decode(data, type);
|
23
33
|
}
|
24
34
|
}
|
25
|
-
toStructWithTag(val) {
|
26
|
-
if (SuiEvent.is(val)) {
|
27
|
-
return {
|
28
|
-
...val,
|
29
|
-
data: val.parsedJson,
|
30
|
-
};
|
31
|
-
}
|
32
|
-
if (SuiRawData.is(val)) {
|
33
|
-
return {
|
34
|
-
...val,
|
35
|
-
data: val.fields,
|
36
|
-
};
|
37
|
-
}
|
38
|
-
return val;
|
39
|
-
}
|
40
35
|
decodeEvent(event) {
|
41
36
|
return this.decodedStruct(event);
|
42
37
|
}
|
43
|
-
filterAndDecodeEvents(
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
return this.
|
38
|
+
filterAndDecodeEvents(type, resources) {
|
39
|
+
if (typeof type === 'string') {
|
40
|
+
type = parseMoveType(type);
|
41
|
+
}
|
42
|
+
return this.filterAndDecodeStruct(type, resources);
|
48
43
|
}
|
49
|
-
|
50
|
-
|
44
|
+
async getDynamicFields(objects, keyType = ANY_TYPE, valueType = ANY_TYPE) {
|
45
|
+
// const type = dynamic_field.Field.TYPE
|
46
|
+
// Not using the code above to avoid cycle initialize failed
|
47
|
+
const type = new TypeDescriptor('0x2::dynamic_field::Field');
|
48
|
+
type.typeArgs = [keyType, valueType];
|
49
|
+
const res = await this.filterAndDecodeObjects(type, objects);
|
50
|
+
return res.map((o) => o.data_decoded);
|
51
51
|
}
|
52
|
-
|
53
|
-
return
|
52
|
+
filterAndDecodeObjects(type, objects) {
|
53
|
+
return this.filterAndDecodeStruct(type, objects);
|
54
54
|
}
|
55
|
-
decodeFunctionPayload(payload, inputs) {
|
55
|
+
async decodeFunctionPayload(payload, inputs) {
|
56
56
|
const functionType = [payload.package, payload.module, payload.function].join(SPLITTER);
|
57
|
-
const func = this.getMoveFunction(functionType);
|
58
|
-
const params = getMeaningfulFunctionParams(func.params);
|
57
|
+
const func = await this.getMoveFunction(functionType);
|
58
|
+
const params = this.adapter.getMeaningfulFunctionParams(func.params);
|
59
59
|
const args = [];
|
60
60
|
for (const value of payload.arguments || []) {
|
61
61
|
const argValue = value;
|
@@ -78,15 +78,19 @@ export class MoveCoder extends AbstractMoveCoder {
|
|
78
78
|
args.push(undefined);
|
79
79
|
}
|
80
80
|
}
|
81
|
-
const argumentsTyped = this.decodeArray(args, params);
|
81
|
+
const argumentsTyped = await this.decodeArray(args, params);
|
82
82
|
return {
|
83
83
|
...payload,
|
84
84
|
arguments_decoded: argumentsTyped,
|
85
85
|
};
|
86
86
|
}
|
87
87
|
}
|
88
|
-
|
89
|
-
|
90
|
-
|
88
|
+
const MOVE_CODER = new MoveCoder(SuiNetwork.MAIN_NET);
|
89
|
+
const TESTNET_MOVE_CODER = new MoveCoder(SuiNetwork.TEST_NET);
|
90
|
+
export function defaultMoveCoder(network = SuiNetwork.MAIN_NET) {
|
91
|
+
if (network == SuiNetwork.MAIN_NET) {
|
92
|
+
return MOVE_CODER;
|
93
|
+
}
|
94
|
+
return TESTNET_MOVE_CODER;
|
91
95
|
}
|
92
96
|
//# sourceMappingURL=move-coder.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"move-coder.js","sourceRoot":"","sources":["../../src/sui/move-coder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,
|
1
|
+
{"version":3,"file":"move-coder.js","sourceRoot":"","sources":["../../src/sui/move-coder.ts"],"names":[],"mappings":"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","sourcesContent":["import { TypedEventInstance, TypedFunctionPayload } from './models.js'\nimport { AbstractMoveCoder } from '../move/abstract-move-coder.js'\nimport { MoveCallSuiTransaction, SuiCallArg, SuiEvent, SuiMoveNormalizedModule, SuiMoveObject } from '@mysten/sui.js'\nimport { toInternalModule } from './move-types.js'\nimport { ANY_TYPE, DecodedStruct, parseMoveType, SPLITTER, TypeDescriptor } from '../move/index.js'\nimport { SuiNetwork } from './network.js'\nimport { SuiChainAdapter } from './sui-chain-adapter.js'\nimport { InternalMoveModule } from '../move/internal-models.js'\nimport { dynamic_field } from './builtin/0x2.js'\n\nexport class MoveCoder extends AbstractMoveCoder<SuiNetwork, SuiMoveNormalizedModule, SuiEvent | SuiMoveObject> {\n constructor(network: SuiNetwork) {\n super(network)\n this.adapter = new SuiChainAdapter()\n }\n\n load(module: SuiMoveNormalizedModule): InternalMoveModule {\n let m = this.moduleMapping.get(module.address + '::' + module.name)\n if (m) {\n return m\n }\n m = toInternalModule(module)\n this.loadInternal(m)\n return m\n }\n\n decode(data: any, type: TypeDescriptor): any {\n switch (type.qname) {\n case '0x2::object::ID':\n case '0x2::coin::Coin':\n case '0x2::balance::Balance':\n return data\n case '0x1::option::Option':\n if (data === null) {\n return data\n }\n return this.decode(data, type.typeArgs[0])\n default:\n return super.decode(data, type)\n }\n }\n\n decodeEvent<T>(event: SuiEvent): Promise<TypedEventInstance<T> | undefined> {\n return this.decodedStruct<T>(event) as any\n }\n filterAndDecodeEvents<T>(type: TypeDescriptor<T> | string, resources: SuiEvent[]): Promise<TypedEventInstance<T>[]> {\n if (typeof type === 'string') {\n type = parseMoveType(type)\n }\n return this.filterAndDecodeStruct(type, resources) as any\n }\n\n async getDynamicFields<T1, T2>(\n objects: SuiMoveObject[],\n keyType: TypeDescriptor<T1> = ANY_TYPE,\n valueType: TypeDescriptor<T2> = ANY_TYPE\n ): Promise<dynamic_field.Field<T1, T2>[]> {\n // const type = dynamic_field.Field.TYPE\n // Not using the code above to avoid cycle initialize failed\n const type = new TypeDescriptor<dynamic_field.Field<T1, T2>>('0x2::dynamic_field::Field')\n type.typeArgs = [keyType, valueType]\n const res = await this.filterAndDecodeObjects(type, objects)\n return res.map((o) => o.data_decoded)\n }\n\n filterAndDecodeObjects<T>(\n type: TypeDescriptor<T>,\n objects: SuiMoveObject[]\n ): Promise<DecodedStruct<SuiMoveObject, T>[]> {\n return this.filterAndDecodeStruct(type, objects) as any\n }\n\n async decodeFunctionPayload(payload: MoveCallSuiTransaction, inputs: SuiCallArg[]): Promise<MoveCallSuiTransaction> {\n const functionType = [payload.package, payload.module, payload.function].join(SPLITTER)\n const func = await this.getMoveFunction(functionType)\n const params = this.adapter.getMeaningfulFunctionParams(func.params)\n const args = []\n for (const value of payload.arguments || []) {\n const argValue = value as any\n if ('Input' in (argValue as any)) {\n const idx = argValue.Input\n const arg = inputs[idx]\n if (arg.type === 'pure') {\n args.push(arg.value)\n } else if (arg.type === 'object') {\n args.push(arg.objectId)\n } else {\n console.error('unexpected function arg value')\n args.push(undefined)\n }\n // args.push(arg) // TODO check why ts not work using arg.push(arg)\n } else {\n args.push(undefined)\n }\n }\n\n const argumentsTyped = await this.decodeArray(args, params)\n return {\n ...payload,\n arguments_decoded: argumentsTyped,\n } as TypedFunctionPayload<any>\n }\n}\n\nconst MOVE_CODER = new MoveCoder(SuiNetwork.MAIN_NET)\nconst TESTNET_MOVE_CODER = new MoveCoder(SuiNetwork.TEST_NET)\n\nexport function defaultMoveCoder(network: SuiNetwork = SuiNetwork.MAIN_NET): MoveCoder {\n if (network == SuiNetwork.MAIN_NET) {\n return MOVE_CODER\n }\n return TESTNET_MOVE_CODER\n}\n"]}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { ChainAdapter, TypeDescriptor } from '../move/index.js';
|
2
|
+
import { SuiNetwork } from './network.js';
|
3
|
+
import { InternalMoveModule, InternalMoveStruct } from '../move/internal-models.js';
|
4
|
+
import { SuiMoveNormalizedModule, SuiEvent, SuiMoveObject } from '@mysten/sui.js';
|
5
|
+
export declare class SuiChainAdapter extends ChainAdapter<SuiNetwork, SuiMoveNormalizedModule, SuiEvent | SuiMoveObject> {
|
6
|
+
static INSTANCE: SuiChainAdapter;
|
7
|
+
fetchModule(account: string, module: string, network: SuiNetwork): Promise<SuiMoveNormalizedModule>;
|
8
|
+
fetchModules(account: string, network: SuiNetwork): Promise<SuiMoveNormalizedModule[]>;
|
9
|
+
getMeaningfulFunctionParams(params: TypeDescriptor[]): TypeDescriptor[];
|
10
|
+
toInternalModules(modules: SuiMoveNormalizedModule[]): InternalMoveModule[];
|
11
|
+
getEventStructs(module: InternalMoveModule): Map<string, InternalMoveStruct>;
|
12
|
+
getType(base: SuiEvent | SuiMoveObject): string;
|
13
|
+
getData(val: SuiEvent | SuiMoveObject): any;
|
14
|
+
}
|
@@ -0,0 +1,69 @@
|
|
1
|
+
import { ChainAdapter, moduleQname, SPLITTER } from '../move/index.js';
|
2
|
+
import { toInternalModule } from './move-types.js';
|
3
|
+
import { SuiNetwork } from './network.js';
|
4
|
+
import { Connection, JsonRpcProvider, SuiEvent, SuiParsedData, } from '@mysten/sui.js';
|
5
|
+
class SuiChainAdapter extends ChainAdapter {
|
6
|
+
static INSTANCE = new SuiChainAdapter();
|
7
|
+
async fetchModule(account, module, network) {
|
8
|
+
const client = getRpcClient(network);
|
9
|
+
return await client.getNormalizedMoveModule({ package: account, module });
|
10
|
+
}
|
11
|
+
async fetchModules(account, network) {
|
12
|
+
const client = getRpcClient(network);
|
13
|
+
const modules = await client.getNormalizedMoveModulesByPackage({ package: account });
|
14
|
+
return Object.values(modules);
|
15
|
+
}
|
16
|
+
getMeaningfulFunctionParams(params) {
|
17
|
+
if (params.length === 0) {
|
18
|
+
return params;
|
19
|
+
}
|
20
|
+
return params.slice(0, params.length - 1);
|
21
|
+
}
|
22
|
+
toInternalModules(modules) {
|
23
|
+
return Object.values(modules).map(toInternalModule);
|
24
|
+
}
|
25
|
+
getEventStructs(module) {
|
26
|
+
const qname = moduleQname(module);
|
27
|
+
const eventMap = new Map();
|
28
|
+
for (const struct of module.structs) {
|
29
|
+
const abilities = new Set(struct.abilities);
|
30
|
+
if (abilities.has('Drop') && abilities.has('Copy')) {
|
31
|
+
eventMap.set(qname + SPLITTER + struct.name, struct);
|
32
|
+
}
|
33
|
+
}
|
34
|
+
return eventMap;
|
35
|
+
}
|
36
|
+
getType(base) {
|
37
|
+
return base.type;
|
38
|
+
}
|
39
|
+
getData(val) {
|
40
|
+
if (SuiEvent.is(val)) {
|
41
|
+
return val.parsedJson;
|
42
|
+
}
|
43
|
+
if (SuiParsedData.is(val)) {
|
44
|
+
return val.fields;
|
45
|
+
}
|
46
|
+
// if (SuiMoveObject.is(val)) {
|
47
|
+
// return val.fields as any
|
48
|
+
// }
|
49
|
+
// This may not be perfect, just think everything has
|
50
|
+
if ('fields' in val) {
|
51
|
+
if ('type' in val && Object.keys(val).length === 2) {
|
52
|
+
return val.fields;
|
53
|
+
}
|
54
|
+
}
|
55
|
+
return val;
|
56
|
+
}
|
57
|
+
}
|
58
|
+
export { SuiChainAdapter };
|
59
|
+
function getRpcEndpoint(network) {
|
60
|
+
switch (network) {
|
61
|
+
case SuiNetwork.TEST_NET:
|
62
|
+
return 'https://fullnode.testnet.sui.io/';
|
63
|
+
}
|
64
|
+
return 'https://fullnode.mainnet.sui.io/';
|
65
|
+
}
|
66
|
+
function getRpcClient(network) {
|
67
|
+
return new JsonRpcProvider(new Connection({ fullnode: getRpcEndpoint(network) }));
|
68
|
+
}
|
69
|
+
//# sourceMappingURL=sui-chain-adapter.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sui-chain-adapter.js","sourceRoot":"","sources":["../../src/sui/sui-chain-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChainAdapter, moduleQname, SPLITTER, TypeDescriptor } from '../move/index.js'\nimport { toInternalModule } from './move-types.js'\nimport { SuiNetwork } from './network.js'\nimport { InternalMoveModule, InternalMoveStruct } from '../move/internal-models.js'\nimport {\n Connection,\n JsonRpcProvider,\n SuiMoveNormalizedModule,\n SuiEvent,\n SuiMoveObject,\n SuiParsedData,\n} from '@mysten/sui.js'\n\nexport class SuiChainAdapter extends ChainAdapter<SuiNetwork, SuiMoveNormalizedModule, SuiEvent | SuiMoveObject> {\n static INSTANCE = new SuiChainAdapter()\n\n async fetchModule(account: string, module: string, network: SuiNetwork): Promise<SuiMoveNormalizedModule> {\n const client = getRpcClient(network)\n return await client.getNormalizedMoveModule({ package: account, module })\n }\n\n async fetchModules(account: string, network: SuiNetwork): Promise<SuiMoveNormalizedModule[]> {\n const client = getRpcClient(network)\n const modules = await client.getNormalizedMoveModulesByPackage({ package: account })\n return Object.values(modules)\n }\n\n getMeaningfulFunctionParams(params: TypeDescriptor[]): TypeDescriptor[] {\n if (params.length === 0) {\n return params\n }\n return params.slice(0, params.length - 1)\n }\n\n toInternalModules(modules: SuiMoveNormalizedModule[]): InternalMoveModule[] {\n return Object.values(modules).map(toInternalModule)\n }\n\n getEventStructs(module: InternalMoveModule) {\n const qname = moduleQname(module)\n const eventMap = new Map<string, InternalMoveStruct>()\n\n for (const struct of module.structs) {\n const abilities = new Set(struct.abilities)\n if (abilities.has('Drop') && abilities.has('Copy')) {\n eventMap.set(qname + SPLITTER + struct.name, struct)\n }\n }\n return eventMap\n }\n\n getType(base: SuiEvent | SuiMoveObject): string {\n return base.type\n }\n\n getData(val: SuiEvent | SuiMoveObject) {\n if (SuiEvent.is(val)) {\n return val.parsedJson as any\n }\n if (SuiParsedData.is(val)) {\n return val.fields as any\n }\n // if (SuiMoveObject.is(val)) {\n // return val.fields as any\n // }\n // This may not be perfect, just think everything has\n if ('fields' in val) {\n if ('type' in val && Object.keys(val).length === 2) {\n return val.fields as any\n }\n }\n return val as any\n }\n}\n\nfunction getRpcEndpoint(network: SuiNetwork): string {\n switch (network) {\n case SuiNetwork.TEST_NET:\n return 'https://fullnode.testnet.sui.io/'\n }\n return 'https://fullnode.mainnet.sui.io/'\n}\n\nfunction getRpcClient(network: SuiNetwork): JsonRpcProvider {\n return new JsonRpcProvider(new Connection({ fullnode: getRpcEndpoint(network) }))\n}\n"]}
|
package/lib/sui/sui-plugin.js
CHANGED