@0dotxyz/p0-ts-sdk 1.2.3 → 1.2.4-alpha.1

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/dist/index.cjs CHANGED
@@ -44854,6 +44854,54 @@ async function makeCrankSwbFeedIx(marginfiAccount, bankMap, newBanksPk, provider
44854
44854
  return { instructions: [], luts: [] };
44855
44855
  }
44856
44856
  }
44857
+ function patchSwbFeedHashMismatch(pullIx, expectedFeedPubkeys) {
44858
+ const DEFAULT_KEY = web3_js.PublicKey.default.toBase58();
44859
+ const expectedSet = new Set(expectedFeedPubkeys.map((pk) => pk.toBase58()));
44860
+ const numExpectedFeeds = expectedFeedPubkeys.length;
44861
+ for (const ix of pullIx) {
44862
+ let feedSectionStart = -1;
44863
+ for (let i = 0; i < ix.keys.length; i++) {
44864
+ if (expectedSet.has(ix.keys[i].pubkey.toBase58())) {
44865
+ feedSectionStart = i;
44866
+ break;
44867
+ }
44868
+ }
44869
+ if (feedSectionStart === -1) {
44870
+ for (let i = 0; i < ix.keys.length; i++) {
44871
+ if (ix.keys[i].pubkey.toBase58() === DEFAULT_KEY && ix.keys[i].isWritable) {
44872
+ feedSectionStart = i;
44873
+ break;
44874
+ }
44875
+ }
44876
+ }
44877
+ if (feedSectionStart === -1) continue;
44878
+ const feedSectionEnd = Math.min(feedSectionStart + numExpectedFeeds, ix.keys.length);
44879
+ const presentFeeds = /* @__PURE__ */ new Set();
44880
+ for (let i = feedSectionStart; i < feedSectionEnd; i++) {
44881
+ const key = ix.keys[i].pubkey.toBase58();
44882
+ if (expectedSet.has(key)) {
44883
+ presentFeeds.add(key);
44884
+ }
44885
+ }
44886
+ const missingFeeds = expectedFeedPubkeys.filter((pk) => !presentFeeds.has(pk.toBase58()));
44887
+ if (missingFeeds.length === 0) continue;
44888
+ let missingIdx = 0;
44889
+ for (let i = feedSectionStart; i < feedSectionEnd; i++) {
44890
+ if (ix.keys[i].pubkey.toBase58() === DEFAULT_KEY && missingIdx < missingFeeds.length) {
44891
+ console.log(
44892
+ `[patchSwbFeedHashMismatch] ix.keys[${i}]: replacing PublicKey.default \u2192 ${missingFeeds[missingIdx].toBase58()}`
44893
+ );
44894
+ ix.keys[i].pubkey = missingFeeds[missingIdx];
44895
+ missingIdx++;
44896
+ }
44897
+ }
44898
+ if (missingIdx > 0) {
44899
+ console.log(
44900
+ `[patchSwbFeedHashMismatch] Patched ${missingIdx}/${numExpectedFeeds} feed key(s)`
44901
+ );
44902
+ }
44903
+ }
44904
+ }
44857
44905
  async function makeUpdateSwbFeedIx(props) {
44858
44906
  console.log(
44859
44907
  `[makeUpdateSwbFeedIx] Called with ${props.swbPullOracles.length} oracles, feePayer: ${props.feePayer.toBase58()}`
@@ -44868,11 +44916,6 @@ async function makeUpdateSwbFeedIx(props) {
44868
44916
  console.log(
44869
44917
  `[makeUpdateSwbFeedIx] ${uniqueOracles.length} unique oracles after dedup (removed ${props.swbPullOracles.length - uniqueOracles.length})`
44870
44918
  );
44871
- uniqueOracles.forEach(
44872
- (o) => console.log(
44873
- `[makeUpdateSwbFeedIx] - ${o.key.toBase58()} (hasSwitchboardData: ${!!o.price?.switchboardData})`
44874
- )
44875
- );
44876
44919
  const dummyWallet = {
44877
44920
  publicKey: props.feePayer,
44878
44921
  signTransaction: async (tx) => tx,
@@ -44894,23 +44937,20 @@ async function makeUpdateSwbFeedIx(props) {
44894
44937
  return pullFeed;
44895
44938
  });
44896
44939
  if (pullFeedInstances.length === 0) {
44897
- console.log(`[makeUpdateSwbFeedIx] No pull feed instances, returning early`);
44898
44940
  return { instructions: [], luts: [] };
44899
44941
  }
44900
44942
  const crossbarClient = new common.CrossbarClient(
44901
44943
  process.env.NEXT_PUBLIC_SWITCHBOARD_CROSSSBAR_API || "https://integrator-crossbar.prod.mrgn.app"
44902
44944
  );
44903
- console.log(`[makeUpdateSwbFeedIx] Fetching update ix for ${pullFeedInstances.length} feeds`);
44904
- console.log(
44905
- `[makeUpdateSwbFeedIx] pullFeedInstances:`,
44906
- pullFeedInstances.map((f) => ({ key: f.pubkey.toBase58(), hasConfigs: !!f.configs }))
44907
- );
44908
44945
  const [pullIx, luts] = await onDemand.PullFeed.fetchUpdateManyIx(swbProgram, {
44909
44946
  feeds: pullFeedInstances,
44910
44947
  numSignatures: 1,
44911
- crossbarClient
44948
+ crossbarClient,
44949
+ payer: props.feePayer
44912
44950
  });
44913
44951
  console.log(`[makeUpdateSwbFeedIx] Got ${pullIx.length} instructions, ${luts.length} LUTs`);
44952
+ const expectedFeedPubkeys = pullFeedInstances.map((f) => f.pubkey);
44953
+ patchSwbFeedHashMismatch(pullIx, expectedFeedPubkeys);
44914
44954
  return { instructions: pullIx, luts };
44915
44955
  }
44916
44956