diff --git a/src/core/layout.ts b/src/core/layout.ts index 9f08801..e2b4b79 100644 --- a/src/core/layout.ts +++ b/src/core/layout.ts @@ -34,14 +34,20 @@ export const uint128 = (property: string): Layout => { return uint128Layout; }; -export const stringLayout = (property: string, maxLength: number = 32): Layout => { - const layout = blob(maxLength, property); +export const stringLayout = (property: string): Layout => { + const layout = blob(4, property); const stringLayout = layout as Layout as Layout; - const decode = layout.decode.bind(layout); + stringLayout.decode = (buffer: Buffer, offset: number) => { - const src = decode(buffer, offset); - return Buffer.from(src).toString('utf-8', 4).trim(); + const length = buffer.readUInt32LE(offset); + return buffer.slice(offset + 4, offset + 4 + length).toString('utf-8'); }; + + stringLayout.getSpan = (buffer: Buffer, offset: number) => { + const length = buffer.readUInt32LE(offset); + return 4 + length; + }; + return stringLayout; }; diff --git a/src/parser/pumpfun/layout.ts b/src/parser/pumpfun/layout.ts index 865db2e..23a9097 100644 --- a/src/parser/pumpfun/layout.ts +++ b/src/parser/pumpfun/layout.ts @@ -3,9 +3,9 @@ import { CreateEvent, TradeEvent, CompleteEvent } from './types'; import { stringLayout, pubKey, uint64, boolean } from '../../core/layout'; export const CREATE_EVENT_LAYOUT = struct([ - stringLayout('name', 20), - stringLayout('symbol', 9), - stringLayout('uri', 71), + stringLayout('name'), + stringLayout('symbol'), + stringLayout('uri'), pubKey('mint'), pubKey('bondingCurve'), pubKey('user'),