From 4779d57b4ae788d678446af26ea1dfb8de896455 Mon Sep 17 00:00:00 2001 From: Fuyao Zhao Date: Sat, 16 Nov 2024 23:52:50 +0800 Subject: [PATCH] feat(aptos): compatible with raw transation data (#1044) --- packages/protos/processor.proto | 3 + .../protos/src/processor/protos/processor.ts | 64 +++++++++++++++++-- .../src/service/common/protos/common.ts | 17 +++++ packages/runtime/src/full-service.ts | 22 +++++-- .../src/gen/processor/protos/processor.ts | 64 +++++++++++++++++-- .../src/gen/service/common/protos/common.ts | 17 +++++ packages/sdk/src/aptos/ext/token.ts | 6 +- packages/sdk/src/aptos/tests/aptos.test.ts | 3 + packages/sdk/src/testing/aptos-facet.ts | 2 + 9 files changed, 180 insertions(+), 18 deletions(-) diff --git a/packages/protos/processor.proto b/packages/protos/processor.proto index 84e71988d5..05e655a1f6 100644 --- a/packages/protos/processor.proto +++ b/packages/protos/processor.proto @@ -628,14 +628,17 @@ message Data { message AptEvent { // google.protobuf.Struct event = 1; google.protobuf.Struct transaction = 2; + string raw_transaction = 3; } message AptCall { google.protobuf.Struct transaction = 2; + string raw_transaction = 3; } message AptResource { repeated google.protobuf.Struct resources = 4; int64 version = 2; int64 timestampMicros = 5; + repeated string raw_resources = 6; } message SuiEvent { google.protobuf.Struct transaction = 1; diff --git a/packages/protos/src/processor/protos/processor.ts b/packages/protos/src/processor/protos/processor.ts index a2717cfeb8..87f6be6743 100644 --- a/packages/protos/src/processor/protos/processor.ts +++ b/packages/protos/src/processor/protos/processor.ts @@ -1078,16 +1078,19 @@ export interface Data_SolInstruction { export interface Data_AptEvent { transaction: { [key: string]: any } | undefined; + rawTransaction: string; } export interface Data_AptCall { transaction: { [key: string]: any } | undefined; + rawTransaction: string; } export interface Data_AptResource { resources: { [key: string]: any }[]; version: bigint; timestampMicros: bigint; + rawResources: string[]; } export interface Data_SuiEvent { @@ -9236,7 +9239,7 @@ export const Data_SolInstruction = { }; function createBaseData_AptEvent(): Data_AptEvent { - return { transaction: undefined }; + return { transaction: undefined, rawTransaction: "" }; } export const Data_AptEvent = { @@ -9244,6 +9247,9 @@ export const Data_AptEvent = { if (message.transaction !== undefined) { Struct.encode(Struct.wrap(message.transaction), writer.uint32(18).fork()).ldelim(); } + if (message.rawTransaction !== "") { + writer.uint32(26).string(message.rawTransaction); + } return writer; }, @@ -9261,6 +9267,13 @@ export const Data_AptEvent = { message.transaction = Struct.unwrap(Struct.decode(reader, reader.uint32())); continue; + case 3: + if (tag !== 26) { + break; + } + + message.rawTransaction = reader.string(); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -9271,7 +9284,10 @@ export const Data_AptEvent = { }, fromJSON(object: any): Data_AptEvent { - return { transaction: isObject(object.transaction) ? object.transaction : undefined }; + return { + transaction: isObject(object.transaction) ? object.transaction : undefined, + rawTransaction: isSet(object.rawTransaction) ? globalThis.String(object.rawTransaction) : "", + }; }, toJSON(message: Data_AptEvent): unknown { @@ -9279,6 +9295,9 @@ export const Data_AptEvent = { if (message.transaction !== undefined) { obj.transaction = message.transaction; } + if (message.rawTransaction !== "") { + obj.rawTransaction = message.rawTransaction; + } return obj; }, @@ -9288,12 +9307,13 @@ export const Data_AptEvent = { fromPartial(object: DeepPartial): Data_AptEvent { const message = createBaseData_AptEvent(); message.transaction = object.transaction ?? undefined; + message.rawTransaction = object.rawTransaction ?? ""; return message; }, }; function createBaseData_AptCall(): Data_AptCall { - return { transaction: undefined }; + return { transaction: undefined, rawTransaction: "" }; } export const Data_AptCall = { @@ -9301,6 +9321,9 @@ export const Data_AptCall = { if (message.transaction !== undefined) { Struct.encode(Struct.wrap(message.transaction), writer.uint32(18).fork()).ldelim(); } + if (message.rawTransaction !== "") { + writer.uint32(26).string(message.rawTransaction); + } return writer; }, @@ -9318,6 +9341,13 @@ export const Data_AptCall = { message.transaction = Struct.unwrap(Struct.decode(reader, reader.uint32())); continue; + case 3: + if (tag !== 26) { + break; + } + + message.rawTransaction = reader.string(); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -9328,7 +9358,10 @@ export const Data_AptCall = { }, fromJSON(object: any): Data_AptCall { - return { transaction: isObject(object.transaction) ? object.transaction : undefined }; + return { + transaction: isObject(object.transaction) ? object.transaction : undefined, + rawTransaction: isSet(object.rawTransaction) ? globalThis.String(object.rawTransaction) : "", + }; }, toJSON(message: Data_AptCall): unknown { @@ -9336,6 +9369,9 @@ export const Data_AptCall = { if (message.transaction !== undefined) { obj.transaction = message.transaction; } + if (message.rawTransaction !== "") { + obj.rawTransaction = message.rawTransaction; + } return obj; }, @@ -9345,12 +9381,13 @@ export const Data_AptCall = { fromPartial(object: DeepPartial): Data_AptCall { const message = createBaseData_AptCall(); message.transaction = object.transaction ?? undefined; + message.rawTransaction = object.rawTransaction ?? ""; return message; }, }; function createBaseData_AptResource(): Data_AptResource { - return { resources: [], version: BigInt("0"), timestampMicros: BigInt("0") }; + return { resources: [], version: BigInt("0"), timestampMicros: BigInt("0"), rawResources: [] }; } export const Data_AptResource = { @@ -9370,6 +9407,9 @@ export const Data_AptResource = { } writer.uint32(40).int64(message.timestampMicros.toString()); } + for (const v of message.rawResources) { + writer.uint32(50).string(v!); + } return writer; }, @@ -9401,6 +9441,13 @@ export const Data_AptResource = { message.timestampMicros = longToBigint(reader.int64() as Long); continue; + case 6: + if (tag !== 50) { + break; + } + + message.rawResources.push(reader.string()); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -9415,6 +9462,9 @@ export const Data_AptResource = { resources: globalThis.Array.isArray(object?.resources) ? [...object.resources] : [], version: isSet(object.version) ? BigInt(object.version) : BigInt("0"), timestampMicros: isSet(object.timestampMicros) ? BigInt(object.timestampMicros) : BigInt("0"), + rawResources: globalThis.Array.isArray(object?.rawResources) + ? object.rawResources.map((e: any) => globalThis.String(e)) + : [], }; }, @@ -9429,6 +9479,9 @@ export const Data_AptResource = { if (message.timestampMicros !== BigInt("0")) { obj.timestampMicros = message.timestampMicros.toString(); } + if (message.rawResources?.length) { + obj.rawResources = message.rawResources; + } return obj; }, @@ -9440,6 +9493,7 @@ export const Data_AptResource = { message.resources = object.resources?.map((e) => e) || []; message.version = object.version ?? BigInt("0"); message.timestampMicros = object.timestampMicros ?? BigInt("0"); + message.rawResources = object.rawResources?.map((e) => e) || []; return message; }, }; diff --git a/packages/protos/src/service/common/protos/common.ts b/packages/protos/src/service/common/protos/common.ts index a3c480b655..4f075b2655 100644 --- a/packages/protos/src/service/common/protos/common.ts +++ b/packages/protos/src/service/common/protos/common.ts @@ -552,6 +552,7 @@ export interface ApiKey { expiresAt: bigint; source: string; ownerType: string; + revealable: boolean; } export interface TimeRangeLite { @@ -4488,6 +4489,7 @@ function createBaseApiKey(): ApiKey { expiresAt: BigInt("0"), source: "", ownerType: "", + revealable: false, }; } @@ -4529,6 +4531,9 @@ export const ApiKey = { if (message.ownerType !== "") { writer.uint32(82).string(message.ownerType); } + if (message.revealable !== false) { + writer.uint32(88).bool(message.revealable); + } return writer; }, @@ -4602,6 +4607,13 @@ export const ApiKey = { message.ownerType = reader.string(); continue; + case 11: + if (tag !== 88) { + break; + } + + message.revealable = reader.bool(); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -4622,6 +4634,7 @@ export const ApiKey = { expiresAt: isSet(object.expiresAt) ? BigInt(object.expiresAt) : BigInt("0"), source: isSet(object.source) ? globalThis.String(object.source) : "", ownerType: isSet(object.ownerType) ? globalThis.String(object.ownerType) : "", + revealable: isSet(object.revealable) ? globalThis.Boolean(object.revealable) : false, }; }, @@ -4654,6 +4667,9 @@ export const ApiKey = { if (message.ownerType !== "") { obj.ownerType = message.ownerType; } + if (message.revealable !== false) { + obj.revealable = message.revealable; + } return obj; }, @@ -4671,6 +4687,7 @@ export const ApiKey = { message.expiresAt = object.expiresAt ?? BigInt("0"); message.source = object.source ?? ""; message.ownerType = object.ownerType ?? ""; + message.revealable = object.revealable ?? false; return message; }, }; diff --git a/packages/runtime/src/full-service.ts b/packages/runtime/src/full-service.ts index 76538726b1..3861f94221 100644 --- a/packages/runtime/src/full-service.ts +++ b/packages/runtime/src/full-service.ts @@ -122,13 +122,25 @@ export class FullProcessorServiceImpl implements ProcessorServiceImplementation switch (dataBinding.handlerType) { case HandlerType.APT_EVENT: if (dataBinding.data?.aptEvent) { - // const aptEvent = dataBinding.data.aptEvent - // if (aptEvent.event && this.sdkMinorVersion < 40) { - // assert.ok(aptEvent.transaction, 'No Transaction') - // aptEvent.transaction.events = [aptEvent.event] - // } + if (dataBinding.data.aptEvent.rawTransaction && !dataBinding.data.aptEvent.transaction) { + dataBinding.data.aptEvent.transaction = JSON.parse(dataBinding.data.aptEvent.rawTransaction) + } + } + break + case HandlerType.APT_CALL: + if (dataBinding.data?.aptCall) { + if (dataBinding.data.aptCall.rawTransaction && !dataBinding.data.aptCall.transaction) { + dataBinding.data.aptCall.transaction = JSON.parse(dataBinding.data.aptCall.rawTransaction) + } } break + // case HandlerType.APT_RESOURCE: + // if (dataBinding.data?.aptResource) { + // if (dataBinding.data.aptResource.rawResources && dataBinding.data.aptResource.rawResources.length > 0) { + // dataBinding.data.aptResource.resources = dataBinding.data.aptResource.rawResources.map(e => JSON.parse(e)) + // } + // } + // break case HandlerType.UNKNOWN: if (dataBinding.data?.ethBlock) { if (dataBinding.data.raw.length === 0) { diff --git a/packages/runtime/src/gen/processor/protos/processor.ts b/packages/runtime/src/gen/processor/protos/processor.ts index d1eae59068..cb9181e834 100644 --- a/packages/runtime/src/gen/processor/protos/processor.ts +++ b/packages/runtime/src/gen/processor/protos/processor.ts @@ -1086,16 +1086,19 @@ export interface Data_SolInstruction { export interface Data_AptEvent { transaction: { [key: string]: any } | undefined; + rawTransaction: string; } export interface Data_AptCall { transaction: { [key: string]: any } | undefined; + rawTransaction: string; } export interface Data_AptResource { resources: { [key: string]: any }[]; version: bigint; timestampMicros: bigint; + rawResources: string[]; } export interface Data_SuiEvent { @@ -9308,7 +9311,7 @@ export const Data_SolInstruction = { }; function createBaseData_AptEvent(): Data_AptEvent { - return { transaction: undefined }; + return { transaction: undefined, rawTransaction: "" }; } export const Data_AptEvent = { @@ -9316,6 +9319,9 @@ export const Data_AptEvent = { if (message.transaction !== undefined) { Struct.encode(Struct.wrap(message.transaction), writer.uint32(18).fork()).ldelim(); } + if (message.rawTransaction !== "") { + writer.uint32(26).string(message.rawTransaction); + } return writer; }, @@ -9333,6 +9339,13 @@ export const Data_AptEvent = { message.transaction = Struct.unwrap(Struct.decode(reader, reader.uint32())); continue; + case 3: + if (tag !== 26) { + break; + } + + message.rawTransaction = reader.string(); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -9343,7 +9356,10 @@ export const Data_AptEvent = { }, fromJSON(object: any): Data_AptEvent { - return { transaction: isObject(object.transaction) ? object.transaction : undefined }; + return { + transaction: isObject(object.transaction) ? object.transaction : undefined, + rawTransaction: isSet(object.rawTransaction) ? globalThis.String(object.rawTransaction) : "", + }; }, toJSON(message: Data_AptEvent): unknown { @@ -9351,6 +9367,9 @@ export const Data_AptEvent = { if (message.transaction !== undefined) { obj.transaction = message.transaction; } + if (message.rawTransaction !== "") { + obj.rawTransaction = message.rawTransaction; + } return obj; }, @@ -9360,12 +9379,13 @@ export const Data_AptEvent = { fromPartial(object: DeepPartial): Data_AptEvent { const message = createBaseData_AptEvent(); message.transaction = object.transaction ?? undefined; + message.rawTransaction = object.rawTransaction ?? ""; return message; }, }; function createBaseData_AptCall(): Data_AptCall { - return { transaction: undefined }; + return { transaction: undefined, rawTransaction: "" }; } export const Data_AptCall = { @@ -9373,6 +9393,9 @@ export const Data_AptCall = { if (message.transaction !== undefined) { Struct.encode(Struct.wrap(message.transaction), writer.uint32(18).fork()).ldelim(); } + if (message.rawTransaction !== "") { + writer.uint32(26).string(message.rawTransaction); + } return writer; }, @@ -9390,6 +9413,13 @@ export const Data_AptCall = { message.transaction = Struct.unwrap(Struct.decode(reader, reader.uint32())); continue; + case 3: + if (tag !== 26) { + break; + } + + message.rawTransaction = reader.string(); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -9400,7 +9430,10 @@ export const Data_AptCall = { }, fromJSON(object: any): Data_AptCall { - return { transaction: isObject(object.transaction) ? object.transaction : undefined }; + return { + transaction: isObject(object.transaction) ? object.transaction : undefined, + rawTransaction: isSet(object.rawTransaction) ? globalThis.String(object.rawTransaction) : "", + }; }, toJSON(message: Data_AptCall): unknown { @@ -9408,6 +9441,9 @@ export const Data_AptCall = { if (message.transaction !== undefined) { obj.transaction = message.transaction; } + if (message.rawTransaction !== "") { + obj.rawTransaction = message.rawTransaction; + } return obj; }, @@ -9417,12 +9453,13 @@ export const Data_AptCall = { fromPartial(object: DeepPartial): Data_AptCall { const message = createBaseData_AptCall(); message.transaction = object.transaction ?? undefined; + message.rawTransaction = object.rawTransaction ?? ""; return message; }, }; function createBaseData_AptResource(): Data_AptResource { - return { resources: [], version: BigInt("0"), timestampMicros: BigInt("0") }; + return { resources: [], version: BigInt("0"), timestampMicros: BigInt("0"), rawResources: [] }; } export const Data_AptResource = { @@ -9442,6 +9479,9 @@ export const Data_AptResource = { } writer.uint32(40).int64(message.timestampMicros.toString()); } + for (const v of message.rawResources) { + writer.uint32(50).string(v!); + } return writer; }, @@ -9473,6 +9513,13 @@ export const Data_AptResource = { message.timestampMicros = longToBigint(reader.int64() as Long); continue; + case 6: + if (tag !== 50) { + break; + } + + message.rawResources.push(reader.string()); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -9487,6 +9534,9 @@ export const Data_AptResource = { resources: globalThis.Array.isArray(object?.resources) ? [...object.resources] : [], version: isSet(object.version) ? BigInt(object.version) : BigInt("0"), timestampMicros: isSet(object.timestampMicros) ? BigInt(object.timestampMicros) : BigInt("0"), + rawResources: globalThis.Array.isArray(object?.rawResources) + ? object.rawResources.map((e: any) => globalThis.String(e)) + : [], }; }, @@ -9501,6 +9551,9 @@ export const Data_AptResource = { if (message.timestampMicros !== BigInt("0")) { obj.timestampMicros = message.timestampMicros.toString(); } + if (message.rawResources?.length) { + obj.rawResources = message.rawResources; + } return obj; }, @@ -9512,6 +9565,7 @@ export const Data_AptResource = { message.resources = object.resources?.map((e) => e) || []; message.version = object.version ?? BigInt("0"); message.timestampMicros = object.timestampMicros ?? BigInt("0"); + message.rawResources = object.rawResources?.map((e) => e) || []; return message; }, }; diff --git a/packages/runtime/src/gen/service/common/protos/common.ts b/packages/runtime/src/gen/service/common/protos/common.ts index a3c480b655..4f075b2655 100644 --- a/packages/runtime/src/gen/service/common/protos/common.ts +++ b/packages/runtime/src/gen/service/common/protos/common.ts @@ -552,6 +552,7 @@ export interface ApiKey { expiresAt: bigint; source: string; ownerType: string; + revealable: boolean; } export interface TimeRangeLite { @@ -4488,6 +4489,7 @@ function createBaseApiKey(): ApiKey { expiresAt: BigInt("0"), source: "", ownerType: "", + revealable: false, }; } @@ -4529,6 +4531,9 @@ export const ApiKey = { if (message.ownerType !== "") { writer.uint32(82).string(message.ownerType); } + if (message.revealable !== false) { + writer.uint32(88).bool(message.revealable); + } return writer; }, @@ -4602,6 +4607,13 @@ export const ApiKey = { message.ownerType = reader.string(); continue; + case 11: + if (tag !== 88) { + break; + } + + message.revealable = reader.bool(); + continue; } if ((tag & 7) === 4 || tag === 0) { break; @@ -4622,6 +4634,7 @@ export const ApiKey = { expiresAt: isSet(object.expiresAt) ? BigInt(object.expiresAt) : BigInt("0"), source: isSet(object.source) ? globalThis.String(object.source) : "", ownerType: isSet(object.ownerType) ? globalThis.String(object.ownerType) : "", + revealable: isSet(object.revealable) ? globalThis.Boolean(object.revealable) : false, }; }, @@ -4654,6 +4667,9 @@ export const ApiKey = { if (message.ownerType !== "") { obj.ownerType = message.ownerType; } + if (message.revealable !== false) { + obj.revealable = message.revealable; + } return obj; }, @@ -4671,6 +4687,7 @@ export const ApiKey = { message.expiresAt = object.expiresAt ?? BigInt("0"); message.source = object.source ?? ""; message.ownerType = object.ownerType ?? ""; + message.revealable = object.revealable ?? false; return message; }, }; diff --git a/packages/sdk/src/aptos/ext/token.ts b/packages/sdk/src/aptos/ext/token.ts index 28b61af7df..d59896a382 100644 --- a/packages/sdk/src/aptos/ext/token.ts +++ b/packages/sdk/src/aptos/ext/token.ts @@ -141,9 +141,9 @@ export async function getPriceForToken( timestamp: number, network = AptosChainId.APTOS_MAINNET ): Promise { - if (!isWhiteListToken(token)) { - return 0.0 - } + // if (!isWhiteListToken(token)) { + // return 0.0 + // } const date = new Date(timestamp / 1000) try { return (await getPriceByType(network, token, date)) || 0 diff --git a/packages/sdk/src/aptos/tests/aptos.test.ts b/packages/sdk/src/aptos/tests/aptos.test.ts index ce09b218d7..2fb55454b3 100644 --- a/packages/sdk/src/aptos/tests/aptos.test.ts +++ b/packages/sdk/src/aptos/tests/aptos.test.ts @@ -26,6 +26,7 @@ describe('Test Aptos Example', () => { { data: { aptCall: { + rawTransaction: '', transaction: testData } }, @@ -74,6 +75,7 @@ describe('Test Aptos Example', () => { { data: { aptResource: { + rawResources: [], version: 12345n, resources: [ { @@ -101,6 +103,7 @@ describe('Test Aptos Example', () => { { data: { aptCall: { + rawTransaction: '', transaction: dataCreate } }, diff --git a/packages/sdk/src/testing/aptos-facet.ts b/packages/sdk/src/testing/aptos-facet.ts index 12d80fda1e..5995d46c68 100644 --- a/packages/sdk/src/testing/aptos-facet.ts +++ b/packages/sdk/src/testing/aptos-facet.ts @@ -43,6 +43,7 @@ export class AptosFacet { return { data: { aptCall: { + rawTransaction: '', transaction } }, @@ -83,6 +84,7 @@ export class AptosFacet { return { data: { aptEvent: { + rawTransaction: '', transaction } },