Skip to content

Commit f37e2d9

Browse files
authored
Merge pull request #83 from pyth-network/fix/string-length
fix: use utf-8 string length calculation
2 parents 31655df + 010a2c3 commit f37e2d9

File tree

6 files changed

+29
-14
lines changed

6 files changed

+29
-14
lines changed

package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@pythnetwork/client",
3-
"version": "2.22.0",
3+
"version": "2.22.1",
44
"description": "Client for consuming Pyth price data",
55
"homepage": "https://pyth.network",
66
"main": "lib/index.js",

src/__tests__/Anchor.test.ts

+15
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,21 @@ test('Anchor', (done) => {
5858
expect(decoded?.data.generic_symbol).toBe('ETHUSD')
5959
})
6060

61+
pythOracle.methods
62+
.addProduct({
63+
'😆': 'ÉTH',
64+
})
65+
.accounts({
66+
fundingAccount: PublicKey.unique(),
67+
productAccount: PublicKey.unique(),
68+
tailMappingAccount: PublicKey.unique(),
69+
})
70+
.instruction()
71+
.then((instruction) => {
72+
const decoded = pythOracleCoder().instruction.decode(instruction.data)
73+
expect(decoded?.data['😆']).toBe('ÉTH')
74+
})
75+
6176
pythOracle.methods
6277
.updProduct({
6378
asset_type: 'Crypto',

src/__tests__/Price.test.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ test('Handle price getting stale', (done) => {
104104
expect(price.magic).toBe(Magic)
105105
expect(price.version).toBe(Version)
106106
expect(price.status).toBe(PriceStatus.Trading)
107-
expect(price.flags.accumulatorV2).toBe(false);
108-
expect(price.flags.messageBufferCleared).toBe(false);
107+
expect(price.flags.accumulatorV2).toBe(false)
108+
expect(price.flags.messageBufferCleared).toBe(false)
109109
expect(price.feedIndex).toBe(0)
110110

111111
expect(parsePriceData(data, price.aggregate.publishSlot + MAX_SLOT_DIFFERENCE).status).toBe(PriceStatus.Trading)
@@ -143,8 +143,8 @@ test('Handle flags', (done) => {
143143
const data = Buffer.from(b64_data, 'base64')
144144
const price = parsePriceData(data)
145145

146-
expect(price.flags.accumulatorV2).toBe(true);
147-
expect(price.flags.messageBufferCleared).toBe(true);
146+
expect(price.flags.accumulatorV2).toBe(true)
147+
expect(price.flags.messageBufferCleared).toBe(true)
148148

149149
done()
150150
})

src/anchor/coder/instructions.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,9 @@ export class PythOracleInstructionCoder implements InstructionCoder {
9393
if (methodName === 'updProduct' || methodName === 'addProduct') {
9494
let offset = 0
9595
for (const key of Object.keys(ix.productMetadata)) {
96-
offset += buffer.subarray(offset).writeUInt8(key.length)
96+
offset += buffer.subarray(offset).writeUInt8(Buffer.byteLength(key))
9797
offset += buffer.subarray(offset).write(key)
98-
offset += buffer.subarray(offset).writeUInt8(ix.productMetadata[key].length)
98+
offset += buffer.subarray(offset).writeUInt8(Buffer.byteLength(ix.productMetadata[key]))
9999
offset += buffer.subarray(offset).write(ix.productMetadata[key])
100100
}
101101
if (offset > MAX_METADATA_SIZE) {

src/index.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ export enum AccountType {
4242
}
4343

4444
export type Flags = {
45-
accumulatorV2: boolean,
46-
messageBufferCleared: boolean,
45+
accumulatorV2: boolean
46+
messageBufferCleared: boolean
4747
}
4848

4949
const empty32Buffer = Buffer.alloc(32)
@@ -110,7 +110,7 @@ export interface PriceData extends Base {
110110
minPublishers: number
111111
messageSent: number
112112
maxLatency: number
113-
flags: Flags,
113+
flags: Flags
114114
feedIndex: number
115115
productAccountKey: PublicKey
116116
nextPriceAccountKey: PublicKey | null
@@ -300,8 +300,8 @@ export const parsePriceData = (data: Buffer, currentSlot?: number): PriceData =>
300300

301301
/* tslint:disable:no-bitwise */
302302
const flags = {
303-
accumulatorV2: (flagBits & (1<<0)) !== 0,
304-
messageBufferCleared: (flagBits & (1<<1)) !== 0,
303+
accumulatorV2: (flagBits & (1 << 0)) !== 0,
304+
messageBufferCleared: (flagBits & (1 << 1)) !== 0,
305305
}
306306
/* tslint:enable:no-bitwise */
307307

0 commit comments

Comments
 (0)