@sentio/sdk 2.4.0 → 2.5.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/aptos/aptos-processor.d.ts +1 -1
- package/lib/aptos/aptos-processor.js +1 -1
- package/lib/aptos/aptos-processor.js.map +1 -1
- package/lib/aptos/builtin/0x1.d.ts +16 -177
- package/lib/aptos/builtin/0x1.js +56 -538
- package/lib/aptos/builtin/0x1.js.map +1 -1
- package/lib/aptos/builtin/0x3.d.ts +2 -13
- package/lib/aptos/builtin/0x3.js +20 -48
- package/lib/aptos/builtin/0x3.js.map +1 -1
- package/lib/aptos/codegen/codegen.d.ts +0 -20
- package/lib/aptos/codegen/codegen.js +37 -357
- package/lib/aptos/codegen/codegen.js.map +1 -1
- package/lib/aptos/{types.test.d.ts → codegen/types.test.d.ts} +0 -0
- package/lib/aptos/codegen/types.test.js.map +1 -0
- package/lib/aptos/models.d.ts +0 -8
- package/lib/aptos/models.js.map +1 -1
- package/lib/aptos/move-coder.d.ts +4 -13
- package/lib/aptos/move-coder.js +13 -124
- package/lib/aptos/move-coder.js.map +1 -1
- package/lib/aptos/move-types.d.ts +6 -0
- package/lib/aptos/move-types.js +52 -1
- package/lib/aptos/move-types.js.map +1 -1
- package/lib/aptos/tests/souffl3.js +1 -1
- package/lib/aptos/tests/souffl3.js.map +1 -1
- package/lib/aptos/tests/types/reserved.d.ts +2 -8
- package/lib/aptos/tests/types/reserved.js +11 -24
- package/lib/aptos/tests/types/reserved.js.map +1 -1
- package/lib/aptos/tests/types/soffl3.d.ts +2 -14
- package/lib/aptos/tests/types/soffl3.js +15 -48
- package/lib/aptos/tests/types/soffl3.js.map +1 -1
- package/lib/aptos/tests/types/souffle.d.ts +2 -8
- package/lib/aptos/tests/types/souffle.js +11 -24
- package/lib/aptos/tests/types/souffle.js.map +1 -1
- package/lib/aptos/utils.d.ts +2 -7
- package/lib/aptos/utils.js +2 -15
- package/lib/aptos/utils.js.map +1 -1
- package/lib/eth/bind-options.js +6 -0
- package/lib/eth/bind-options.js.map +1 -1
- package/lib/eth/tests/codegen.test.js.map +1 -1
- package/lib/eth/tests/erc20.js +1 -1
- package/lib/eth/tests/erc20.js.map +1 -1
- package/lib/eth/tests/logger.test.js.map +1 -1
- package/lib/move/abstract-codegen.d.ts +44 -0
- package/lib/move/abstract-codegen.js +341 -0
- package/lib/move/abstract-codegen.js.map +1 -0
- package/lib/move/abstract-move-coder.d.ts +24 -0
- package/lib/move/abstract-move-coder.js +141 -0
- package/lib/move/abstract-move-coder.js.map +1 -0
- package/lib/move/account.d.ts +18 -0
- package/lib/{aptos/codegen/typegen.js → move/account.js} +20 -82
- package/lib/move/account.js.map +1 -0
- package/lib/move/filter.d.ts +25 -0
- package/lib/move/filter.js +11 -0
- package/lib/move/filter.js.map +1 -0
- package/lib/move/index.d.ts +5 -25
- package/lib/move/index.js +5 -10
- package/lib/move/index.js.map +1 -1
- package/lib/move/neutral-models.d.ts +34 -0
- package/lib/move/neutral-models.js +7 -0
- package/lib/move/neutral-models.js.map +1 -0
- package/lib/move/ts-type.d.ts +2 -0
- package/lib/move/ts-type.js +77 -0
- package/lib/move/ts-type.js.map +1 -0
- package/lib/{aptos/codegen/typegen.test.d.ts → move/ts-type.test.d.ts} +0 -0
- package/lib/move/ts-type.test.js.map +1 -0
- package/lib/{aptos → move}/types.d.ts +1 -0
- package/lib/{aptos → move}/types.js +26 -3
- package/lib/move/types.js.map +1 -0
- package/lib/move/utils.d.ts +9 -0
- package/lib/move/utils.js +20 -0
- package/lib/move/utils.js.map +1 -0
- package/lib/sui/builtin/0x1.d.ts +114 -0
- package/lib/sui/builtin/0x1.js +174 -0
- package/lib/sui/builtin/0x1.js.map +1 -0
- package/lib/sui/builtin/0x2.d.ts +1047 -0
- package/lib/sui/builtin/0x2.js +1295 -0
- package/lib/sui/builtin/0x2.js.map +1 -0
- package/lib/sui/builtin/index.d.ts +2 -0
- package/lib/sui/builtin/index.js +6 -0
- package/lib/sui/builtin/index.js.map +1 -0
- package/lib/sui/codegen/codegen.d.ts +1 -0
- package/lib/sui/codegen/codegen.js +61 -0
- package/lib/sui/codegen/codegen.js.map +1 -0
- package/lib/sui/codegen/index.d.ts +1 -0
- package/lib/sui/codegen/index.js +2 -0
- package/lib/sui/codegen/index.js.map +1 -0
- package/lib/sui/codegen/run.d.ts +1 -0
- package/lib/sui/codegen/run.js +12 -0
- package/lib/sui/codegen/run.js.map +1 -0
- package/lib/sui/index.d.ts +2 -0
- package/lib/sui/index.js +1 -0
- package/lib/sui/index.js.map +1 -1
- package/lib/sui/models.d.ts +7 -1
- package/lib/sui/models.js +0 -23
- package/lib/sui/models.js.map +1 -1
- package/lib/sui/move-coder.d.ts +11 -0
- package/lib/sui/move-coder.js +53 -0
- package/lib/sui/move-coder.js.map +1 -0
- package/lib/sui/move-types.d.ts +9 -0
- package/lib/sui/move-types.js +81 -0
- package/lib/sui/move-types.js.map +1 -0
- package/lib/sui/sui-processor.js +3 -3
- package/lib/sui/sui-processor.js.map +1 -1
- package/lib/sui/tests/sui.test.js.map +1 -1
- package/lib/sui/tests/types/index.d.ts +1 -0
- package/lib/sui/tests/types/index.js +5 -0
- package/lib/sui/tests/types/index.js.map +1 -0
- package/lib/sui/tests/types/testnet/index.d.ts +1 -0
- package/lib/sui/tests/types/testnet/index.js +5 -0
- package/lib/sui/tests/types/testnet/index.js.map +1 -0
- package/lib/sui/tests/types/testnet/swap.d.ts +249 -0
- package/lib/sui/tests/types/testnet/swap.js +310 -0
- package/lib/sui/tests/types/testnet/swap.js.map +1 -0
- package/lib/testing/aptos-facet.js +1 -1
- package/lib/testing/aptos-facet.js.map +1 -1
- package/lib/testing/sui-facet.js +3 -2
- package/lib/testing/sui-facet.js.map +1 -1
- package/package.json +8 -5
- package/src/aptos/aptos-processor.ts +1 -1
- package/src/aptos/builtin/0x1.ts +70 -652
- package/src/aptos/builtin/0x3.ts +24 -59
- package/src/aptos/codegen/codegen.ts +35 -421
- package/src/aptos/models.ts +0 -10
- package/src/aptos/move-coder.ts +16 -150
- package/src/aptos/move-types.ts +62 -0
- package/src/aptos/tests/souffl3.ts +1 -1
- package/src/aptos/tests/types/reserved.ts +15 -30
- package/src/aptos/tests/types/soffl3.ts +19 -58
- package/src/aptos/tests/types/souffle.ts +15 -30
- package/src/aptos/utils.ts +3 -21
- package/src/eth/bind-options.ts +6 -0
- package/src/eth/tests/erc20.ts +1 -1
- package/src/move/abstract-codegen.ts +426 -0
- package/src/move/abstract-move-coder.ts +170 -0
- package/src/move/account.ts +96 -0
- package/src/move/filter.ts +33 -0
- package/src/move/index.ts +5 -33
- package/src/move/neutral-models.ts +45 -0
- package/src/move/ts-type.ts +86 -0
- package/src/{aptos → move}/types.ts +28 -3
- package/src/move/utils.ts +25 -0
- package/src/sui/abis/0x1.json +1729 -1733
- package/src/sui/abis/0x2.json +13279 -13283
- package/src/sui/builtin/0x1.ts +307 -0
- package/src/sui/builtin/0x2.ts +2578 -0
- package/src/sui/builtin/index.ts +5 -0
- package/src/sui/codegen/codegen.ts +71 -0
- package/src/sui/codegen/index.ts +1 -0
- package/src/sui/codegen/run.ts +13 -0
- package/src/sui/index.ts +4 -0
- package/src/sui/models.ts +7 -28
- package/src/sui/move-coder.ts +63 -0
- package/src/sui/move-types.ts +109 -0
- package/src/sui/sui-processor.ts +3 -3
- package/src/sui/tests/abis/testnet/swap.json +1752 -0
- package/src/sui/tests/types/index.ts +3 -0
- package/src/sui/tests/types/testnet/index.ts +4 -0
- package/src/sui/tests/types/testnet/swap.ts +698 -0
- package/src/testing/aptos-facet.ts +1 -1
- package/src/testing/sui-facet.ts +3 -2
- package/lib/aptos/codegen/typegen.d.ts +0 -18
- package/lib/aptos/codegen/typegen.js.map +0 -1
- package/lib/aptos/codegen/typegen.test.js.map +0 -1
- package/lib/aptos/types.js.map +0 -1
- package/lib/aptos/types.test.js.map +0 -1
- package/lib/jest.config.d.ts +0 -9
- package/lib/jest.config.js +0 -9
- package/lib/jest.config.js.map +0 -1
- package/src/aptos/codegen/typegen.ts +0 -165
- package/src/jest.config.ts +0 -8
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import { AccountModulesImportInfo, AccountRegister, generateType, normalizeToJSName } from './typegen.js';
|
|
5
|
-
import { getMeaningfulFunctionParams, isFrameworkAccount, moduleQname, SPLITTER } from '../utils.js';
|
|
2
|
+
import { toNeutralModule } from '../move-types.js';
|
|
3
|
+
import { moduleQname, SPLITTER } from '../../move/index.js';
|
|
6
4
|
import chalk from 'chalk';
|
|
7
|
-
import { AptosNetwork
|
|
8
|
-
import { parseMoveType } from '../types.js';
|
|
5
|
+
import { AptosNetwork } from '../network.js';
|
|
9
6
|
import { AptosClient } from 'aptos-sdk';
|
|
10
|
-
import {
|
|
7
|
+
import { getMeaningfulFunctionParams } from '../utils.js';
|
|
8
|
+
import { AbstractCodegen } from '../../move/abstract-codegen.js';
|
|
11
9
|
export async function codegen(abisDir, outDir = 'src/types/aptos') {
|
|
12
10
|
if (!fs.existsSync(abisDir)) {
|
|
13
11
|
return;
|
|
14
12
|
}
|
|
15
13
|
console.log(chalk.green('Generated Types for Aptos'));
|
|
16
|
-
|
|
14
|
+
const gen = new AptosCodegen();
|
|
15
|
+
await gen.generate(abisDir, outDir);
|
|
17
16
|
}
|
|
18
17
|
function getRpcEndpoint(network) {
|
|
19
18
|
switch (network) {
|
|
@@ -25,360 +24,41 @@ function getRpcEndpoint(network) {
|
|
|
25
24
|
function getRpcClient(network) {
|
|
26
25
|
return new AptosClient(getRpcEndpoint(network));
|
|
27
26
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
for (const file of files) {
|
|
50
|
-
if (!file.endsWith('.json')) {
|
|
51
|
-
continue;
|
|
27
|
+
class AptosCodegen extends AbstractCodegen {
|
|
28
|
+
ADDRESS_TYPE = 'Address';
|
|
29
|
+
MAIN_NET = AptosNetwork.MAIN_NET;
|
|
30
|
+
TEST_NET = AptosNetwork.TEST_NET;
|
|
31
|
+
PREFIX = 'Aptos';
|
|
32
|
+
async fetchModules(account, network) {
|
|
33
|
+
const client = getRpcClient(network);
|
|
34
|
+
return await client.getAccountModules(account);
|
|
35
|
+
}
|
|
36
|
+
toNeutral(modules) {
|
|
37
|
+
return modules.flatMap((m) => (m.abi ? [toNeutralModule(m)] : []));
|
|
38
|
+
}
|
|
39
|
+
getMeaningfulFunctionParams(params) {
|
|
40
|
+
return getMeaningfulFunctionParams(params);
|
|
41
|
+
}
|
|
42
|
+
getEventStructs(module) {
|
|
43
|
+
const qname = moduleQname(module);
|
|
44
|
+
const structMap = new Map();
|
|
45
|
+
const eventMap = new Map();
|
|
46
|
+
for (const struct of module.structs) {
|
|
47
|
+
structMap.set(qname + SPLITTER + struct.name, struct);
|
|
52
48
|
}
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
fileName: path.basename(file, '.json'),
|
|
62
|
-
outputDir: outputDir,
|
|
63
|
-
network,
|
|
64
|
-
});
|
|
65
|
-
outputs.push(...codeGen.generate());
|
|
66
|
-
}
|
|
67
|
-
while (loader.pendingAccounts.size > 0) {
|
|
68
|
-
for (const account of loader.pendingAccounts) {
|
|
69
|
-
console.log(`download dependent module for account ${account} at ${getAptosChainName(network)}`);
|
|
70
|
-
try {
|
|
71
|
-
const modules = await client.getAccountModules(account);
|
|
72
|
-
fs.writeFileSync(path.resolve(srcDir, account + '.json'), JSON.stringify(modules, null, '\t'));
|
|
73
|
-
for (const module of modules) {
|
|
74
|
-
if (module.abi) {
|
|
75
|
-
loader.register(module.abi, account);
|
|
49
|
+
for (const struct of module.structs) {
|
|
50
|
+
for (const field of struct.fields) {
|
|
51
|
+
const t = field.type;
|
|
52
|
+
if (t.qname === '0x1::event::EventHandle') {
|
|
53
|
+
const event = t.typeArgs[0].qname;
|
|
54
|
+
const eventStruct = structMap.get(event);
|
|
55
|
+
if (eventStruct) {
|
|
56
|
+
eventMap.set(event, eventStruct);
|
|
76
57
|
}
|
|
77
58
|
}
|
|
78
|
-
const codeGen = new AccountCodegen(loader, modules, {
|
|
79
|
-
fileName: account,
|
|
80
|
-
outputDir: outputDir,
|
|
81
|
-
network,
|
|
82
|
-
});
|
|
83
|
-
outputs.push(...codeGen.generate());
|
|
84
|
-
}
|
|
85
|
-
catch (e) {
|
|
86
|
-
console.error(chalk.red('Error downloading account module, check if you choose the right network,or download account modules manually into your director'));
|
|
87
|
-
console.error(e);
|
|
88
|
-
process.exit(1);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
for (const output of outputs) {
|
|
93
|
-
const content = format(output.fileContent, { parser: 'typescript' });
|
|
94
|
-
fs.writeFileSync(path.join(outputDir, output.fileName), content);
|
|
95
|
-
}
|
|
96
|
-
const rootFile = path.join(outputDir, 'index.ts');
|
|
97
|
-
fs.writeFileSync(rootFile, `/* Autogenerated file. Do not edit manually. */
|
|
98
|
-
/* tslint:disable */
|
|
99
|
-
/* eslint-disable */
|
|
100
|
-
`);
|
|
101
|
-
for (const output of outputs) {
|
|
102
|
-
const parsed = path.parse(output.fileName);
|
|
103
|
-
const content = `export * as _${parsed.name} from './${parsed.name}.js'\n`;
|
|
104
|
-
fs.appendFileSync(rootFile, content);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
export class AccountCodegen {
|
|
108
|
-
modules;
|
|
109
|
-
config;
|
|
110
|
-
loader;
|
|
111
|
-
constructor(loader, modules, config) {
|
|
112
|
-
// const json = fs.readFileSync(config.srcFile, 'utf-8')
|
|
113
|
-
this.modules = modules;
|
|
114
|
-
this.config = config;
|
|
115
|
-
this.loader = loader;
|
|
116
|
-
}
|
|
117
|
-
generate() {
|
|
118
|
-
if (!this.modules) {
|
|
119
|
-
return [];
|
|
120
|
-
}
|
|
121
|
-
// const baseName = path.basename(this.config.fileName, '.json')
|
|
122
|
-
let address;
|
|
123
|
-
for (const module of this.modules) {
|
|
124
|
-
if (module.abi && module.abi.address) {
|
|
125
|
-
address = module.abi.address;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
if (!address) {
|
|
129
|
-
return [];
|
|
130
|
-
}
|
|
131
|
-
const imports = `
|
|
132
|
-
import { CallFilter } from "@sentio/sdk/move"
|
|
133
|
-
import {
|
|
134
|
-
MoveCoder, AptosBindOptions, AptosBaseProcessor,
|
|
135
|
-
TypedEventInstance, AptosNetwork, TypedEntryFunctionPayload,
|
|
136
|
-
AptosContext } from "@sentio/sdk/aptos"
|
|
137
|
-
import { MoveFetchConfig } from "@sentio/protos"
|
|
138
|
-
import { Address, MoveModule } from "@sentio/sdk/aptos"
|
|
139
|
-
`;
|
|
140
|
-
const dependedAccounts = [];
|
|
141
|
-
const moduleImports = [];
|
|
142
|
-
const info = this.loader.accountImports.get(address);
|
|
143
|
-
if (info) {
|
|
144
|
-
for (const [account] of info.imports.entries()) {
|
|
145
|
-
// Remap to user's filename if possible, TODO codepath not well tested
|
|
146
|
-
const tsAccountModule = './' + (this.loader.accountImports.get(account)?.moduleName || account);
|
|
147
|
-
if (isFrameworkAccount(account) && !isFrameworkAccount(address)) {
|
|
148
|
-
// Decide where to find runtime library
|
|
149
|
-
moduleImports.push(`import { _${account} } from "@sentio/sdk/aptos/builtin"`);
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
moduleImports.push(`import * as _${account} from "${tsAccountModule}.js"`);
|
|
153
|
-
}
|
|
154
|
-
dependedAccounts.push(account);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
const source = `
|
|
158
|
-
/* Autogenerated file. Do not edit manually. */
|
|
159
|
-
/* tslint:disable */
|
|
160
|
-
/* eslint-disable */
|
|
161
|
-
|
|
162
|
-
/* Generated modules for account ${address} */
|
|
163
|
-
|
|
164
|
-
${imports}
|
|
165
|
-
|
|
166
|
-
${moduleImports.join('\n')}
|
|
167
|
-
|
|
168
|
-
${this.modules.map((m) => generateModule(m, this.config.network)).join('\n')}
|
|
169
|
-
|
|
170
|
-
export function loadAllTypes(_r: MoveCoder) {
|
|
171
|
-
${dependedAccounts.map((a) => `_${a}.loadAllTypes(_r)`).join('\n')}
|
|
172
|
-
|
|
173
|
-
${this.modules
|
|
174
|
-
.map((m) => {
|
|
175
|
-
if (m.abi) {
|
|
176
|
-
return `_r.load(${normalizeToJSName(m.abi.name)}.ABI)`;
|
|
177
|
-
}
|
|
178
|
-
console.error('Find Module with empty ABI');
|
|
179
|
-
return '';
|
|
180
|
-
})
|
|
181
|
-
.join('\n')}
|
|
182
|
-
}
|
|
183
|
-
`; // source
|
|
184
|
-
return [
|
|
185
|
-
{
|
|
186
|
-
fileName: this.config.fileName + '.ts',
|
|
187
|
-
fileContent: source,
|
|
188
|
-
},
|
|
189
|
-
];
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
function generateNetworkOption(network) {
|
|
193
|
-
switch (network) {
|
|
194
|
-
case AptosNetwork.TEST_NET:
|
|
195
|
-
return 'TEST_NET';
|
|
196
|
-
}
|
|
197
|
-
return 'MAIN_NET';
|
|
198
|
-
}
|
|
199
|
-
function generateModule(moduleByteCode, network) {
|
|
200
|
-
if (!moduleByteCode.abi) {
|
|
201
|
-
return '';
|
|
202
|
-
}
|
|
203
|
-
const module = moduleByteCode.abi;
|
|
204
|
-
const functions = module.exposed_functions.map((f) => generateOnEntryFunctions(module, f)).filter((s) => s !== '');
|
|
205
|
-
const eventStructs = getEventStructs(module);
|
|
206
|
-
const eventTypes = new Set(eventStructs.keys());
|
|
207
|
-
const events = Array.from(eventStructs.values())
|
|
208
|
-
.map((e) => generateOnEvents(module, e))
|
|
209
|
-
.filter((s) => s !== '');
|
|
210
|
-
const structs = module.structs.map((s) => generateStructs(module, s, eventTypes));
|
|
211
|
-
const callArgs = module.exposed_functions.map((f) => generateCallArgsStructs(module, f));
|
|
212
|
-
const moduleName = normalizeToJSName(module.name);
|
|
213
|
-
let processor = '';
|
|
214
|
-
if (functions.length > 0 || events.length > 0) {
|
|
215
|
-
processor = `export class ${moduleName} extends AptosBaseProcessor {
|
|
216
|
-
|
|
217
|
-
constructor(options: AptosBindOptions) {
|
|
218
|
-
super("${module.name}", options)
|
|
219
|
-
}
|
|
220
|
-
static DEFAULT_OPTIONS: AptosBindOptions = {
|
|
221
|
-
address: "${module.address}",
|
|
222
|
-
network: AptosNetwork.${generateNetworkOption(network)}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
static bind(options: Partial<AptosBindOptions> = {}): ${moduleName} {
|
|
226
|
-
return new ${moduleName}({ ...${moduleName}.DEFAULT_OPTIONS, ...options })
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
${functions.join('\n')}
|
|
230
|
-
|
|
231
|
-
${events.join('\n')}
|
|
232
|
-
|
|
233
|
-
loadTypesInternal(registry: MoveCoder) {
|
|
234
|
-
loadAllTypes(registry)
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
`;
|
|
238
|
-
}
|
|
239
|
-
return `
|
|
240
|
-
${processor}
|
|
241
|
-
|
|
242
|
-
export namespace ${moduleName} {
|
|
243
|
-
${structs.join('\n')}
|
|
244
|
-
|
|
245
|
-
${callArgs.join('\n')}
|
|
246
|
-
|
|
247
|
-
export function loadTypes(_r: MoveCoder) {
|
|
248
|
-
loadAllTypes(_r)
|
|
249
|
-
}
|
|
250
|
-
export const ABI: MoveModule = JSON.parse('${JSON.stringify(module)}')
|
|
251
|
-
}
|
|
252
|
-
`;
|
|
253
|
-
}
|
|
254
|
-
function generateStructs(module, struct, events) {
|
|
255
|
-
const genericString = generateStructTypeParameters(struct);
|
|
256
|
-
const genericStringAny = generateStructTypeParameters(struct, true);
|
|
257
|
-
const structName = normalizeToJSName(struct.name);
|
|
258
|
-
const fields = struct.fields.map((field) => {
|
|
259
|
-
return `${field.name}: ${generateType(field.type, module.address)}`;
|
|
260
|
-
});
|
|
261
|
-
let eventPayload = '';
|
|
262
|
-
if (events.has(moduleQname(module) + SPLITTER + struct.name)) {
|
|
263
|
-
eventPayload = `
|
|
264
|
-
export interface ${structName}Instance extends
|
|
265
|
-
TypedEventInstance<${structName}${genericStringAny}> {
|
|
266
|
-
data_decoded: ${structName}${genericStringAny}
|
|
267
|
-
type_arguments: [${struct.generic_type_params.map((_) => 'string').join(', ')}]
|
|
268
|
-
}
|
|
269
|
-
`;
|
|
270
|
-
}
|
|
271
|
-
return `
|
|
272
|
-
export class ${structName}${genericString} {
|
|
273
|
-
static TYPE_QNAME = '${module.address}::${module.name}::${struct.name}'
|
|
274
|
-
${fields.join('\n')}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
${eventPayload}
|
|
278
|
-
`;
|
|
279
|
-
}
|
|
280
|
-
function generateFunctionTypeParameters(func) {
|
|
281
|
-
let genericString = '';
|
|
282
|
-
if (func.generic_type_params && func.generic_type_params.length > 0) {
|
|
283
|
-
const params = func.generic_type_params
|
|
284
|
-
.map((v, idx) => {
|
|
285
|
-
return `T${idx}=any`;
|
|
286
|
-
})
|
|
287
|
-
.join(',');
|
|
288
|
-
genericString = `<${params}>`;
|
|
289
|
-
}
|
|
290
|
-
return genericString;
|
|
291
|
-
}
|
|
292
|
-
function generateStructTypeParameters(struct, useAny = false) {
|
|
293
|
-
let genericString = '';
|
|
294
|
-
if (struct.generic_type_params && struct.generic_type_params.length > 0) {
|
|
295
|
-
const params = struct.generic_type_params
|
|
296
|
-
.map((v, idx) => {
|
|
297
|
-
return useAny ? 'any' : 'T' + idx;
|
|
298
|
-
})
|
|
299
|
-
.join(',');
|
|
300
|
-
genericString = `<${params}>`;
|
|
301
|
-
}
|
|
302
|
-
return genericString;
|
|
303
|
-
}
|
|
304
|
-
function generateCallArgsStructs(module, func) {
|
|
305
|
-
if (!func.is_entry) {
|
|
306
|
-
return;
|
|
307
|
-
}
|
|
308
|
-
const fields = getMeaningfulFunctionParams(func).map((param) => {
|
|
309
|
-
return `${generateType(param, module.address)}`;
|
|
310
|
-
});
|
|
311
|
-
const camelFuncName = capitalizeFirstChar(camelCase(func.name));
|
|
312
|
-
const genericString = generateFunctionTypeParameters(func);
|
|
313
|
-
return `
|
|
314
|
-
export interface ${camelFuncName}Payload${genericString}
|
|
315
|
-
extends TypedEntryFunctionPayload<[${fields.join(',')}]> {
|
|
316
|
-
arguments_decoded: [${fields.join(',')}],
|
|
317
|
-
type_arguments: [${func.generic_type_params.map((_) => 'string').join(', ')}]
|
|
318
|
-
}
|
|
319
|
-
`;
|
|
320
|
-
}
|
|
321
|
-
function generateOnEntryFunctions(module, func) {
|
|
322
|
-
if (!func.is_entry) {
|
|
323
|
-
return '';
|
|
324
|
-
}
|
|
325
|
-
// const genericString = generateFunctionTypeParameters(func)
|
|
326
|
-
const moduleName = normalizeToJSName(module.name);
|
|
327
|
-
const camelFuncName = capitalizeFirstChar(camelCase(func.name));
|
|
328
|
-
const source = `
|
|
329
|
-
onEntry${camelFuncName}(func: (call: ${moduleName}.${camelFuncName}Payload, ctx: AptosContext) => void, filter?: CallFilter, fetchConfig?: MoveFetchConfig): ${moduleName} {
|
|
330
|
-
this.onEntryFunctionCall(func, {
|
|
331
|
-
...filter,
|
|
332
|
-
function: '${module.name}::${func.name}'
|
|
333
|
-
},
|
|
334
|
-
fetchConfig)
|
|
335
|
-
return this
|
|
336
|
-
}`;
|
|
337
|
-
return source;
|
|
338
|
-
}
|
|
339
|
-
function getEventStructs(module) {
|
|
340
|
-
const qname = moduleQname(module);
|
|
341
|
-
const structMap = new Map();
|
|
342
|
-
const eventMap = new Map();
|
|
343
|
-
for (const struct of module.structs) {
|
|
344
|
-
structMap.set(qname + SPLITTER + struct.name, struct);
|
|
345
|
-
}
|
|
346
|
-
for (const struct of module.structs) {
|
|
347
|
-
for (const field of struct.fields) {
|
|
348
|
-
const t = parseMoveType(field.type);
|
|
349
|
-
if (t.qname === '0x1::event::EventHandle') {
|
|
350
|
-
const event = t.typeArgs[0].qname;
|
|
351
|
-
const eventStruct = structMap.get(event);
|
|
352
|
-
if (eventStruct) {
|
|
353
|
-
eventMap.set(event, eventStruct);
|
|
354
|
-
}
|
|
355
59
|
}
|
|
356
60
|
}
|
|
61
|
+
return eventMap;
|
|
357
62
|
}
|
|
358
|
-
return eventMap;
|
|
359
|
-
}
|
|
360
|
-
function generateOnEvents(module, struct) {
|
|
361
|
-
// for struct that has drop + store
|
|
362
|
-
// if (!isEvent(struct, module)) {
|
|
363
|
-
// return ''
|
|
364
|
-
// }
|
|
365
|
-
// const genericString = generateStructTypeParameters(struct)
|
|
366
|
-
const moduleName = normalizeToJSName(module.name);
|
|
367
|
-
const source = `
|
|
368
|
-
onEvent${struct.name}(func: (event: ${moduleName}.${normalizeToJSName(struct.name)}Instance, ctx: AptosContext) => void, fetchConfig?: MoveFetchConfig): ${moduleName} {
|
|
369
|
-
this.onEvent(func, {
|
|
370
|
-
type: '${module.name}::${struct.name}'
|
|
371
|
-
},
|
|
372
|
-
fetchConfig)
|
|
373
|
-
return this
|
|
374
|
-
}
|
|
375
|
-
`;
|
|
376
|
-
return source;
|
|
377
|
-
}
|
|
378
|
-
function capitalizeFirstChar(input) {
|
|
379
|
-
if (!input) {
|
|
380
|
-
return input;
|
|
381
|
-
}
|
|
382
|
-
return input[0].toUpperCase() + (input.length > 1 ? input.substring(1) : '');
|
|
383
63
|
}
|
|
384
64
|
//# sourceMappingURL=codegen.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../../src/aptos/codegen/codegen.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs'\nimport * as path from 'path'\nimport { format } from 'prettier'\nimport { MoveFunction, MoveModule, MoveModuleBytecode, MoveStruct } from '../move-types.js'\nimport { AccountModulesImportInfo, AccountRegister, generateType, normalizeToJSName } from './typegen.js'\nimport { getMeaningfulFunctionParams, isFrameworkAccount, moduleQname, SPLITTER } from '../utils.js'\nimport chalk from 'chalk'\nimport { AptosNetwork, getAptosChainName } from '../network.js'\nimport { parseMoveType } from '../types.js'\nimport { AptosClient } from 'aptos-sdk'\nimport { camelCase } from 'lodash-es'\n\nexport async function codegen(abisDir: string, outDir = 'src/types/aptos') {\n if (!fs.existsSync(abisDir)) {\n return\n }\n console.log(chalk.green('Generated Types for Aptos'))\n await generate(abisDir, outDir)\n}\n\nfunction getRpcEndpoint(network: AptosNetwork): string {\n switch (network) {\n case AptosNetwork.TEST_NET:\n return 'https://testnet.aptoslabs.com/'\n }\n return 'https://mainnet.aptoslabs.com/'\n}\n\nfunction getRpcClient(network: AptosNetwork): AptosClient {\n return new AptosClient(getRpcEndpoint(network))\n}\n\nasync function generate(srcDir: string, outputDir: string) {\n await generateForNetwork(srcDir, outputDir, AptosNetwork.MAIN_NET)\n await generateForNetwork(path.join(srcDir, 'testnet'), path.join(outputDir, 'testnet'), AptosNetwork.TEST_NET)\n}\n\nasync function generateForNetwork(srcDir: string, outputDir: string, network: AptosNetwork) {\n if (!fs.existsSync(srcDir)) {\n return\n }\n if (network === AptosNetwork.TEST_NET) {\n console.log('Found testnet directory, generate code for testnet modules')\n }\n const files = fs.readdirSync(srcDir)\n outputDir = path.resolve(outputDir)\n const outputs: OutputFile[] = []\n\n fs.mkdirSync(outputDir, { recursive: true })\n\n const loader = new AccountRegister()\n\n // when generating user code, don't need to generate framework account\n loader.accountImports.set('0x1', new AccountModulesImportInfo('0x1', '0x1'))\n loader.accountImports.set('0x2', new AccountModulesImportInfo('0x2', '0x2'))\n loader.accountImports.set('0x3', new AccountModulesImportInfo('0x3', '0x3'))\n const client = getRpcClient(network)\n\n for (const file of files) {\n if (!file.endsWith('.json')) {\n continue\n }\n const fullPath = path.resolve(srcDir, file)\n const modules = JSON.parse(fs.readFileSync(fullPath, 'utf-8'))\n\n for (const module of modules) {\n if (module.abi) {\n loader.register(module.abi, path.basename(file, '.json'))\n }\n }\n const codeGen = new AccountCodegen(loader, modules, {\n fileName: path.basename(file, '.json'),\n outputDir: outputDir,\n network,\n })\n\n outputs.push(...codeGen.generate())\n }\n\n while (loader.pendingAccounts.size > 0) {\n for (const account of loader.pendingAccounts) {\n console.log(`download dependent module for account ${account} at ${getAptosChainName(network)}`)\n\n try {\n const modules = await client.getAccountModules(account)\n fs.writeFileSync(path.resolve(srcDir, account + '.json'), JSON.stringify(modules, null, '\\t'))\n\n for (const module of modules) {\n if (module.abi) {\n loader.register(module.abi, account)\n }\n }\n const codeGen = new AccountCodegen(loader, modules, {\n fileName: account,\n outputDir: outputDir,\n network,\n })\n\n outputs.push(...codeGen.generate())\n } catch (e) {\n console.error(\n chalk.red(\n 'Error downloading account module, check if you choose the right network,or download account modules manually into your director'\n )\n )\n console.error(e)\n process.exit(1)\n }\n }\n }\n\n for (const output of outputs) {\n const content = format(output.fileContent, { parser: 'typescript' })\n fs.writeFileSync(path.join(outputDir, output.fileName), content)\n }\n\n const rootFile = path.join(outputDir, 'index.ts')\n fs.writeFileSync(\n rootFile,\n `/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n`\n )\n for (const output of outputs) {\n const parsed = path.parse(output.fileName)\n const content = `export * as _${parsed.name} from './${parsed.name}.js'\\n`\n fs.appendFileSync(rootFile, content)\n }\n}\n\ninterface OutputFile {\n fileName: string\n fileContent: string\n}\n\ninterface Config {\n fileName: string\n outputDir: string\n network: AptosNetwork\n}\n\nexport class AccountCodegen {\n modules: MoveModuleBytecode[]\n config: Config\n loader: AccountRegister\n\n constructor(loader: AccountRegister, modules: MoveModuleBytecode[], config: Config) {\n // const json = fs.readFileSync(config.srcFile, 'utf-8')\n this.modules = modules\n this.config = config\n this.loader = loader\n }\n\n generate(): OutputFile[] {\n if (!this.modules) {\n return []\n }\n // const baseName = path.basename(this.config.fileName, '.json')\n\n let address: string | undefined\n for (const module of this.modules) {\n if (module.abi && module.abi.address) {\n address = module.abi.address\n }\n }\n if (!address) {\n return []\n }\n\n const imports = `\n import { CallFilter } from \"@sentio/sdk/move\"\n import { \n MoveCoder, AptosBindOptions, AptosBaseProcessor, \n TypedEventInstance, AptosNetwork, TypedEntryFunctionPayload,\n AptosContext } from \"@sentio/sdk/aptos\"\n import { MoveFetchConfig } from \"@sentio/protos\"\n import { Address, MoveModule } from \"@sentio/sdk/aptos\"\n `\n\n const dependedAccounts: string[] = []\n\n const moduleImports: string[] = []\n\n const info = this.loader.accountImports.get(address)\n\n if (info) {\n for (const [account] of info.imports.entries()) {\n // Remap to user's filename if possible, TODO codepath not well tested\n const tsAccountModule = './' + (this.loader.accountImports.get(account)?.moduleName || account)\n if (isFrameworkAccount(account) && !isFrameworkAccount(address)) {\n // Decide where to find runtime library\n moduleImports.push(`import { _${account} } from \"@sentio/sdk/aptos/builtin\"`)\n } else {\n moduleImports.push(`import * as _${account} from \"${tsAccountModule}.js\"`)\n }\n\n dependedAccounts.push(account)\n }\n }\n\n const source = `\n /* Autogenerated file. Do not edit manually. */\n /* tslint:disable */\n /* eslint-disable */\n \n /* Generated modules for account ${address} */\n \n ${imports}\n \n ${moduleImports.join('\\n')}\n \n ${this.modules.map((m) => generateModule(m, this.config.network)).join('\\n')}\n \n export function loadAllTypes(_r: MoveCoder) {\n ${dependedAccounts.map((a) => `_${a}.loadAllTypes(_r)`).join('\\n')}\n\n ${this.modules\n .map((m) => {\n if (m.abi) {\n return `_r.load(${normalizeToJSName(m.abi.name)}.ABI)`\n }\n console.error('Find Module with empty ABI')\n return ''\n })\n .join('\\n')}\n }\n ` // source\n\n return [\n {\n fileName: this.config.fileName + '.ts',\n fileContent: source,\n },\n ]\n }\n}\n\nfunction generateNetworkOption(network: AptosNetwork) {\n switch (network) {\n case AptosNetwork.TEST_NET:\n return 'TEST_NET'\n }\n return 'MAIN_NET'\n}\n\nfunction generateModule(moduleByteCode: MoveModuleBytecode, network: AptosNetwork) {\n if (!moduleByteCode.abi) {\n return ''\n }\n const module = moduleByteCode.abi\n\n const functions = module.exposed_functions.map((f) => generateOnEntryFunctions(module, f)).filter((s) => s !== '')\n\n const eventStructs = getEventStructs(module)\n const eventTypes = new Set(eventStructs.keys())\n const events = Array.from(eventStructs.values())\n .map((e) => generateOnEvents(module, e))\n .filter((s) => s !== '')\n const structs = module.structs.map((s) => generateStructs(module, s, eventTypes))\n const callArgs = module.exposed_functions.map((f) => generateCallArgsStructs(module, f))\n\n const moduleName = normalizeToJSName(module.name)\n let processor = ''\n if (functions.length > 0 || events.length > 0) {\n processor = `export class ${moduleName} extends AptosBaseProcessor {\n\n constructor(options: AptosBindOptions) {\n super(\"${module.name}\", options)\n }\n static DEFAULT_OPTIONS: AptosBindOptions = {\n address: \"${module.address}\",\n network: AptosNetwork.${generateNetworkOption(network)} \n }\n\n static bind(options: Partial<AptosBindOptions> = {}): ${moduleName} {\n return new ${moduleName}({ ...${moduleName}.DEFAULT_OPTIONS, ...options })\n }\n \n ${functions.join('\\n')}\n \n ${events.join('\\n')}\n \n loadTypesInternal(registry: MoveCoder) {\n loadAllTypes(registry)\n }\n }\n `\n }\n\n return `\n ${processor}\n\n export namespace ${moduleName} {\n ${structs.join('\\n')}\n \n ${callArgs.join('\\n')}\n \n export function loadTypes(_r: MoveCoder) {\n loadAllTypes(_r)\n }\n export const ABI: MoveModule = JSON.parse('${JSON.stringify(module)}')\n }\n `\n}\n\nfunction generateStructs(module: MoveModule, struct: MoveStruct, events: Set<string>) {\n const genericString = generateStructTypeParameters(struct)\n const genericStringAny = generateStructTypeParameters(struct, true)\n\n const structName = normalizeToJSName(struct.name)\n\n const fields = struct.fields.map((field) => {\n return `${field.name}: ${generateType(field.type, module.address)}`\n })\n\n let eventPayload = ''\n if (events.has(moduleQname(module) + SPLITTER + struct.name)) {\n eventPayload = `\n export interface ${structName}Instance extends \n TypedEventInstance<${structName}${genericStringAny}> {\n data_decoded: ${structName}${genericStringAny}\n type_arguments: [${struct.generic_type_params.map((_) => 'string').join(', ')}]\n }\n `\n }\n\n return `\n export class ${structName}${genericString} {\n static TYPE_QNAME = '${module.address}::${module.name}::${struct.name}'\n ${fields.join('\\n')} \n }\n \n ${eventPayload}\n `\n}\n\nfunction generateFunctionTypeParameters(func: MoveFunction) {\n let genericString = ''\n if (func.generic_type_params && func.generic_type_params.length > 0) {\n const params = func.generic_type_params\n .map((v, idx) => {\n return `T${idx}=any`\n })\n .join(',')\n genericString = `<${params}>`\n }\n return genericString\n}\n\nfunction generateStructTypeParameters(struct: MoveStruct, useAny = false) {\n let genericString = ''\n\n if (struct.generic_type_params && struct.generic_type_params.length > 0) {\n const params = struct.generic_type_params\n .map((v, idx) => {\n return useAny ? 'any' : 'T' + idx\n })\n .join(',')\n genericString = `<${params}>`\n }\n return genericString\n}\n\nfunction generateCallArgsStructs(module: MoveModule, func: MoveFunction) {\n if (!func.is_entry) {\n return\n }\n\n const fields = getMeaningfulFunctionParams(func).map((param) => {\n return `${generateType(param, module.address)}`\n })\n\n const camelFuncName = capitalizeFirstChar(camelCase(func.name))\n\n const genericString = generateFunctionTypeParameters(func)\n return `\n export interface ${camelFuncName}Payload${genericString}\n extends TypedEntryFunctionPayload<[${fields.join(',')}]> {\n arguments_decoded: [${fields.join(',')}],\n type_arguments: [${func.generic_type_params.map((_) => 'string').join(', ')}]\n }\n `\n}\n\nfunction generateOnEntryFunctions(module: MoveModule, func: MoveFunction) {\n if (!func.is_entry) {\n return ''\n }\n\n // const genericString = generateFunctionTypeParameters(func)\n const moduleName = normalizeToJSName(module.name)\n\n const camelFuncName = capitalizeFirstChar(camelCase(func.name))\n const source = `\n onEntry${camelFuncName}(func: (call: ${moduleName}.${camelFuncName}Payload, ctx: AptosContext) => void, filter?: CallFilter, fetchConfig?: MoveFetchConfig): ${moduleName} {\n this.onEntryFunctionCall(func, {\n ...filter,\n function: '${module.name}::${func.name}'\n },\n fetchConfig)\n return this\n }`\n\n return source\n}\n\nfunction getEventStructs(module: MoveModule) {\n const qname = moduleQname(module)\n const structMap = new Map<string, MoveStruct>()\n const eventMap = new Map<string, MoveStruct>()\n\n for (const struct of module.structs) {\n structMap.set(qname + SPLITTER + struct.name, struct)\n }\n\n for (const struct of module.structs) {\n for (const field of struct.fields) {\n const t = parseMoveType(field.type)\n if (t.qname === '0x1::event::EventHandle') {\n const event = t.typeArgs[0].qname\n const eventStruct = structMap.get(event)\n if (eventStruct) {\n eventMap.set(event, eventStruct)\n }\n }\n }\n }\n\n return eventMap\n}\n\nfunction generateOnEvents(module: MoveModule, struct: MoveStruct): string {\n // for struct that has drop + store\n // if (!isEvent(struct, module)) {\n // return ''\n // }\n\n // const genericString = generateStructTypeParameters(struct)\n\n const moduleName = normalizeToJSName(module.name)\n const source = `\n onEvent${struct.name}(func: (event: ${moduleName}.${normalizeToJSName(\n struct.name\n )}Instance, ctx: AptosContext) => void, fetchConfig?: MoveFetchConfig): ${moduleName} {\n this.onEvent(func, {\n type: '${module.name}::${struct.name}'\n },\n fetchConfig)\n return this\n }\n `\n return source\n}\n\nfunction capitalizeFirstChar(input: string): string {\n if (!input) {\n return input\n }\n return input[0].toUpperCase() + (input.length > 1 ? input.substring(1) : '')\n}\n"]}
|
|
1
|
+
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../../src/aptos/codegen/codegen.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs'\nimport { MoveModuleBytecode, toNeutralModule } from '../move-types.js'\nimport { moduleQname, SPLITTER, TypeDescriptor } from '../../move/index.js'\nimport chalk from 'chalk'\nimport { AptosNetwork } from '../network.js'\nimport { AptosClient } from 'aptos-sdk'\nimport { getMeaningfulFunctionParams } from '../utils.js'\nimport { NeutralMoveModule, NeutralMoveStruct } from '../../move/neutral-models.js'\nimport { AbstractCodegen } from '../../move/abstract-codegen.js'\n\nexport async function codegen(abisDir: string, outDir = 'src/types/aptos') {\n if (!fs.existsSync(abisDir)) {\n return\n }\n console.log(chalk.green('Generated Types for Aptos'))\n const gen = new AptosCodegen()\n await gen.generate(abisDir, outDir)\n}\n\nfunction getRpcEndpoint(network: AptosNetwork): string {\n switch (network) {\n case AptosNetwork.TEST_NET:\n return 'https://testnet.aptoslabs.com/'\n }\n return 'https://mainnet.aptoslabs.com/'\n}\n\nfunction getRpcClient(network: AptosNetwork): AptosClient {\n return new AptosClient(getRpcEndpoint(network))\n}\n\nclass AptosCodegen extends AbstractCodegen<MoveModuleBytecode[], AptosNetwork> {\n ADDRESS_TYPE = 'Address'\n MAIN_NET = AptosNetwork.MAIN_NET\n TEST_NET = AptosNetwork.TEST_NET\n PREFIX = 'Aptos'\n\n async fetchModules(account: string, network: AptosNetwork): Promise<MoveModuleBytecode[]> {\n const client = getRpcClient(network)\n return await client.getAccountModules(account)\n }\n\n toNeutral(modules: MoveModuleBytecode[]): NeutralMoveModule[] {\n return modules.flatMap((m) => (m.abi ? [toNeutralModule(m)] : []))\n }\n\n getMeaningfulFunctionParams(params: TypeDescriptor[]): TypeDescriptor[] {\n return getMeaningfulFunctionParams(params)\n }\n\n getEventStructs(module: NeutralMoveModule) {\n const qname = moduleQname(module)\n const structMap = new Map<string, NeutralMoveStruct>()\n const eventMap = new Map<string, NeutralMoveStruct>()\n\n for (const struct of module.structs) {\n structMap.set(qname + SPLITTER + struct.name, struct)\n }\n\n for (const struct of module.structs) {\n for (const field of struct.fields) {\n const t = field.type\n if (t.qname === '0x1::event::EventHandle') {\n const event = t.typeArgs[0].qname\n const eventStruct = structMap.get(event)\n if (eventStruct) {\n eventMap.set(event, eventStruct)\n }\n }\n }\n }\n\n return eventMap\n }\n}\n"]}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../../src/aptos/codegen/types.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,YAAY,CAAC,UAAU,CAAC,CAAA;IACxB,IAAI,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QACtD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACtB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM,IAAI,GAAG;IACX,IAAI,EAAE,wBAAwB;IAC9B,cAAc,EAAE,EAAE;IAClB,SAAS,EAAE,CAAC,oEAAoE,CAAC;IACjF,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;IACtB,QAAQ,EAAE,oCAAoC;CAC/C,CAAA","sourcesContent":["import { MOVE_CODER } from '../move-coder.js'\nimport { loadAllTypes } from '../builtin/0x1.js'\n\ndescribe('type decode', () => {\n loadAllTypes(MOVE_CODER)\n test('decode function payload', async () => {\n const decoded = MOVE_CODER.decodeFunctionPayload(data)\n console.log(decoded)\n })\n})\n\nconst data = {\n type: 'entry_function_payload',\n type_arguments: [],\n arguments: ['0xaaaf981fec16d967eb79bb51b4c6d39e75acb3482c6dabddb19ca9adbfceee80'],\n code: { bytecode: '' },\n function: '0x1::aptos_account::create_account',\n}\n"]}
|
package/lib/aptos/models.d.ts
CHANGED
|
@@ -19,11 +19,3 @@ export type TypedMoveResource<T> = MoveResource & {
|
|
|
19
19
|
data_decoded: T;
|
|
20
20
|
type_arguments: string[];
|
|
21
21
|
};
|
|
22
|
-
export interface StructWithTag {
|
|
23
|
-
type: string;
|
|
24
|
-
data: any;
|
|
25
|
-
}
|
|
26
|
-
export interface StructWithType<T> extends StructWithTag {
|
|
27
|
-
data_decoded: T;
|
|
28
|
-
type_arguments: string[];
|
|
29
|
-
}
|
package/lib/aptos/models.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/aptos/models.ts"],"names":[],"mappings":"","sourcesContent":["import { Event, MoveResource, TransactionPayload_EntryFunctionPayload } from './move-types.js'\n\nexport type EventInstance = Event & {\n version: string\n}\n\nexport type TypedEventInstance<T> = EventInstance & {\n /**\n * decoded data using ABI, undefined if there is decoding error, usually because the ABI/data mismatch\n */\n data_decoded: T\n\n type_arguments: string[]\n}\n\n// Don't use intermediate type to make IDE happier\nexport type TypedEntryFunctionPayload<T extends Array<any>> = TransactionPayload_EntryFunctionPayload & {\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\nexport type TypedMoveResource<T> = MoveResource & {\n data_decoded: T\n type_arguments: string[]\n}\n
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/aptos/models.ts"],"names":[],"mappings":"","sourcesContent":["import { Event, MoveResource, TransactionPayload_EntryFunctionPayload } from './move-types.js'\n\nexport type EventInstance = Event & {\n version: string\n}\n\nexport type TypedEventInstance<T> = EventInstance & {\n /**\n * decoded data using ABI, undefined if there is decoding error, usually because the ABI/data mismatch\n */\n data_decoded: T\n\n type_arguments: string[]\n}\n\n// Don't use intermediate type to make IDE happier\nexport type TypedEntryFunctionPayload<T extends Array<any>> = TransactionPayload_EntryFunctionPayload & {\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\nexport type TypedMoveResource<T> = MoveResource & {\n data_decoded: T\n type_arguments: string[]\n}\n"]}
|
|
@@ -1,21 +1,12 @@
|
|
|
1
|
-
import { Event,
|
|
2
|
-
import { TypeDescriptor } from './types.js';
|
|
1
|
+
import { Event, MoveModuleBytecode, MoveResource, TransactionPayload_EntryFunctionPayload } from './move-types.js';
|
|
3
2
|
import { TypedEventInstance, TypedMoveResource } from './models.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
private funcMapping;
|
|
8
|
-
contains(account: string, name: string): boolean;
|
|
9
|
-
load(module: MoveModule): void;
|
|
10
|
-
getMoveStruct(type: string): MoveStruct;
|
|
11
|
-
getMoveFunction(type: string): MoveFunction;
|
|
12
|
-
decode(data: any, type: TypeDescriptor): any;
|
|
3
|
+
import { AbstractMoveCoder } from '../move/abstract-move-coder.js';
|
|
4
|
+
export declare class MoveCoder extends AbstractMoveCoder<Event | MoveResource> {
|
|
5
|
+
load(module: MoveModuleBytecode): void;
|
|
13
6
|
decodeEvent<T>(event: Event): TypedEventInstance<T> | undefined;
|
|
14
7
|
filterAndDecodeEvents<T>(typeQname: string, resources: Event[]): TypedEventInstance<T>[];
|
|
15
8
|
decodeResource<T>(res: MoveResource): TypedMoveResource<T> | undefined;
|
|
16
9
|
filterAndDecodeResources<T>(typeQname: string, resources: MoveResource[]): TypedMoveResource<T>[];
|
|
17
|
-
private filterAndDecodeInternal;
|
|
18
|
-
private decodedInternal;
|
|
19
10
|
decodeFunctionPayload(payload: TransactionPayload_EntryFunctionPayload): TransactionPayload_EntryFunctionPayload;
|
|
20
11
|
}
|
|
21
12
|
export declare const MOVE_CODER: MoveCoder;
|