@exponent-labs/exponent-vaults-fetcher 0.9.25 → 0.9.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/fetcher.js CHANGED
@@ -5,12 +5,13 @@ const anchor_1 = require("@coral-xyz/anchor");
5
5
  const exponent_vaults_idl_1 = require("@exponent-labs/exponent-vaults-idl");
6
6
  const exponent_vaults_pda_1 = require("@exponent-labs/exponent-vaults-pda");
7
7
  const constants_1 = require("./constants");
8
- const typeUtils_1 = require("./typeUtils");
9
8
  const priceInterfaceAccounts_1 = require("./priceInterfaceAccounts");
9
+ const typeUtils_1 = require("./typeUtils");
10
10
  const EXPONENT_PRICES_META_DISCRIMINATOR = Buffer.from([188, 97, 196, 52, 192, 41, 211, 196]);
11
11
  const MAX_PRICES = 1024;
12
12
  const MAX_PRICE_MANAGERS = 8;
13
13
  const MAX_AUTHORIZED_VAULT_CREATORS = 128;
14
+ const MAX_GET_MULTIPLE_ACCOUNTS_INFO_KEYS = 100;
14
15
  const PRICE_NODE_REGISTERS = 4;
15
16
  const PRICE_USAGE_AMOUNT_REGISTER = 1;
16
17
  const PUBKEY_BYTES = 32;
@@ -108,7 +109,10 @@ class ExponentVaultsFetcher {
108
109
  return this.actionProposalAccountClient.fetch(address);
109
110
  }
110
111
  async fetchAllVaults(filters) {
111
- const discriminator = this.vaultAccountClient.coder.accounts.memcmp("ExponentStrategyVault");
112
+ // Anchor normalizes JSON IDL account names to camelCase in the Borsh coder even
113
+ // when program.idl still exposes the original PascalCase spelling.
114
+ const accountName = "exponentStrategyVault";
115
+ const discriminator = this.vaultAccountClient.coder.accounts.memcmp(accountName);
112
116
  const baseFilters = discriminator
113
117
  ? [{ memcmp: { offset: discriminator.offset, bytes: discriminator.bytes } }]
114
118
  : [];
@@ -131,7 +135,7 @@ class ExponentVaultsFetcher {
131
135
  if (tokenEntriesLen > 64)
132
136
  continue;
133
137
  try {
134
- const data = this.vaultAccountClient.coder.accounts.decode("ExponentStrategyVault", account.data);
138
+ const data = this.vaultAccountClient.coder.accounts.decode(accountName, account.data);
135
139
  decoded.push({ publicKey: pubkey, account: data });
136
140
  }
137
141
  catch {
@@ -346,14 +350,30 @@ class ExponentVaultsFetcher {
346
350
  throw new Error(`Corrupted ExponentPrices allocator: parsed ${activePrices} active entries, allocator has ${allocatorSize}`);
347
351
  }
348
352
  const activePriceEntries = prices.filter((entry) => entry !== null);
349
- const uniqueInterfaceAccounts = [
350
- ...new Map(activePriceEntries.map((entry) => [entry.priceInterfaceAccounts.toBase58(), entry.priceInterfaceAccounts])).values(),
351
- ].filter((pubkey) => !pubkey.equals(ZERO_PUBKEY));
352
- if (uniqueInterfaceAccounts.length > 0) {
353
- const infos = await Promise.all(uniqueInterfaceAccounts.map((pubkey) => this.program.provider.connection.getAccountInfo(pubkey)));
354
- for (let i = 0; i < uniqueInterfaceAccounts.length; i++) {
355
- const key = uniqueInterfaceAccounts[i];
356
- const info = infos[i];
353
+ const priceEntriesByInterfaceAccount = new Map();
354
+ for (const entry of activePriceEntries) {
355
+ const key = entry.priceInterfaceAccounts;
356
+ if (key.equals(ZERO_PUBKEY))
357
+ continue;
358
+ const keyString = key.toBase58();
359
+ const group = priceEntriesByInterfaceAccount.get(keyString);
360
+ if (group) {
361
+ group.entries.push(entry);
362
+ }
363
+ else {
364
+ priceEntriesByInterfaceAccount.set(keyString, { entries: [entry], key });
365
+ }
366
+ }
367
+ const priceInterfaceAccountGroups = [...priceEntriesByInterfaceAccount.values()];
368
+ for (let start = 0; start < priceInterfaceAccountGroups.length; start += MAX_GET_MULTIPLE_ACCOUNTS_INFO_KEYS) {
369
+ const groups = priceInterfaceAccountGroups.slice(start, start + MAX_GET_MULTIPLE_ACCOUNTS_INFO_KEYS);
370
+ const infos = await this.program.provider.connection.getMultipleAccountsInfo(groups.map((group) => group.key));
371
+ if (infos.length !== groups.length) {
372
+ throw new Error(`PriceInterfaceAccounts batch size mismatch: requested ${groups.length}, got ${infos.length}`);
373
+ }
374
+ for (let index = 0; index < groups.length; index++) {
375
+ const { entries, key } = groups[index];
376
+ const info = infos[index];
357
377
  if (!info) {
358
378
  throw new Error(`PriceInterfaceAccounts account not found: ${key.toBase58()}`);
359
379
  }
@@ -361,11 +381,9 @@ class ExponentVaultsFetcher {
361
381
  throw new Error(`PriceInterfaceAccounts owner mismatch: expected ${this.programId.toBase58()}, got ${info.owner.toBase58()}`);
362
382
  }
363
383
  const decoded = (0, priceInterfaceAccounts_1.decodePriceInterfaceAccounts)(info.data);
364
- for (const entry of activePriceEntries) {
365
- if (entry.priceInterfaceAccounts.equals(key)) {
366
- entry.interfaceAccounts = decoded.interfaceAccounts;
367
- entry.scopeConfig = decoded.scopeConfig;
368
- }
384
+ for (const entry of entries) {
385
+ entry.interfaceAccounts = decoded.interfaceAccounts;
386
+ entry.scopeConfig = decoded.scopeConfig;
369
387
  }
370
388
  }
371
389
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../src/fetcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../src/fetcher.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const anchor_1 = require("@coral-xyz/anchor");
7
7
  const strict_1 = __importDefault(require("node:assert/strict"));
8
8
  const node_test_1 = __importDefault(require("node:test"));
9
+ const exponent_vaults_pda_1 = require("@exponent-labs/exponent-vaults-pda");
9
10
  const fetcher_1 = require("./fetcher");
10
11
  const EXPONENT_PRICES_DISCRIMINATOR = Buffer.from([188, 97, 196, 52, 192, 41, 211, 196]);
12
+ const PRICE_INTERFACE_ACCOUNTS_DISCRIMINATOR = Buffer.from([166, 196, 173, 204, 35, 6, 104, 230]);
11
13
  const PROGRAM_ID = new anchor_1.web3.PublicKey(Uint8Array.from({ length: 32 }, (_, index) => index + 1));
12
14
  const PRICE_MINT = new anchor_1.web3.PublicKey(Uint8Array.from({ length: 32 }, (_, index) => index + 33));
13
15
  const MAX_PRICE_MANAGERS = 8;
@@ -22,32 +24,113 @@ const EXPONENT_PRICES_SIZE = PRICE_NODES_OFFSET + MAX_PRICES * PRICE_NODE_SIZE +
22
24
  const PRICE_DECIMALS = 6;
23
25
  const UNDERLYING_DECIMALS = 9;
24
26
  const SY_PRICE_ID = 0x0807060504030201n;
25
- function createExponentPricesData(reservedByte) {
27
+ const ZERO_PUBKEY = new anchor_1.web3.PublicKey(new Uint8Array(PUBKEY_BYTES));
28
+ function createPublicKey(seed) {
29
+ const bytes = new Uint8Array(PUBKEY_BYTES).fill(255);
30
+ new DataView(bytes.buffer).setUint32(0, seed, true);
31
+ return new anchor_1.web3.PublicKey(bytes);
32
+ }
33
+ function createExponentPricesData(priceInterfaceAccounts, reservedByte = 0) {
26
34
  const data = Buffer.alloc(EXPONENT_PRICES_SIZE);
27
35
  EXPONENT_PRICES_DISCRIMINATOR.copy(data);
28
- data.writeBigUInt64LE(1n, 8 + 8 + MAX_PRICE_MANAGERS * PUBKEY_BYTES);
29
- PRICE_MINT.toBuffer().copy(data, FIRST_PRICE_VALUE_OFFSET);
30
- data.writeUInt8(PRICE_DECIMALS, FIRST_PRICE_VALUE_OFFSET + 160);
31
- data.writeUInt8(UNDERLYING_DECIMALS, FIRST_PRICE_VALUE_OFFSET + 161);
32
- data.fill(reservedByte, FIRST_PRICE_VALUE_OFFSET + 162, FIRST_PRICE_VALUE_OFFSET + 168);
33
- data.writeBigUInt64LE(SY_PRICE_ID, FIRST_PRICE_VALUE_OFFSET + 168);
34
- data.fill(reservedByte, FIRST_PRICE_VALUE_OFFSET + 176, FIRST_PRICE_VALUE_OFFSET + EXPONENT_PRICE_SIZE);
36
+ data.writeBigUInt64LE(BigInt(priceInterfaceAccounts.length), 8 + 8 + MAX_PRICE_MANAGERS * PUBKEY_BYTES);
37
+ for (const [index, priceInterfaceAccount] of priceInterfaceAccounts.entries()) {
38
+ const valueOffset = FIRST_PRICE_VALUE_OFFSET + index * PRICE_NODE_SIZE;
39
+ PRICE_MINT.toBuffer().copy(data, valueOffset);
40
+ priceInterfaceAccount.toBuffer().copy(data, valueOffset + 128);
41
+ data.writeUInt8(PRICE_DECIMALS, valueOffset + 160);
42
+ data.writeUInt8(UNDERLYING_DECIMALS, valueOffset + 161);
43
+ data.fill(reservedByte, valueOffset + 162, valueOffset + 168);
44
+ data.writeBigUInt64LE(SY_PRICE_ID, valueOffset + 168);
45
+ data.fill(reservedByte, valueOffset + 176, valueOffset + EXPONENT_PRICE_SIZE);
46
+ }
35
47
  return data;
36
48
  }
37
- function createConnection(data) {
49
+ function createPriceInterfaceAccountsData(interfaceAccounts, scopeConfig) {
50
+ const data = Buffer.alloc(12 + interfaceAccounts.length * PUBKEY_BYTES + (scopeConfig ? 17 : 0));
51
+ PRICE_INTERFACE_ACCOUNTS_DISCRIMINATOR.copy(data);
52
+ data.writeUInt32LE(interfaceAccounts.length, 8);
53
+ interfaceAccounts.forEach((account, index) => account.toBuffer().copy(data, 12 + index * PUBKEY_BYTES));
54
+ if (scopeConfig) {
55
+ const stateOffset = 12 + interfaceAccounts.length * PUBKEY_BYTES;
56
+ data.writeUInt8(2, stateOffset);
57
+ scopeConfig.priceChain.forEach((price, index) => data.writeUInt16LE(price, stateOffset + 1 + index * 2));
58
+ data.writeBigUInt64LE(scopeConfig.maximumAgeSeconds, stateOffset + 9);
59
+ }
60
+ return data;
61
+ }
62
+ function createConnection(registryData, options = {}) {
63
+ const registryAddress = new exponent_vaults_pda_1.ExponentVaultsPDA(PROGRAM_ID).exponentPrices()[0];
64
+ const singleAccountReads = [];
65
+ const multipleAccountReads = [];
66
+ let activeMultipleAccountReads = 0;
67
+ let maxConcurrentMultipleAccountReads = 0;
68
+ const connection = {
69
+ async getAccountInfo(address) {
70
+ singleAccountReads.push(address);
71
+ if (!address.equals(registryAddress)) {
72
+ throw new Error(`Unexpected getAccountInfo for PriceInterfaceAccounts: ${address.toBase58()}`);
73
+ }
74
+ return {
75
+ data: registryData,
76
+ executable: false,
77
+ lamports: 1,
78
+ owner: PROGRAM_ID,
79
+ rentEpoch: 0,
80
+ };
81
+ },
82
+ async getMultipleAccountsInfo(addresses) {
83
+ multipleAccountReads.push(addresses);
84
+ activeMultipleAccountReads += 1;
85
+ maxConcurrentMultipleAccountReads = Math.max(maxConcurrentMultipleAccountReads, activeMultipleAccountReads);
86
+ try {
87
+ await Promise.resolve();
88
+ if (options.rpcError)
89
+ throw options.rpcError;
90
+ const infos = addresses.map((address) => {
91
+ const fixture = options.accounts?.get(address.toBase58());
92
+ if (fixture === null || !fixture)
93
+ return null;
94
+ return {
95
+ data: fixture.data,
96
+ executable: false,
97
+ lamports: 1,
98
+ owner: fixture.owner ?? PROGRAM_ID,
99
+ rentEpoch: 0,
100
+ };
101
+ });
102
+ return options.shortResponse ? infos.slice(0, -1) : infos;
103
+ }
104
+ finally {
105
+ activeMultipleAccountReads -= 1;
106
+ }
107
+ },
108
+ };
38
109
  return {
39
- getAccountInfo: async () => ({
40
- data,
41
- executable: false,
42
- lamports: 1,
43
- owner: PROGRAM_ID,
44
- rentEpoch: 0,
45
- }),
110
+ connection,
111
+ multipleAccountReads,
112
+ get maxConcurrentMultipleAccountReads() {
113
+ return maxConcurrentMultipleAccountReads;
114
+ },
115
+ registryAddress,
116
+ singleAccountReads,
46
117
  };
47
118
  }
119
+ function createAccountFixtures(keys) {
120
+ return new Map(keys.map((key, index) => [
121
+ key.toBase58(),
122
+ {
123
+ data: createPriceInterfaceAccountsData([createPublicKey(128 + index)], {
124
+ maximumAgeSeconds: BigInt(index + 1),
125
+ priceChain: [index + 1, index + 2, index + 3, index + 4],
126
+ }),
127
+ },
128
+ ]));
129
+ }
48
130
  (0, node_test_1.default)("decodes price metadata from exact wire offsets without consuming reserved bytes", async () => {
49
131
  for (const reservedByte of [0xa5, 0x5a]) {
50
- const fetcher = new fetcher_1.ExponentVaultsFetcher(createConnection(createExponentPricesData(reservedByte)), PROGRAM_ID);
132
+ const { connection } = createConnection(createExponentPricesData([ZERO_PUBKEY], reservedByte));
133
+ const fetcher = new fetcher_1.ExponentVaultsFetcher(connection, PROGRAM_ID);
51
134
  const prices = await fetcher.fetchExponentPrices();
52
135
  const price = prices.prices[1];
53
136
  strict_1.default.ok(price);
@@ -56,4 +139,87 @@ function createConnection(data) {
56
139
  strict_1.default.equal(price.syPriceId, SY_PRICE_ID);
57
140
  }
58
141
  });
142
+ (0, node_test_1.default)("fetches unique price interface accounts sequentially in maximum 100-key batches", async () => {
143
+ const cases = [
144
+ { count: 0, expectedBatchSizes: [] },
145
+ { count: 1, expectedBatchSizes: [1] },
146
+ { count: 99, expectedBatchSizes: [99] },
147
+ { count: 100, expectedBatchSizes: [100] },
148
+ { count: 101, expectedBatchSizes: [100, 1] },
149
+ { count: 200, expectedBatchSizes: [100, 100] },
150
+ { count: 201, expectedBatchSizes: [100, 100, 1] },
151
+ { count: 1024, expectedBatchSizes: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 24] },
152
+ ];
153
+ for (const { count, expectedBatchSizes } of cases) {
154
+ const keys = Array.from({ length: count }, (_, index) => createPublicKey(index + 1));
155
+ const connectionState = createConnection(createExponentPricesData(keys), { accounts: createAccountFixtures(keys) });
156
+ const prices = await new fetcher_1.ExponentVaultsFetcher(connectionState.connection, PROGRAM_ID).fetchExponentPrices();
157
+ strict_1.default.deepEqual(connectionState.multipleAccountReads.map((batch) => batch.length), expectedBatchSizes, `count ${count}`);
158
+ strict_1.default.ok(connectionState.multipleAccountReads.every((batch) => batch.length <= 100), `count ${count}`);
159
+ strict_1.default.equal(connectionState.maxConcurrentMultipleAccountReads, count === 0 ? 0 : 1, `count ${count}`);
160
+ strict_1.default.deepEqual(connectionState.singleAccountReads.map((address) => address.toBase58()), [connectionState.registryAddress.toBase58()], `count ${count}`);
161
+ strict_1.default.deepEqual(connectionState.multipleAccountReads.flat().map((address) => address.toBase58()), keys.map((key) => key.toBase58()), `count ${count}`);
162
+ for (const [index, key] of keys.entries()) {
163
+ const price = prices.prices[index + 1];
164
+ strict_1.default.ok(price, `count ${count}, price ${index + 1}`);
165
+ strict_1.default.deepEqual(price.interfaceAccounts, [createPublicKey(128 + index)]);
166
+ strict_1.default.deepEqual(price.scopeConfig, {
167
+ maximumAgeSeconds: BigInt(index + 1),
168
+ priceChain: [index + 1, index + 2, index + 3, index + 4],
169
+ });
170
+ strict_1.default.equal(price.priceInterfaceAccounts.toBase58(), key.toBase58());
171
+ }
172
+ }
173
+ });
174
+ (0, node_test_1.default)("deduplicates nonzero price interface accounts and hydrates every matching price", async () => {
175
+ const firstKey = createPublicKey(250);
176
+ const secondKey = createPublicKey(1);
177
+ const keys = [firstKey, ZERO_PUBKEY, firstKey, secondKey];
178
+ strict_1.default.notDeepEqual([firstKey.toBase58(), secondKey.toBase58()], [firstKey.toBase58(), secondKey.toBase58()].sort());
179
+ const { connection, multipleAccountReads, registryAddress, singleAccountReads } = createConnection(createExponentPricesData(keys), { accounts: createAccountFixtures([firstKey, secondKey]) });
180
+ const prices = await new fetcher_1.ExponentVaultsFetcher(connection, PROGRAM_ID).fetchExponentPrices();
181
+ strict_1.default.deepEqual(singleAccountReads.map((address) => address.toBase58()), [registryAddress.toBase58()]);
182
+ strict_1.default.deepEqual(multipleAccountReads.map((batch) => batch.map((key) => key.toBase58())), [[firstKey.toBase58(), secondKey.toBase58()]]);
183
+ strict_1.default.deepEqual(prices.prices[1]?.interfaceAccounts, [createPublicKey(128)]);
184
+ strict_1.default.deepEqual(prices.prices[2]?.interfaceAccounts, []);
185
+ strict_1.default.deepEqual(prices.prices[3]?.interfaceAccounts, [createPublicKey(128)]);
186
+ strict_1.default.deepEqual(prices.prices[4]?.interfaceAccounts, [createPublicKey(129)]);
187
+ strict_1.default.strictEqual(prices.prices[1]?.interfaceAccounts, prices.prices[3]?.interfaceAccounts);
188
+ strict_1.default.ok(prices.prices[1]?.scopeConfig);
189
+ strict_1.default.strictEqual(prices.prices[1]?.scopeConfig, prices.prices[3]?.scopeConfig);
190
+ });
191
+ (0, node_test_1.default)("preserves PriceInterfaceAccounts validation errors and malformed RPC response failures", async () => {
192
+ const key = createPublicKey(1);
193
+ const registryData = createExponentPricesData([key]);
194
+ await strict_1.default.rejects(() => new fetcher_1.ExponentVaultsFetcher(createConnection(registryData).connection, PROGRAM_ID).fetchExponentPrices(), new Error(`PriceInterfaceAccounts account not found: ${key.toBase58()}`));
195
+ await strict_1.default.rejects(() => new fetcher_1.ExponentVaultsFetcher(createConnection(registryData, {
196
+ accounts: new Map([
197
+ [key.toBase58(), { data: createPriceInterfaceAccountsData([]), owner: createPublicKey(2) }],
198
+ ]),
199
+ }).connection, PROGRAM_ID).fetchExponentPrices(), new Error(`PriceInterfaceAccounts owner mismatch: expected ${PROGRAM_ID.toBase58()}, got ${createPublicKey(2).toBase58()}`));
200
+ await strict_1.default.rejects(() => new fetcher_1.ExponentVaultsFetcher(createConnection(registryData, { accounts: createAccountFixtures([key]), shortResponse: true }).connection, PROGRAM_ID).fetchExponentPrices(), new Error("PriceInterfaceAccounts batch size mismatch: requested 1, got 0"));
201
+ const rpcError = new Error("RPC unavailable");
202
+ await strict_1.default.rejects(() => new fetcher_1.ExponentVaultsFetcher(createConnection(registryData, { accounts: createAccountFixtures([key]), rpcError }).connection, PROGRAM_ID).fetchExponentPrices(), rpcError);
203
+ await strict_1.default.rejects(() => new fetcher_1.ExponentVaultsFetcher(createConnection(registryData, {
204
+ accounts: new Map([[key.toBase58(), { data: Buffer.alloc(1) }]]),
205
+ }).connection, PROGRAM_ID).fetchExponentPrices(), new Error("PriceInterfaceAccounts account too small: 1 bytes"));
206
+ });
207
+ (0, node_test_1.default)("reports a missing account at its indexed position in the second batch", async () => {
208
+ const keys = Array.from({ length: 102 }, (_, index) => createPublicKey(index + 1));
209
+ const accounts = createAccountFixtures(keys);
210
+ const missingKey = keys[101];
211
+ accounts.set(missingKey.toBase58(), null);
212
+ await strict_1.default.rejects(() => new fetcher_1.ExponentVaultsFetcher(createConnection(createExponentPricesData(keys), { accounts }).connection, PROGRAM_ID).fetchExponentPrices(), new Error(`PriceInterfaceAccounts account not found: ${missingKey.toBase58()}`));
213
+ });
214
+ (0, node_test_1.default)("reports an owner mismatch at its indexed position in a later batch", async () => {
215
+ const keys = Array.from({ length: 202 }, (_, index) => createPublicKey(index + 1));
216
+ const accounts = createAccountFixtures(keys);
217
+ const mismatchedKey = keys[201];
218
+ const unexpectedOwner = createPublicKey(250);
219
+ accounts.set(mismatchedKey.toBase58(), {
220
+ data: createPriceInterfaceAccountsData([]),
221
+ owner: unexpectedOwner,
222
+ });
223
+ await strict_1.default.rejects(() => new fetcher_1.ExponentVaultsFetcher(createConnection(createExponentPricesData(keys), { accounts }).connection, PROGRAM_ID).fetchExponentPrices(), new Error(`PriceInterfaceAccounts owner mismatch: expected ${PROGRAM_ID.toBase58()}, got ${unexpectedOwner.toBase58()}`));
224
+ });
59
225
  //# sourceMappingURL=fetcher.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.test.js","sourceRoot":"","sources":["../src/fetcher.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetcher.test.js","sourceRoot":"","sources":["../src/fetcher.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,3 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
1
  import { web3 } from "@coral-xyz/anchor";
4
2
  import { type ScopePriceConfig } from "./types";
5
3
  export type DecodedPriceInterfaceAccounts = {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.decodePriceInterfaceAccounts = void 0;
3
+ exports.decodePriceInterfaceAccounts = decodePriceInterfaceAccounts;
4
4
  const anchor_1 = require("@coral-xyz/anchor");
5
5
  const DISCRIMINATOR_BYTES = 8;
6
6
  const VECTOR_LENGTH_BYTES = 4;
@@ -56,5 +56,4 @@ function decodePriceInterfaceAccounts(data) {
56
56
  },
57
57
  };
58
58
  }
59
- exports.decodePriceInterfaceAccounts = decodePriceInterfaceAccounts;
60
59
  //# sourceMappingURL=priceInterfaceAccounts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"priceInterfaceAccounts.js","sourceRoot":"","sources":["../src/priceInterfaceAccounts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"priceInterfaceAccounts.js","sourceRoot":"","sources":["../src/priceInterfaceAccounts.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- /// <reference types="bn.js" />
2
1
  import { BN, web3 } from "@coral-xyz/anchor";
3
2
  type AnchorEnumKey<T> = T extends Record<string, any> ? {
4
3
  [K in keyof T]: T[K] extends Record<string, never> ? K : never;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformAnchorData = void 0;
3
+ exports.transformAnchorData = transformAnchorData;
4
4
  const anchor_1 = require("@coral-xyz/anchor");
5
5
  // Helper function to convert at runtime
6
6
  function transformAnchorData(data) {
@@ -50,5 +50,4 @@ function transformAnchorData(data) {
50
50
  }
51
51
  return data;
52
52
  }
53
- exports.transformAnchorData = transformAnchorData;
54
53
  //# sourceMappingURL=typeUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typeUtils.js","sourceRoot":"","sources":["../src/typeUtils.ts"],"names":[],"mappings":";;;AAAA,8CAA4C;AAmD5C,wCAAwC;AACxC,SAAgB,mBAAmB,CAAI,IAAO;IAC5C,+BAA+B;IAC/B,IAAI,IAAI,YAAY,aAAI,CAAC,SAAS,EAAE,CAAC;QACnC,OAAO,IAAW,CAAA;IACpB,CAAC;IAED,IAAI,IAAI,YAAY,WAAE,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAQ,CAAA;IACvC,CAAC;IAED,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;QACzB,OAAO,IAAW,CAAA;IACpB,CAAC;IAED,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;QAC/B,OAAO,IAAW,CAAA;IACpB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAQ,CAAA;IAC7C,CAAC;IAED,IAAI,IAAI,YAAY,GAAG,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAA;QACxB,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAA;QAClE,CAAC,CAAC,CAAA;QACF,OAAO,MAAa,CAAA;IACtB,CAAC;IAED,IAAI,IAAI,YAAY,GAAG,EAAE,CAAC;QACxB,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAQ,CAAA;IAC3D,CAAC;IAED,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrC,+BAA+B;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAsB,CAAC,CAAA;YAChD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1E,OAAO,IAAI,CAAC,CAAC,CAAQ,CAAA;YACvB,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,MAAM,MAAM,GAAQ,EAAE,CAAA;QACtB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACpD,MAAM,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,OAAO,IAAW,CAAA;AACpB,CAAC;AAvDD,kDAuDC"}
1
+ {"version":3,"file":"typeUtils.js","sourceRoot":"","sources":["../src/typeUtils.ts"],"names":[],"mappings":";;AAoDA,kDAuDC;AA3GD,8CAA4C;AAmD5C,wCAAwC;AACxC,SAAgB,mBAAmB,CAAI,IAAO;IAC5C,+BAA+B;IAC/B,IAAI,IAAI,YAAY,aAAI,CAAC,SAAS,EAAE,CAAC;QACnC,OAAO,IAAW,CAAA;IACpB,CAAC;IAED,IAAI,IAAI,YAAY,WAAE,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAQ,CAAA;IACvC,CAAC;IAED,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;QACzB,OAAO,IAAW,CAAA;IACpB,CAAC;IAED,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;QAC/B,OAAO,IAAW,CAAA;IACpB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAQ,CAAA;IAC7C,CAAC;IAED,IAAI,IAAI,YAAY,GAAG,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAA;QACxB,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAA;QAClE,CAAC,CAAC,CAAA;QACF,OAAO,MAAa,CAAA;IACtB,CAAC;IAED,IAAI,IAAI,YAAY,GAAG,EAAE,CAAC;QACxB,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAQ,CAAA;IAC3D,CAAC;IAED,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrC,+BAA+B;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAsB,CAAC,CAAA;YAChD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1E,OAAO,IAAI,CAAC,CAAC,CAAQ,CAAA;YACvB,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,MAAM,MAAM,GAAQ,EAAE,CAAA;QACtB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACpD,MAAM,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,OAAO,IAAW,CAAA;AACpB,CAAC"}
package/package.json CHANGED
@@ -1,17 +1,18 @@
1
1
  {
2
2
  "name": "@exponent-labs/exponent-vaults-fetcher",
3
- "version": "0.9.25",
3
+ "version": "0.9.27",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "license": "AGPL-3.0",
7
7
  "scripts": {
8
8
  "build": "tsc --build",
9
- "test": "node --test build/fetcher.test.js"
9
+ "pretest": "yarn build",
10
+ "test": "node --test build/fetcher.test.js build/priceInterfaceAccounts.test.js"
10
11
  },
11
12
  "dependencies": {
12
13
  "@coral-xyz/anchor": "0.30.1",
13
- "@exponent-labs/exponent-vaults-idl": "0.9.25",
14
- "@exponent-labs/exponent-vaults-pda": "0.9.25"
14
+ "@exponent-labs/exponent-vaults-idl": "0.9.27",
15
+ "@exponent-labs/exponent-vaults-pda": "0.9.27"
15
16
  },
16
17
  "devDependencies": {
17
18
  "@types/bn.js": "^5.1.0",
@@ -2,9 +2,12 @@ import { web3 } from "@coral-xyz/anchor"
2
2
  import assert from "node:assert/strict"
3
3
  import test from "node:test"
4
4
 
5
+ import { ExponentVaultsPDA } from "@exponent-labs/exponent-vaults-pda"
6
+
5
7
  import { ExponentVaultsFetcher } from "./fetcher"
6
8
 
7
9
  const EXPONENT_PRICES_DISCRIMINATOR = Buffer.from([188, 97, 196, 52, 192, 41, 211, 196])
10
+ const PRICE_INTERFACE_ACCOUNTS_DISCRIMINATOR = Buffer.from([166, 196, 173, 204, 35, 6, 104, 230])
8
11
  const PROGRAM_ID = new web3.PublicKey(Uint8Array.from({ length: 32 }, (_, index) => index + 1))
9
12
  const PRICE_MINT = new web3.PublicKey(Uint8Array.from({ length: 32 }, (_, index) => index + 33))
10
13
 
@@ -21,36 +24,144 @@ const EXPONENT_PRICES_SIZE = PRICE_NODES_OFFSET + MAX_PRICES * PRICE_NODE_SIZE +
21
24
  const PRICE_DECIMALS = 6
22
25
  const UNDERLYING_DECIMALS = 9
23
26
  const SY_PRICE_ID = 0x0807060504030201n
27
+ const ZERO_PUBKEY = new web3.PublicKey(new Uint8Array(PUBKEY_BYTES))
28
+
29
+ type ScopeConfigFixture = {
30
+ maximumAgeSeconds: bigint
31
+ priceChain: readonly [number, number, number, number]
32
+ }
33
+
34
+ type AccountFixture = {
35
+ data: Buffer
36
+ owner?: web3.PublicKey
37
+ }
38
+
39
+ type ConnectionOptions = {
40
+ accounts?: ReadonlyMap<string, AccountFixture | null>
41
+ rpcError?: Error
42
+ shortResponse?: boolean
43
+ }
24
44
 
25
- function createExponentPricesData(reservedByte: number): Buffer {
45
+ function createPublicKey(seed: number): web3.PublicKey {
46
+ const bytes = new Uint8Array(PUBKEY_BYTES).fill(255)
47
+ new DataView(bytes.buffer).setUint32(0, seed, true)
48
+ return new web3.PublicKey(bytes)
49
+ }
50
+
51
+ function createExponentPricesData(priceInterfaceAccounts: readonly web3.PublicKey[], reservedByte = 0): Buffer {
26
52
  const data = Buffer.alloc(EXPONENT_PRICES_SIZE)
27
53
  EXPONENT_PRICES_DISCRIMINATOR.copy(data)
28
- data.writeBigUInt64LE(1n, 8 + 8 + MAX_PRICE_MANAGERS * PUBKEY_BYTES)
29
- PRICE_MINT.toBuffer().copy(data, FIRST_PRICE_VALUE_OFFSET)
30
-
31
- data.writeUInt8(PRICE_DECIMALS, FIRST_PRICE_VALUE_OFFSET + 160)
32
- data.writeUInt8(UNDERLYING_DECIMALS, FIRST_PRICE_VALUE_OFFSET + 161)
33
- data.fill(reservedByte, FIRST_PRICE_VALUE_OFFSET + 162, FIRST_PRICE_VALUE_OFFSET + 168)
34
- data.writeBigUInt64LE(SY_PRICE_ID, FIRST_PRICE_VALUE_OFFSET + 168)
35
- data.fill(reservedByte, FIRST_PRICE_VALUE_OFFSET + 176, FIRST_PRICE_VALUE_OFFSET + EXPONENT_PRICE_SIZE)
54
+ data.writeBigUInt64LE(BigInt(priceInterfaceAccounts.length), 8 + 8 + MAX_PRICE_MANAGERS * PUBKEY_BYTES)
55
+
56
+ for (const [index, priceInterfaceAccount] of priceInterfaceAccounts.entries()) {
57
+ const valueOffset = FIRST_PRICE_VALUE_OFFSET + index * PRICE_NODE_SIZE
58
+ PRICE_MINT.toBuffer().copy(data, valueOffset)
59
+ priceInterfaceAccount.toBuffer().copy(data, valueOffset + 128)
60
+ data.writeUInt8(PRICE_DECIMALS, valueOffset + 160)
61
+ data.writeUInt8(UNDERLYING_DECIMALS, valueOffset + 161)
62
+ data.fill(reservedByte, valueOffset + 162, valueOffset + 168)
63
+ data.writeBigUInt64LE(SY_PRICE_ID, valueOffset + 168)
64
+ data.fill(reservedByte, valueOffset + 176, valueOffset + EXPONENT_PRICE_SIZE)
65
+ }
66
+
36
67
  return data
37
68
  }
38
69
 
39
- function createConnection(data: Buffer): web3.Connection {
40
- return {
41
- getAccountInfo: async () => ({
42
- data,
43
- executable: false,
44
- lamports: 1,
45
- owner: PROGRAM_ID,
46
- rentEpoch: 0,
47
- }),
70
+ function createPriceInterfaceAccountsData(
71
+ interfaceAccounts: readonly web3.PublicKey[],
72
+ scopeConfig?: ScopeConfigFixture,
73
+ ): Buffer {
74
+ const data = Buffer.alloc(12 + interfaceAccounts.length * PUBKEY_BYTES + (scopeConfig ? 17 : 0))
75
+ PRICE_INTERFACE_ACCOUNTS_DISCRIMINATOR.copy(data)
76
+ data.writeUInt32LE(interfaceAccounts.length, 8)
77
+ interfaceAccounts.forEach((account, index) => account.toBuffer().copy(data, 12 + index * PUBKEY_BYTES))
78
+
79
+ if (scopeConfig) {
80
+ const stateOffset = 12 + interfaceAccounts.length * PUBKEY_BYTES
81
+ data.writeUInt8(2, stateOffset)
82
+ scopeConfig.priceChain.forEach((price, index) => data.writeUInt16LE(price, stateOffset + 1 + index * 2))
83
+ data.writeBigUInt64LE(scopeConfig.maximumAgeSeconds, stateOffset + 9)
84
+ }
85
+
86
+ return data
87
+ }
88
+
89
+ function createConnection(registryData: Buffer, options: ConnectionOptions = {}) {
90
+ const registryAddress = new ExponentVaultsPDA(PROGRAM_ID).exponentPrices()[0]
91
+ const singleAccountReads: web3.PublicKey[] = []
92
+ const multipleAccountReads: web3.PublicKey[][] = []
93
+ let activeMultipleAccountReads = 0
94
+ let maxConcurrentMultipleAccountReads = 0
95
+
96
+ const connection = {
97
+ async getAccountInfo(address: web3.PublicKey) {
98
+ singleAccountReads.push(address)
99
+ if (!address.equals(registryAddress)) {
100
+ throw new Error(`Unexpected getAccountInfo for PriceInterfaceAccounts: ${address.toBase58()}`)
101
+ }
102
+ return {
103
+ data: registryData,
104
+ executable: false,
105
+ lamports: 1,
106
+ owner: PROGRAM_ID,
107
+ rentEpoch: 0,
108
+ }
109
+ },
110
+ async getMultipleAccountsInfo(addresses: web3.PublicKey[]) {
111
+ multipleAccountReads.push(addresses)
112
+ activeMultipleAccountReads += 1
113
+ maxConcurrentMultipleAccountReads = Math.max(maxConcurrentMultipleAccountReads, activeMultipleAccountReads)
114
+ try {
115
+ await Promise.resolve()
116
+ if (options.rpcError) throw options.rpcError
117
+
118
+ const infos = addresses.map((address) => {
119
+ const fixture = options.accounts?.get(address.toBase58())
120
+ if (fixture === null || !fixture) return null
121
+ return {
122
+ data: fixture.data,
123
+ executable: false,
124
+ lamports: 1,
125
+ owner: fixture.owner ?? PROGRAM_ID,
126
+ rentEpoch: 0,
127
+ }
128
+ })
129
+ return options.shortResponse ? infos.slice(0, -1) : infos
130
+ } finally {
131
+ activeMultipleAccountReads -= 1
132
+ }
133
+ },
48
134
  } as unknown as web3.Connection
135
+
136
+ return {
137
+ connection,
138
+ multipleAccountReads,
139
+ get maxConcurrentMultipleAccountReads() {
140
+ return maxConcurrentMultipleAccountReads
141
+ },
142
+ registryAddress,
143
+ singleAccountReads,
144
+ }
145
+ }
146
+
147
+ function createAccountFixtures(keys: readonly web3.PublicKey[]): Map<string, AccountFixture> {
148
+ return new Map(
149
+ keys.map((key, index) => [
150
+ key.toBase58(),
151
+ {
152
+ data: createPriceInterfaceAccountsData([createPublicKey(128 + index)], {
153
+ maximumAgeSeconds: BigInt(index + 1),
154
+ priceChain: [index + 1, index + 2, index + 3, index + 4],
155
+ }),
156
+ },
157
+ ]),
158
+ )
49
159
  }
50
160
 
51
161
  test("decodes price metadata from exact wire offsets without consuming reserved bytes", async () => {
52
162
  for (const reservedByte of [0xa5, 0x5a]) {
53
- const fetcher = new ExponentVaultsFetcher(createConnection(createExponentPricesData(reservedByte)), PROGRAM_ID)
163
+ const { connection } = createConnection(createExponentPricesData([ZERO_PUBKEY], reservedByte))
164
+ const fetcher = new ExponentVaultsFetcher(connection, PROGRAM_ID)
54
165
  const prices = await fetcher.fetchExponentPrices()
55
166
  const price = prices.prices[1]
56
167
 
@@ -60,3 +171,176 @@ test("decodes price metadata from exact wire offsets without consuming reserved
60
171
  assert.equal(price.syPriceId, SY_PRICE_ID)
61
172
  }
62
173
  })
174
+
175
+ test("fetches unique price interface accounts sequentially in maximum 100-key batches", async () => {
176
+ const cases = [
177
+ { count: 0, expectedBatchSizes: [] },
178
+ { count: 1, expectedBatchSizes: [1] },
179
+ { count: 99, expectedBatchSizes: [99] },
180
+ { count: 100, expectedBatchSizes: [100] },
181
+ { count: 101, expectedBatchSizes: [100, 1] },
182
+ { count: 200, expectedBatchSizes: [100, 100] },
183
+ { count: 201, expectedBatchSizes: [100, 100, 1] },
184
+ { count: 1024, expectedBatchSizes: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 24] },
185
+ ]
186
+
187
+ for (const { count, expectedBatchSizes } of cases) {
188
+ const keys = Array.from({ length: count }, (_, index) => createPublicKey(index + 1))
189
+ const connectionState = createConnection(createExponentPricesData(keys), { accounts: createAccountFixtures(keys) })
190
+
191
+ const prices = await new ExponentVaultsFetcher(connectionState.connection, PROGRAM_ID).fetchExponentPrices()
192
+
193
+ assert.deepEqual(
194
+ connectionState.multipleAccountReads.map((batch) => batch.length),
195
+ expectedBatchSizes,
196
+ `count ${count}`,
197
+ )
198
+ assert.ok(
199
+ connectionState.multipleAccountReads.every((batch) => batch.length <= 100),
200
+ `count ${count}`,
201
+ )
202
+ assert.equal(connectionState.maxConcurrentMultipleAccountReads, count === 0 ? 0 : 1, `count ${count}`)
203
+ assert.deepEqual(
204
+ connectionState.singleAccountReads.map((address) => address.toBase58()),
205
+ [connectionState.registryAddress.toBase58()],
206
+ `count ${count}`,
207
+ )
208
+ assert.deepEqual(
209
+ connectionState.multipleAccountReads.flat().map((address) => address.toBase58()),
210
+ keys.map((key) => key.toBase58()),
211
+ `count ${count}`,
212
+ )
213
+ for (const [index, key] of keys.entries()) {
214
+ const price = prices.prices[index + 1]
215
+ assert.ok(price, `count ${count}, price ${index + 1}`)
216
+ assert.deepEqual(price.interfaceAccounts, [createPublicKey(128 + index)])
217
+ assert.deepEqual(price.scopeConfig, {
218
+ maximumAgeSeconds: BigInt(index + 1),
219
+ priceChain: [index + 1, index + 2, index + 3, index + 4],
220
+ })
221
+ assert.equal(price.priceInterfaceAccounts.toBase58(), key.toBase58())
222
+ }
223
+ }
224
+ })
225
+
226
+ test("deduplicates nonzero price interface accounts and hydrates every matching price", async () => {
227
+ const firstKey = createPublicKey(250)
228
+ const secondKey = createPublicKey(1)
229
+ const keys = [firstKey, ZERO_PUBKEY, firstKey, secondKey]
230
+ assert.notDeepEqual([firstKey.toBase58(), secondKey.toBase58()], [firstKey.toBase58(), secondKey.toBase58()].sort())
231
+ const { connection, multipleAccountReads, registryAddress, singleAccountReads } = createConnection(
232
+ createExponentPricesData(keys),
233
+ { accounts: createAccountFixtures([firstKey, secondKey]) },
234
+ )
235
+
236
+ const prices = await new ExponentVaultsFetcher(connection, PROGRAM_ID).fetchExponentPrices()
237
+
238
+ assert.deepEqual(
239
+ singleAccountReads.map((address) => address.toBase58()),
240
+ [registryAddress.toBase58()],
241
+ )
242
+ assert.deepEqual(
243
+ multipleAccountReads.map((batch) => batch.map((key) => key.toBase58())),
244
+ [[firstKey.toBase58(), secondKey.toBase58()]],
245
+ )
246
+ assert.deepEqual(prices.prices[1]?.interfaceAccounts, [createPublicKey(128)])
247
+ assert.deepEqual(prices.prices[2]?.interfaceAccounts, [])
248
+ assert.deepEqual(prices.prices[3]?.interfaceAccounts, [createPublicKey(128)])
249
+ assert.deepEqual(prices.prices[4]?.interfaceAccounts, [createPublicKey(129)])
250
+ assert.strictEqual(prices.prices[1]?.interfaceAccounts, prices.prices[3]?.interfaceAccounts)
251
+ assert.ok(prices.prices[1]?.scopeConfig)
252
+ assert.strictEqual(prices.prices[1]?.scopeConfig, prices.prices[3]?.scopeConfig)
253
+ })
254
+
255
+ test("preserves PriceInterfaceAccounts validation errors and malformed RPC response failures", async () => {
256
+ const key = createPublicKey(1)
257
+ const registryData = createExponentPricesData([key])
258
+
259
+ await assert.rejects(
260
+ () => new ExponentVaultsFetcher(createConnection(registryData).connection, PROGRAM_ID).fetchExponentPrices(),
261
+ new Error(`PriceInterfaceAccounts account not found: ${key.toBase58()}`),
262
+ )
263
+
264
+ await assert.rejects(
265
+ () =>
266
+ new ExponentVaultsFetcher(
267
+ createConnection(registryData, {
268
+ accounts: new Map([
269
+ [key.toBase58(), { data: createPriceInterfaceAccountsData([]), owner: createPublicKey(2) }],
270
+ ]),
271
+ }).connection,
272
+ PROGRAM_ID,
273
+ ).fetchExponentPrices(),
274
+ new Error(
275
+ `PriceInterfaceAccounts owner mismatch: expected ${PROGRAM_ID.toBase58()}, got ${createPublicKey(2).toBase58()}`,
276
+ ),
277
+ )
278
+
279
+ await assert.rejects(
280
+ () =>
281
+ new ExponentVaultsFetcher(
282
+ createConnection(registryData, { accounts: createAccountFixtures([key]), shortResponse: true }).connection,
283
+ PROGRAM_ID,
284
+ ).fetchExponentPrices(),
285
+ new Error("PriceInterfaceAccounts batch size mismatch: requested 1, got 0"),
286
+ )
287
+
288
+ const rpcError = new Error("RPC unavailable")
289
+ await assert.rejects(
290
+ () =>
291
+ new ExponentVaultsFetcher(
292
+ createConnection(registryData, { accounts: createAccountFixtures([key]), rpcError }).connection,
293
+ PROGRAM_ID,
294
+ ).fetchExponentPrices(),
295
+ rpcError,
296
+ )
297
+
298
+ await assert.rejects(
299
+ () =>
300
+ new ExponentVaultsFetcher(
301
+ createConnection(registryData, {
302
+ accounts: new Map([[key.toBase58(), { data: Buffer.alloc(1) }]]),
303
+ }).connection,
304
+ PROGRAM_ID,
305
+ ).fetchExponentPrices(),
306
+ new Error("PriceInterfaceAccounts account too small: 1 bytes"),
307
+ )
308
+ })
309
+
310
+ test("reports a missing account at its indexed position in the second batch", async () => {
311
+ const keys = Array.from({ length: 102 }, (_, index) => createPublicKey(index + 1))
312
+ const accounts = createAccountFixtures(keys)
313
+ const missingKey = keys[101]
314
+ accounts.set(missingKey.toBase58(), null)
315
+
316
+ await assert.rejects(
317
+ () =>
318
+ new ExponentVaultsFetcher(
319
+ createConnection(createExponentPricesData(keys), { accounts }).connection,
320
+ PROGRAM_ID,
321
+ ).fetchExponentPrices(),
322
+ new Error(`PriceInterfaceAccounts account not found: ${missingKey.toBase58()}`),
323
+ )
324
+ })
325
+
326
+ test("reports an owner mismatch at its indexed position in a later batch", async () => {
327
+ const keys = Array.from({ length: 202 }, (_, index) => createPublicKey(index + 1))
328
+ const accounts = createAccountFixtures(keys)
329
+ const mismatchedKey = keys[201]
330
+ const unexpectedOwner = createPublicKey(250)
331
+ accounts.set(mismatchedKey.toBase58(), {
332
+ data: createPriceInterfaceAccountsData([]),
333
+ owner: unexpectedOwner,
334
+ })
335
+
336
+ await assert.rejects(
337
+ () =>
338
+ new ExponentVaultsFetcher(
339
+ createConnection(createExponentPricesData(keys), { accounts }).connection,
340
+ PROGRAM_ID,
341
+ ).fetchExponentPrices(),
342
+ new Error(
343
+ `PriceInterfaceAccounts owner mismatch: expected ${PROGRAM_ID.toBase58()}, got ${unexpectedOwner.toBase58()}`,
344
+ ),
345
+ )
346
+ })
package/src/fetcher.ts CHANGED
@@ -4,14 +4,15 @@ import { ExponentVaults, IDL, PROGRAM_ID } from "@exponent-labs/exponent-vaults-
4
4
  import { ExponentVaultsPDA } from "@exponent-labs/exponent-vaults-pda"
5
5
 
6
6
  import { IGNORED_VAULTS } from "./constants"
7
- import { transformAnchorData } from "./typeUtils"
8
7
  import { decodePriceInterfaceAccounts } from "./priceInterfaceAccounts"
8
+ import { transformAnchorData } from "./typeUtils"
9
9
  import { ActionProposal, ExponentPrices, ExponentVault, WithdrawalAccount } from "./types"
10
10
 
11
11
  const EXPONENT_PRICES_META_DISCRIMINATOR = Buffer.from([188, 97, 196, 52, 192, 41, 211, 196])
12
12
  const MAX_PRICES = 1024
13
13
  const MAX_PRICE_MANAGERS = 8
14
14
  const MAX_AUTHORIZED_VAULT_CREATORS = 128
15
+ const MAX_GET_MULTIPLE_ACCOUNTS_INFO_KEYS = 100
15
16
  const PRICE_NODE_REGISTERS = 4
16
17
  const PRICE_USAGE_AMOUNT_REGISTER = 1
17
18
 
@@ -131,7 +132,10 @@ export class ExponentVaultsFetcher {
131
132
  }
132
133
 
133
134
  async fetchAllVaults(filters?: web3.GetProgramAccountsFilter[]) {
134
- const discriminator = this.vaultAccountClient.coder.accounts.memcmp("ExponentStrategyVault")
135
+ // Anchor normalizes JSON IDL account names to camelCase in the Borsh coder even
136
+ // when program.idl still exposes the original PascalCase spelling.
137
+ const accountName = "exponentStrategyVault"
138
+ const discriminator = this.vaultAccountClient.coder.accounts.memcmp(accountName)
135
139
  const baseFilters: web3.GetProgramAccountsFilter[] = discriminator
136
140
  ? [{ memcmp: { offset: discriminator.offset, bytes: discriminator.bytes } }]
137
141
  : []
@@ -153,7 +157,7 @@ export class ExponentVaultsFetcher {
153
157
  const tokenEntriesLen = account.data.readUInt32LE(TOKEN_ENTRIES_VEC_OFFSET)
154
158
  if (tokenEntriesLen > 64) continue
155
159
  try {
156
- const data = this.vaultAccountClient.coder.accounts.decode("ExponentStrategyVault", account.data)
160
+ const data = this.vaultAccountClient.coder.accounts.decode(accountName, account.data)
157
161
  decoded.push({ publicKey: pubkey, account: data })
158
162
  } catch {
159
163
  // skip accounts that fail to deserialize
@@ -261,9 +265,9 @@ export class ExponentVaultsFetcher {
261
265
  }))
262
266
  }
263
267
 
264
- async fetchAllWithdrawalAccountsDeserialized(filters?: web3.GetProgramAccountsFilter[]): Promise<
265
- DecodedAccount<WithdrawalAccount>[]
266
- > {
268
+ async fetchAllWithdrawalAccountsDeserialized(
269
+ filters?: web3.GetProgramAccountsFilter[],
270
+ ): Promise<DecodedAccount<WithdrawalAccount>[]> {
267
271
  const accounts = await this.fetchAllWithdrawalAccounts(filters)
268
272
  return accounts.map(({ publicKey, account }) => ({
269
273
  publicKey,
@@ -432,20 +436,34 @@ export class ExponentVaultsFetcher {
432
436
  const activePriceEntries = prices.filter((entry) => entry !== null) as NonNullable<
433
437
  ExponentPrices["prices"][number]
434
438
  >[]
435
- const uniqueInterfaceAccounts = [
436
- ...new Map(
437
- activePriceEntries.map((entry) => [entry.priceInterfaceAccounts.toBase58(), entry.priceInterfaceAccounts]),
438
- ).values(),
439
- ].filter((pubkey) => !pubkey.equals(ZERO_PUBKEY))
440
-
441
- if (uniqueInterfaceAccounts.length > 0) {
442
- const infos = await Promise.all(
443
- uniqueInterfaceAccounts.map((pubkey) => this.program.provider.connection.getAccountInfo(pubkey)),
444
- )
439
+ const priceEntriesByInterfaceAccount = new Map<
440
+ string,
441
+ { entries: NonNullable<ExponentPrices["prices"][number]>[]; key: web3.PublicKey }
442
+ >()
443
+ for (const entry of activePriceEntries) {
444
+ const key = entry.priceInterfaceAccounts
445
+ if (key.equals(ZERO_PUBKEY)) continue
446
+
447
+ const keyString = key.toBase58()
448
+ const group = priceEntriesByInterfaceAccount.get(keyString)
449
+ if (group) {
450
+ group.entries.push(entry)
451
+ } else {
452
+ priceEntriesByInterfaceAccount.set(keyString, { entries: [entry], key })
453
+ }
454
+ }
445
455
 
446
- for (let i = 0; i < uniqueInterfaceAccounts.length; i++) {
447
- const key = uniqueInterfaceAccounts[i]
448
- const info = infos[i]
456
+ const priceInterfaceAccountGroups = [...priceEntriesByInterfaceAccount.values()]
457
+ for (let start = 0; start < priceInterfaceAccountGroups.length; start += MAX_GET_MULTIPLE_ACCOUNTS_INFO_KEYS) {
458
+ const groups = priceInterfaceAccountGroups.slice(start, start + MAX_GET_MULTIPLE_ACCOUNTS_INFO_KEYS)
459
+ const infos = await this.program.provider.connection.getMultipleAccountsInfo(groups.map((group) => group.key))
460
+ if (infos.length !== groups.length) {
461
+ throw new Error(`PriceInterfaceAccounts batch size mismatch: requested ${groups.length}, got ${infos.length}`)
462
+ }
463
+
464
+ for (let index = 0; index < groups.length; index++) {
465
+ const { entries, key } = groups[index]
466
+ const info = infos[index]
449
467
  if (!info) {
450
468
  throw new Error(`PriceInterfaceAccounts account not found: ${key.toBase58()}`)
451
469
  }
@@ -456,11 +474,9 @@ export class ExponentVaultsFetcher {
456
474
  }
457
475
 
458
476
  const decoded = decodePriceInterfaceAccounts(info.data)
459
- for (const entry of activePriceEntries) {
460
- if (entry.priceInterfaceAccounts.equals(key)) {
461
- entry.interfaceAccounts = decoded.interfaceAccounts
462
- entry.scopeConfig = decoded.scopeConfig
463
- }
477
+ for (const entry of entries) {
478
+ entry.interfaceAccounts = decoded.interfaceAccounts
479
+ entry.scopeConfig = decoded.scopeConfig
464
480
  }
465
481
  }
466
482
  }