diff --git a/package-lock.json b/package-lock.json index 6211421..5ce9271 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@pythnetwork/client", - "version": "2.22.0", + "version": "2.22.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@pythnetwork/client", - "version": "2.22.0", + "version": "2.22.1", "license": "Apache-2.0", "dependencies": { "@coral-xyz/anchor": "^0.29.0", diff --git a/package.json b/package.json index 5af1a4e..11923ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@pythnetwork/client", - "version": "2.22.0", + "version": "2.22.1", "description": "Client for consuming Pyth price data", "homepage": "https://pyth.network", "main": "lib/index.js", diff --git a/src/__tests__/Anchor.test.ts b/src/__tests__/Anchor.test.ts index 7ac83bd..501a1ab 100644 --- a/src/__tests__/Anchor.test.ts +++ b/src/__tests__/Anchor.test.ts @@ -58,6 +58,21 @@ test('Anchor', (done) => { expect(decoded?.data.generic_symbol).toBe('ETHUSD') }) + pythOracle.methods + .addProduct({ + '😆': 'ÉTH', + }) + .accounts({ + fundingAccount: PublicKey.unique(), + productAccount: PublicKey.unique(), + tailMappingAccount: PublicKey.unique(), + }) + .instruction() + .then((instruction) => { + const decoded = pythOracleCoder().instruction.decode(instruction.data) + expect(decoded?.data['😆']).toBe('ÉTH') + }) + pythOracle.methods .updProduct({ asset_type: 'Crypto', diff --git a/src/__tests__/Price.test.ts b/src/__tests__/Price.test.ts index de03b29..5fe20ec 100644 --- a/src/__tests__/Price.test.ts +++ b/src/__tests__/Price.test.ts @@ -104,8 +104,8 @@ test('Handle price getting stale', (done) => { expect(price.magic).toBe(Magic) expect(price.version).toBe(Version) expect(price.status).toBe(PriceStatus.Trading) - expect(price.flags.accumulatorV2).toBe(false); - expect(price.flags.messageBufferCleared).toBe(false); + expect(price.flags.accumulatorV2).toBe(false) + expect(price.flags.messageBufferCleared).toBe(false) expect(price.feedIndex).toBe(0) expect(parsePriceData(data, price.aggregate.publishSlot + MAX_SLOT_DIFFERENCE).status).toBe(PriceStatus.Trading) @@ -143,8 +143,8 @@ test('Handle flags', (done) => { const data = Buffer.from(b64_data, 'base64') const price = parsePriceData(data) - expect(price.flags.accumulatorV2).toBe(true); - expect(price.flags.messageBufferCleared).toBe(true); + expect(price.flags.accumulatorV2).toBe(true) + expect(price.flags.messageBufferCleared).toBe(true) done() }) diff --git a/src/anchor/coder/instructions.ts b/src/anchor/coder/instructions.ts index 695b780..dbf3e60 100644 --- a/src/anchor/coder/instructions.ts +++ b/src/anchor/coder/instructions.ts @@ -93,9 +93,9 @@ export class PythOracleInstructionCoder implements InstructionCoder { if (methodName === 'updProduct' || methodName === 'addProduct') { let offset = 0 for (const key of Object.keys(ix.productMetadata)) { - offset += buffer.subarray(offset).writeUInt8(key.length) + offset += buffer.subarray(offset).writeUInt8(Buffer.byteLength(key)) offset += buffer.subarray(offset).write(key) - offset += buffer.subarray(offset).writeUInt8(ix.productMetadata[key].length) + offset += buffer.subarray(offset).writeUInt8(Buffer.byteLength(ix.productMetadata[key])) offset += buffer.subarray(offset).write(ix.productMetadata[key]) } if (offset > MAX_METADATA_SIZE) { diff --git a/src/index.ts b/src/index.ts index a57be35..5fb50ff 100644 --- a/src/index.ts +++ b/src/index.ts @@ -42,8 +42,8 @@ export enum AccountType { } export type Flags = { - accumulatorV2: boolean, - messageBufferCleared: boolean, + accumulatorV2: boolean + messageBufferCleared: boolean } const empty32Buffer = Buffer.alloc(32) @@ -110,7 +110,7 @@ export interface PriceData extends Base { minPublishers: number messageSent: number maxLatency: number - flags: Flags, + flags: Flags feedIndex: number productAccountKey: PublicKey nextPriceAccountKey: PublicKey | null @@ -300,8 +300,8 @@ export const parsePriceData = (data: Buffer, currentSlot?: number): PriceData => /* tslint:disable:no-bitwise */ const flags = { - accumulatorV2: (flagBits & (1<<0)) !== 0, - messageBufferCleared: (flagBits & (1<<1)) !== 0, + accumulatorV2: (flagBits & (1 << 0)) !== 0, + messageBufferCleared: (flagBits & (1 << 1)) !== 0, } /* tslint:enable:no-bitwise */