diff --git a/packages/api-server/src/block-emitter.ts b/packages/api-server/src/block-emitter.ts index d11d1f8e..3bb9eac0 100644 --- a/packages/api-server/src/block-emitter.ts +++ b/packages/api-server/src/block-emitter.ts @@ -2,7 +2,7 @@ import { envConfig } from "./base/env-config"; import { logger } from "./base/logger"; import { Query } from "./db"; import { EventEmitter } from "events"; -import { toApiLog, toApiNewHead } from "./db/types"; +import { toApiNewHead } from "./db/types"; import cluster from "cluster"; let newrelic: any = undefined; @@ -115,7 +115,12 @@ export class BlockEmitter { const newHeads = blocks.map((b) => toApiNewHead(b)); this.notify("newHeads", newHeads); const logs = await this.query.getLogs({}, min + BigInt(1), max); // exclude min & include max; - const newLogs = logs.map((log) => toApiLog(log)); + const newLogs = logs.map((log) => + JSON.stringify( + log, + (key, value) => (typeof value === "bigint" ? value.toString() : value) // return everything else unchanged + ) + ); if (logs.length > 0) { this.notify("logs", newLogs); } diff --git a/packages/api-server/src/ws/methods.ts b/packages/api-server/src/ws/methods.ts index 5989092c..63f8a89c 100644 --- a/packages/api-server/src/ws/methods.ts +++ b/packages/api-server/src/ws/methods.ts @@ -1,4 +1,4 @@ -import { EthBlock } from "../base/types/api"; +import { EthNewHead } from "../base/types/api"; import { BlockEmitter } from "../block-emitter"; import { INVALID_PARAMS, METHOD_NOT_FOUND } from "../methods/error-code"; import { methods } from "../methods/index"; @@ -50,7 +50,7 @@ export function wrapper(ws: any, _req: any) { const syncingIds: Set = new Set(); const logsQueryMaps: Map = new Map(); - const blockListener = (blocks: EthBlock[]) => { + const blockListener = (blocks: EthNewHead[]) => { blocks.forEach((block) => { newHeadsIds.forEach((id) => { const obj = { @@ -66,7 +66,14 @@ export function wrapper(ws: any, _req: any) { }); }; - const logsListener = (logs: Log[]) => { + const logsListener = (_logs: string[]) => { + const logs: Log[] = _logs.map((_log) => { + let log = JSON.parse(_log); + log.id = BigInt(log.id); + log.block_number = BigInt(log.block_number); + log.transaction_id = BigInt(log.transaction_id); + return log; + }); logsQueryMaps.forEach((query, id) => { const _result = filterLogsByAddress(logs, query.address); const result = filterLogsByTopics(_result, query.topics || []);