@sentio/sdk 1.21.3 → 1.22.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/lib/aptos/aptos-processor.d.ts +1 -1
- package/lib/aptos/aptos-processor.js +9 -5
- package/lib/aptos/aptos-processor.js.map +1 -1
- package/lib/aptos-codegen/codegen.js +27 -24
- package/lib/aptos-codegen/codegen.js.map +1 -1
- package/lib/builtin/aptos/0x1.d.ts +128 -16
- package/lib/builtin/aptos/0x1.js.map +1 -1
- package/lib/builtin/aptos/0x3.d.ts +27 -2
- package/lib/builtin/aptos/0x3.js.map +1 -1
- package/lib/tests/aptos.test.js +9 -5
- package/lib/tests/aptos.test.js.map +1 -1
- package/lib/tests/souffl3.js.map +1 -1
- package/lib/tests/types/aptos/souffle.d.ts +50 -32
- package/lib/tests/types/aptos/souffle.js.map +1 -1
- package/package.json +1 -1
- package/src/aptos/aptos-processor.ts +10 -6
- package/src/aptos-codegen/codegen.ts +28 -25
- package/src/builtin/aptos/0x1.ts +136 -34
- package/src/builtin/aptos/0x3.ts +28 -3
- package/src/tests/aptos.test.ts +13 -5
- package/src/tests/souffl3.ts +2 -2
- package/src/tests/types/aptos/souffle.ts +66 -51
@@ -22,7 +22,7 @@ export interface ArgumentsFilter {
|
|
22
22
|
}
|
23
23
|
declare class EventHandler {
|
24
24
|
filters: EventFilter[];
|
25
|
-
handler: (event:
|
25
|
+
handler: (event: Transaction_UserTransaction) => Promise<ProcessResult>;
|
26
26
|
}
|
27
27
|
declare class CallHandler {
|
28
28
|
filters: FunctionNameAndCallFilter[];
|
@@ -62,11 +62,15 @@ class AptosBaseProcessor {
|
|
62
62
|
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
63
63
|
const processor = this;
|
64
64
|
this.eventHandlers.push({
|
65
|
-
handler: async function (
|
66
|
-
const ctx = new _1.AptosContext(processor.moduleName, processor.config.address, long_1.default.fromString(
|
67
|
-
if (
|
68
|
-
const
|
69
|
-
|
65
|
+
handler: async function (txn) {
|
66
|
+
const ctx = new _1.AptosContext(processor.moduleName, processor.config.address, long_1.default.fromString(txn.version), txn);
|
67
|
+
if (txn && txn.events) {
|
68
|
+
const events = txn.events;
|
69
|
+
txn.events = [];
|
70
|
+
for (const evt of events) {
|
71
|
+
const decoded = processor.decodeEvent(evt);
|
72
|
+
handler(decoded, ctx);
|
73
|
+
}
|
70
74
|
}
|
71
75
|
return {
|
72
76
|
gauges: ctx.gauges,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"aptos-processor.js","sourceRoot":"","sources":["../../src/aptos/aptos-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { ProcessResult } from '../gen'\nimport {\n AptosBindOptions,\n AptosContext,\n AptosNetwork,\n Transaction_UserTransaction,\n TransactionPayload_EntryFunctionPayload,\n TypedEntryFunctionPayload,\n TypedEventInstance,\n TypeRegistry,\n} from '.'\n\nimport Long from 'long'\nimport { APTOS_MAINNET_ID, APTOS_TESTNET_ID } from '../utils/chain'\nimport { EventInstance, GLOBAL_TYPE_REGISTRY } from './types'\nimport { parseMoveType } from '../aptos-codegen/typegen'\n\ntype IndexConfigure = {\n address: string\n network: AptosNetwork\n startVersion: Long\n // endSeqNumber?: Long\n}\n\n// TODO extends ArgumentsFilter\nexport interface EventFilter {\n type: string\n}\n\nexport interface FunctionNameAndCallFilter extends CallFilter {\n function: string\n}\n\n// TODO extends ArgumentsFilter\nexport interface CallFilter {\n includeFailed?: boolean\n typeArguments?: string[]\n}\n\nexport interface ArgumentsFilter {\n arguments?: string[]\n}\n\nclass EventHandler {\n filters: EventFilter[]\n handler: (event: EventInstance) => Promise<ProcessResult>\n}\n\nclass CallHandler {\n filters: FunctionNameAndCallFilter[]\n handler: (call: Transaction_UserTransaction) => Promise<ProcessResult>\n}\n\nexport class AptosBaseProcessor {\n readonly moduleName: string\n config: IndexConfigure\n eventHandlers: EventHandler[] = []\n callHandlers: CallHandler[] = []\n\n constructor(moduleName: string, options: AptosBindOptions) {\n this.moduleName = moduleName\n this.configure(options)\n global.PROCESSOR_STATE.aptosProcessors.push(this)\n }\n\n // getABI(): MoveModule | undefined {\n // return undefined\n // }\n\n public onTransaction(\n handler: (transaction: Transaction_UserTransaction, ctx: AptosContext) => void\n ): AptosBaseProcessor {\n const address = this.config.address\n const moduleName = this.moduleName\n this.callHandlers.push({\n handler: async function (tx) {\n const ctx = new AptosContext(moduleName, address, Long.fromString(tx.version), tx)\n if (tx) {\n handler(tx, ctx)\n }\n return {\n gauges: ctx.gauges,\n counters: ctx.counters,\n logs: ctx.logs,\n }\n },\n filters: [],\n })\n return this\n }\n\n public onEvent(\n handler: (event: EventInstance, ctx: AptosContext) => void,\n filter: EventFilter | EventFilter[]\n ): AptosBaseProcessor {\n let _filters: EventFilter[] = []\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const processor = this\n\n this.eventHandlers.push({\n handler: async function (event) {\n const ctx = new AptosContext(processor.moduleName, processor.config.address, Long.fromString(event.version))\n if (event) {\n const decoded = processor.decodeEvent(event)\n handler(decoded, ctx)\n }\n return {\n gauges: ctx.gauges,\n counters: ctx.counters,\n logs: ctx.logs,\n }\n },\n filters: _filters,\n })\n return this\n }\n\n public onEntryFunctionCall(\n handler: (call: TransactionPayload_EntryFunctionPayload, ctx: AptosContext) => void,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[]\n ): AptosBaseProcessor {\n let _filters: FunctionNameAndCallFilter[] = []\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const processor = this\n\n this.callHandlers.push({\n handler: async function (tx) {\n const ctx = new AptosContext(processor.moduleName, processor.config.address, Long.fromString(tx.version), tx)\n if (tx) {\n const payload = tx.payload as TransactionPayload_EntryFunctionPayload\n const decoded = processor.decodeFunctionPayload(payload)\n handler(decoded, ctx)\n }\n return {\n gauges: ctx.gauges,\n counters: ctx.counters,\n logs: ctx.logs,\n }\n },\n filters: _filters,\n })\n return this\n }\n\n private configure(options: AptosBindOptions) {\n let startVersion = Long.ZERO\n if (options.startVersion) {\n startVersion = Long.fromValue(options.startVersion)\n }\n\n this.config = {\n startVersion: startVersion,\n address: options.address,\n network: options.network || AptosNetwork.TEST_NET,\n }\n }\n\n getChainId(): string {\n switch (this.config.network) {\n case AptosNetwork.TEST_NET:\n return APTOS_TESTNET_ID\n case AptosNetwork.MAIN_NET:\n return APTOS_MAINNET_ID\n }\n }\n\n loadTypes(registry: TypeRegistry) {\n if (registry.contains(this.config.address, this.moduleName)) {\n return\n }\n this.loadTypesInternal(registry)\n }\n\n protected loadTypesInternal(registry: TypeRegistry) {\n // should be override by subclass\n }\n\n private decodeEvent(event: EventInstance): EventInstance {\n const registry = GLOBAL_TYPE_REGISTRY\n this.loadTypes(registry)\n // TODO check if module is not loaded\n\n const typeDescriptor = parseMoveType(event.type)\n const typeArguments = typeDescriptor.typeArgs.map((t) => t.getSignature())\n // TODO check move structure's type param match type args, also maybe\n // use type arguments for decoding\n\n let dataTyped = undefined\n try {\n dataTyped = registry.decode(event.data, typeDescriptor)\n } catch (e) {\n console.warn('Decoding error for ', event.type)\n return event\n }\n\n return { ...event, data_typed: dataTyped, type_arguments: typeArguments } as TypedEventInstance<any>\n }\n\n private decodeFunctionPayload(\n payload: TransactionPayload_EntryFunctionPayload\n ): TransactionPayload_EntryFunctionPayload {\n const registry = GLOBAL_TYPE_REGISTRY\n this.loadTypes(registry)\n const argumentsTyped: any[] = []\n\n try {\n const func = registry.getMoveFunction(payload.function)\n for (const [idx, arg] of payload.arguments.entries()) {\n // TODO consider apply payload.type_arguments, but this might be hard since we don't code gen for them\n const argType = parseMoveType(func.params[idx + 1])\n argumentsTyped.push(registry.decode(arg, argType))\n }\n } catch (e) {\n console.warn('Decoding error for ', payload.function)\n return payload\n }\n\n return { ...payload, arguments_typed: argumentsTyped } as TypedEntryFunctionPayload<any>\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"aptos-processor.js","sourceRoot":"","sources":["../../src/aptos/aptos-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { ProcessResult } from '../gen'\nimport {\n AptosBindOptions,\n AptosContext,\n AptosNetwork,\n Transaction_UserTransaction,\n TransactionPayload_EntryFunctionPayload,\n TypedEntryFunctionPayload,\n TypedEventInstance,\n TypeRegistry,\n} from '.'\n\nimport Long from 'long'\nimport { APTOS_MAINNET_ID, APTOS_TESTNET_ID } from '../utils/chain'\nimport { EventInstance, GLOBAL_TYPE_REGISTRY } from './types'\nimport { parseMoveType } from '../aptos-codegen/typegen'\n\ntype IndexConfigure = {\n address: string\n network: AptosNetwork\n startVersion: Long\n // endSeqNumber?: Long\n}\n\n// TODO extends ArgumentsFilter\nexport interface EventFilter {\n type: string\n}\n\nexport interface FunctionNameAndCallFilter extends CallFilter {\n function: string\n}\n\n// TODO extends ArgumentsFilter\nexport interface CallFilter {\n includeFailed?: boolean\n typeArguments?: string[]\n}\n\nexport interface ArgumentsFilter {\n arguments?: string[]\n}\n\nclass EventHandler {\n filters: EventFilter[]\n handler: (event: Transaction_UserTransaction) => Promise<ProcessResult>\n}\n\nclass CallHandler {\n filters: FunctionNameAndCallFilter[]\n handler: (call: Transaction_UserTransaction) => Promise<ProcessResult>\n}\n\nexport class AptosBaseProcessor {\n readonly moduleName: string\n config: IndexConfigure\n eventHandlers: EventHandler[] = []\n callHandlers: CallHandler[] = []\n\n constructor(moduleName: string, options: AptosBindOptions) {\n this.moduleName = moduleName\n this.configure(options)\n global.PROCESSOR_STATE.aptosProcessors.push(this)\n }\n\n // getABI(): MoveModule | undefined {\n // return undefined\n // }\n\n public onTransaction(\n handler: (transaction: Transaction_UserTransaction, ctx: AptosContext) => void\n ): AptosBaseProcessor {\n const address = this.config.address\n const moduleName = this.moduleName\n this.callHandlers.push({\n handler: async function (tx) {\n const ctx = new AptosContext(moduleName, address, Long.fromString(tx.version), tx)\n if (tx) {\n handler(tx, ctx)\n }\n return {\n gauges: ctx.gauges,\n counters: ctx.counters,\n logs: ctx.logs,\n }\n },\n filters: [],\n })\n return this\n }\n\n public onEvent(\n handler: (event: EventInstance, ctx: AptosContext) => void,\n filter: EventFilter | EventFilter[]\n ): AptosBaseProcessor {\n let _filters: EventFilter[] = []\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const processor = this\n\n this.eventHandlers.push({\n handler: async function (txn) {\n const ctx = new AptosContext(processor.moduleName, processor.config.address, Long.fromString(txn.version), txn)\n if (txn && txn.events) {\n const events = txn.events\n txn.events = []\n for (const evt of events) {\n const decoded = processor.decodeEvent(evt as EventInstance)\n handler(decoded, ctx)\n }\n }\n return {\n gauges: ctx.gauges,\n counters: ctx.counters,\n logs: ctx.logs,\n }\n },\n filters: _filters,\n })\n return this\n }\n\n public onEntryFunctionCall(\n handler: (call: TransactionPayload_EntryFunctionPayload, ctx: AptosContext) => void,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[]\n ): AptosBaseProcessor {\n let _filters: FunctionNameAndCallFilter[] = []\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const processor = this\n\n this.callHandlers.push({\n handler: async function (tx) {\n const ctx = new AptosContext(processor.moduleName, processor.config.address, Long.fromString(tx.version), tx)\n if (tx) {\n const payload = tx.payload as TransactionPayload_EntryFunctionPayload\n const decoded = processor.decodeFunctionPayload(payload)\n handler(decoded, ctx)\n }\n return {\n gauges: ctx.gauges,\n counters: ctx.counters,\n logs: ctx.logs,\n }\n },\n filters: _filters,\n })\n return this\n }\n\n private configure(options: AptosBindOptions) {\n let startVersion = Long.ZERO\n if (options.startVersion) {\n startVersion = Long.fromValue(options.startVersion)\n }\n\n this.config = {\n startVersion: startVersion,\n address: options.address,\n network: options.network || AptosNetwork.TEST_NET,\n }\n }\n\n getChainId(): string {\n switch (this.config.network) {\n case AptosNetwork.TEST_NET:\n return APTOS_TESTNET_ID\n case AptosNetwork.MAIN_NET:\n return APTOS_MAINNET_ID\n }\n }\n\n loadTypes(registry: TypeRegistry) {\n if (registry.contains(this.config.address, this.moduleName)) {\n return\n }\n this.loadTypesInternal(registry)\n }\n\n protected loadTypesInternal(registry: TypeRegistry) {\n // should be override by subclass\n }\n\n private decodeEvent(event: EventInstance): EventInstance {\n const registry = GLOBAL_TYPE_REGISTRY\n this.loadTypes(registry)\n // TODO check if module is not loaded\n\n const typeDescriptor = parseMoveType(event.type)\n const typeArguments = typeDescriptor.typeArgs.map((t) => t.getSignature())\n // TODO check move structure's type param match type args, also maybe\n // use type arguments for decoding\n\n let dataTyped = undefined\n try {\n dataTyped = registry.decode(event.data, typeDescriptor)\n } catch (e) {\n console.warn('Decoding error for ', event.type)\n return event\n }\n\n return { ...event, data_typed: dataTyped, type_arguments: typeArguments } as TypedEventInstance<any>\n }\n\n private decodeFunctionPayload(\n payload: TransactionPayload_EntryFunctionPayload\n ): TransactionPayload_EntryFunctionPayload {\n const registry = GLOBAL_TYPE_REGISTRY\n this.loadTypes(registry)\n const argumentsTyped: any[] = []\n\n try {\n const func = registry.getMoveFunction(payload.function)\n for (const [idx, arg] of payload.arguments.entries()) {\n // TODO consider apply payload.type_arguments, but this might be hard since we don't code gen for them\n const argType = parseMoveType(func.params[idx + 1])\n argumentsTyped.push(registry.decode(arg, argType))\n }\n } catch (e) {\n console.warn('Decoding error for ', payload.function)\n return payload\n }\n\n return { ...payload, arguments_typed: argumentsTyped } as TypedEntryFunctionPayload<any>\n }\n}\n"]}
|
@@ -179,15 +179,17 @@ function generateModule(moduleByteCode, dependedModules) {
|
|
179
179
|
}
|
180
180
|
function generateStructs(module, struct) {
|
181
181
|
const genericString = generateStructTypeParameters(struct);
|
182
|
+
const genericStringAny = generateStructTypeParameters(struct, true);
|
182
183
|
const fields = struct.fields.map((field) => {
|
183
184
|
return `${field.name}: ${(0, typegen_1.generateType)(field.type)}`;
|
184
185
|
});
|
185
186
|
let eventPayload = '';
|
186
187
|
if (isEvent(struct)) {
|
187
188
|
eventPayload = `
|
188
|
-
export interface ${struct.name}Instance
|
189
|
-
aptos.TypedEventInstance<${struct.name}${
|
190
|
-
data_typed: ${struct.name}${
|
189
|
+
export interface ${struct.name}Instance extends
|
190
|
+
aptos.TypedEventInstance<${struct.name}${genericStringAny}> {
|
191
|
+
data_typed: ${struct.name}${genericStringAny}
|
192
|
+
type_arguments: [${struct.generic_type_params.map((_) => 'string').join(', ')}]
|
191
193
|
}
|
192
194
|
`;
|
193
195
|
}
|
@@ -199,24 +201,24 @@ function generateStructs(module, struct) {
|
|
199
201
|
${eventPayload}
|
200
202
|
`;
|
201
203
|
}
|
202
|
-
function generateFunctionTypeParameters(func) {
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
}
|
214
|
-
function generateStructTypeParameters(struct) {
|
204
|
+
// function generateFunctionTypeParameters(func: MoveFunction) {
|
205
|
+
// let genericString = ''
|
206
|
+
// if (func.generic_type_params && func.generic_type_params.length > 0) {
|
207
|
+
// const params = func.generic_type_params
|
208
|
+
// .map((v, idx) => {
|
209
|
+
// return 'T' + idx
|
210
|
+
// })
|
211
|
+
// .join(',')
|
212
|
+
// genericString = `<${params}>`
|
213
|
+
// }
|
214
|
+
// return genericString
|
215
|
+
// }
|
216
|
+
function generateStructTypeParameters(struct, useAny = false) {
|
215
217
|
let genericString = '';
|
216
218
|
if (struct.generic_type_params && struct.generic_type_params.length > 0) {
|
217
219
|
const params = struct.generic_type_params
|
218
220
|
.map((v, idx) => {
|
219
|
-
return 'T' + idx;
|
221
|
+
return useAny ? 'any' : 'T' + idx;
|
220
222
|
})
|
221
223
|
.join(',');
|
222
224
|
genericString = `<${params}>`;
|
@@ -233,11 +235,12 @@ function generateCallArgsStructs(module, func) {
|
|
233
235
|
return `${(0, typegen_1.generateType)(param)}`;
|
234
236
|
});
|
235
237
|
const camelFuncName = capitalizeFirstChar(camelize(func.name));
|
236
|
-
const genericString = generateFunctionTypeParameters(func)
|
238
|
+
// const genericString = generateFunctionTypeParameters(func)
|
237
239
|
return `
|
238
|
-
export interface ${camelFuncName}Payload
|
240
|
+
export interface ${camelFuncName}Payload
|
239
241
|
extends aptos.TypedEntryFunctionPayload<[${fields.join(',')}]> {
|
240
|
-
arguments_typed: [${fields.join(',')}]
|
242
|
+
arguments_typed: [${fields.join(',')}],
|
243
|
+
type_arguments: [${func.generic_type_params.map((_) => 'string').join(', ')}]
|
241
244
|
}
|
242
245
|
`;
|
243
246
|
}
|
@@ -245,10 +248,10 @@ function generateOnEntryFunctions(module, func) {
|
|
245
248
|
if (!func.is_entry) {
|
246
249
|
return '';
|
247
250
|
}
|
248
|
-
const genericString = generateFunctionTypeParameters(func)
|
251
|
+
// const genericString = generateFunctionTypeParameters(func)
|
249
252
|
const camelFuncName = capitalizeFirstChar(camelize(func.name));
|
250
253
|
const source = `
|
251
|
-
onEntry${camelFuncName}
|
254
|
+
onEntry${camelFuncName}(func: (call: ${module.name}.${camelFuncName}Payload, ctx: aptos.AptosContext) => void, filter?: aptos.CallFilter): ${module.name} {
|
252
255
|
this.onEntryFunctionCall(func, {
|
253
256
|
...filter,
|
254
257
|
function: '${module.name}::${func.name}'
|
@@ -265,9 +268,9 @@ function generateOnEvents(module, struct) {
|
|
265
268
|
if (!isEvent(struct)) {
|
266
269
|
return '';
|
267
270
|
}
|
268
|
-
const genericString = generateStructTypeParameters(struct)
|
271
|
+
// const genericString = generateStructTypeParameters(struct)
|
269
272
|
const source = `
|
270
|
-
onEvent${struct.name}
|
273
|
+
onEvent${struct.name}(func: (event: ${module.name}.${struct.name}Instance, ctx: aptos.AptosContext) => void): ${module.name} {
|
271
274
|
this.onEvent(func, {
|
272
275
|
type: '${module.name}::${struct.name}'
|
273
276
|
})
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/aptos-codegen/codegen.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs'\nimport path from 'path'\nimport prettier from 'prettier'\nimport { MoveFunction, MoveModule, MoveStruct, MoveModuleBytecode } from 'aptos/src/generated'\nimport { generateType, AccountRegister } from './typegen'\nimport { isFrameworkAccount } from '../aptos/utils'\n\nexport function generate(srcDir: string, outputDir: string) {\n const files = fs.readdirSync(srcDir)\n outputDir = path.resolve(outputDir)\n\n fs.mkdirSync(outputDir, { recursive: true })\n\n const loader = new AccountRegister()\n\n // The first path, identify import relation and module name (filename) of those imports\n for (const file of files) {\n if (!file.endsWith('.json')) {\n continue\n }\n // Reading file is duplicated, but since they are small files probably file\n // TODO add file manager class\n const json = fs.readFileSync(path.join(srcDir, file), 'utf-8')\n const modules = JSON.parse(json)\n\n for (const module of modules) {\n if (module.abi) {\n loader.register(module.abi, path.basename(file, '.json'))\n }\n }\n }\n\n for (const file of files) {\n if (!file.endsWith('.json')) {\n continue\n }\n const codeGen = new AccountCodegen(loader, {\n srcFile: path.join(srcDir, file),\n outputDir: outputDir,\n })\n\n codeGen.generate()\n }\n\n // when generating user code, don't need to generate framework account\n loader.pendingAccounts.delete('0x1')\n loader.pendingAccounts.delete('0x2')\n loader.pendingAccounts.delete('0x3')\n\n if (loader.pendingAccounts.size > 0) {\n // TODO automatic download dependencies\n console.error('Missing ABIs from the following accounts', loader.pendingAccounts)\n }\n}\n\ninterface Config {\n srcFile: string\n outputDir: string\n}\n\nexport class AccountCodegen {\n modules: MoveModuleBytecode[]\n config: Config\n loader: AccountRegister\n\n constructor(loader: AccountRegister, config: Config) {\n const json = fs.readFileSync(config.srcFile, 'utf-8')\n this.modules = JSON.parse(json)\n this.config = config\n this.loader = loader\n }\n\n generate() {\n if (!this.modules) {\n return\n }\n const baseName = path.basename(this.config.srcFile, '.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 { aptos } from \"@sentio/sdk\"\n import { Address, MoveModule } from \"aptos/src/generated\"\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, moduleImported] of info.imports.entries()) {\n // Remap to user's filename if possible, TODO codepath not well tested\n let tsAccountModule = './' + (this.loader.accountImports.get(account)?.moduleName || account)\n if (isFrameworkAccount(account) && !isFrameworkAccount(address)) {\n // Decide where to find runtime library\n let srcRoot = 'lib'\n if (__dirname.includes('sdk/src/aptos-codegen')) {\n srcRoot = 'src'\n }\n tsAccountModule = `@sentio/sdk/${srcRoot}/builtin/aptos/${account}`\n }\n const items = Array.from(moduleImported)\n moduleImports.push(`import { ${items.join(',')} } from \"${tsAccountModule}\"`)\n\n // Ideally we should use per module's load types, but it doesn't matter since we are loading the entire\n // account modules anyway\n items.forEach((m) => dependedAccounts.push(m))\n }\n }\n\n let 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, dependedAccounts)).join('\\n')}\n \n function loadAllTypes(registry: aptos.TypeRegistry) {\n ${dependedAccounts.map((m) => `${m}.loadTypes(registry)`).join('\\n')}\n\n ${this.modules\n .map((m) => {\n return `registry.load(${m.abi?.name}.ABI)`\n })\n .join('\\n')}\n }\n ` // source\n\n source = prettier.format(source, { parser: 'typescript' })\n fs.writeFileSync(path.join(this.config.outputDir, baseName + '.ts'), source)\n }\n}\n\nfunction generateModule(moduleByteCode: MoveModuleBytecode, dependedModules: string[]) {\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 const events = module.structs.map((e) => generateOnEvents(module, e)).filter((s) => s !== '')\n const structs = module.structs.map((s) => generateStructs(module, s))\n const callArgs = module.exposed_functions.map((f) => generateCallArgsStructs(module, f))\n\n let processor = ''\n if (functions.length > 0 || events.length > 0) {\n processor = `export class ${module.name} extends aptos.AptosBaseProcessor {\n\n constructor(options: aptos.AptosBindOptions) {\n super(\"${module.name}\", options)\n }\n static DEFAULT_OPTIONS: aptos.AptosBindOptions = {\n address: \"${module.address}\",\n network: aptos.AptosNetwork.TEST_NET \n }\n\n static bind(options: Partial<aptos.AptosBindOptions> = {}): ${module.name} {\n return new ${module.name}({ ...${module.name}.DEFAULT_OPTIONS, ...options })\n }\n \n ${functions.join('\\n')}\n \n ${events.join('\\n')}\n \n loadTypesInternal(registry: aptos.TypeRegistry) {\n loadAllTypes(registry)\n }\n }\n `\n }\n\n return `\n ${processor}\n\n export namespace ${module.name} {\n ${structs.join('\\n')}\n \n ${callArgs.join('\\n')}\n \n export function loadTypes(registry: aptos.TypeRegistry) {\n loadAllTypes(registry)\n }\n export const ABI: MoveModule = JSON.parse('${JSON.stringify(module)}')\n }\n `\n}\n\nfunction generateStructs(module: MoveModule, struct: MoveStruct) {\n const genericString = generateStructTypeParameters(struct)\n\n const fields = struct.fields.map((field) => {\n return `${field.name}: ${generateType(field.type)}`\n })\n\n let eventPayload = ''\n if (isEvent(struct)) {\n eventPayload = `\n export interface ${struct.name}Instance${genericString} extends \n aptos.TypedEventInstance<${struct.name}${genericString}> {\n data_typed: ${struct.name}${genericString}\n }\n `\n }\n\n return `\n export class ${struct.name}${genericString} {\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\n })\n .join(',')\n genericString = `<${params}>`\n }\n return genericString\n}\n\nfunction generateStructTypeParameters(struct: MoveStruct) {\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 '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 // the first param is always signer so ignore\n // TODO check if there is any edge case\n const fields = func.params.slice(1).map((param) => {\n return `${generateType(param)}`\n })\n\n const camelFuncName = capitalizeFirstChar(camelize(func.name))\n\n const genericString = generateFunctionTypeParameters(func)\n return `\n export interface ${camelFuncName}Payload${genericString} \n extends aptos.TypedEntryFunctionPayload<[${fields.join(',')}]> {\n arguments_typed: [${fields.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\n const camelFuncName = capitalizeFirstChar(camelize(func.name))\n const source = `\n onEntry${camelFuncName}${genericString}(func: (call: ${module.name}.${camelFuncName}Payload${genericString}, ctx: aptos.AptosContext) => void, filter?: aptos.CallFilter): ${module.name} {\n this.onEntryFunctionCall(func, {\n ...filter,\n function: '${module.name}::${func.name}'\n })\n return this\n }`\n\n return source\n}\n\nfunction isEvent(struct: MoveStruct) {\n return struct.abilities.includes('drop') && struct.abilities.includes('store') && struct.name.endsWith('Event')\n}\n\nfunction generateOnEvents(module: MoveModule, struct: MoveStruct): string {\n // for struct that has drop + store\n if (!isEvent(struct)) {\n return ''\n }\n\n const genericString = generateStructTypeParameters(struct)\n\n const source = `\n onEvent${struct.name}${genericString}(func: (event: ${module.name}.${struct.name}Instance${genericString}, ctx: aptos.AptosContext) => void): ${module.name} {\n this.onEvent(func, {\n type: '${module.name}::${struct.name}'\n })\n return this\n }\n `\n return source\n}\n\nfunction camelize(input: string): string {\n return input\n .split('_')\n .reduce(\n (res, word, i) =>\n i === 0 ? word.toLowerCase() : `${res}${word.charAt(0).toUpperCase()}${word.substr(1).toLowerCase()}`,\n ''\n )\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 fs from 'fs'\nimport path from 'path'\nimport prettier from 'prettier'\nimport { MoveFunction, MoveModule, MoveStruct, MoveModuleBytecode } from 'aptos/src/generated'\nimport { generateType, AccountRegister } from './typegen'\nimport { isFrameworkAccount } from '../aptos/utils'\n\nexport function generate(srcDir: string, outputDir: string) {\n const files = fs.readdirSync(srcDir)\n outputDir = path.resolve(outputDir)\n\n fs.mkdirSync(outputDir, { recursive: true })\n\n const loader = new AccountRegister()\n\n // The first path, identify import relation and module name (filename) of those imports\n for (const file of files) {\n if (!file.endsWith('.json')) {\n continue\n }\n // Reading file is duplicated, but since they are small files probably file\n // TODO add file manager class\n const json = fs.readFileSync(path.join(srcDir, file), 'utf-8')\n const modules = JSON.parse(json)\n\n for (const module of modules) {\n if (module.abi) {\n loader.register(module.abi, path.basename(file, '.json'))\n }\n }\n }\n\n for (const file of files) {\n if (!file.endsWith('.json')) {\n continue\n }\n const codeGen = new AccountCodegen(loader, {\n srcFile: path.join(srcDir, file),\n outputDir: outputDir,\n })\n\n codeGen.generate()\n }\n\n // when generating user code, don't need to generate framework account\n loader.pendingAccounts.delete('0x1')\n loader.pendingAccounts.delete('0x2')\n loader.pendingAccounts.delete('0x3')\n\n if (loader.pendingAccounts.size > 0) {\n // TODO automatic download dependencies\n console.error('Missing ABIs from the following accounts', loader.pendingAccounts)\n }\n}\n\ninterface Config {\n srcFile: string\n outputDir: string\n}\n\nexport class AccountCodegen {\n modules: MoveModuleBytecode[]\n config: Config\n loader: AccountRegister\n\n constructor(loader: AccountRegister, config: Config) {\n const json = fs.readFileSync(config.srcFile, 'utf-8')\n this.modules = JSON.parse(json)\n this.config = config\n this.loader = loader\n }\n\n generate() {\n if (!this.modules) {\n return\n }\n const baseName = path.basename(this.config.srcFile, '.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 { aptos } from \"@sentio/sdk\"\n import { Address, MoveModule } from \"aptos/src/generated\"\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, moduleImported] of info.imports.entries()) {\n // Remap to user's filename if possible, TODO codepath not well tested\n let tsAccountModule = './' + (this.loader.accountImports.get(account)?.moduleName || account)\n if (isFrameworkAccount(account) && !isFrameworkAccount(address)) {\n // Decide where to find runtime library\n let srcRoot = 'lib'\n if (__dirname.includes('sdk/src/aptos-codegen')) {\n srcRoot = 'src'\n }\n tsAccountModule = `@sentio/sdk/${srcRoot}/builtin/aptos/${account}`\n }\n const items = Array.from(moduleImported)\n moduleImports.push(`import { ${items.join(',')} } from \"${tsAccountModule}\"`)\n\n // Ideally we should use per module's load types, but it doesn't matter since we are loading the entire\n // account modules anyway\n items.forEach((m) => dependedAccounts.push(m))\n }\n }\n\n let 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, dependedAccounts)).join('\\n')}\n \n function loadAllTypes(registry: aptos.TypeRegistry) {\n ${dependedAccounts.map((m) => `${m}.loadTypes(registry)`).join('\\n')}\n\n ${this.modules\n .map((m) => {\n return `registry.load(${m.abi?.name}.ABI)`\n })\n .join('\\n')}\n }\n ` // source\n\n source = prettier.format(source, { parser: 'typescript' })\n fs.writeFileSync(path.join(this.config.outputDir, baseName + '.ts'), source)\n }\n}\n\nfunction generateModule(moduleByteCode: MoveModuleBytecode, dependedModules: string[]) {\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 const events = module.structs.map((e) => generateOnEvents(module, e)).filter((s) => s !== '')\n const structs = module.structs.map((s) => generateStructs(module, s))\n const callArgs = module.exposed_functions.map((f) => generateCallArgsStructs(module, f))\n\n let processor = ''\n if (functions.length > 0 || events.length > 0) {\n processor = `export class ${module.name} extends aptos.AptosBaseProcessor {\n\n constructor(options: aptos.AptosBindOptions) {\n super(\"${module.name}\", options)\n }\n static DEFAULT_OPTIONS: aptos.AptosBindOptions = {\n address: \"${module.address}\",\n network: aptos.AptosNetwork.TEST_NET \n }\n\n static bind(options: Partial<aptos.AptosBindOptions> = {}): ${module.name} {\n return new ${module.name}({ ...${module.name}.DEFAULT_OPTIONS, ...options })\n }\n \n ${functions.join('\\n')}\n \n ${events.join('\\n')}\n \n loadTypesInternal(registry: aptos.TypeRegistry) {\n loadAllTypes(registry)\n }\n }\n `\n }\n\n return `\n ${processor}\n\n export namespace ${module.name} {\n ${structs.join('\\n')}\n \n ${callArgs.join('\\n')}\n \n export function loadTypes(registry: aptos.TypeRegistry) {\n loadAllTypes(registry)\n }\n export const ABI: MoveModule = JSON.parse('${JSON.stringify(module)}')\n }\n `\n}\n\nfunction generateStructs(module: MoveModule, struct: MoveStruct) {\n const genericString = generateStructTypeParameters(struct)\n const genericStringAny = generateStructTypeParameters(struct, true)\n\n const fields = struct.fields.map((field) => {\n return `${field.name}: ${generateType(field.type)}`\n })\n\n let eventPayload = ''\n if (isEvent(struct)) {\n eventPayload = `\n export interface ${struct.name}Instance extends \n aptos.TypedEventInstance<${struct.name}${genericStringAny}> {\n data_typed: ${struct.name}${genericStringAny}\n type_arguments: [${struct.generic_type_params.map((_) => 'string').join(', ')}]\n }\n `\n }\n\n return `\n export class ${struct.name}${genericString} {\n ${fields.join('\\n')} \n }\n \n ${eventPayload}\n `\n}\n\n// function 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\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 // the first param is always signer so ignore\n // TODO check if there is any edge case\n const fields = func.params.slice(1).map((param) => {\n return `${generateType(param)}`\n })\n\n const camelFuncName = capitalizeFirstChar(camelize(func.name))\n\n // const genericString = generateFunctionTypeParameters(func)\n return `\n export interface ${camelFuncName}Payload\n extends aptos.TypedEntryFunctionPayload<[${fields.join(',')}]> {\n arguments_typed: [${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\n const camelFuncName = capitalizeFirstChar(camelize(func.name))\n const source = `\n onEntry${camelFuncName}(func: (call: ${module.name}.${camelFuncName}Payload, ctx: aptos.AptosContext) => void, filter?: aptos.CallFilter): ${module.name} {\n this.onEntryFunctionCall(func, {\n ...filter,\n function: '${module.name}::${func.name}'\n })\n return this\n }`\n\n return source\n}\n\nfunction isEvent(struct: MoveStruct) {\n return struct.abilities.includes('drop') && struct.abilities.includes('store') && struct.name.endsWith('Event')\n}\n\nfunction generateOnEvents(module: MoveModule, struct: MoveStruct): string {\n // for struct that has drop + store\n if (!isEvent(struct)) {\n return ''\n }\n\n // const genericString = generateStructTypeParameters(struct)\n\n const source = `\n onEvent${struct.name}(func: (event: ${module.name}.${struct.name}Instance, ctx: aptos.AptosContext) => void): ${module.name} {\n this.onEvent(func, {\n type: '${module.name}::${struct.name}'\n })\n return this\n }\n `\n return source\n}\n\nfunction camelize(input: string): string {\n return input\n .split('_')\n .reduce(\n (res, word, i) =>\n i === 0 ? word.toLowerCase() : `${res}${word.charAt(0).toUpperCase()}${word.substr(1).toLowerCase()}`,\n ''\n )\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"]}
|