From 4451b45725a03e56b45f3d9473e948e7b2cae968 Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Mon, 9 Dec 2024 17:07:44 -0800 Subject: [PATCH 01/16] feat: update IDL --- .../src/PythSolanaReceiver.ts | 2 + .../src/idl/pyth_solana_receiver.ts | 304 +++++++++++++++++- 2 files changed, 304 insertions(+), 2 deletions(-) diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts index 929f719cc0..29dd3dbc46 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts @@ -56,6 +56,8 @@ import { export type PriceUpdateAccount = IdlAccounts["priceUpdateV2"]; +export type TwapUpdateAccount = + IdlAccounts["twapUpdate"]; /** * Configuration for the PythTransactionBuilder * @property closeUpdateAccounts (default: true) if true, the builder will add instructions to close the price update accounts and the encoded vaa accounts to recover the rent diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/idl/pyth_solana_receiver.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/idl/pyth_solana_receiver.ts index 4e92d15f1c..942a824265 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/idl/pyth_solana_receiver.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/idl/pyth_solana_receiver.ts @@ -1,5 +1,5 @@ export type PythSolanaReceiver = { - version: "0.1.0"; + version: "0.2.0"; name: "pyth_solana_receiver"; instructions: [ { @@ -273,6 +273,68 @@ export type PythSolanaReceiver = { } ]; }, + { + name: "postTwapUpdate"; + docs: [ + "Post a TWAP (time weighted average price) update for a given time window.", + "This should be called after the client has already verified the VAAs via the Wormhole contract.", + "Check out target_chains/solana/cli/src/main.rs for an example of how to do this." + ]; + accounts: [ + { + name: "payer"; + isMut: true; + isSigner: true; + }, + { + name: "startEncodedVaa"; + isMut: false; + isSigner: false; + }, + { + name: "endEncodedVaa"; + isMut: false; + isSigner: false; + }, + { + name: "config"; + isMut: false; + isSigner: false; + }, + { + name: "treasury"; + isMut: true; + isSigner: false; + }, + { + name: "twapUpdateAccount"; + isMut: true; + isSigner: true; + docs: [ + "The contraint is such that either the twap_update_account is uninitialized or the write_authority is the write_authority.", + "Pubkey::default() is the SystemProgram on Solana and it can't sign so it's impossible that twap_update_account.write_authority == Pubkey::default() once the account is initialized" + ]; + }, + { + name: "systemProgram"; + isMut: false; + isSigner: false; + }, + { + name: "writeAuthority"; + isMut: false; + isSigner: true; + } + ]; + args: [ + { + name: "params"; + type: { + defined: "PostTwapUpdateParams"; + }; + } + ]; + }, { name: "reclaimRent"; accounts: [ @@ -356,6 +418,24 @@ export type PythSolanaReceiver = { } ]; }; + }, + { + name: "twapUpdate"; + type: { + kind: "struct"; + fields: [ + { + name: "writeAuthority"; + type: "publicKey"; + }, + { + name: "twap"; + type: { + defined: "TwapPrice"; + }; + } + ]; + }; } ]; types: [ @@ -401,6 +481,52 @@ export type PythSolanaReceiver = { ]; }; }, + { + name: "TwapPrice"; + docs: [ + "The time weighted average price & conf for a feed over the window [start_time, end_time].", + "This type is used to persist the calculated TWAP in TwapUpdate accounts on Solana." + ]; + type: { + kind: "struct"; + fields: [ + { + name: "feedId"; + type: { + array: ["u8", 32]; + }; + }, + { + name: "startTime"; + type: "i64"; + }, + { + name: "endTime"; + type: "i64"; + }, + { + name: "price"; + type: "i64"; + }, + { + name: "conf"; + type: "u64"; + }, + { + name: "exponent"; + type: "i32"; + }, + { + name: "downSlotsRatio"; + docs: [ + "Ratio out of 1_000_000, where a value of 1_000_000 represents", + "all slots were missed and 0 represents no slots were missed." + ]; + type: "u32"; + } + ]; + }; + }, { name: "MerklePriceUpdate"; type: { @@ -477,6 +603,30 @@ export type PythSolanaReceiver = { ]; }; }, + { + name: "PostTwapUpdateParams"; + type: { + kind: "struct"; + fields: [ + { + name: "startMerklePriceUpdate"; + type: { + defined: "MerklePriceUpdate"; + }; + }, + { + name: "endMerklePriceUpdate"; + type: { + defined: "MerklePriceUpdate"; + }; + }, + { + name: "treasuryId"; + type: "u8"; + } + ]; + }; + }, { name: "VerificationLevel"; docs: [ @@ -616,7 +766,7 @@ export type PythSolanaReceiver = { }; export const IDL: PythSolanaReceiver = { - version: "0.1.0", + version: "0.2.0", name: "pyth_solana_receiver", instructions: [ { @@ -890,6 +1040,68 @@ export const IDL: PythSolanaReceiver = { }, ], }, + { + name: "postTwapUpdate", + docs: [ + "Post a TWAP (time weighted average price) update for a given time window.", + "This should be called after the client has already verified the VAAs via the Wormhole contract.", + "Check out target_chains/solana/cli/src/main.rs for an example of how to do this.", + ], + accounts: [ + { + name: "payer", + isMut: true, + isSigner: true, + }, + { + name: "startEncodedVaa", + isMut: false, + isSigner: false, + }, + { + name: "endEncodedVaa", + isMut: false, + isSigner: false, + }, + { + name: "config", + isMut: false, + isSigner: false, + }, + { + name: "treasury", + isMut: true, + isSigner: false, + }, + { + name: "twapUpdateAccount", + isMut: true, + isSigner: true, + docs: [ + "The contraint is such that either the twap_update_account is uninitialized or the write_authority is the write_authority.", + "Pubkey::default() is the SystemProgram on Solana and it can't sign so it's impossible that twap_update_account.write_authority == Pubkey::default() once the account is initialized", + ], + }, + { + name: "systemProgram", + isMut: false, + isSigner: false, + }, + { + name: "writeAuthority", + isMut: false, + isSigner: true, + }, + ], + args: [ + { + name: "params", + type: { + defined: "PostTwapUpdateParams", + }, + }, + ], + }, { name: "reclaimRent", accounts: [ @@ -974,6 +1186,24 @@ export const IDL: PythSolanaReceiver = { ], }, }, + { + name: "twapUpdate", + type: { + kind: "struct", + fields: [ + { + name: "writeAuthority", + type: "publicKey", + }, + { + name: "twap", + type: { + defined: "TwapPrice", + }, + }, + ], + }, + }, ], types: [ { @@ -1018,6 +1248,52 @@ export const IDL: PythSolanaReceiver = { ], }, }, + { + name: "TwapPrice", + docs: [ + "The time weighted average price & conf for a feed over the window [start_time, end_time].", + "This type is used to persist the calculated TWAP in TwapUpdate accounts on Solana.", + ], + type: { + kind: "struct", + fields: [ + { + name: "feedId", + type: { + array: ["u8", 32], + }, + }, + { + name: "startTime", + type: "i64", + }, + { + name: "endTime", + type: "i64", + }, + { + name: "price", + type: "i64", + }, + { + name: "conf", + type: "u64", + }, + { + name: "exponent", + type: "i32", + }, + { + name: "downSlotsRatio", + docs: [ + "Ratio out of 1_000_000, where a value of 1_000_000 represents", + "all slots were missed and 0 represents no slots were missed.", + ], + type: "u32", + }, + ], + }, + }, { name: "MerklePriceUpdate", type: { @@ -1094,6 +1370,30 @@ export const IDL: PythSolanaReceiver = { ], }, }, + { + name: "PostTwapUpdateParams", + type: { + kind: "struct", + fields: [ + { + name: "startMerklePriceUpdate", + type: { + defined: "MerklePriceUpdate", + }, + }, + { + name: "endMerklePriceUpdate", + type: { + defined: "MerklePriceUpdate", + }, + }, + { + name: "treasuryId", + type: "u8", + }, + ], + }, + }, { name: "VerificationLevel", docs: [ From 8458dc426e8e2c81d6f327a9d9aea888d3c9fc40 Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Wed, 11 Dec 2024 12:45:24 -0800 Subject: [PATCH 02/16] feat: add postTwapUpdates function --- .../src/PythSolanaReceiver.ts | 265 +++++++++++++++++- .../src/compute_budget.ts | 4 + 2 files changed, 268 insertions(+), 1 deletion(-) diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts index 29dd3dbc46..80d8b183bf 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts @@ -35,6 +35,7 @@ import { POST_UPDATE_COMPUTE_BUDGET, UPDATE_PRICE_FEED_COMPUTE_BUDGET, VERIFY_ENCODED_VAA_COMPUTE_BUDGET, + WRITE_ENCODED_VAA_COMPUTE_BUDGET, } from "./compute_budget"; import { Wallet } from "@coral-xyz/anchor"; import { @@ -43,6 +44,7 @@ import { findEncodedVaaAccountsByWriteAuthority, getGuardianSetIndex, trimSignatures, + VAA_SPLIT_INDEX, } from "./vaa"; import { TransactionBuilder, @@ -194,6 +196,42 @@ export class PythTransactionBuilder extends TransactionBuilder { this.addInstructions(postInstructions); } + /** + * Add instructions to post TWAP updates to the builder. + * Use this function to post fully verified TWAP updates from the present or from the past for your program to consume. + * + * @param twapUpdateDataArray the output of the `@pythnetwork/hermes-client`'s `getLatestTwaps`. This is an array of verifiable price updates. + * + * @example + * ```typescript + * // Get the price feed ids from https://pyth.network/developers/price-feed-ids#pyth-evm-stable + * const twapUpdateData = await hermesClient.getLatestTwaps([ + * SOL_PRICE_FEED_ID, + * ETH_PRICE_FEED_ID, + * ]); + * + * const transactionBuilder = pythSolanaReceiver.newTransactionBuilder({}); + * await transactionBuilder.addPostTwapUpdates(priceUpdateData); + * console.log("The SOL/USD price update will get posted to:", transactionBuilder.getPriceUpdateAccount(SOL_PRICE_FEED_ID).toBase58()) + * await transactionBuilder.addPriceConsumerInstructions(...) + * ``` + */ + async addPostTwapUpdates(twapUpdateDataArray: string[]) { + const { + postInstructions, + priceFeedIdToTwapUpdateAccount, + closeInstructions, + } = await this.pythSolanaReceiver.buildPostTwapUpdateInstructions( + twapUpdateDataArray + ); + this.closeInstructions.push(...closeInstructions); + Object.assign( + this.priceFeedIdToPriceUpdateAccount, + priceFeedIdToTwapUpdateAccount + ); + this.addInstructions(postInstructions); + } + /** * Add instructions to update price feed accounts to the builder. * Price feed accounts are fixed accounts per price feed id that can only be updated with a more recent price. @@ -317,7 +355,7 @@ export class PythTransactionBuilder extends TransactionBuilder { this.priceFeedIdToPriceUpdateAccount[priceFeedId]; if (!priceUpdateAccount) { throw new Error( - `No price update account found for the price feed ID ${priceFeedId}. Make sure to call addPostPriceUpdates or addPostPartiallyVerifiedPriceUpdates before calling this function.` + `No price update account found for the price feed ID ${priceFeedId}. Make sure to call addPostPriceUpdates or addPostPartiallyVerifiedPriceUpdates or postTwapUpdates before calling this function.` ); } return priceUpdateAccount; @@ -596,6 +634,231 @@ export class PythSolanaReceiver { }; } + /** + * Build a series of helper instructions that post TWAP updates to the Pyth Solana Receiver program and another series to close the encoded vaa accounts and the TWAP update accounts. + * + * @param twapUpdateDataArray the output of the `@pythnetwork/price-service-client`'s `PriceServiceConnection.getLatestTwaps`. This is an array of verifiable price updates. + * @returns `postInstructions`: the instructions to post the TWAP updates, these should be called before consuming the price updates + * @returns `priceFeedIdToTwapUpdateAccount`: this is a map of price feed IDs to Solana address. Given a price feed ID, you can use this map to find the account where `postInstructions` will post the TWAP update. + * @returns `closeInstructions`: the instructions to close the TWAP update accounts, these should be called after consuming the TWAP updates + */ + async buildPostTwapUpdateInstructions( + twapUpdateDataArray: string[] + ): Promise<{ + postInstructions: InstructionWithEphemeralSigners[]; + priceFeedIdToTwapUpdateAccount: Record; + closeInstructions: InstructionWithEphemeralSigners[]; + }> { + const postInstructions: InstructionWithEphemeralSigners[] = []; + const priceFeedIdToTwapUpdateAccount: Record = {}; + const closeInstructions: InstructionWithEphemeralSigners[] = []; + + const treasuryId = getRandomTreasuryId(); + + if (twapUpdateDataArray.length !== 2) { + throw new Error( + "twapUpdateDataArray must contain exactly two updates (start and end)" + ); + } + + const [startUpdateData, endUpdateData] = twapUpdateDataArray.map((data) => + parseAccumulatorUpdateData(Buffer.from(data, "base64")) + ); + + // Validate that the start and end updates contain the same number of price feeds + if (startUpdateData.updates.length !== endUpdateData.updates.length) { + throw new Error( + "Start and end updates must contain the same number of price feeds" + ); + } + + // // Verify the VAAs + // const [startVaa, endVaa] = await Promise.all([ + // this.buildPostEncodedVaaInstructions(startUpdateData.vaa), + // this.buildPostEncodedVaaInstructions(endUpdateData.vaa) + // ]); + // postInstructions.push(...startVaa.postInstructions, ...endVaa.postInstructions); + // closeInstructions.push(...startVaa.closeInstructions, ...endVaa.closeInstructions); + + // const { encodedVaaAddress: startEncodedVaa } = startVaa; + // const { encodedVaaAddress: endEncodedVaa } = endVaa; + + // TRANSACTION 1: Create, init, write initial data for Start VAA + // Create + const trimmedStartVaa = trimSignatures(startUpdateData.vaa, 13); + const startEncodedVaaKeypair = new Keypair(); + postInstructions.push( + await buildEncodedVaaCreateInstruction( + this.wormhole, + trimmedStartVaa, + startEncodedVaaKeypair + ) + ); + // Init + postInstructions.push({ + instruction: await this.wormhole.methods + .initEncodedVaa() + .accounts({ + encodedVaa: startEncodedVaaKeypair.publicKey, + }) + .instruction(), + signers: [], + computeUnits: INIT_ENCODED_VAA_COMPUTE_BUDGET, + }); + + // Write initial data + postInstructions.push( + ...(await buildWriteEncodedVaaWithSplitInstructions( + this.wormhole, + trimmedStartVaa, + startEncodedVaaKeypair.publicKey + )) + ); + + // TRANSACTION 2: Create, init, write initial data for End VAA + // Create + const trimmedEndVaa = trimSignatures(endUpdateData.vaa, 13); + const endEncodedVaaKeypair = new Keypair(); + postInstructions.push( + await buildEncodedVaaCreateInstruction( + this.wormhole, + trimmedEndVaa, + endEncodedVaaKeypair + ) + ); + // Init + postInstructions.push({ + instruction: await this.wormhole.methods + .initEncodedVaa() + .accounts({ + encodedVaa: endEncodedVaaKeypair.publicKey, + }) + .instruction(), + signers: [], + computeUnits: INIT_ENCODED_VAA_COMPUTE_BUDGET, + }); + + // Write initial data + postInstructions.push( + ...(await buildWriteEncodedVaaWithSplitInstructions( + this.wormhole, + trimmedEndVaa, + endEncodedVaaKeypair.publicKey + )) + ); + + // TRANSACTION 3: Write remaining data and verify for Start & End VAAs + // Write remaining data for start VAA + postInstructions.push({ + instruction: await this.wormhole.methods + .writeEncodedVaa({ + index: VAA_SPLIT_INDEX, + data: trimmedStartVaa.subarray(VAA_SPLIT_INDEX), + }) + .accounts({ + draftVaa: startEncodedVaaKeypair.publicKey, + }) + .instruction(), + signers: [], + computeUnits: WRITE_ENCODED_VAA_COMPUTE_BUDGET, + }); + + // Write remaining data for end VAA + postInstructions.push({ + instruction: await this.wormhole.methods + .writeEncodedVaa({ + index: VAA_SPLIT_INDEX, + data: trimmedEndVaa.subarray(VAA_SPLIT_INDEX), + }) + .accounts({ + draftVaa: endEncodedVaaKeypair.publicKey, + }) + .instruction(), + signers: [], + computeUnits: WRITE_ENCODED_VAA_COMPUTE_BUDGET, + }); + + // Verify start VAA + const startGuardianSetIndex = getGuardianSetIndex(trimmedStartVaa); + postInstructions.push({ + instruction: await this.wormhole.methods + .verifyEncodedVaaV1() + .accounts({ + guardianSet: getGuardianSetPda( + startGuardianSetIndex, + this.wormhole.programId + ), + draftVaa: startEncodedVaaKeypair.publicKey, + }) + .instruction(), + signers: [], + computeUnits: VERIFY_ENCODED_VAA_COMPUTE_BUDGET, + }); + + // Verify end VAA + const endGuardianSetIndex = getGuardianSetIndex(trimmedEndVaa); + postInstructions.push({ + instruction: await this.wormhole.methods + .verifyEncodedVaaV1() + .accounts({ + guardianSet: getGuardianSetPda( + startGuardianSetIndex, + this.wormhole.programId + ), + draftVaa: startEncodedVaaKeypair.publicKey, + }) + .accounts({ + guardianSet: getGuardianSetPda( + startGuardianSetIndex, + this.wormhole.programId + ), + draftVaa: endEncodedVaaKeypair.publicKey, + }) + .instruction(), + signers: [], + computeUnits: VERIFY_ENCODED_VAA_COMPUTE_BUDGET, + }); + + // Post a TWAP update to the receiver contract for each price feed + for (let i = 0; i < startUpdateData.updates.length; i++) { + const startUpdate = startUpdateData.updates[i]; + const endUpdate = endUpdateData.updates[i]; + + const twapUpdateKeypair = new Keypair(); + postInstructions.push({ + instruction: await this.receiver.methods + .postTwapUpdate({ + startMerklePriceUpdate: startUpdate, + endMerklePriceUpdate: endUpdate, + treasuryId, + }) + .accounts({ + startEncodedVaa: startEncodedVaaKeypair.publicKey, + endEncodedVaa: endEncodedVaaKeypair.publicKey, + twapUpdateAccount: twapUpdateKeypair.publicKey, + treasury: getTreasuryPda(treasuryId, this.receiver.programId), + config: getConfigPda(this.receiver.programId), + }) + .instruction(), + signers: [twapUpdateKeypair], + computeUnits: POST_UPDATE_COMPUTE_BUDGET, + }); + + priceFeedIdToTwapUpdateAccount[ + "0x" + parsePriceFeedMessage(startUpdate.message).feedId.toString("hex") + ] = twapUpdateKeypair.publicKey; + closeInstructions.push( + await this.buildClosePriceUpdateInstruction(twapUpdateKeypair.publicKey) + ); + } + + return { + postInstructions, + priceFeedIdToTwapUpdateAccount, + closeInstructions, + }; + } + /** * Build a series of helper instructions that update one or many price feed accounts and another series to close the encoded vaa accounts used to update the price feed accounts. * diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/compute_budget.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/compute_budget.ts index ff9398c13c..00fdfb76ac 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/compute_budget.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/compute_budget.ts @@ -10,6 +10,10 @@ export const POST_UPDATE_ATOMIC_COMPUTE_BUDGET = 170000; * A hard-coded budget for the compute units required for the `postUpdate` instruction in the Pyth Solana Receiver program. */ export const POST_UPDATE_COMPUTE_BUDGET = 35000; +/** + * A hard-coded budget for the compute units required for the `postUpdate` instruction in the Pyth Solana Receiver program. + */ +export const POST_TWAP_UPDATE_COMPUTE_BUDGET = 100_000; /** * A hard-coded budget for the compute units required for the `updatePriceFeed` instruction in the Pyth Push Oracle program. */ From 9474df56f1462ac6cfc3ed32ff8707a55640555c Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Thu, 12 Dec 2024 12:46:30 -0800 Subject: [PATCH 03/16] refactor: clean up --- pnpm-lock.yaml | 1206 ++++------------- .../sdk/js/pyth_solana_receiver/package.json | 4 +- .../src/PythSolanaReceiver.ts | 178 +-- .../sdk/js/pyth_solana_receiver/src/vaa.ts | 190 ++- 4 files changed, 470 insertions(+), 1108 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 90a5aaa2d9..7c9f54b0e1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -225,7 +225,7 @@ importers: version: 2.1.4(react@19.0.0-rc-603e6108-20241029) '@next/third-parties': specifier: ^14.2.4 - version: 14.2.4(next@15.0.3(@babel/core@7.24.7)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(sass@1.80.7))(react@19.0.0-rc-603e6108-20241029) + version: 14.2.4(next@15.0.3(@babel/core@7.25.8)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(sass@1.80.7))(react@19.0.0-rc-603e6108-20241029) '@pythnetwork/client': specifier: ^2.22.0 version: 2.22.0(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) @@ -246,7 +246,7 @@ importers: version: 2.1.1 connectkit: specifier: ^1.8.2 - version: 1.8.2(@babel/core@7.24.7)(@tanstack/react-query@5.45.1(react@19.0.0-rc-603e6108-20241029))(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-is@18.3.1)(react@19.0.0-rc-603e6108-20241029)(viem@2.21.35(bufferutil@4.0.8)(typescript@5.5.2)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.10.4(slso2y5si5ebobzw4pa64fwb3i)) + version: 1.8.2(@babel/core@7.25.8)(@tanstack/react-query@5.45.1(react@19.0.0-rc-603e6108-20241029))(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-is@18.3.1)(react@19.0.0-rc-603e6108-20241029)(viem@2.21.35(bufferutil@4.0.8)(typescript@5.5.2)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.10.4(2zybmpkgivtkk3e4xdbpxyo3aq)) cryptocurrency-icons: specifier: ^0.18.1 version: 0.18.1 @@ -255,7 +255,7 @@ importers: version: 11.3.8(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029) next: specifier: 'catalog:' - version: 15.0.3(@babel/core@7.24.7)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(sass@1.80.7) + version: 15.0.3(@babel/core@7.25.8)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(sass@1.80.7) next-themes: specifier: ^0.3.0 version: 0.3.0(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029) @@ -279,7 +279,7 @@ importers: version: 2.21.35(bufferutil@4.0.8)(typescript@5.5.2)(utf-8-validate@5.0.10)(zod@3.23.8) wagmi: specifier: ^2.10.4 - version: 2.10.4(slso2y5si5ebobzw4pa64fwb3i) + version: 2.10.4(2zybmpkgivtkk3e4xdbpxyo3aq) zod: specifier: ^3.23.8 version: 3.23.8 @@ -289,10 +289,10 @@ importers: version: 4.9.1 '@cprussin/eslint-config': specifier: 'catalog:' - version: 3.0.0(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2))(@typescript-eslint/parser@8.14.0(eslint@9.5.0)(typescript@5.5.2))(jest@29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)))(jiti@1.21.0)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2))(typescript@5.5.2) + version: 3.0.0(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2))(@typescript-eslint/parser@7.13.1(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.2))(jest@29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)))(jiti@1.21.0)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2))(typescript@5.5.2) '@cprussin/jest-config': specifier: 'catalog:' - version: 1.4.1(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(@types/node@20.14.7)(babel-jest@29.7.0(@babel/core@7.24.7))(bufferutil@4.0.8)(eslint@9.5.0)(sass@1.80.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2))(utf-8-validate@5.0.10) + version: 1.4.1(@babel/core@7.25.8)(@jest/transform@29.7.0)(@jest/types@29.6.3)(@types/node@20.14.7)(babel-jest@29.7.0(@babel/core@7.25.8))(bufferutil@4.0.8)(eslint@9.5.0)(sass@1.80.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2))(utf-8-validate@5.0.10) '@cprussin/prettier-config': specifier: 'catalog:' version: 2.1.1(prettier@3.3.2) @@ -688,13 +688,13 @@ importers: version: 0.9.23(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-react': specifier: ^0.15.35 - version: 0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + version: 0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) '@solana/wallet-adapter-react-ui': specifier: ^0.9.35 - version: 0.9.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + version: 0.9.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) '@solana/wallet-adapter-wallets': specifier: 0.19.10 - version: 0.19.10(@babel/runtime@7.25.7)(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10) + version: 0.19.10(@babel/runtime@7.25.7)(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10) '@solana/web3.js': specifier: 1.92.3 version: 1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) @@ -815,16 +815,16 @@ importers: dependencies: '@certusone/wormhole-sdk': specifier: ^0.9.8 - version: 0.9.24(bufferutil@4.0.8)(encoding@0.1.13)(google-protobuf@3.21.4)(utf-8-validate@5.0.10) + version: 0.9.24(bufferutil@4.0.7)(encoding@0.1.13)(google-protobuf@3.21.4)(utf-8-validate@5.0.10) '@coral-xyz/anchor': specifier: ^0.29.0 - version: 0.29.0(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + version: 0.29.0(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) '@cosmjs/cosmwasm-stargate': specifier: ^0.32.3 - version: 0.32.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + version: 0.32.3(bufferutil@4.0.7)(utf-8-validate@5.0.10) '@cosmjs/stargate': specifier: ^0.32.3 - version: 0.32.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + version: 0.32.3(bufferutil@4.0.7)(utf-8-validate@5.0.10) '@injectivelabs/networks': specifier: ^1.14.6 version: 1.14.6(google-protobuf@3.21.4) @@ -833,7 +833,7 @@ importers: version: 1.3.0(svelte@4.2.18)(typescript@5.4.5) '@pythnetwork/client': specifier: ^2.22.0 - version: 2.22.0(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + version: 2.22.0(@solana/web3.js@1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) '@pythnetwork/cosmwasm-deploy-tools': specifier: workspace:* version: link:../target_chains/cosmwasm/tools @@ -872,10 +872,10 @@ importers: version: link:../governance/xc_admin/packages/xc_admin_common '@solana/web3.js': specifier: 1.92.3 - version: 1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + version: 1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) '@sqds/mesh': specifier: ^1.0.6 - version: 1.0.6(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + version: 1.0.6(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) '@ton/blueprint': specifier: ^0.22.0 version: 0.22.0(@ton/core@0.59.0(@ton/crypto@3.3.0))(@ton/crypto@3.3.0)(@ton/ton@15.1.0(@ton/core@0.59.0(@ton/crypto@3.3.0))(@ton/crypto@3.3.0))(@types/node@22.8.2)(encoding@0.1.13)(typescript@5.4.5) @@ -920,7 +920,7 @@ importers: version: 5.4.5 web3: specifier: ^1.8.2 - version: 1.10.0(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + version: 1.10.0(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) web3-eth-contract: specifier: ^1.8.2 version: 1.10.0(encoding@0.1.13) @@ -930,7 +930,7 @@ importers: devDependencies: '@types/web3': specifier: ^1.2.2 - version: 1.2.2(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + version: 1.2.2(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) eslint: specifier: ^8.0.0 version: 8.56.0 @@ -1269,19 +1269,19 @@ importers: dependencies: '@certusone/wormhole-sdk': specifier: ^0.10.15 - version: 0.10.15(bufferutil@4.0.7)(encoding@0.1.13)(google-protobuf@3.21.4)(utf-8-validate@5.0.10) + version: 0.10.15(bufferutil@4.0.8)(encoding@0.1.13)(google-protobuf@3.21.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(utf-8-validate@5.0.10) '@coral-xyz/anchor': specifier: ^0.29.0 - version: 0.29.0(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) + version: 0.29.0(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) '@injectivelabs/token-metadata': specifier: ~1.10.42 version: 1.10.42(google-protobuf@3.21.4) '@project-serum/anchor': specifier: ^0.25.0 - version: 0.25.0(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) + version: 0.25.0(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) '@pythnetwork/client': specifier: ^2.22.0 - version: 2.22.0(@solana/web3.js@1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) + version: 2.22.0(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) '@pythnetwork/pyth-solana-receiver': specifier: workspace:* version: link:../../../../target_chains/solana/sdk/js/pyth_solana_receiver @@ -1293,10 +1293,10 @@ importers: version: 4.0.1 '@solana/web3.js': specifier: 1.92.3 - version: 1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) + version: 1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) '@sqds/mesh': specifier: ^1.0.6 - version: 1.0.6(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) + version: 1.0.6(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) bigint-buffer: specifier: ^1.1.5 version: 1.1.5 @@ -1305,7 +1305,7 @@ importers: version: 5.2.1 ethers: specifier: ^5.7.2 - version: 5.7.2(bufferutil@4.0.7)(utf-8-validate@5.0.10) + version: 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) lodash: specifier: ^4.17.21 version: 4.17.21 @@ -1369,13 +1369,13 @@ importers: version: 0.9.23(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-react': specifier: ^0.15.28 - version: 0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + version: 0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) '@solana/wallet-adapter-react-ui': specifier: ^0.9.27 - version: 0.9.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + version: 0.9.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) '@solana/wallet-adapter-wallets': specifier: 0.19.10 - version: 0.19.10(@babel/runtime@7.25.7)(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10) + version: 0.19.10(@babel/runtime@7.25.7)(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10) '@solana/web3.js': specifier: 1.92.3 version: 1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) @@ -2458,8 +2458,8 @@ importers: specifier: ^1.4.0 version: 1.4.0 '@pythnetwork/price-service-sdk': - specifier: '>=1.6.0' - version: 1.7.1 + specifier: workspace:* + version: link:../../../../../price_service/sdk/js '@pythnetwork/solana-utils': specifier: workspace:* version: link:../solana_utils @@ -24021,19 +24021,6 @@ snapshots: '@babel/helper-split-export-declaration': 7.24.7 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.7 - semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -24105,19 +24092,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-member-expression-to-functions': 7.25.7 - '@babel/helper-optimise-call-expression': 7.25.7 - '@babel/helper-replace-supers': 7.25.7(@babel/core@7.24.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/traverse': 7.25.7 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -24165,13 +24139,6 @@ snapshots: regexpu-core: 6.1.1 semver: 6.3.1 - '@babel/helper-create-regexp-features-plugin@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.25.7 - regexpu-core: 6.1.1 - semver: 6.3.1 - '@babel/helper-create-regexp-features-plugin@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -24360,16 +24327,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.25.7 - '@babel/helper-simple-access': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 - '@babel/traverse': 7.25.7 - transitivePeerDependencies: - - supports-color - '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -24410,16 +24367,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - '@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -24466,15 +24413,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-remap-async-to-generator@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-wrap-function': 7.25.7 - '@babel/traverse': 7.25.7 - transitivePeerDependencies: - - supports-color - '@babel/helper-remap-async-to-generator@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -24491,13 +24429,6 @@ snapshots: '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers@7.24.1(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers@7.24.1(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -24541,15 +24472,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.25.7 - '@babel/helper-optimise-call-expression': 7.25.7 - '@babel/traverse': 7.25.7 - transitivePeerDependencies: - - supports-color - '@babel/helper-replace-supers@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -24787,16 +24709,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.24.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - '@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -24813,12 +24725,6 @@ snapshots: '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.0) '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -24843,11 +24749,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-proposal-export-default-from@7.25.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-proposal-export-default-from@7.25.8(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -24871,12 +24772,6 @@ snapshots: '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -24889,12 +24784,6 @@ snapshots: '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -24907,12 +24796,6 @@ snapshots: '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -24928,15 +24811,6 @@ snapshots: '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.0) - '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.24.7)': - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.7) - '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.25.8)': dependencies: '@babel/compat-data': 7.24.7 @@ -24952,12 +24826,6 @@ snapshots: '@babel/helper-plugin-utils': 7.24.7 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -24980,15 +24848,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -25105,11 +24964,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-export-default-from@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-export-default-from@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -25135,11 +24989,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-flow@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-flow@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -25240,11 +25089,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -25390,11 +25234,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -25443,11 +25282,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-arrow-functions@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-arrow-functions@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -25528,15 +25362,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-async-to-generator@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -25591,11 +25416,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-block-scoping@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-block-scoping@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -25719,18 +25539,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-replace-supers': 7.25.7(@babel/core@7.24.7) - '@babel/traverse': 7.25.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-classes@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -25773,12 +25581,6 @@ snapshots: '@babel/helper-plugin-utils': 7.25.7 '@babel/template': 7.25.7 - '@babel/plugin-transform-computed-properties@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/template': 7.25.7 - '@babel/plugin-transform-computed-properties@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -25810,11 +25612,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-destructuring@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-destructuring@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -25936,12 +25733,6 @@ snapshots: '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-flow': 7.25.7(@babel/core@7.24.0) - '@babel/plugin-transform-flow-strip-types@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-flow': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-flow-strip-types@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -26014,15 +25805,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/traverse': 7.25.7 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-function-name@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -26075,11 +25857,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-literals@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-literals@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -26200,15 +25977,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-simple-access': 7.25.7 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-modules-commonjs@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -26320,12 +26088,6 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.24.0) '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-named-capturing-groups-regex@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-named-capturing-groups-regex@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -26492,11 +26254,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-transform-parameters@7.24.1(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -26522,11 +26279,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-parameters@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-parameters@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -26564,14 +26316,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-methods@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.25.7 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-private-methods@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -26619,15 +26363,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.25.8(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.25.7 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-private-property-in-object@7.25.8(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -26687,11 +26422,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-react-display-name@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-react-display-name@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -26717,11 +26447,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-react-jsx-self@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-react-jsx-self@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -26732,11 +26457,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-react-jsx-source@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-react-jsx-source@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -26780,17 +26500,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-module-imports': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.24.7) - '@babel/types': 7.25.8 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -26888,18 +26597,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-runtime@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.7) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.24.7) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-runtime@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -26937,11 +26634,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-shorthand-properties@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-shorthand-properties@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -26985,14 +26677,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-spread@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-spread@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -27026,11 +26710,6 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-sticky-regex@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-sticky-regex@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -27105,17 +26784,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-typescript@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-typescript@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -27195,12 +26863,6 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.24.0) '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-unicode-regex@7.25.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-unicode-regex@7.25.7(@babel/core@7.25.8)': dependencies: '@babel/core': 7.25.8 @@ -27894,41 +27556,6 @@ snapshots: '@types/long': 4.0.2 '@types/node': 18.19.57 - '@certusone/wormhole-sdk@0.10.15(bufferutil@4.0.7)(encoding@0.1.13)(google-protobuf@3.21.4)(utf-8-validate@5.0.10)': - dependencies: - '@certusone/wormhole-sdk-proto-web': 0.0.7(google-protobuf@3.21.4) - '@certusone/wormhole-sdk-wasm': 0.0.1 - '@coral-xyz/borsh': 0.2.6(@solana/web3.js@1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@mysten/sui.js': 0.32.2(bufferutil@4.0.7)(utf-8-validate@5.0.10) - '@project-serum/anchor': 0.25.0(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@solana/spl-token': 0.3.7(@solana/web3.js@1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@solana/web3.js': 1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@terra-money/terra.js': 3.1.9 - '@xpla/xpla.js': 0.2.3 - algosdk: 2.7.0 - aptos: 1.5.0 - axios: 0.24.0 - bech32: 2.0.0 - binary-parser: 2.2.1 - bs58: 4.0.1 - elliptic: 6.5.6 - js-base64: 3.7.5 - near-api-js: 1.1.0(encoding@0.1.13) - optionalDependencies: - '@injectivelabs/networks': 1.10.12(google-protobuf@3.21.4) - '@injectivelabs/sdk-ts': 1.10.72(bufferutil@4.0.7)(utf-8-validate@5.0.10) - '@injectivelabs/utils': 1.10.12(google-protobuf@3.21.4) - transitivePeerDependencies: - - bufferutil - - debug - - encoding - - google-protobuf - - graphql-ws - - react - - react-dom - - subscriptions-transport-ws - - utf-8-validate - '@certusone/wormhole-sdk@0.10.15(bufferutil@4.0.8)(encoding@0.1.13)(google-protobuf@3.21.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(utf-8-validate@5.0.10)': dependencies: '@certusone/wormhole-sdk-proto-web': 0.0.7(google-protobuf@3.21.2) @@ -27999,15 +27626,15 @@ snapshots: - subscriptions-transport-ws - utf-8-validate - '@certusone/wormhole-sdk@0.9.24(bufferutil@4.0.7)(encoding@0.1.13)(google-protobuf@3.21.4)(utf-8-validate@6.0.3)': + '@certusone/wormhole-sdk@0.9.24(bufferutil@4.0.7)(encoding@0.1.13)(google-protobuf@3.21.4)(utf-8-validate@5.0.10)': dependencies: '@certusone/wormhole-sdk-proto-web': 0.0.6(google-protobuf@3.21.4) '@certusone/wormhole-sdk-wasm': 0.0.1 - '@coral-xyz/borsh': 0.2.6(@solana/web3.js@1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@6.0.3)) - '@mysten/sui.js': 0.32.2(bufferutil@4.0.7)(utf-8-validate@6.0.3) - '@project-serum/anchor': 0.25.0(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@6.0.3) - '@solana/spl-token': 0.3.7(@solana/web3.js@1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@6.0.3))(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@6.0.3) - '@solana/web3.js': 1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@6.0.3) + '@coral-xyz/borsh': 0.2.6(@solana/web3.js@1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10)) + '@mysten/sui.js': 0.32.2(bufferutil@4.0.7)(utf-8-validate@5.0.10) + '@project-serum/anchor': 0.25.0(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.3.7(@solana/web3.js@1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) '@terra-money/terra.js': 3.1.9 '@xpla/xpla.js': 0.2.3 algosdk: 2.7.0 @@ -28021,7 +27648,7 @@ snapshots: near-api-js: 1.1.0(encoding@0.1.13) optionalDependencies: '@injectivelabs/networks': 1.10.12(google-protobuf@3.21.4) - '@injectivelabs/sdk-ts': 1.10.72(bufferutil@4.0.7)(utf-8-validate@6.0.3) + '@injectivelabs/sdk-ts': 1.10.72(bufferutil@4.0.7)(utf-8-validate@5.0.10) '@injectivelabs/utils': 1.10.12(google-protobuf@3.21.4) transitivePeerDependencies: - bufferutil @@ -28034,15 +27661,15 @@ snapshots: - subscriptions-transport-ws - utf-8-validate - '@certusone/wormhole-sdk@0.9.24(bufferutil@4.0.8)(encoding@0.1.13)(google-protobuf@3.21.4)(utf-8-validate@5.0.10)': + '@certusone/wormhole-sdk@0.9.24(bufferutil@4.0.7)(encoding@0.1.13)(google-protobuf@3.21.4)(utf-8-validate@6.0.3)': dependencies: '@certusone/wormhole-sdk-proto-web': 0.0.6(google-protobuf@3.21.4) '@certusone/wormhole-sdk-wasm': 0.0.1 - '@coral-xyz/borsh': 0.2.6(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@mysten/sui.js': 0.32.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@project-serum/anchor': 0.25.0(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@solana/spl-token': 0.3.7(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@solana/web3.js': 1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@coral-xyz/borsh': 0.2.6(@solana/web3.js@1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@6.0.3)) + '@mysten/sui.js': 0.32.2(bufferutil@4.0.7)(utf-8-validate@6.0.3) + '@project-serum/anchor': 0.25.0(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@6.0.3) + '@solana/spl-token': 0.3.7(@solana/web3.js@1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@6.0.3))(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@6.0.3) + '@solana/web3.js': 1.92.3(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@6.0.3) '@terra-money/terra.js': 3.1.9 '@xpla/xpla.js': 0.2.3 algosdk: 2.7.0 @@ -28056,7 +27683,7 @@ snapshots: near-api-js: 1.1.0(encoding@0.1.13) optionalDependencies: '@injectivelabs/networks': 1.10.12(google-protobuf@3.21.4) - '@injectivelabs/sdk-ts': 1.10.72(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(utf-8-validate@5.0.10) + '@injectivelabs/sdk-ts': 1.10.72(bufferutil@4.0.7)(utf-8-validate@6.0.3) '@injectivelabs/utils': 1.10.12(google-protobuf@3.21.4) transitivePeerDependencies: - bufferutil @@ -28418,23 +28045,6 @@ snapshots: - debug - utf-8-validate - '@cosmjs/cosmwasm-stargate@0.32.3(bufferutil@4.0.8)(utf-8-validate@5.0.10)': - dependencies: - '@cosmjs/amino': 0.32.3 - '@cosmjs/crypto': 0.32.3 - '@cosmjs/encoding': 0.32.3 - '@cosmjs/math': 0.32.3 - '@cosmjs/proto-signing': 0.32.3 - '@cosmjs/stargate': 0.32.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@cosmjs/tendermint-rpc': 0.32.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@cosmjs/utils': 0.32.3 - cosmjs-types: 0.9.0 - pako: 2.1.0 - transitivePeerDependencies: - - bufferutil - - debug - - utf-8-validate - '@cosmjs/crypto@0.30.1': dependencies: '@cosmjs/encoding': 0.30.1 @@ -28846,7 +28456,7 @@ snapshots: transitivePeerDependencies: - debug - '@cprussin/eslint-config@3.0.0(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(jest@29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.5.4)))(jiti@1.21.0)(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.5.4))(typescript@5.5.4)': + '@cprussin/eslint-config@3.0.0(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2))(@typescript-eslint/parser@7.13.1(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.2))(jest@29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)))(jiti@1.21.0)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2))(typescript@5.5.2)': dependencies: '@babel/core': 7.25.8 '@babel/eslint-parser': 7.24.7(@babel/core@7.25.8)(eslint@9.12.0(jiti@1.21.0)) @@ -28858,22 +28468,22 @@ snapshots: eslint: 9.12.0(jiti@1.21.0) eslint-config-prettier: 9.1.0(eslint@9.12.0(jiti@1.21.0)) eslint-config-turbo: 2.2.3(eslint@9.12.0(jiti@1.21.0)) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.0)) - eslint-plugin-jest: 28.6.0(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.0))(jest@29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.5.4)))(typescript@5.5.4) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.13.1(eslint@9.5.0)(typescript@5.5.2))(eslint@9.12.0(jiti@1.21.0)) + eslint-plugin-jest: 28.6.0(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2))(eslint@9.12.0(jiti@1.21.0))(jest@29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)))(typescript@5.5.2) eslint-plugin-jest-dom: 5.4.0(@testing-library/dom@10.4.0)(eslint@9.12.0(jiti@1.21.0)) eslint-plugin-jsonc: 2.16.0(eslint@9.12.0(jiti@1.21.0)) eslint-plugin-jsx-a11y: 6.8.0(eslint@9.12.0(jiti@1.21.0)) eslint-plugin-n: 17.9.0(eslint@9.12.0(jiti@1.21.0)) eslint-plugin-react: 7.34.2(eslint@9.12.0(jiti@1.21.0)) eslint-plugin-react-hooks: 4.6.2(eslint@9.12.0(jiti@1.21.0)) - eslint-plugin-storybook: 0.8.0(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.4) - eslint-plugin-tailwindcss: 3.17.3(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.5.4))) - eslint-plugin-testing-library: 6.2.2(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.4) + eslint-plugin-storybook: 0.8.0(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.2) + eslint-plugin-tailwindcss: 3.17.3(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2))) + eslint-plugin-testing-library: 6.2.2(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.2) eslint-plugin-tsdoc: 0.3.0 eslint-plugin-unicorn: 53.0.0(eslint@9.12.0(jiti@1.21.0)) globals: 15.6.0 - tailwindcss: 3.4.14(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.5.4)) - typescript-eslint: 7.13.1(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.4) + tailwindcss: 3.4.14(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)) + typescript-eslint: 7.13.1(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.2) transitivePeerDependencies: - '@testing-library/dom' - '@typescript-eslint/eslint-plugin' @@ -28886,7 +28496,7 @@ snapshots: - ts-node - typescript - '@cprussin/eslint-config@3.0.0(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(jest@29.7.0(@types/node@22.8.2)(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3)))(jiti@1.21.0)(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3))(typescript@5.6.3)': + '@cprussin/eslint-config@3.0.0(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(jest@29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.5.4)))(jiti@1.21.0)(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.5.4))(typescript@5.5.4)': dependencies: '@babel/core': 7.25.8 '@babel/eslint-parser': 7.24.7(@babel/core@7.25.8)(eslint@9.12.0(jiti@1.21.0)) @@ -28898,22 +28508,22 @@ snapshots: eslint: 9.12.0(jiti@1.21.0) eslint-config-prettier: 9.1.0(eslint@9.12.0(jiti@1.21.0)) eslint-config-turbo: 2.2.3(eslint@9.12.0(jiti@1.21.0)) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(eslint@9.12.0(jiti@1.21.0)) - eslint-plugin-jest: 28.6.0(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(eslint@9.12.0(jiti@1.21.0))(jest@29.7.0(@types/node@22.8.2)(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3)))(typescript@5.6.3) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.0)) + eslint-plugin-jest: 28.6.0(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.0))(jest@29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.5.4)))(typescript@5.5.4) eslint-plugin-jest-dom: 5.4.0(@testing-library/dom@10.4.0)(eslint@9.12.0(jiti@1.21.0)) eslint-plugin-jsonc: 2.16.0(eslint@9.12.0(jiti@1.21.0)) eslint-plugin-jsx-a11y: 6.8.0(eslint@9.12.0(jiti@1.21.0)) eslint-plugin-n: 17.9.0(eslint@9.12.0(jiti@1.21.0)) eslint-plugin-react: 7.34.2(eslint@9.12.0(jiti@1.21.0)) eslint-plugin-react-hooks: 4.6.2(eslint@9.12.0(jiti@1.21.0)) - eslint-plugin-storybook: 0.8.0(eslint@9.12.0(jiti@1.21.0))(typescript@5.6.3) - eslint-plugin-tailwindcss: 3.17.3(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3))) - eslint-plugin-testing-library: 6.2.2(eslint@9.12.0(jiti@1.21.0))(typescript@5.6.3) + eslint-plugin-storybook: 0.8.0(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.4) + eslint-plugin-tailwindcss: 3.17.3(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.5.4))) + eslint-plugin-testing-library: 6.2.2(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.4) eslint-plugin-tsdoc: 0.3.0 eslint-plugin-unicorn: 53.0.0(eslint@9.12.0(jiti@1.21.0)) globals: 15.6.0 - tailwindcss: 3.4.14(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3)) - typescript-eslint: 7.13.1(eslint@9.12.0(jiti@1.21.0))(typescript@5.6.3) + tailwindcss: 3.4.14(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.5.4)) + typescript-eslint: 7.13.1(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.4) transitivePeerDependencies: - '@testing-library/dom' - '@typescript-eslint/eslint-plugin' @@ -28926,7 +28536,7 @@ snapshots: - ts-node - typescript - '@cprussin/eslint-config@3.0.0(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2))(@typescript-eslint/parser@8.14.0(eslint@9.5.0)(typescript@5.5.2))(jest@29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)))(jiti@1.21.0)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2))(typescript@5.5.2)': + '@cprussin/eslint-config@3.0.0(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(jest@29.7.0(@types/node@22.8.2)(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3)))(jiti@1.21.0)(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3))(typescript@5.6.3)': dependencies: '@babel/core': 7.25.8 '@babel/eslint-parser': 7.24.7(@babel/core@7.25.8)(eslint@9.12.0(jiti@1.21.0)) @@ -28938,22 +28548,22 @@ snapshots: eslint: 9.12.0(jiti@1.21.0) eslint-config-prettier: 9.1.0(eslint@9.12.0(jiti@1.21.0)) eslint-config-turbo: 2.2.3(eslint@9.12.0(jiti@1.21.0)) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@8.14.0(eslint@9.5.0)(typescript@5.5.2))(eslint@9.12.0(jiti@1.21.0)) - eslint-plugin-jest: 28.6.0(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2))(eslint@9.12.0(jiti@1.21.0))(jest@29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)))(typescript@5.5.2) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(eslint@9.12.0(jiti@1.21.0)) + eslint-plugin-jest: 28.6.0(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(eslint@9.12.0(jiti@1.21.0))(jest@29.7.0(@types/node@22.8.2)(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3)))(typescript@5.6.3) eslint-plugin-jest-dom: 5.4.0(@testing-library/dom@10.4.0)(eslint@9.12.0(jiti@1.21.0)) eslint-plugin-jsonc: 2.16.0(eslint@9.12.0(jiti@1.21.0)) eslint-plugin-jsx-a11y: 6.8.0(eslint@9.12.0(jiti@1.21.0)) eslint-plugin-n: 17.9.0(eslint@9.12.0(jiti@1.21.0)) eslint-plugin-react: 7.34.2(eslint@9.12.0(jiti@1.21.0)) eslint-plugin-react-hooks: 4.6.2(eslint@9.12.0(jiti@1.21.0)) - eslint-plugin-storybook: 0.8.0(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.2) - eslint-plugin-tailwindcss: 3.17.3(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2))) - eslint-plugin-testing-library: 6.2.2(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.2) + eslint-plugin-storybook: 0.8.0(eslint@9.12.0(jiti@1.21.0))(typescript@5.6.3) + eslint-plugin-tailwindcss: 3.17.3(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3))) + eslint-plugin-testing-library: 6.2.2(eslint@9.12.0(jiti@1.21.0))(typescript@5.6.3) eslint-plugin-tsdoc: 0.3.0 eslint-plugin-unicorn: 53.0.0(eslint@9.12.0(jiti@1.21.0)) globals: 15.6.0 - tailwindcss: 3.4.14(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)) - typescript-eslint: 7.13.1(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.2) + tailwindcss: 3.4.14(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3)) + typescript-eslint: 7.13.1(eslint@9.12.0(jiti@1.21.0))(typescript@5.6.3) transitivePeerDependencies: - '@testing-library/dom' - '@typescript-eslint/eslint-plugin' @@ -29046,18 +28656,18 @@ snapshots: - ts-node - typescript - '@cprussin/jest-config@1.4.1(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(@types/node@20.14.7)(babel-jest@29.7.0(@babel/core@7.24.7))(bufferutil@4.0.8)(eslint@9.5.0)(sass@1.80.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2))(utf-8-validate@5.0.10)': + '@cprussin/jest-config@1.4.1(@babel/core@7.25.8)(@jest/transform@29.7.0)(@jest/types@29.6.3)(@types/node@20.14.7)(babel-jest@29.7.0(@babel/core@7.25.8))(bufferutil@4.0.8)(eslint@9.5.0)(sass@1.80.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2))(utf-8-validate@5.0.10)': dependencies: '@cprussin/jest-runner-prettier': 1.0.0(jest@29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)))(prettier@3.3.3) '@testing-library/jest-dom': 6.5.0 jest: 29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)) jest-environment-jsdom: 29.7.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) jest-runner-eslint: 2.2.0(eslint@9.5.0)(jest@29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2))) - next: 14.2.15(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.7) + next: 14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@19.0.0-rc-603e6108-20241029))(react@18.3.1)(sass@1.80.7) prettier: 3.3.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - ts-jest: 29.2.4(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)))(typescript@5.5.4) + ts-jest: 29.2.4(@babel/core@7.25.8)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.8))(jest@29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)))(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: - '@babel/core' @@ -29087,7 +28697,7 @@ snapshots: jest: 29.7.0(@types/node@22.2.0)(ts-node@10.9.2(@types/node@22.2.0)(typescript@5.5.4)) jest-environment-jsdom: 29.7.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) jest-runner-eslint: 2.2.0(eslint@9.9.0(jiti@1.21.0))(jest@29.7.0(@types/node@22.2.0)(ts-node@10.9.2(@types/node@22.2.0)(typescript@5.5.4))) - next: 14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.7) + next: 14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@19.0.0-rc-603e6108-20241029))(react@18.3.1)(sass@1.80.7) prettier: 3.3.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -29121,7 +28731,7 @@ snapshots: jest: 29.7.0(@types/node@22.8.2)(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3)) jest-environment-jsdom: 29.7.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) jest-runner-eslint: 2.2.0(eslint@9.13.0(jiti@1.21.0))(jest@29.7.0(@types/node@22.8.2)(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3))) - next: 14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.7) + next: 14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@19.0.0-rc-603e6108-20241029))(react@18.3.1)(sass@1.80.7) prettier: 3.3.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -29155,7 +28765,7 @@ snapshots: jest: 29.7.0(@types/node@22.8.2)(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3)) jest-environment-jsdom: 29.7.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) jest-runner-eslint: 2.2.0(eslint@9.13.0(jiti@1.21.0))(jest@29.7.0(@types/node@22.8.2)(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3))) - next: 14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.7) + next: 14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@19.0.0-rc-603e6108-20241029))(react@18.3.1)(sass@1.80.7) prettier: 3.3.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -33021,22 +32631,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@metamask/sdk-install-modal-web@0.26.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': + '@metamask/sdk-install-modal-web@0.26.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': dependencies: i18next: 22.5.1 qr-code-styling: 1.6.0-rc.1 - react-i18next: 13.5.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + react-i18next: 13.5.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) optionalDependencies: react: 19.0.0-rc-603e6108-20241029 react-dom: 19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029) - react-native: 0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10) + react-native: 0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10) - '@metamask/sdk@0.26.0(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10)': + '@metamask/sdk@0.26.0(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10)': dependencies: '@metamask/onboarding': 1.0.1 '@metamask/providers': 15.0.0 '@metamask/sdk-communication-layer': 0.26.0(cross-fetch@4.0.0(encoding@0.1.13))(eciesjs@0.3.19)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.7.5(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@metamask/sdk-install-modal-web': 0.26.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + '@metamask/sdk-install-modal-web': 0.26.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) '@types/dom-screen-wake-lock': 1.0.3 bowser: 2.11.0 cross-fetch: 4.0.0(encoding@0.1.13) @@ -33049,7 +32659,7 @@ snapshots: obj-multiplex: 1.0.0 pump: 3.0.0 qrcode-terminal-nooctal: 0.12.1 - react-native-webview: 11.26.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + react-native-webview: 11.26.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) readable-stream: 3.6.2 rollup-plugin-visualizer: 5.12.0 socket.io-client: 4.7.5(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -33413,9 +33023,9 @@ snapshots: '@next/swc-win32-x64-msvc@15.0.3': optional: true - '@next/third-parties@14.2.4(next@15.0.3(@babel/core@7.24.7)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(sass@1.80.7))(react@19.0.0-rc-603e6108-20241029)': + '@next/third-parties@14.2.4(next@15.0.3(@babel/core@7.25.8)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(sass@1.80.7))(react@19.0.0-rc-603e6108-20241029)': dependencies: - next: 15.0.3(@babel/core@7.24.7)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(sass@1.80.7) + next: 15.0.3(@babel/core@7.25.8)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(sass@1.80.7) react: 19.0.0-rc-603e6108-20241029 third-party-capital: 1.0.20 @@ -35582,12 +35192,6 @@ snapshots: react-native: 0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10) optional: true - '@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))': - dependencies: - merge-options: 3.0.4 - react-native: 0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10) - optional: true - '@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10))': dependencies: merge-options: 3.0.4 @@ -35756,13 +35360,6 @@ snapshots: - '@babel/preset-env' - supports-color - '@react-native/babel-plugin-codegen@0.74.84(@babel/preset-env@7.24.7(@babel/core@7.24.7))': - dependencies: - '@react-native/codegen': 0.74.84(@babel/preset-env@7.24.7(@babel/core@7.24.7)) - transitivePeerDependencies: - - '@babel/preset-env' - - supports-color - '@react-native/babel-plugin-codegen@0.74.84(@babel/preset-env@7.24.7(@babel/core@7.25.8))': dependencies: '@react-native/codegen': 0.74.84(@babel/preset-env@7.24.7(@babel/core@7.25.8)) @@ -35819,55 +35416,6 @@ snapshots: - '@babel/preset-env' - supports-color - '@react-native/babel-preset@0.74.84(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))': - dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.24.7) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-proposal-export-default-from': 7.25.8(@babel/core@7.24.7) - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.24.7) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.24.7) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.24.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-export-default-from': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-syntax-flow': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-transform-arrow-functions': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-async-to-generator': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoping': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-classes': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-computed-properties': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-destructuring': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-flow-strip-types': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-function-name': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-literals': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-commonjs': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-private-methods': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-private-property-in-object': 7.25.8(@babel/core@7.24.7) - '@babel/plugin-transform-react-display-name': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-react-jsx': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-react-jsx-self': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-react-jsx-source': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-runtime': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-shorthand-properties': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-spread': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-sticky-regex': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-typescript': 7.25.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-regex': 7.25.7(@babel/core@7.24.7) - '@babel/template': 7.25.7 - '@react-native/babel-plugin-codegen': 0.74.84(@babel/preset-env@7.24.7(@babel/core@7.24.7)) - babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.24.7) - react-refresh: 0.14.2 - transitivePeerDependencies: - - '@babel/preset-env' - - supports-color - '@react-native/babel-preset@0.74.84(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))': dependencies: '@babel/core': 7.25.8 @@ -35930,19 +35478,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@react-native/codegen@0.74.84(@babel/preset-env@7.24.7(@babel/core@7.24.7))': - dependencies: - '@babel/parser': 7.25.8 - '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - glob: 7.2.3 - hermes-parser: 0.19.1 - invariant: 2.2.4 - jscodeshift: 0.14.0(@babel/preset-env@7.24.7(@babel/core@7.24.7)) - mkdirp: 0.5.6 - nullthrows: 1.1.1 - transitivePeerDependencies: - - supports-color - '@react-native/codegen@0.74.84(@babel/preset-env@7.24.7(@babel/core@7.25.8))': dependencies: '@babel/parser': 7.25.8 @@ -35978,28 +35513,6 @@ snapshots: - supports-color - utf-8-validate - '@react-native/community-cli-plugin@0.74.84(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)': - dependencies: - '@react-native-community/cli-server-api': 13.6.8(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@react-native-community/cli-tools': 13.6.8(encoding@0.1.13) - '@react-native/dev-middleware': 0.74.84(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@react-native/metro-babel-transformer': 0.74.84(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7)) - chalk: 4.1.2 - execa: 5.1.1 - metro: 0.80.12(bufferutil@4.0.8)(utf-8-validate@5.0.10) - metro-config: 0.80.12(bufferutil@4.0.8)(utf-8-validate@5.0.10) - metro-core: 0.80.12 - node-fetch: 2.7.0(encoding@0.1.13) - querystring: 0.2.1 - readline: 1.3.0 - transitivePeerDependencies: - - '@babel/core' - - '@babel/preset-env' - - bufferutil - - encoding - - supports-color - - utf-8-validate - '@react-native/community-cli-plugin@0.74.84(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: '@react-native-community/cli-server-api': 13.6.8(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) @@ -36059,16 +35572,6 @@ snapshots: - '@babel/preset-env' - supports-color - '@react-native/metro-babel-transformer@0.74.84(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))': - dependencies: - '@babel/core': 7.24.7 - '@react-native/babel-preset': 0.74.84(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7)) - hermes-parser: 0.19.1 - nullthrows: 1.1.1 - transitivePeerDependencies: - - '@babel/preset-env' - - supports-color - '@react-native/metro-babel-transformer@0.74.84(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))': dependencies: '@babel/core': 7.25.8 @@ -36099,15 +35602,6 @@ snapshots: optionalDependencies: '@types/react': types-react@19.0.0-rc.1 - '@react-native/virtualized-lists@0.74.84(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)': - dependencies: - invariant: 2.2.4 - nullthrows: 1.1.1 - react: 19.0.0-rc-603e6108-20241029 - react-native: 0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10) - optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@react-native/virtualized-lists@0.74.84(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)': dependencies: invariant: 2.2.4 @@ -37234,18 +36728,18 @@ snapshots: '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-base-ui@0.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': + '@solana/wallet-adapter-base-ui@0.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': dependencies: - '@solana/wallet-adapter-react': 0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + '@solana/wallet-adapter-react': 0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) '@solana/web3.js': 1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) react: 19.0.0-rc-603e6108-20241029 transitivePeerDependencies: - bs58 - react-native - '@solana/wallet-adapter-base-ui@0.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': + '@solana/wallet-adapter-base-ui@0.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': dependencies: - '@solana/wallet-adapter-react': 0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + '@solana/wallet-adapter-react': 0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) '@solana/web3.js': 1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) react: 19.0.0-rc-603e6108-20241029 transitivePeerDependencies: @@ -37420,11 +36914,11 @@ snapshots: '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-react-ui@0.9.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': + '@solana/wallet-adapter-react-ui@0.9.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': dependencies: '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-base-ui': 0.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) - '@solana/wallet-adapter-react': 0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + '@solana/wallet-adapter-base-ui': 0.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + '@solana/wallet-adapter-react': 0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) '@solana/web3.js': 1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) react: 19.0.0-rc-603e6108-20241029 react-dom: 19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029) @@ -37432,11 +36926,11 @@ snapshots: - bs58 - react-native - '@solana/wallet-adapter-react-ui@0.9.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': + '@solana/wallet-adapter-react-ui@0.9.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': dependencies: '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-base-ui': 0.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) - '@solana/wallet-adapter-react': 0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + '@solana/wallet-adapter-base-ui': 0.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + '@solana/wallet-adapter-react': 0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) '@solana/web3.js': 1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) react: 19.0.0-rc-603e6108-20241029 react-dom: 19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029) @@ -37444,9 +36938,9 @@ snapshots: - bs58 - react-native - '@solana/wallet-adapter-react@0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': + '@solana/wallet-adapter-react@0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': dependencies: - '@solana-mobile/wallet-adapter-mobile': 2.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + '@solana-mobile/wallet-adapter-mobile': 2.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-standard-wallet-adapter-react': 1.1.2(@solana/wallet-adapter-base@0.9.23(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)))(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.0.0-rc-603e6108-20241029) '@solana/web3.js': 1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) @@ -37455,9 +36949,9 @@ snapshots: - bs58 - react-native - '@solana/wallet-adapter-react@0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': + '@solana/wallet-adapter-react@0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': dependencies: - '@solana-mobile/wallet-adapter-mobile': 2.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + '@solana-mobile/wallet-adapter-mobile': 2.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-standard-wallet-adapter-react': 1.1.2(@solana/wallet-adapter-base@0.9.23(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)))(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.0.0-rc-603e6108-20241029) '@solana/web3.js': 1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) @@ -37466,9 +36960,9 @@ snapshots: - bs58 - react-native - '@solana/wallet-adapter-react@0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': + '@solana/wallet-adapter-react@0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': dependencies: - '@solana-mobile/wallet-adapter-mobile': 2.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + '@solana-mobile/wallet-adapter-mobile': 2.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-standard-wallet-adapter-react': 1.1.2(@solana/wallet-adapter-base@0.9.23(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)))(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@19.0.0-rc-603e6108-20241029) '@solana/web3.js': 1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) @@ -37477,9 +36971,9 @@ snapshots: - bs58 - react-native - '@solana/wallet-adapter-react@0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': + '@solana/wallet-adapter-react@0.15.35(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)': dependencies: - '@solana-mobile/wallet-adapter-mobile': 2.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) + '@solana-mobile/wallet-adapter-mobile': 2.1.2(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029) '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-standard-wallet-adapter-react': 1.1.2(@solana/wallet-adapter-base@0.9.23(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)))(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@19.0.0-rc-603e6108-20241029) '@solana/web3.js': 1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) @@ -37638,7 +37132,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@solana/wallet-adapter-wallets@0.19.10(@babel/runtime@7.25.7)(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10)': + '@solana/wallet-adapter-wallets@0.19.10(@babel/runtime@7.25.7)(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10)': dependencies: '@solana/wallet-adapter-alpha': 0.1.10(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-avana': 0.1.13(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) @@ -37666,7 +37160,7 @@ snapshots: '@solana/wallet-adapter-nightly': 0.1.16(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-nufi': 0.1.17(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-onto': 0.1.7(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-particle': 0.1.12(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0) + '@solana/wallet-adapter-particle': 0.1.12(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0) '@solana/wallet-adapter-phantom': 0.9.24(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-safepal': 0.5.18(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-saifu': 0.1.15(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) @@ -37712,7 +37206,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@solana/wallet-adapter-wallets@0.19.10(@babel/runtime@7.25.7)(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10)': + '@solana/wallet-adapter-wallets@0.19.10(@babel/runtime@7.25.7)(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10)': dependencies: '@solana/wallet-adapter-alpha': 0.1.10(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-avana': 0.1.13(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) @@ -37740,7 +37234,7 @@ snapshots: '@solana/wallet-adapter-nightly': 0.1.16(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-nufi': 0.1.17(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-onto': 0.1.7(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-particle': 0.1.12(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0) + '@solana/wallet-adapter-particle': 0.1.12(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0) '@solana/wallet-adapter-phantom': 0.9.24(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-safepal': 0.5.18(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-saifu': 0.1.15(@solana/web3.js@1.92.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)) @@ -40121,9 +39615,9 @@ snapshots: '@types/bn.js': 5.1.6 '@types/underscore': 1.11.4 - '@types/web3@1.2.2(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)': + '@types/web3@1.2.2(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: - web3: 1.10.0(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + web3: 1.10.0(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - encoding @@ -40294,6 +39788,25 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2)': + dependencies: + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 7.13.1(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.2) + '@typescript-eslint/scope-manager': 7.13.1 + '@typescript-eslint/type-utils': 7.13.1(eslint@9.5.0)(typescript@5.5.2) + '@typescript-eslint/utils': 7.13.1(eslint@9.5.0)(typescript@5.5.2) + '@typescript-eslint/visitor-keys': 7.13.1 + eslint: 9.5.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.5.2) + optionalDependencies: + typescript: 5.5.2 + transitivePeerDependencies: + - supports-color + optional: true + '@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.0 @@ -40332,25 +39845,6 @@ snapshots: - supports-color optional: true - '@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2)': - dependencies: - '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.14.0(eslint@9.5.0)(typescript@5.5.2) - '@typescript-eslint/scope-manager': 7.13.1 - '@typescript-eslint/type-utils': 7.13.1(eslint@9.5.0)(typescript@5.5.2) - '@typescript-eslint/utils': 7.13.1(eslint@9.5.0)(typescript@5.5.2) - '@typescript-eslint/visitor-keys': 7.13.1 - eslint: 9.5.0 - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.2) - optionalDependencies: - typescript: 5.5.2 - transitivePeerDependencies: - - supports-color - optional: true - '@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.0 @@ -40602,20 +40096,6 @@ snapshots: - supports-color optional: true - '@typescript-eslint/parser@8.14.0(eslint@9.5.0)(typescript@5.5.2)': - dependencies: - '@typescript-eslint/scope-manager': 8.14.0 - '@typescript-eslint/types': 8.14.0 - '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.5.2) - '@typescript-eslint/visitor-keys': 8.14.0 - debug: 4.3.7(supports-color@8.1.1) - eslint: 9.5.0 - optionalDependencies: - typescript: 5.5.2 - transitivePeerDependencies: - - supports-color - optional: true - '@typescript-eslint/parser@8.14.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4)': dependencies: '@typescript-eslint/scope-manager': 8.14.0 @@ -41050,22 +40530,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.14.0(typescript@5.5.2)': - dependencies: - '@typescript-eslint/types': 8.14.0 - '@typescript-eslint/visitor-keys': 8.14.0 - debug: 4.3.7(supports-color@8.1.1) - fast-glob: 3.3.2 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.2) - optionalDependencies: - typescript: 5.5.2 - transitivePeerDependencies: - - supports-color - optional: true - '@typescript-eslint/typescript-estree@8.14.0(typescript@5.5.4)': dependencies: '@typescript-eslint/types': 8.14.0 @@ -41763,14 +41227,14 @@ snapshots: '@vue/shared@3.4.34': {} - '@wagmi/connectors@5.0.16(276lu6ucw5vl7m53grscpa4fqq)': + '@wagmi/connectors@5.0.16(c6fifzb677vjk75d7sjyei2p2e)': dependencies: '@coinbase/wallet-sdk': 4.0.3 - '@metamask/sdk': 0.26.0(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10) + '@metamask/sdk': 0.26.0(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.1(bufferutil@4.0.8)(typescript@5.5.2)(utf-8-validate@5.0.10)(zod@3.23.8) '@safe-global/safe-apps-sdk': 8.1.0(bufferutil@4.0.8)(typescript@5.5.2)(utf-8-validate@5.0.10)(zod@3.23.8) '@wagmi/core': 2.11.4(@tanstack/query-core@5.45.0)(bufferutil@4.0.8)(immer@9.0.21)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(typescript@5.5.2)(utf-8-validate@5.0.10)(viem@2.21.35(bufferutil@4.0.8)(typescript@5.5.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) - '@walletconnect/ethereum-provider': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10) + '@walletconnect/ethereum-provider': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10) '@walletconnect/modal': 2.6.2(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' viem: 2.21.35(bufferutil@4.0.8)(typescript@5.5.2)(utf-8-validate@5.0.10)(zod@3.23.8) @@ -41925,21 +41389,21 @@ snapshots: - uWebSockets.js - utf-8-validate - '@walletconnect/core@2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)': + '@walletconnect/core@2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/jsonrpc-ws-connection': 1.0.14(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) + '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) '@walletconnect/logger': 2.1.2 '@walletconnect/relay-api': 1.0.10 '@walletconnect/relay-auth': 1.0.4 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) - '@walletconnect/utils': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) + '@walletconnect/types': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) + '@walletconnect/utils': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) events: 3.3.0 isomorphic-unfetch: 3.1.0(encoding@0.1.13) lodash.isequal: 4.5.0 @@ -41967,17 +41431,17 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/ethereum-provider@2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)': + '@walletconnect/ethereum-provider@2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/modal': 2.6.2(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1) - '@walletconnect/sign-client': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@walletconnect/types': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) - '@walletconnect/universal-provider': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@walletconnect/utils': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) + '@walletconnect/sign-client': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) + '@walletconnect/universal-provider': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@walletconnect/utils': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -42086,28 +41550,6 @@ snapshots: - ioredis - uWebSockets.js - '@walletconnect/keyvaluestorage@1.1.1(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))': - dependencies: - '@walletconnect/safe-json': 1.0.2 - idb-keyval: 6.2.1 - unstorage: 1.10.2(idb-keyval@6.2.1) - optionalDependencies: - '@react-native-async-storage/async-storage': 1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@upstash/redis' - - '@vercel/kv' - - ioredis - - uWebSockets.js - '@walletconnect/keyvaluestorage@1.1.1(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))': dependencies: '@walletconnect/safe-json': 1.0.2 @@ -42250,16 +41692,16 @@ snapshots: - uWebSockets.js - utf-8-validate - '@walletconnect/sign-client@2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)': + '@walletconnect/sign-client@2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: - '@walletconnect/core': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@walletconnect/core': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) - '@walletconnect/utils': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) + '@walletconnect/types': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) + '@walletconnect/utils': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -42334,12 +41776,12 @@ snapshots: - ioredis - uWebSockets.js - '@walletconnect/types@2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))': + '@walletconnect/types@2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) + '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) '@walletconnect/logger': 2.1.2 events: 3.3.0 transitivePeerDependencies: @@ -42358,16 +41800,16 @@ snapshots: - ioredis - uWebSockets.js - '@walletconnect/universal-provider@2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)': + '@walletconnect/universal-provider@2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@walletconnect/types': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) - '@walletconnect/utils': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) + '@walletconnect/sign-client': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) + '@walletconnect/utils': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -42452,7 +41894,7 @@ snapshots: - ioredis - uWebSockets.js - '@walletconnect/utils@2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))': + '@walletconnect/utils@2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10)))': dependencies: '@stablelib/chacha20poly1305': 1.0.1 '@stablelib/hkdf': 1.0.1 @@ -42462,7 +41904,7 @@ snapshots: '@walletconnect/relay-api': 1.0.10 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) + '@walletconnect/types': 2.13.0(@react-native-async-storage/async-storage@1.23.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))) '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 detect-browser: 5.3.0 @@ -43531,20 +42973,6 @@ snapshots: transitivePeerDependencies: - supports-color - babel-jest@29.7.0(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.7) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - optional: true - babel-jest@29.7.0(@babel/core@7.25.8): dependencies: '@babel/core': 7.25.8 @@ -43666,14 +43094,6 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) - core-js-compat: 3.38.0 - transitivePeerDependencies: - - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.8): dependencies: '@babel/core': 7.25.8 @@ -43733,14 +43153,14 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-styled-components@2.1.4(@babel/core@7.24.7)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-is@18.3.1)(react@19.0.0-rc-603e6108-20241029))(supports-color@5.5.0): + babel-plugin-styled-components@2.1.4(@babel/core@7.25.8)(styled-components@5.3.11(@babel/core@7.25.8)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-is@18.3.1)(react@19.0.0-rc-603e6108-20241029))(supports-color@5.5.0): dependencies: '@babel/helper-annotate-as-pure': 7.24.7 '@babel/helper-module-imports': 7.24.7(supports-color@5.5.0) - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.8) lodash: 4.17.21 picomatch: 2.3.1 - styled-components: 5.3.11(@babel/core@7.24.7)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-is@18.3.1)(react@19.0.0-rc-603e6108-20241029) + styled-components: 5.3.11(@babel/core@7.25.8)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-is@18.3.1)(react@19.0.0-rc-603e6108-20241029) transitivePeerDependencies: - '@babel/core' - supports-color @@ -43751,12 +43171,6 @@ snapshots: transitivePeerDependencies: - '@babel/core' - babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.24.7): - dependencies: - '@babel/plugin-syntax-flow': 7.25.7(@babel/core@7.24.7) - transitivePeerDependencies: - - '@babel/core' - babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.25.8): dependencies: '@babel/plugin-syntax-flow': 7.25.7(@babel/core@7.25.8) @@ -43801,13 +43215,6 @@ snapshots: babel-plugin-jest-hoist: 27.5.1 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) - babel-preset-jest@29.6.3(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) - optional: true - babel-preset-jest@29.6.3(@babel/core@7.25.8): dependencies: '@babel/core': 7.25.8 @@ -44887,7 +44294,7 @@ snapshots: transitivePeerDependencies: - supports-color - connectkit@1.8.2(@babel/core@7.24.7)(@tanstack/react-query@5.45.1(react@19.0.0-rc-603e6108-20241029))(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-is@18.3.1)(react@19.0.0-rc-603e6108-20241029)(viem@2.21.35(bufferutil@4.0.8)(typescript@5.5.2)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.10.4(slso2y5si5ebobzw4pa64fwb3i)): + connectkit@1.8.2(@babel/core@7.25.8)(@tanstack/react-query@5.45.1(react@19.0.0-rc-603e6108-20241029))(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-is@18.3.1)(react@19.0.0-rc-603e6108-20241029)(viem@2.21.35(bufferutil@4.0.8)(typescript@5.5.2)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.10.4(2zybmpkgivtkk3e4xdbpxyo3aq)): dependencies: '@tanstack/react-query': 5.45.1(react@19.0.0-rc-603e6108-20241029) buffer: 6.0.3 @@ -44899,9 +44306,9 @@ snapshots: react-transition-state: 1.1.5(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029) react-use-measure: 2.1.1(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029) resize-observer-polyfill: 1.5.1 - styled-components: 5.3.11(@babel/core@7.24.7)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-is@18.3.1)(react@19.0.0-rc-603e6108-20241029) + styled-components: 5.3.11(@babel/core@7.25.8)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-is@18.3.1)(react@19.0.0-rc-603e6108-20241029) viem: 2.21.35(bufferutil@4.0.8)(typescript@5.5.2)(utf-8-validate@5.0.10)(zod@3.23.8) - wagmi: 2.10.4(slso2y5si5ebobzw4pa64fwb3i) + wagmi: 2.10.4(2zybmpkgivtkk3e4xdbpxyo3aq) transitivePeerDependencies: - '@babel/core' - react-is @@ -46655,31 +46062,31 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@1.21.0)): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.13.1(eslint@9.5.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@1.21.0)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4) + '@typescript-eslint/parser': 7.13.1(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.2) eslint: 9.12.0(jiti@1.21.0) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@1.21.0)): + eslint-module-utils@2.8.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@1.21.0)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3) + '@typescript-eslint/parser': 8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4) eslint: 9.12.0(jiti@1.21.0) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@8.14.0(eslint@9.5.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@1.21.0)): + eslint-module-utils@2.8.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@1.21.0)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.14.0(eslint@9.5.0)(typescript@5.5.2) + '@typescript-eslint/parser': 8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3) eslint: 9.12.0(jiti@1.21.0) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: @@ -46712,7 +46119,7 @@ snapshots: eslint: 9.12.0(jiti@1.21.0) eslint-compat-utils: 0.5.1(eslint@9.12.0(jiti@1.21.0)) - eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.14.0(eslint@8.56.0)(typescript@5.4.5))(eslint@8.56.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.13.1(eslint@9.5.0)(typescript@5.5.2))(eslint@9.12.0(jiti@1.21.0)): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -46720,9 +46127,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.56.0 + eslint: 9.12.0(jiti@1.21.0) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.13.1(eslint@8.56.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.13.1(eslint@9.5.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@1.21.0)) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -46733,13 +46140,13 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.14.0(eslint@8.56.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.13.1(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.0)): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.14.0(eslint@8.56.0)(typescript@5.4.5))(eslint@8.56.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -46747,9 +46154,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.12.0(jiti@1.21.0) + eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@1.21.0)) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.13.1(eslint@8.56.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -46760,13 +46167,13 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4) + '@typescript-eslint/parser': 8.14.0(eslint@8.56.0)(typescript@5.4.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(eslint@9.12.0(jiti@1.21.0)): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.0)): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -46776,7 +46183,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.12.0(jiti@1.21.0) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@1.21.0)) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@1.21.0)) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -46787,13 +46194,13 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3) + '@typescript-eslint/parser': 8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.14.0(eslint@9.5.0)(typescript@5.5.2))(eslint@9.12.0(jiti@1.21.0)): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(eslint@9.12.0(jiti@1.21.0)): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -46803,7 +46210,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.12.0(jiti@1.21.0) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@8.14.0(eslint@9.5.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@1.21.0)) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@1.21.0)) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -46814,7 +46221,7 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.14.0(eslint@9.5.0)(typescript@5.5.2) + '@typescript-eslint/parser': 8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -46882,6 +46289,17 @@ snapshots: optionalDependencies: '@testing-library/dom': 10.4.0 + eslint-plugin-jest@28.6.0(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2))(eslint@9.12.0(jiti@1.21.0))(jest@29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)))(typescript@5.5.2): + dependencies: + '@typescript-eslint/utils': 7.13.1(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.2) + eslint: 9.12.0(jiti@1.21.0) + optionalDependencies: + '@typescript-eslint/eslint-plugin': 7.13.1(@typescript-eslint/parser@7.13.1(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2) + jest: 29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)) + transitivePeerDependencies: + - supports-color + - typescript + eslint-plugin-jest@28.6.0(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.13.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.0))(jest@29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.5.4)))(typescript@5.5.4): dependencies: '@typescript-eslint/utils': 7.13.1(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.4) @@ -46904,17 +46322,6 @@ snapshots: - supports-color - typescript - eslint-plugin-jest@28.6.0(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2))(eslint@9.12.0(jiti@1.21.0))(jest@29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)))(typescript@5.5.2): - dependencies: - '@typescript-eslint/utils': 7.13.1(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.2) - eslint: 9.12.0(jiti@1.21.0) - optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.5.0)(typescript@5.5.2))(eslint@9.5.0)(typescript@5.5.2) - jest: 29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)) - transitivePeerDependencies: - - supports-color - - typescript - eslint-plugin-jest@28.6.0(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@8.14.0(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.0))(typescript@5.5.4))(eslint@9.12.0(jiti@1.21.0))(jest@29.7.0(@types/node@22.2.0)(ts-node@10.9.2(@types/node@22.2.0)(typescript@5.5.4)))(typescript@5.5.4): dependencies: '@typescript-eslint/utils': 7.13.1(eslint@9.12.0(jiti@1.21.0))(typescript@5.5.4) @@ -47635,6 +47042,19 @@ snapshots: transitivePeerDependencies: - encoding + eth-lib@0.1.29(bufferutil@4.0.7)(utf-8-validate@5.0.10): + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.6 + nano-json-stream-parser: 0.1.2 + servify: 0.1.12 + ws: 3.3.3(bufferutil@4.0.7)(utf-8-validate@5.0.10) + xhr-request-promise: 0.1.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + eth-lib@0.1.29(bufferutil@4.0.7)(utf-8-validate@6.0.3): dependencies: bn.js: 4.12.0 @@ -52446,31 +51866,6 @@ snapshots: transitivePeerDependencies: - supports-color - jscodeshift@0.14.0(@babel/preset-env@7.24.7(@babel/core@7.24.7)): - dependencies: - '@babel/core': 7.25.8 - '@babel/parser': 7.25.8 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.25.8) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.25.8) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.25.8) - '@babel/plugin-transform-modules-commonjs': 7.25.7(@babel/core@7.25.8) - '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@babel/preset-flow': 7.25.7(@babel/core@7.25.8) - '@babel/preset-typescript': 7.25.7(@babel/core@7.25.8) - '@babel/register': 7.25.7(@babel/core@7.25.8) - babel-core: 7.0.0-bridge.0(@babel/core@7.25.8) - chalk: 4.1.2 - flow-parser: 0.250.0 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - neo-async: 2.6.2 - node-dir: 0.1.17 - recast: 0.21.5 - temp: 0.8.4 - write-file-atomic: 2.4.3 - transitivePeerDependencies: - - supports-color - jscodeshift@0.14.0(@babel/preset-env@7.24.7(@babel/core@7.25.8)): dependencies: '@babel/core': 7.25.8 @@ -54318,33 +53713,7 @@ snapshots: next-tick@1.1.0: {} - next@14.2.15(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.7): - dependencies: - '@next/env': 14.2.15 - '@swc/helpers': 0.5.5 - busboy: 1.6.0 - caniuse-lite: 1.0.30001669 - graceful-fs: 4.2.11 - postcss: 8.4.31 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(@babel/core@7.24.7)(react@18.3.1) - optionalDependencies: - '@next/swc-darwin-arm64': 14.2.15 - '@next/swc-darwin-x64': 14.2.15 - '@next/swc-linux-arm64-gnu': 14.2.15 - '@next/swc-linux-arm64-musl': 14.2.15 - '@next/swc-linux-x64-gnu': 14.2.15 - '@next/swc-linux-x64-musl': 14.2.15 - '@next/swc-win32-arm64-msvc': 14.2.15 - '@next/swc-win32-ia32-msvc': 14.2.15 - '@next/swc-win32-x64-msvc': 14.2.15 - sass: 1.80.7 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - - next@14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.7): + next@14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@19.0.0-rc-603e6108-20241029))(react@18.3.1)(sass@1.80.7): dependencies: '@next/env': 14.2.15 '@swc/helpers': 0.5.5 @@ -54396,32 +53765,6 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.0.3(@babel/core@7.24.7)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(sass@1.80.7): - dependencies: - '@next/env': 15.0.3 - '@swc/counter': 0.1.3 - '@swc/helpers': 0.5.13 - busboy: 1.6.0 - caniuse-lite: 1.0.30001669 - postcss: 8.4.31 - react: 19.0.0-rc-603e6108-20241029 - react-dom: 19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029) - styled-jsx: 5.1.6(@babel/core@7.24.7)(react@19.0.0-rc-603e6108-20241029) - optionalDependencies: - '@next/swc-darwin-arm64': 15.0.3 - '@next/swc-darwin-x64': 15.0.3 - '@next/swc-linux-arm64-gnu': 15.0.3 - '@next/swc-linux-arm64-musl': 15.0.3 - '@next/swc-linux-x64-gnu': 15.0.3 - '@next/swc-linux-x64-musl': 15.0.3 - '@next/swc-win32-arm64-msvc': 15.0.3 - '@next/swc-win32-x64-msvc': 15.0.3 - sass: 1.80.7 - sharp: 0.33.5 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - next@15.0.3(@babel/core@7.25.8)(react-dom@18.3.1(react@19.0.0-rc-603e6108-20241029))(react@19.0.0-rc-603e6108-20241029)(sass@1.80.7): dependencies: '@next/env': 15.0.3 @@ -56634,7 +55977,7 @@ snapshots: transitivePeerDependencies: - csstype - react-i18next@13.5.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029): + react-i18next@13.5.0(i18next@22.5.1)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029): dependencies: '@babel/runtime': 7.25.7 html-parse-stringify: 3.0.1 @@ -56642,7 +55985,7 @@ snapshots: react: 19.0.0-rc-603e6108-20241029 optionalDependencies: react-dom: 19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029) - react-native: 0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10) + react-native: 0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10) react-is@16.13.1: {} @@ -56680,12 +56023,12 @@ snapshots: react-lifecycles-compat: 3.0.4 warning: 4.0.3 - react-native-webview@11.26.1(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029): + react-native-webview@11.26.1(react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029): dependencies: escape-string-regexp: 2.0.0 invariant: 2.2.4 react: 19.0.0-rc-603e6108-20241029 - react-native: 0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10) + react-native: 0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10) react-native@0.74.2(@babel/core@7.24.0)(@babel/preset-env@7.24.7(@babel/core@7.24.0))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10): dependencies: @@ -56737,56 +56080,6 @@ snapshots: - supports-color - utf-8-validate - react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10): - dependencies: - '@jest/create-cache-key-function': 29.7.0 - '@react-native-community/cli': 13.6.8(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@react-native-community/cli-platform-android': 13.6.8(encoding@0.1.13) - '@react-native-community/cli-platform-ios': 13.6.8(encoding@0.1.13) - '@react-native/assets-registry': 0.74.84 - '@react-native/codegen': 0.74.84(@babel/preset-env@7.24.7(@babel/core@7.24.7)) - '@react-native/community-cli-plugin': 0.74.84(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@react-native/gradle-plugin': 0.74.84 - '@react-native/js-polyfills': 0.74.84 - '@react-native/normalize-colors': 0.74.84 - '@react-native/virtualized-lists': 0.74.84(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(utf-8-validate@5.0.10))(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1) - abort-controller: 3.0.0 - anser: 1.4.10 - ansi-regex: 5.0.1 - base64-js: 1.5.1 - chalk: 4.1.2 - event-target-shim: 5.0.1 - flow-enums-runtime: 0.0.6 - invariant: 2.2.4 - jest-environment-node: 29.7.0 - jsc-android: 250231.0.0 - memoize-one: 5.2.1 - metro-runtime: 0.80.12 - metro-source-map: 0.80.12 - mkdirp: 0.5.6 - nullthrows: 1.1.1 - pretty-format: 26.6.2 - promise: 8.3.0 - react: 19.0.0-rc-603e6108-20241029 - react-devtools-core: 5.3.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - react-refresh: 0.14.2 - react-shallow-renderer: 16.15.0(react@19.0.0-rc-603e6108-20241029) - regenerator-runtime: 0.13.11 - scheduler: 0.24.0-canary-efb381bbf-20230505 - stacktrace-parser: 0.1.10 - whatwg-fetch: 3.6.20 - ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) - yargs: 17.7.2 - optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - transitivePeerDependencies: - - '@babel/core' - - '@babel/preset-env' - - bufferutil - - encoding - - supports-color - - utf-8-validate - react-native@0.74.2(@babel/core@7.25.8)(@babel/preset-env@7.24.7(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@19.0.0-rc-603e6108-20241029)(utf-8-validate@5.0.10): dependencies: '@jest/create-cache-key-function': 29.7.0 @@ -58494,14 +57787,14 @@ snapshots: hey-listen: 1.0.8 tslib: 2.8.0 - styled-components@5.3.11(@babel/core@7.24.7)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-is@18.3.1)(react@19.0.0-rc-603e6108-20241029): + styled-components@5.3.11(@babel/core@7.25.8)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-is@18.3.1)(react@19.0.0-rc-603e6108-20241029): dependencies: '@babel/helper-module-imports': 7.24.7(supports-color@5.5.0) '@babel/traverse': 7.24.7(supports-color@5.5.0) '@emotion/is-prop-valid': 1.2.2 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.24.7)(styled-components@5.3.11(@babel/core@7.24.7)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-is@18.3.1)(react@19.0.0-rc-603e6108-20241029))(supports-color@5.5.0) + babel-plugin-styled-components: 2.1.4(@babel/core@7.25.8)(styled-components@5.3.11(@babel/core@7.25.8)(react-dom@19.0.0-rc-603e6108-20241029(react@19.0.0-rc-603e6108-20241029))(react-is@18.3.1)(react@19.0.0-rc-603e6108-20241029))(supports-color@5.5.0) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 react: 19.0.0-rc-603e6108-20241029 @@ -58512,13 +57805,6 @@ snapshots: transitivePeerDependencies: - '@babel/core' - styled-jsx@5.1.1(@babel/core@7.24.7)(react@18.3.1): - dependencies: - client-only: 0.0.1 - react: 18.3.1 - optionalDependencies: - '@babel/core': 7.24.7 - styled-jsx@5.1.1(@babel/core@7.25.8)(react@18.3.1): dependencies: client-only: 0.0.1 @@ -58533,13 +57819,6 @@ snapshots: optionalDependencies: '@babel/core': 7.24.0 - styled-jsx@5.1.6(@babel/core@7.24.7)(react@19.0.0-rc-603e6108-20241029): - dependencies: - client-only: 0.0.1 - react: 19.0.0-rc-603e6108-20241029 - optionalDependencies: - '@babel/core': 7.24.7 - styled-jsx@5.1.6(@babel/core@7.25.8)(react@19.0.0-rc-603e6108-20241029): dependencies: client-only: 0.0.1 @@ -58736,6 +58015,24 @@ snapshots: lower-case: 1.1.4 upper-case: 1.1.3 + swarm-js@0.1.42(bufferutil@4.0.7)(utf-8-validate@5.0.10): + dependencies: + bluebird: 3.7.2 + buffer: 5.7.1 + eth-lib: 0.1.29(bufferutil@4.0.7)(utf-8-validate@5.0.10) + fs-extra: 4.0.3 + got: 11.8.6 + mime-types: 2.1.35 + mkdirp-promise: 5.0.1 + mock-fs: 4.14.0 + setimmediate: 1.0.5 + tar: 4.4.19 + xhr-request: 1.1.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + swarm-js@0.1.42(bufferutil@4.0.7)(utf-8-validate@6.0.3): dependencies: bluebird: 3.7.2 @@ -59530,12 +58827,12 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.25.8) - ts-jest@29.2.4(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)))(typescript@5.5.4): + ts-jest@29.2.4(@babel/core@7.25.8)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.8))(esbuild@0.22.0)(jest@29.7.0(@types/node@22.8.2)(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3)))(typescript@5.5.4): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)) + jest: 29.7.0(@types/node@22.8.2)(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -59544,43 +58841,43 @@ snapshots: typescript: 5.5.4 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.8 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.7) + babel-jest: 29.7.0(@babel/core@7.25.8) + esbuild: 0.22.0 - ts-jest@29.2.4(@babel/core@7.25.8)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.8))(esbuild@0.22.0)(jest@29.7.0(@types/node@22.8.2)(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3)))(typescript@5.5.4): + ts-jest@29.2.4(@babel/core@7.25.8)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.8))(jest@29.7.0(@types/node@18.19.44)(ts-node@10.9.2(@types/node@18.19.44)(typescript@4.9.5)))(typescript@4.9.5): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@22.8.2)(ts-node@10.9.2(@types/node@22.8.2)(typescript@5.6.3)) + jest: 29.7.0(@types/node@18.19.44)(ts-node@10.9.2(@types/node@18.19.44)(typescript@4.9.5)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.3 - typescript: 5.5.4 + typescript: 4.9.5 yargs-parser: 21.1.1 optionalDependencies: '@babel/core': 7.25.8 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.25.8) - esbuild: 0.22.0 - ts-jest@29.2.4(@babel/core@7.25.8)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.8))(jest@29.7.0(@types/node@18.19.44)(ts-node@10.9.2(@types/node@18.19.44)(typescript@4.9.5)))(typescript@4.9.5): + ts-jest@29.2.4(@babel/core@7.25.8)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.8))(jest@29.7.0(@types/node@20.14.15)(ts-node@10.9.2(@types/node@20.14.15)(typescript@5.5.4)))(typescript@5.5.4): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@18.19.44)(ts-node@10.9.2(@types/node@18.19.44)(typescript@4.9.5)) + jest: 29.7.0(@types/node@20.14.15)(ts-node@10.9.2(@types/node@20.14.15)(typescript@5.5.4)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.3 - typescript: 4.9.5 + typescript: 5.5.4 yargs-parser: 21.1.1 optionalDependencies: '@babel/core': 7.25.8 @@ -59588,12 +58885,12 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.25.8) - ts-jest@29.2.4(@babel/core@7.25.8)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.8))(jest@29.7.0(@types/node@20.14.15)(ts-node@10.9.2(@types/node@20.14.15)(typescript@5.5.4)))(typescript@5.5.4): + ts-jest@29.2.4(@babel/core@7.25.8)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.8))(jest@29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)))(typescript@5.5.4): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.14.15)(ts-node@10.9.2(@types/node@20.14.15)(typescript@5.5.4)) + jest: 29.7.0(@types/node@20.14.7)(ts-node@10.9.2(@types/node@20.14.7)(typescript@5.5.2)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -60876,10 +60173,10 @@ snapshots: dependencies: xml-name-validator: 4.0.0 - wagmi@2.10.4(slso2y5si5ebobzw4pa64fwb3i): + wagmi@2.10.4(2zybmpkgivtkk3e4xdbpxyo3aq): dependencies: '@tanstack/react-query': 5.45.1(react@19.0.0-rc-603e6108-20241029) - '@wagmi/connectors': 5.0.16(276lu6ucw5vl7m53grscpa4fqq) + '@wagmi/connectors': 5.0.16(c6fifzb677vjk75d7sjyei2p2e) '@wagmi/core': 2.11.4(@tanstack/query-core@5.45.0)(bufferutil@4.0.8)(immer@9.0.21)(react@19.0.0-rc-603e6108-20241029)(types-react@19.0.0-rc.1)(typescript@5.5.2)(utf-8-validate@5.0.10)(viem@2.21.35(bufferutil@4.0.8)(typescript@5.5.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) react: 19.0.0-rc-603e6108-20241029 use-sync-external-store: 1.2.0(react@19.0.0-rc-603e6108-20241029) @@ -60935,21 +60232,21 @@ snapshots: web-vitals@0.2.4: {} - web3-bzz@1.10.0(bufferutil@4.0.7)(utf-8-validate@6.0.3): + web3-bzz@1.10.0(bufferutil@4.0.7)(utf-8-validate@5.0.10): dependencies: '@types/node': 12.20.55 got: 12.1.0 - swarm-js: 0.1.42(bufferutil@4.0.7)(utf-8-validate@6.0.3) + swarm-js: 0.1.42(bufferutil@4.0.7)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - web3-bzz@1.10.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + web3-bzz@1.10.0(bufferutil@4.0.7)(utf-8-validate@6.0.3): dependencies: '@types/node': 12.20.55 got: 12.1.0 - swarm-js: 0.1.42(bufferutil@4.0.8)(utf-8-validate@5.0.10) + swarm-js: 0.1.42(bufferutil@4.0.7)(utf-8-validate@6.0.3) transitivePeerDependencies: - bufferutil - supports-color @@ -62049,9 +61346,9 @@ snapshots: web3-types: 1.7.0 zod: 3.23.8 - web3@1.10.0(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@6.0.3): + web3@1.10.0(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@5.0.10): dependencies: - web3-bzz: 1.10.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) + web3-bzz: 1.10.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) web3-core: 1.10.0(encoding@0.1.13) web3-eth: 1.10.0(encoding@0.1.13) web3-eth-personal: 1.10.0(encoding@0.1.13) @@ -62064,9 +61361,9 @@ snapshots: - supports-color - utf-8-validate - web3@1.10.0(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10): + web3@1.10.0(bufferutil@4.0.7)(encoding@0.1.13)(utf-8-validate@6.0.3): dependencies: - web3-bzz: 1.10.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + web3-bzz: 1.10.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) web3-core: 1.10.0(encoding@0.1.13) web3-eth: 1.10.0(encoding@0.1.13) web3-eth-personal: 1.10.0(encoding@0.1.13) @@ -62479,6 +61776,15 @@ snapshots: readable-stream: 0.0.4 optional: true + ws@3.3.3(bufferutil@4.0.7)(utf-8-validate@5.0.10): + dependencies: + async-limiter: 1.0.1 + safe-buffer: 5.1.2 + ultron: 1.1.1 + optionalDependencies: + bufferutil: 4.0.7 + utf-8-validate: 5.0.10 + ws@3.3.3(bufferutil@4.0.7)(utf-8-validate@6.0.3): dependencies: async-limiter: 1.0.1 diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/package.json b/target_chains/solana/sdk/js/pyth_solana_receiver/package.json index 12e2e54bb9..cb510cf492 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/package.json +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/package.json @@ -1,6 +1,6 @@ { "name": "@pythnetwork/pyth-solana-receiver", - "version": "0.8.2", + "version": "0.9.0", "description": "Pyth solana receiver SDK", "homepage": "https://pyth.network", "main": "lib/index.js", @@ -45,7 +45,7 @@ "dependencies": { "@coral-xyz/anchor": "^0.29.0", "@noble/hashes": "^1.4.0", - "@pythnetwork/price-service-sdk": ">=1.6.0", + "@pythnetwork/price-service-sdk": "workspace:*", "@pythnetwork/solana-utils": "workspace:*", "@solana/web3.js": "^1.90.0" } diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts index 80d8b183bf..04a172bc63 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts @@ -27,6 +27,7 @@ import { PublicKey, Keypair } from "@solana/web3.js"; import { parseAccumulatorUpdateData, parsePriceFeedMessage, + parseTwapMessage, } from "@pythnetwork/price-service-sdk"; import { CLOSE_ENCODED_VAA_COMPUTE_BUDGET, @@ -40,11 +41,11 @@ import { import { Wallet } from "@coral-xyz/anchor"; import { buildEncodedVaaCreateInstruction, + buildPostEncodedVaasForTwapInstructions, buildWriteEncodedVaaWithSplitInstructions, findEncodedVaaAccountsByWriteAuthority, getGuardianSetIndex, trimSignatures, - VAA_SPLIT_INDEX, } from "./vaa"; import { TransactionBuilder, @@ -518,6 +519,7 @@ export class PythSolanaReceiver { encodedVaaKeypair ) ); + postInstructions.push({ instruction: await this.wormhole.methods .initEncodedVaa() @@ -529,13 +531,12 @@ export class PythSolanaReceiver { computeUnits: INIT_ENCODED_VAA_COMPUTE_BUDGET, }); - postInstructions.push( - ...(await buildWriteEncodedVaaWithSplitInstructions( - this.wormhole, - trimmedVaa, - encodedVaaKeypair.publicKey - )) + const writeInstructions = await buildWriteEncodedVaaWithSplitInstructions( + this.wormhole, + trimmedVaa, + encodedVaaKeypair.publicKey ); + postInstructions.push(...writeInstructions); postInstructions.push({ instruction: await this.wormhole.methods @@ -672,152 +673,19 @@ export class PythSolanaReceiver { ); } - // // Verify the VAAs - // const [startVaa, endVaa] = await Promise.all([ - // this.buildPostEncodedVaaInstructions(startUpdateData.vaa), - // this.buildPostEncodedVaaInstructions(endUpdateData.vaa) - // ]); - // postInstructions.push(...startVaa.postInstructions, ...endVaa.postInstructions); - // closeInstructions.push(...startVaa.closeInstructions, ...endVaa.closeInstructions); - - // const { encodedVaaAddress: startEncodedVaa } = startVaa; - // const { encodedVaaAddress: endEncodedVaa } = endVaa; - - // TRANSACTION 1: Create, init, write initial data for Start VAA - // Create - const trimmedStartVaa = trimSignatures(startUpdateData.vaa, 13); - const startEncodedVaaKeypair = new Keypair(); - postInstructions.push( - await buildEncodedVaaCreateInstruction( - this.wormhole, - trimmedStartVaa, - startEncodedVaaKeypair - ) - ); - // Init - postInstructions.push({ - instruction: await this.wormhole.methods - .initEncodedVaa() - .accounts({ - encodedVaa: startEncodedVaaKeypair.publicKey, - }) - .instruction(), - signers: [], - computeUnits: INIT_ENCODED_VAA_COMPUTE_BUDGET, - }); - - // Write initial data - postInstructions.push( - ...(await buildWriteEncodedVaaWithSplitInstructions( - this.wormhole, - trimmedStartVaa, - startEncodedVaaKeypair.publicKey - )) - ); - - // TRANSACTION 2: Create, init, write initial data for End VAA - // Create - const trimmedEndVaa = trimSignatures(endUpdateData.vaa, 13); - const endEncodedVaaKeypair = new Keypair(); - postInstructions.push( - await buildEncodedVaaCreateInstruction( - this.wormhole, - trimmedEndVaa, - endEncodedVaaKeypair - ) - ); - // Init - postInstructions.push({ - instruction: await this.wormhole.methods - .initEncodedVaa() - .accounts({ - encodedVaa: endEncodedVaaKeypair.publicKey, - }) - .instruction(), - signers: [], - computeUnits: INIT_ENCODED_VAA_COMPUTE_BUDGET, - }); - - // Write initial data - postInstructions.push( - ...(await buildWriteEncodedVaaWithSplitInstructions( - this.wormhole, - trimmedEndVaa, - endEncodedVaaKeypair.publicKey - )) + // Post encoded VAAs + const { + postInstructions: buildVaasInstructions, + closeInstructions: closeVaasInstructions, + startVaa, + endVaa, + } = await buildPostEncodedVaasForTwapInstructions( + this.wormhole, + startUpdateData, + endUpdateData ); - - // TRANSACTION 3: Write remaining data and verify for Start & End VAAs - // Write remaining data for start VAA - postInstructions.push({ - instruction: await this.wormhole.methods - .writeEncodedVaa({ - index: VAA_SPLIT_INDEX, - data: trimmedStartVaa.subarray(VAA_SPLIT_INDEX), - }) - .accounts({ - draftVaa: startEncodedVaaKeypair.publicKey, - }) - .instruction(), - signers: [], - computeUnits: WRITE_ENCODED_VAA_COMPUTE_BUDGET, - }); - - // Write remaining data for end VAA - postInstructions.push({ - instruction: await this.wormhole.methods - .writeEncodedVaa({ - index: VAA_SPLIT_INDEX, - data: trimmedEndVaa.subarray(VAA_SPLIT_INDEX), - }) - .accounts({ - draftVaa: endEncodedVaaKeypair.publicKey, - }) - .instruction(), - signers: [], - computeUnits: WRITE_ENCODED_VAA_COMPUTE_BUDGET, - }); - - // Verify start VAA - const startGuardianSetIndex = getGuardianSetIndex(trimmedStartVaa); - postInstructions.push({ - instruction: await this.wormhole.methods - .verifyEncodedVaaV1() - .accounts({ - guardianSet: getGuardianSetPda( - startGuardianSetIndex, - this.wormhole.programId - ), - draftVaa: startEncodedVaaKeypair.publicKey, - }) - .instruction(), - signers: [], - computeUnits: VERIFY_ENCODED_VAA_COMPUTE_BUDGET, - }); - - // Verify end VAA - const endGuardianSetIndex = getGuardianSetIndex(trimmedEndVaa); - postInstructions.push({ - instruction: await this.wormhole.methods - .verifyEncodedVaaV1() - .accounts({ - guardianSet: getGuardianSetPda( - startGuardianSetIndex, - this.wormhole.programId - ), - draftVaa: startEncodedVaaKeypair.publicKey, - }) - .accounts({ - guardianSet: getGuardianSetPda( - startGuardianSetIndex, - this.wormhole.programId - ), - draftVaa: endEncodedVaaKeypair.publicKey, - }) - .instruction(), - signers: [], - computeUnits: VERIFY_ENCODED_VAA_COMPUTE_BUDGET, - }); + postInstructions.push(...buildVaasInstructions); + closeInstructions.push(...closeVaasInstructions); // Post a TWAP update to the receiver contract for each price feed for (let i = 0; i < startUpdateData.updates.length; i++) { @@ -833,8 +701,8 @@ export class PythSolanaReceiver { treasuryId, }) .accounts({ - startEncodedVaa: startEncodedVaaKeypair.publicKey, - endEncodedVaa: endEncodedVaaKeypair.publicKey, + startEncodedVaa: startVaa.encodedVaaKeypair.publicKey, + endEncodedVaa: endVaa.encodedVaaKeypair.publicKey, twapUpdateAccount: twapUpdateKeypair.publicKey, treasury: getTreasuryPda(treasuryId, this.receiver.programId), config: getConfigPda(this.receiver.programId), @@ -845,7 +713,7 @@ export class PythSolanaReceiver { }); priceFeedIdToTwapUpdateAccount[ - "0x" + parsePriceFeedMessage(startUpdate.message).feedId.toString("hex") + "0x" + parseTwapMessage(startUpdate.message).feedId.toString("hex") ] = twapUpdateKeypair.publicKey; closeInstructions.push( await this.buildClosePriceUpdateInstruction(twapUpdateKeypair.publicKey) diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts index 0aa9c8277a..8cd6f41554 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts @@ -2,9 +2,15 @@ import { Connection, Keypair, PublicKey } from "@solana/web3.js"; import { WormholeCoreBridgeSolana } from "./idl/wormhole_core_bridge_solana"; import { Program } from "@coral-xyz/anchor"; import { InstructionWithEphemeralSigners } from "@pythnetwork/solana-utils"; -import { WRITE_ENCODED_VAA_COMPUTE_BUDGET } from "./compute_budget"; +import { + INIT_ENCODED_VAA_COMPUTE_BUDGET, + VERIFY_ENCODED_VAA_COMPUTE_BUDGET, + WRITE_ENCODED_VAA_COMPUTE_BUDGET, +} from "./compute_budget"; import { sha256 } from "@noble/hashes/sha256"; import { bs58 } from "@coral-xyz/anchor/dist/cjs/utils/bytes"; +import { AccumulatorUpdateData } from "@pythnetwork/price-service-sdk"; +import { getGuardianSetPda } from "./address"; /** * Get the index of the guardian set that signed a VAA */ @@ -160,3 +166,185 @@ export async function findEncodedVaaAccountsByWriteAuthority( }); return result.map((account) => new PublicKey(account.pubkey)); } + +/** + * Build a set of instructions to write two VAAs (start and end) to encoded VAA accounts. + * + * The instructions are assembled in an opinionated way so that they can be efficiently packed in 3 transactions: + * TX 1. Create, init and write initial data for start VAA + * TX 2. Create, init and write initial data for end VAA + * TX 3. Write remaining data and verify start and end VAAs + * + * @param wormhole The Wormhole program instance + * @param startUpdateData The accumulator update data for the start VAA + * @param endUpdateData The accumulator update data for the end VAA + * @returns Instructions for posting VAAs, closing VAAs, and the VAA data + */ +export async function buildPostEncodedVaasForTwapInstructions( + wormhole: Program, + startUpdateData: AccumulatorUpdateData, + endUpdateData: AccumulatorUpdateData +): Promise<{ + postInstructions: InstructionWithEphemeralSigners[]; + closeInstructions: InstructionWithEphemeralSigners[]; + startVaa: { + trimmedVaa: Buffer; + encodedVaaKeypair: Keypair; + }; + endVaa: { + trimmedVaa: Buffer; + encodedVaaKeypair: Keypair; + }; +}> { + const postInstructions: InstructionWithEphemeralSigners[] = []; + const closeInstructions: InstructionWithEphemeralSigners[] = []; + + const startVaa = await buildInitEncodedVaaAndWriteInitialDataInstructions( + wormhole, + startUpdateData + ); + const endVaa = await buildInitEncodedVaaAndWriteInitialDataInstructions( + wormhole, + endUpdateData + ); + postInstructions.push(...startVaa.postInstructions); + postInstructions.push(...endVaa.postInstructions); + + const startRemainingInstructions = + await buildWriteRemainingDataAndVerifyVaaInstructions(wormhole, startVaa); + const endRemainingInstructions = + await buildWriteRemainingDataAndVerifyVaaInstructions(wormhole, endVaa); + postInstructions.push(...startRemainingInstructions); + postInstructions.push(...endRemainingInstructions); + + // Add close instructions for both VAAs + closeInstructions.push({ + instruction: await wormhole.methods + .closeEncodedVaa() + .accounts({ + encodedVaa: startVaa.encodedVaaKeypair.publicKey, + }) + .instruction(), + signers: [], + computeUnits: 0, + }); + + closeInstructions.push({ + instruction: await wormhole.methods + .closeEncodedVaa() + .accounts({ + encodedVaa: endVaa.encodedVaaKeypair.publicKey, + }) + .instruction(), + signers: [], + computeUnits: 0, + }); + + return { + postInstructions, + closeInstructions, + startVaa, + endVaa, + }; +} + +/** + * Helper function to create, init, and write initial data for a VAA + * @param wormhole The Wormhole program instance + * @param updateData The accumulator update data containing the VAA + * @returns The trimmed VAA, generated keypair, and instructions + */ +async function buildInitEncodedVaaAndWriteInitialDataInstructions( + wormhole: Program, + updateData: AccumulatorUpdateData +): Promise<{ + trimmedVaa: Buffer; + encodedVaaKeypair: Keypair; + postInstructions: InstructionWithEphemeralSigners[]; +}> { + const trimmedVaa = trimSignatures(updateData.vaa, 13); + const encodedVaaKeypair = new Keypair(); + const postInstructions: InstructionWithEphemeralSigners[] = []; + + // Create + postInstructions.push( + await buildEncodedVaaCreateInstruction( + wormhole, + trimmedVaa, + encodedVaaKeypair + ) + ); + + // Init + postInstructions.push({ + instruction: await wormhole.methods + .initEncodedVaa() + .accounts({ + encodedVaa: encodedVaaKeypair.publicKey, + }) + .instruction(), + signers: [], + computeUnits: INIT_ENCODED_VAA_COMPUTE_BUDGET, + }); + + // Write initial data + postInstructions.push({ + instruction: await wormhole.methods + .writeEncodedVaa({ + index: 0, + data: trimmedVaa.subarray(0, VAA_SPLIT_INDEX), + }) + .accounts({ + draftVaa: encodedVaaKeypair.publicKey, + }) + .instruction(), + signers: [], + computeUnits: WRITE_ENCODED_VAA_COMPUTE_BUDGET, + }); + + return { trimmedVaa, encodedVaaKeypair, postInstructions }; +} + +/** + * Helper function to write the remaining data and verify VAA + * @param wormhole The Wormhole program instance + * @param vaa The VAA data containing trimmedVaa and encodedVaaKeypair + * @returns Instructions to write remaining data and verify VAA + */ +async function buildWriteRemainingDataAndVerifyVaaInstructions( + wormhole: Program, + vaa: { trimmedVaa: Buffer; encodedVaaKeypair: Keypair } +): Promise { + const postInstructions: InstructionWithEphemeralSigners[] = []; + + // Write remaining data + postInstructions.push({ + instruction: await wormhole.methods + .writeEncodedVaa({ + index: VAA_SPLIT_INDEX, + data: vaa.trimmedVaa.subarray(VAA_SPLIT_INDEX), + }) + .accounts({ + draftVaa: vaa.encodedVaaKeypair.publicKey, + }) + .instruction(), + signers: [], + computeUnits: WRITE_ENCODED_VAA_COMPUTE_BUDGET, + }); + + // Verify + const guardianSetIndex = getGuardianSetIndex(vaa.trimmedVaa); + postInstructions.push({ + instruction: await wormhole.methods + .verifyEncodedVaaV1() + .accounts({ + guardianSet: getGuardianSetPda(guardianSetIndex, wormhole.programId), + draftVaa: vaa.encodedVaaKeypair.publicKey, + }) + .instruction(), + signers: [], + computeUnits: VERIFY_ENCODED_VAA_COMPUTE_BUDGET, + }); + + return postInstructions; +} From e9445f53f107365ddb0ea10f9d4bb99cb159ac40 Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Thu, 12 Dec 2024 14:31:40 -0800 Subject: [PATCH 04/16] feat: add priceFeedIdToTwapUpdateAccount and update docs --- .../sdk/js/pyth_solana_receiver/README.md | 44 +++++++++ .../examples/post_twap_update.ts | 94 +++++++++++++++++++ .../src/PythSolanaReceiver.ts | 60 +++++++++++- 3 files changed, 196 insertions(+), 2 deletions(-) create mode 100644 target_chains/solana/sdk/js/pyth_solana_receiver/examples/post_twap_update.ts diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/README.md b/target_chains/solana/sdk/js/pyth_solana_receiver/README.md index ff05ca7733..44be24f93b 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/README.md +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/README.md @@ -175,6 +175,50 @@ Price updates are relatively large and can take multiple transactions to post on You can reduce the size of the transaction payload by using `addPostPartiallyVerifiedPriceUpdates` instead of `addPostPriceUpdates`. This method does sacrifice some security however -- please see the method documentation for more details. +### Post a TWAP price update + +TWAP prices updates are calculated using a pair of verifiable cumulative price updates per price feed (the "start" and "end" updates for the given time window), and then performing an averaging calculation on-chain to create the time-weighted average price. + +The flow of using verifying, posting, and consuming these prices are the same as standard price updates. Get the binary update data from Hermes or Benchmarks, verify the VAAs via the Wormhole contract, and post the VAAs to the Pyth receiver contract. After this, you can consume the calculated TWAP posted to the TwapUpdate account. You can also optionally close these ephemeral accounts after the TWAP has been consumed to save on rent. + +```typescript +// Fetch the binary TWAP data from hermes or benchmarks. See Preliminaries section above for more info. +const binary_data_array = ["UE5BV...khz609", "UE5BV...BAg8i6"]; + +// Pass `closeUpdateAccounts: true` to automatically close the TWAP update accounts +// after they're consumed +const transactionBuilder = pythSolanaReceiver.newTransactionBuilder({ + closeUpdateAccounts: false, +}); + +// Post the updates and calculate the TWAP +await transactionBuilder.addPostTwapUpdates(binary_data_array); + +// You can now use the TWAP prices in subsequent instructions +await transactionBuilder.addPriceConsumerInstructions( + async ( + getTwapUpdateAccount: (priceFeedId: string) => PublicKey + ): Promise => { + // Generate instructions here that use the TWAP updates posted above. + // getTwaoUpdateAccount() will give you the account for each TWAP update. + return []; + } +); + +// Send the instructions in the builder in 1 or more transactions. +// The builder will pack the instructions into transactions automatically. +sendTransactions( + await transactionBuilder.buildVersionedTransactions({ + computeUnitPriceMicroLamports: 100000, + tightComputeBudget: true, + }), + pythSolanaReceiver.connection, + pythSolanaReceiver.wallet +); +``` + +See `examples/post_twap_update.ts` for a runnable example of posting a TWAP price update. + ### Get Instructions The `PythTransactionBuilder` class used in the examples above helps craft transactions that update prices and then use them in successive instructions. diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/examples/post_twap_update.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/examples/post_twap_update.ts new file mode 100644 index 0000000000..afe704ad1f --- /dev/null +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/examples/post_twap_update.ts @@ -0,0 +1,94 @@ +import { Connection, Keypair, PublicKey } from "@solana/web3.js"; +import { InstructionWithEphemeralSigners, PythSolanaReceiver } from "../"; +import { Wallet } from "@coral-xyz/anchor"; +import fs from "fs"; +import os from "os"; +import { HermesClient } from "@pythnetwork/hermes-client"; +import { sendTransactions } from "@pythnetwork/solana-utils"; + +// Get price feed ids from https://pyth.network/developers/price-feed-ids#pyth-evm-stable +const SOL_PRICE_FEED_ID = + "0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d"; +const ETH_PRICE_FEED_ID = + "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace"; + +let keypairFile = ""; +if (process.env["SOLANA_KEYPAIR"]) { + keypairFile = process.env["SOLANA_KEYPAIR"]; +} else { + keypairFile = `${os.homedir()}/.config/solana/id.json`; +} + +async function main() { + const connection = new Connection("https://api.devnet.solana.com"); + const keypair = await loadKeypairFromFile(keypairFile); + console.log( + `Sending transactions from account: ${keypair.publicKey.toBase58()}` + ); + const wallet = new Wallet(keypair); + const pythSolanaReceiver = new PythSolanaReceiver({ connection, wallet }); + + // Get the TWAP update from hermes + const twapUpdateData = await getTwapUpdateData(); + console.log(`Posting TWAP update: ${twapUpdateData}`); + + // Similar to price updates, we'll keep closeUpdateAccounts = false for easy exploration + const transactionBuilder = pythSolanaReceiver.newTransactionBuilder({ + closeUpdateAccounts: false, + }); + + // Post the TWAP updates to ephemeral accounts, one per price feed + await transactionBuilder.addPostTwapUpdates(twapUpdateData); + console.log( + "The SOL/USD TWAP update will get posted to:", + transactionBuilder.getTwapUpdateAccount(SOL_PRICE_FEED_ID).toBase58() + ); + + await transactionBuilder.addTwapConsumerInstructions( + async ( + getTwapUpdateAccount: (priceFeedId: string) => PublicKey + ): Promise => { + // You can generate instructions here that use the TWAP updates posted above. + // getTwapUpdateAccount() will give you the account you need. + return []; + } + ); + + // Send the instructions in the builder in 1 or more transactions + sendTransactions( + await transactionBuilder.buildVersionedTransactions({ + computeUnitPriceMicroLamports: 100000, + tightComputeBudget: true, + }), + pythSolanaReceiver.connection, + pythSolanaReceiver.wallet + ); +} + +// Fetch TWAP update data from Hermes +async function getTwapUpdateData() { + const hermesConnection = new HermesClient("https://hermes.pyth.network/", {}); + + // Request TWAP updates for the last hour (3600 seconds) + const response = await hermesConnection.getLatestTwapUpdates( + [SOL_PRICE_FEED_ID, ETH_PRICE_FEED_ID], + 3600, + { encoding: "base64" } + ); + + return response.binary.data; +} + +// Load a solana keypair from an id.json file +async function loadKeypairFromFile(filePath: string): Promise { + try { + const keypairData = JSON.parse( + await fs.promises.readFile(filePath, "utf8") + ); + return Keypair.fromSecretKey(Uint8Array.from(keypairData)); + } catch (error) { + throw new Error(`Error loading keypair from file: ${error}`); + } +} + +main(); diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts index 04a172bc63..bc8bec5cd0 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts @@ -103,6 +103,7 @@ export class PythTransactionBuilder extends TransactionBuilder { readonly pythSolanaReceiver: PythSolanaReceiver; readonly closeInstructions: InstructionWithEphemeralSigners[]; readonly priceFeedIdToPriceUpdateAccount: Record; + readonly priceFeedIdToTwapUpdateAccount: Record; readonly closeUpdateAccounts: boolean; constructor( @@ -118,6 +119,7 @@ export class PythTransactionBuilder extends TransactionBuilder { this.pythSolanaReceiver = pythSolanaReceiver; this.closeInstructions = []; this.priceFeedIdToPriceUpdateAccount = {}; + this.priceFeedIdToTwapUpdateAccount = {}; this.closeUpdateAccounts = config.closeUpdateAccounts ?? true; } @@ -227,7 +229,7 @@ export class PythTransactionBuilder extends TransactionBuilder { ); this.closeInstructions.push(...closeInstructions); Object.assign( - this.priceFeedIdToPriceUpdateAccount, + this.priceFeedIdToTwapUpdateAccount, priceFeedIdToTwapUpdateAccount ); this.addInstructions(postInstructions); @@ -311,6 +313,46 @@ export class PythTransactionBuilder extends TransactionBuilder { ); } + /** + * Add instructions that consume TWAP updates to the builder. + * + * @param getInstructions a function that given a mapping of price feed IDs to TWAP update accounts, generates a series of instructions. TWAP updates get posted to ephemeral accounts and this function allows the user to indicate which accounts in their instruction need to be "replaced" with each price update account. + * If multiple TWAP updates for the same price feed ID are posted with the same builder, the account corresponding to the last update to get posted will be used. + * + * @example + * ```typescript + * ... + * await transactionBuilder.addPostTwapUpdates(twapUpdateData); + * await transactionBuilder.addTwapConsumerInstructions( + * async ( + * getTwapUpdateAccount: ( priceFeedId: string) => PublicKey + * ): Promise => { + * return [ + * { + * instruction: await myFirstPythApp.methods + * .consume() + * .accounts({ + * solTwapUpdate: getTwapUpdateAccount(SOL_PRICE_FEED_ID), + * ethTwapUpdate: getTwapUpdateAccount(ETH_PRICE_FEED_ID), + * }) + * .instruction(), + * signers: [], + * }, + * ]; + * } + * ); + * ``` + */ + async addTwapConsumerInstructions( + getInstructions: ( + getTwapUpdateAccount: (priceFeedId: string) => PublicKey + ) => Promise + ) { + this.addInstructions( + await getInstructions(this.getTwapUpdateAccount.bind(this)) + ); + } + /** Add instructions to close encoded VAA accounts from previous actions. * If you have previously used the PythTransactionBuilder with closeUpdateAccounts set to false or if you posted encoded VAAs but the transaction to close them did not land on-chain, your wallet might own many encoded VAA accounts. * The rent cost for these accounts is 0.008 SOL per encoded VAA account. You can recover this rent calling this function when building a set of transactions. @@ -356,11 +398,25 @@ export class PythTransactionBuilder extends TransactionBuilder { this.priceFeedIdToPriceUpdateAccount[priceFeedId]; if (!priceUpdateAccount) { throw new Error( - `No price update account found for the price feed ID ${priceFeedId}. Make sure to call addPostPriceUpdates or addPostPartiallyVerifiedPriceUpdates or postTwapUpdates before calling this function.` + `No price update account found for the price feed ID ${priceFeedId}. Make sure to call addPostPriceUpdates or addPostPartiallyVerifiedPriceUpdates before calling this function.` ); } return priceUpdateAccount; } + + /** + * This method is used to retrieve the address of the TWAP update account where the TWAP update for a given price feed ID will be posted. + * If multiple updates for the same price feed ID will be posted with the same builder, the address of the account corresponding to the last update to get posted will be returned. + * */ + getTwapUpdateAccount(priceFeedId: string): PublicKey { + const twapUpdateAccount = this.priceFeedIdToTwapUpdateAccount[priceFeedId]; + if (!twapUpdateAccount) { + throw new Error( + `No TWAP update account found for the price feed ID ${priceFeedId}. Make sure to call addPostTwapUpdates before calling this function.` + ); + } + return twapUpdateAccount; + } } /** From 1970a2a4a2344b156bb8132abbef2e206984aab1 Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Thu, 12 Dec 2024 14:48:06 -0800 Subject: [PATCH 05/16] doc: update readme --- target_chains/solana/sdk/js/pyth_solana_receiver/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/README.md b/target_chains/solana/sdk/js/pyth_solana_receiver/README.md index 44be24f93b..964f96c8cd 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/README.md +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/README.md @@ -195,7 +195,7 @@ const transactionBuilder = pythSolanaReceiver.newTransactionBuilder({ await transactionBuilder.addPostTwapUpdates(binary_data_array); // You can now use the TWAP prices in subsequent instructions -await transactionBuilder.addPriceConsumerInstructions( +await transactionBuilder.addTwapConsumerInstructions( async ( getTwapUpdateAccount: (priceFeedId: string) => PublicKey ): Promise => { From 920aa9c5473ec851b10d04b7d7802c63ab98e761 Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Tue, 17 Dec 2024 10:10:14 -0800 Subject: [PATCH 06/16] Apply suggestions from code review Co-authored-by: guibescos <59208140+guibescos@users.noreply.github.com> --- target_chains/solana/sdk/js/pyth_solana_receiver/README.md | 4 ++-- .../sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/README.md b/target_chains/solana/sdk/js/pyth_solana_receiver/README.md index 964f96c8cd..6619f25ea3 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/README.md +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/README.md @@ -179,7 +179,7 @@ This method does sacrifice some security however -- please see the method docume TWAP prices updates are calculated using a pair of verifiable cumulative price updates per price feed (the "start" and "end" updates for the given time window), and then performing an averaging calculation on-chain to create the time-weighted average price. -The flow of using verifying, posting, and consuming these prices are the same as standard price updates. Get the binary update data from Hermes or Benchmarks, verify the VAAs via the Wormhole contract, and post the VAAs to the Pyth receiver contract. After this, you can consume the calculated TWAP posted to the TwapUpdate account. You can also optionally close these ephemeral accounts after the TWAP has been consumed to save on rent. +The flow of using, verifying, posting, and consuming these prices are the same as standard price updates. Get the binary update data from Hermes or Benchmarks, post and verify the VAAs via the Wormhole contract, and verify the updates against the VAAs via Pyth receiver contract. After this, you can consume the calculated TWAP posted to the TwapUpdate account. You can also optionally close these ephemeral accounts after the TWAP has been consumed to save on rent. ```typescript // Fetch the binary TWAP data from hermes or benchmarks. See Preliminaries section above for more info. @@ -200,7 +200,7 @@ await transactionBuilder.addTwapConsumerInstructions( getTwapUpdateAccount: (priceFeedId: string) => PublicKey ): Promise => { // Generate instructions here that use the TWAP updates posted above. - // getTwaoUpdateAccount() will give you the account for each TWAP update. + // getTwapUpdateAccount() will give you the account for each TWAP update. return []; } ); diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts index bc8bec5cd0..fc61b60c3c 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts @@ -215,8 +215,8 @@ export class PythTransactionBuilder extends TransactionBuilder { * * const transactionBuilder = pythSolanaReceiver.newTransactionBuilder({}); * await transactionBuilder.addPostTwapUpdates(priceUpdateData); - * console.log("The SOL/USD price update will get posted to:", transactionBuilder.getPriceUpdateAccount(SOL_PRICE_FEED_ID).toBase58()) - * await transactionBuilder.addPriceConsumerInstructions(...) + * console.log("The SOL/USD price update will get posted to:", transactionBuilder.getTwapUpdateAccount(SOL_PRICE_FEED_ID).toBase58()) + * await transactionBuilder.addTwapConsumerInstructions(...) * ``` */ async addPostTwapUpdates(twapUpdateDataArray: string[]) { From faf0407a77b6681b4283424c6608f993dc17049a Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Tue, 17 Dec 2024 10:12:46 -0800 Subject: [PATCH 07/16] refactor: address pr comments --- .../sdk/js/pyth_solana_receiver/README.md | 4 +- .../src/PythSolanaReceiver.ts | 8 +-- .../sdk/js/pyth_solana_receiver/src/vaa.ts | 71 ++++++++++--------- 3 files changed, 45 insertions(+), 38 deletions(-) diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/README.md b/target_chains/solana/sdk/js/pyth_solana_receiver/README.md index 964f96c8cd..4d7da00779 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/README.md +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/README.md @@ -183,7 +183,7 @@ The flow of using verifying, posting, and consuming these prices are the same as ```typescript // Fetch the binary TWAP data from hermes or benchmarks. See Preliminaries section above for more info. -const binary_data_array = ["UE5BV...khz609", "UE5BV...BAg8i6"]; +const binaryDataArray = ["UE5BV...khz609", "UE5BV...BAg8i6"]; // Pass `closeUpdateAccounts: true` to automatically close the TWAP update accounts // after they're consumed @@ -192,7 +192,7 @@ const transactionBuilder = pythSolanaReceiver.newTransactionBuilder({ }); // Post the updates and calculate the TWAP -await transactionBuilder.addPostTwapUpdates(binary_data_array); +await transactionBuilder.addPostTwapUpdates(binaryDataArray); // You can now use the TWAP prices in subsequent instructions await transactionBuilder.addTwapConsumerInstructions( diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts index bc8bec5cd0..e2fc1ab3ed 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts @@ -733,8 +733,8 @@ export class PythSolanaReceiver { const { postInstructions: buildVaasInstructions, closeInstructions: closeVaasInstructions, - startVaa, - endVaa, + startEncodedVaaAddress, + endEncodedVaaAddress, } = await buildPostEncodedVaasForTwapInstructions( this.wormhole, startUpdateData, @@ -757,8 +757,8 @@ export class PythSolanaReceiver { treasuryId, }) .accounts({ - startEncodedVaa: startVaa.encodedVaaKeypair.publicKey, - endEncodedVaa: endVaa.encodedVaaKeypair.publicKey, + startEncodedVaa: startEncodedVaaAddress, + endEncodedVaa: endEncodedVaaAddress, twapUpdateAccount: twapUpdateKeypair.publicKey, treasury: getTreasuryPda(treasuryId, this.receiver.programId), config: getConfigPda(this.receiver.programId), diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts index 8cd6f41554..7353252ab5 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts @@ -3,6 +3,7 @@ import { WormholeCoreBridgeSolana } from "./idl/wormhole_core_bridge_solana"; import { Program } from "@coral-xyz/anchor"; import { InstructionWithEphemeralSigners } from "@pythnetwork/solana-utils"; import { + CLOSE_ENCODED_VAA_COMPUTE_BUDGET, INIT_ENCODED_VAA_COMPUTE_BUDGET, VERIFY_ENCODED_VAA_COMPUTE_BUDGET, WRITE_ENCODED_VAA_COMPUTE_BUDGET, @@ -187,33 +188,40 @@ export async function buildPostEncodedVaasForTwapInstructions( ): Promise<{ postInstructions: InstructionWithEphemeralSigners[]; closeInstructions: InstructionWithEphemeralSigners[]; - startVaa: { - trimmedVaa: Buffer; - encodedVaaKeypair: Keypair; - }; - endVaa: { - trimmedVaa: Buffer; - encodedVaaKeypair: Keypair; - }; + startEncodedVaaAddress: PublicKey; + endEncodedVaaAddress: PublicKey; }> { const postInstructions: InstructionWithEphemeralSigners[] = []; const closeInstructions: InstructionWithEphemeralSigners[] = []; - - const startVaa = await buildInitEncodedVaaAndWriteInitialDataInstructions( + const { + encodedVaaAddress: startEncodedVaaAddress, + postInstructions: startVaaInstructions, + } = await buildInitEncodedVaaAndWriteInitialDataInstructions( wormhole, startUpdateData ); - const endVaa = await buildInitEncodedVaaAndWriteInitialDataInstructions( + const { + encodedVaaAddress: endEncodedVaaAddress, + postInstructions: endVaaInstructions, + } = await buildInitEncodedVaaAndWriteInitialDataInstructions( wormhole, endUpdateData ); - postInstructions.push(...startVaa.postInstructions); - postInstructions.push(...endVaa.postInstructions); + postInstructions.push(...startVaaInstructions); + postInstructions.push(...endVaaInstructions); const startRemainingInstructions = - await buildWriteRemainingDataAndVerifyVaaInstructions(wormhole, startVaa); + await buildWriteRemainingDataAndVerifyVaaInstructions( + wormhole, + startUpdateData.vaa, + startEncodedVaaAddress + ); const endRemainingInstructions = - await buildWriteRemainingDataAndVerifyVaaInstructions(wormhole, endVaa); + await buildWriteRemainingDataAndVerifyVaaInstructions( + wormhole, + endUpdateData.vaa, + endEncodedVaaAddress + ); postInstructions.push(...startRemainingInstructions); postInstructions.push(...endRemainingInstructions); @@ -222,29 +230,29 @@ export async function buildPostEncodedVaasForTwapInstructions( instruction: await wormhole.methods .closeEncodedVaa() .accounts({ - encodedVaa: startVaa.encodedVaaKeypair.publicKey, + encodedVaa: startEncodedVaaAddress, }) .instruction(), signers: [], - computeUnits: 0, + computeUnits: CLOSE_ENCODED_VAA_COMPUTE_BUDGET, }); closeInstructions.push({ instruction: await wormhole.methods .closeEncodedVaa() .accounts({ - encodedVaa: endVaa.encodedVaaKeypair.publicKey, + encodedVaa: endEncodedVaaAddress, }) .instruction(), signers: [], - computeUnits: 0, + computeUnits: CLOSE_ENCODED_VAA_COMPUTE_BUDGET, }); return { postInstructions, closeInstructions, - startVaa, - endVaa, + startEncodedVaaAddress, + endEncodedVaaAddress, }; } @@ -258,11 +266,9 @@ async function buildInitEncodedVaaAndWriteInitialDataInstructions( wormhole: Program, updateData: AccumulatorUpdateData ): Promise<{ - trimmedVaa: Buffer; - encodedVaaKeypair: Keypair; + encodedVaaAddress: PublicKey; postInstructions: InstructionWithEphemeralSigners[]; }> { - const trimmedVaa = trimSignatures(updateData.vaa, 13); const encodedVaaKeypair = new Keypair(); const postInstructions: InstructionWithEphemeralSigners[] = []; @@ -270,7 +276,7 @@ async function buildInitEncodedVaaAndWriteInitialDataInstructions( postInstructions.push( await buildEncodedVaaCreateInstruction( wormhole, - trimmedVaa, + updateData.vaa, encodedVaaKeypair ) ); @@ -292,7 +298,7 @@ async function buildInitEncodedVaaAndWriteInitialDataInstructions( instruction: await wormhole.methods .writeEncodedVaa({ index: 0, - data: trimmedVaa.subarray(0, VAA_SPLIT_INDEX), + data: updateData.vaa.subarray(0, VAA_SPLIT_INDEX), }) .accounts({ draftVaa: encodedVaaKeypair.publicKey, @@ -302,7 +308,7 @@ async function buildInitEncodedVaaAndWriteInitialDataInstructions( computeUnits: WRITE_ENCODED_VAA_COMPUTE_BUDGET, }); - return { trimmedVaa, encodedVaaKeypair, postInstructions }; + return { encodedVaaAddress: encodedVaaKeypair.publicKey, postInstructions }; } /** @@ -313,7 +319,8 @@ async function buildInitEncodedVaaAndWriteInitialDataInstructions( */ async function buildWriteRemainingDataAndVerifyVaaInstructions( wormhole: Program, - vaa: { trimmedVaa: Buffer; encodedVaaKeypair: Keypair } + verifiedVaa: Buffer, + encodedVaaAddress: PublicKey ): Promise { const postInstructions: InstructionWithEphemeralSigners[] = []; @@ -322,10 +329,10 @@ async function buildWriteRemainingDataAndVerifyVaaInstructions( instruction: await wormhole.methods .writeEncodedVaa({ index: VAA_SPLIT_INDEX, - data: vaa.trimmedVaa.subarray(VAA_SPLIT_INDEX), + data: verifiedVaa.subarray(VAA_SPLIT_INDEX), }) .accounts({ - draftVaa: vaa.encodedVaaKeypair.publicKey, + draftVaa: encodedVaaAddress, }) .instruction(), signers: [], @@ -333,13 +340,13 @@ async function buildWriteRemainingDataAndVerifyVaaInstructions( }); // Verify - const guardianSetIndex = getGuardianSetIndex(vaa.trimmedVaa); + const guardianSetIndex = getGuardianSetIndex(verifiedVaa); postInstructions.push({ instruction: await wormhole.methods .verifyEncodedVaaV1() .accounts({ guardianSet: getGuardianSetPda(guardianSetIndex, wormhole.programId), - draftVaa: vaa.encodedVaaKeypair.publicKey, + draftVaa: encodedVaaAddress, }) .instruction(), signers: [], From 78aee7b26179b3b26e29dbc81c4fb05729f1f36f Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Tue, 17 Dec 2024 11:51:46 -0800 Subject: [PATCH 08/16] refactor: extract shared VAA instruction building into `generateVaaInstructionGroups`, allowing for flexible ix ordering and batching while sharing core logic --- .../src/PythSolanaReceiver.ts | 104 +--- .../sdk/js/pyth_solana_receiver/src/vaa.ts | 456 +++++++++--------- 2 files changed, 243 insertions(+), 317 deletions(-) diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts index 3f9f59a144..23fd5a4775 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts @@ -40,9 +40,9 @@ import { } from "./compute_budget"; import { Wallet } from "@coral-xyz/anchor"; import { - buildEncodedVaaCreateInstruction, + buildCloseEncodedVaaInstruction, + buildPostEncodedVaaInstructions, buildPostEncodedVaasForTwapInstructions, - buildWriteEncodedVaaWithSplitInstructions, findEncodedVaaAccountsByWriteAuthority, getGuardianSetIndex, trimSignatures, @@ -549,77 +549,6 @@ export class PythSolanaReceiver { }; } - /** - * Build a series of helper instructions that post a VAA in an encoded VAA account. This function is bespoke for posting Pyth VAAs and might not work for other usecases. - * - * @param vaa a Wormhole VAA - * @returns `postInstructions`: the instructions to post the VAA - * @returns `encodedVaaAddress`: the address of the encoded VAA account where the VAA will be posted - * @returns `closeInstructions`: the instructions to close the encoded VAA account - */ - async buildPostEncodedVaaInstructions(vaa: Buffer): Promise<{ - postInstructions: InstructionWithEphemeralSigners[]; - encodedVaaAddress: PublicKey; - closeInstructions: InstructionWithEphemeralSigners[]; - }> { - const trimmedVaa = trimSignatures(vaa, 13); - const postInstructions: InstructionWithEphemeralSigners[] = []; - const closeInstructions: InstructionWithEphemeralSigners[] = []; - const encodedVaaKeypair = new Keypair(); - const guardianSetIndex = getGuardianSetIndex(trimmedVaa); - - postInstructions.push( - await buildEncodedVaaCreateInstruction( - this.wormhole, - trimmedVaa, - encodedVaaKeypair - ) - ); - - postInstructions.push({ - instruction: await this.wormhole.methods - .initEncodedVaa() - .accounts({ - encodedVaa: encodedVaaKeypair.publicKey, - }) - .instruction(), - signers: [], - computeUnits: INIT_ENCODED_VAA_COMPUTE_BUDGET, - }); - - const writeInstructions = await buildWriteEncodedVaaWithSplitInstructions( - this.wormhole, - trimmedVaa, - encodedVaaKeypair.publicKey - ); - postInstructions.push(...writeInstructions); - - postInstructions.push({ - instruction: await this.wormhole.methods - .verifyEncodedVaaV1() - .accounts({ - guardianSet: getGuardianSetPda( - guardianSetIndex, - this.wormhole.programId - ), - draftVaa: encodedVaaKeypair.publicKey, - }) - .instruction(), - signers: [], - computeUnits: VERIFY_ENCODED_VAA_COMPUTE_BUDGET, - }); - - closeInstructions.push( - await this.buildCloseEncodedVaaInstruction(encodedVaaKeypair.publicKey) - ); - - return { - postInstructions, - encodedVaaAddress: encodedVaaKeypair.publicKey, - closeInstructions, - }; - } - /** * Build a series of helper instructions that post price updates to the Pyth Solana Receiver program and another series to close the encoded vaa accounts and the price update accounts. * @@ -859,20 +788,19 @@ export class PythSolanaReceiver { } /** - * Build an instruction to close an encoded VAA account, recovering the rent. + * Build a series of helper instructions that post a VAA in an encoded VAA account. This function is bespoke for posting Pyth VAAs and might not work for other usecases. + * + * @param vaa a Wormhole VAA + * @returns `encodedVaaAddress`: the address of the encoded VAA account where the VAA will be posted + * @returns `postInstructions`: the instructions to post the VAA + * @returns `closeInstructions`: the instructions to close the encoded VAA account */ - async buildCloseEncodedVaaInstruction( - encodedVaa: PublicKey - ): Promise { - const instruction = await this.wormhole.methods - .closeEncodedVaa() - .accounts({ encodedVaa }) - .instruction(); - return { - instruction, - signers: [], - computeUnits: CLOSE_ENCODED_VAA_COMPUTE_BUDGET, - }; + async buildPostEncodedVaaInstructions(vaa: Buffer): Promise<{ + encodedVaaAddress: PublicKey; + postInstructions: InstructionWithEphemeralSigners[]; + closeInstructions: InstructionWithEphemeralSigners[]; + }> { + return buildPostEncodedVaaInstructions(this.wormhole, vaa); } /** @@ -884,7 +812,9 @@ export class PythSolanaReceiver { const encodedVaas = await this.findOwnedEncodedVaaAccounts(); const instructions = []; for (const encodedVaa of encodedVaas) { - instructions.push(await this.buildCloseEncodedVaaInstruction(encodedVaa)); + instructions.push( + await buildCloseEncodedVaaInstruction(this.wormhole, encodedVaa) + ); } return instructions.slice(0, maxInstructions); } diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts index 7353252ab5..4242f014a9 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts @@ -32,6 +32,21 @@ export const DEFAULT_REDUCED_GUARDIAN_SET_SIZE = 5; */ export const VAA_SIGNATURE_SIZE = 66; +/** + * The start of the VAA bytes in an encoded VAA account. Before this offset, the account contains a header. + */ +export const VAA_START = 46; + +/** + * Writing the VAA to an encoded VAA account is done in 2 instructions. + * + * The first one writes the first `VAA_SPLIT_INDEX` bytes and the second one writes the rest. + * + * This number was chosen as the biggest number such that one can still call `createInstruction`, `initEncodedVaa` and `writeEncodedVaa` in a single Solana transaction. + * This way, the packing of the instructions to post an encoded vaa is more efficient. + */ +export const VAA_SPLIT_INDEX = 755; + /** * Trim the number of signatures of a VAA. * @@ -61,297 +76,278 @@ export function trimSignatures( } /** - * The start of the VAA bytes in an encoded VAA account. Before this offset, the account contains a header. - */ -export const VAA_START = 46; - -/** - * Build an instruction to create an encoded VAA account. - * - * This is the first step to post a VAA to the Wormhole program. + * Groups of instructions for posting a VAA to the Wormhole program. + * The instructions are split into logical groups to allow flexible ordering and batching: + * - initInstructions: Create and initialize the encoded VAA account + * - writeFirstPartInstructions: Write the first part of the VAA data (up to VAA_SPLIT_INDEX) + * - writeSecondPartAndVerifyInstructions: Write remaining VAA data and verify signatures + * - closeInstructions: Close the encoded VAA account to recover rent */ -export async function buildEncodedVaaCreateInstruction( - wormhole: Program, - vaa: Buffer, - encodedVaaKeypair: Keypair -): Promise { - const encodedVaaSize = vaa.length + VAA_START; - return { - instruction: await wormhole.account.encodedVaa.createInstruction( - encodedVaaKeypair, - encodedVaaSize - ), - signers: [encodedVaaKeypair], - }; +interface VaaInstructionGroups { + initInstructions: InstructionWithEphemeralSigners[]; + writeFirstPartInstructions: InstructionWithEphemeralSigners[]; + writeSecondPartAndVerifyInstructions: InstructionWithEphemeralSigners[]; + closeInstructions: InstructionWithEphemeralSigners[]; + encodedVaaAddress: PublicKey; } -/** - * Writing the VAA to an encoded VAA account is done in 2 instructions. - * - * The first one writes the first `VAA_SPLIT_INDEX` bytes and the second one writes the rest. - * - * This number was chosen as the biggest number such that one can still call `createInstruction`, `initEncodedVaa` and `writeEncodedVaa` in a single Solana transaction. - * This way, the packing of the instructions to post an encoded vaa is more efficient. - */ -export const VAA_SPLIT_INDEX = 755; - -/** - * Build a set of instructions to write a VAA to an encoded VAA account - * This functions returns 2 instructions and splits the VAA in an opinionated way, so that the whole process of posting a VAA can be efficiently packed in the 2 transactions: - * - * TX 1 : `createInstruction` + `initEncodedVaa` + `writeEncodedVaa_1` - * - * TX 2 : `writeEncodedVaa_2` + `verifyEncodedVaaV1` - */ -export async function buildWriteEncodedVaaWithSplitInstructions( +// Core function to generate VAA instruction groups +async function generateVaaInstructionGroups( wormhole: Program, - vaa: Buffer, - draftVaa: PublicKey -): Promise { - return [ + vaa: Buffer +): Promise { + const encodedVaaKeypair = new Keypair(); + + // Create and init instructions + const initInstructions: InstructionWithEphemeralSigners[] = [ + await buildEncodedVaaCreateInstruction(wormhole, vaa, encodedVaaKeypair), { instruction: await wormhole.methods - .writeEncodedVaa({ - index: 0, - data: vaa.subarray(0, VAA_SPLIT_INDEX), - }) + .initEncodedVaa() .accounts({ - draftVaa, + encodedVaa: encodedVaaKeypair.publicKey, }) .instruction(), signers: [], - computeUnits: WRITE_ENCODED_VAA_COMPUTE_BUDGET, + computeUnits: INIT_ENCODED_VAA_COMPUTE_BUDGET, }, + ]; + + // First write instruction + const writeFirstPartInstructions: InstructionWithEphemeralSigners[] = [ { instruction: await wormhole.methods .writeEncodedVaa({ - index: VAA_SPLIT_INDEX, - data: vaa.subarray(VAA_SPLIT_INDEX), + index: 0, + data: vaa.subarray(0, VAA_SPLIT_INDEX), }) .accounts({ - draftVaa, + draftVaa: encodedVaaKeypair.publicKey, }) .instruction(), signers: [], computeUnits: WRITE_ENCODED_VAA_COMPUTE_BUDGET, }, ]; -} -/** - * Find all the encoded VAA accounts that have a given write authority - * @returns a list of the public keys of the encoded VAA accounts - */ -export async function findEncodedVaaAccountsByWriteAuthority( - connection: Connection, - writeAuthority: PublicKey, - wormholeProgramId: PublicKey -): Promise { - const result = await connection.getProgramAccounts(wormholeProgramId, { - filters: [ + // Second write and verify instructions + const writeSecondPartAndVerifyInstructions: InstructionWithEphemeralSigners[] = + [ { - memcmp: { - offset: 0, - bytes: bs58.encode( - Buffer.from(sha256("account:EncodedVaa").slice(0, 8)) - ), - }, + instruction: await wormhole.methods + .writeEncodedVaa({ + index: VAA_SPLIT_INDEX, + data: vaa.subarray(VAA_SPLIT_INDEX), + }) + .accounts({ + draftVaa: encodedVaaKeypair.publicKey, + }) + .instruction(), + signers: [], + computeUnits: WRITE_ENCODED_VAA_COMPUTE_BUDGET, }, { - memcmp: { - offset: 8 + 1, - bytes: bs58.encode(writeAuthority.toBuffer()), - }, + instruction: await wormhole.methods + .verifyEncodedVaaV1() + .accounts({ + guardianSet: getGuardianSetPda( + getGuardianSetIndex(vaa), + wormhole.programId + ), + draftVaa: encodedVaaKeypair.publicKey, + }) + .instruction(), + signers: [], + computeUnits: VERIFY_ENCODED_VAA_COMPUTE_BUDGET, }, - ], - }); - return result.map((account) => new PublicKey(account.pubkey)); + ]; + + // Close instructions + const closeInstructions: InstructionWithEphemeralSigners[] = [ + { + instruction: await wormhole.methods + .closeEncodedVaa() + .accounts({ encodedVaa: encodedVaaKeypair.publicKey }) + .instruction(), + signers: [], + computeUnits: CLOSE_ENCODED_VAA_COMPUTE_BUDGET, + }, + ]; + + return { + initInstructions, + writeFirstPartInstructions, + writeSecondPartAndVerifyInstructions, + closeInstructions, + encodedVaaAddress: encodedVaaKeypair.publicKey, + }; } /** - * Build a set of instructions to write two VAAs (start and end) to encoded VAA accounts. + * Build instructions to post a single VAA to the Wormhole program. + * The instructions are packed efficiently into 2 transactions: + * - TX1: Create, init the encoded VAA account and write the first part of the VAA + * - TX2: Write the second part of the VAA and verify it * - * The instructions are assembled in an opinionated way so that they can be efficiently packed in 3 transactions: - * TX 1. Create, init and write initial data for start VAA - * TX 2. Create, init and write initial data for end VAA - * TX 3. Write remaining data and verify start and end VAAs + * @param wormhole - The Wormhole program instance + * @param vaa - The VAA buffer to post + * @returns {Object} Result containing: + * - encodedVaaAddress: Public key of the encoded VAA account + * - postInstructions: Instructions to post and verify the VAA + * - closeInstructions: Instructions to close the encoded VAA account and recover rent + */ +export async function buildPostEncodedVaaInstructions( + wormhole: Program, + vaa: Buffer +): Promise<{ + encodedVaaAddress: PublicKey; + postInstructions: InstructionWithEphemeralSigners[]; + closeInstructions: InstructionWithEphemeralSigners[]; +}> { + const groups = await generateVaaInstructionGroups(wormhole, vaa); + + // Pack instructions for optimal 2-transaction pattern: + // TX1: init + first write + // TX2: second write + verify + return { + encodedVaaAddress: groups.encodedVaaAddress, + postInstructions: [ + ...groups.initInstructions, + ...groups.writeFirstPartInstructions, + ...groups.writeSecondPartAndVerifyInstructions, + ], + closeInstructions: groups.closeInstructions, + }; +} + +/** + * Build instructions to post two VAAs for TWAP (Time-Weighted Average Price) calculations, + * optimized for 3 transactions. This is specifically designed for posting start and end + * accumulator update VAAs efficiently. + * The instructions are packed into 3 transactions: + * - TX1: Initialize and write first part of start VAA + * - TX2: Initialize and write first part of end VAA + * - TX3: Write second part and verify both VAAs * - * @param wormhole The Wormhole program instance - * @param startUpdateData The accumulator update data for the start VAA - * @param endUpdateData The accumulator update data for the end VAA - * @returns Instructions for posting VAAs, closing VAAs, and the VAA data + * @param wormhole - The Wormhole program instance + * @param startUpdateData - Accumulator update data containing the start VAA + * @param endUpdateData - Accumulator update data containing the end VAA + * @returns {Object} Result containing: + * - startEncodedVaaAddress: Public key of the start VAA account + * - endEncodedVaaAddress: Public key of the end VAA account + * - postInstructions: Instructions to post and verify both VAAs + * - closeInstructions: Instructions to close both encoded VAA accounts */ export async function buildPostEncodedVaasForTwapInstructions( wormhole: Program, startUpdateData: AccumulatorUpdateData, endUpdateData: AccumulatorUpdateData ): Promise<{ - postInstructions: InstructionWithEphemeralSigners[]; - closeInstructions: InstructionWithEphemeralSigners[]; startEncodedVaaAddress: PublicKey; endEncodedVaaAddress: PublicKey; + postInstructions: InstructionWithEphemeralSigners[]; + closeInstructions: InstructionWithEphemeralSigners[]; }> { - const postInstructions: InstructionWithEphemeralSigners[] = []; - const closeInstructions: InstructionWithEphemeralSigners[] = []; - const { - encodedVaaAddress: startEncodedVaaAddress, - postInstructions: startVaaInstructions, - } = await buildInitEncodedVaaAndWriteInitialDataInstructions( + const startGroups = await generateVaaInstructionGroups( wormhole, - startUpdateData + startUpdateData.vaa ); - const { - encodedVaaAddress: endEncodedVaaAddress, - postInstructions: endVaaInstructions, - } = await buildInitEncodedVaaAndWriteInitialDataInstructions( + const endGroups = await generateVaaInstructionGroups( wormhole, - endUpdateData + endUpdateData.vaa ); - postInstructions.push(...startVaaInstructions); - postInstructions.push(...endVaaInstructions); - - const startRemainingInstructions = - await buildWriteRemainingDataAndVerifyVaaInstructions( - wormhole, - startUpdateData.vaa, - startEncodedVaaAddress - ); - const endRemainingInstructions = - await buildWriteRemainingDataAndVerifyVaaInstructions( - wormhole, - endUpdateData.vaa, - endEncodedVaaAddress - ); - postInstructions.push(...startRemainingInstructions); - postInstructions.push(...endRemainingInstructions); - // Add close instructions for both VAAs - closeInstructions.push({ - instruction: await wormhole.methods - .closeEncodedVaa() - .accounts({ - encodedVaa: startEncodedVaaAddress, - }) - .instruction(), - signers: [], - computeUnits: CLOSE_ENCODED_VAA_COMPUTE_BUDGET, - }); - - closeInstructions.push({ - instruction: await wormhole.methods - .closeEncodedVaa() - .accounts({ - encodedVaa: endEncodedVaaAddress, - }) - .instruction(), - signers: [], - computeUnits: CLOSE_ENCODED_VAA_COMPUTE_BUDGET, - }); + // Pack instructions for optimal 3-transaction pattern: + // TX1: start VAA init + first write + // TX2: end VAA init + first write + // TX3: both VAAs second write + verify + const postInstructions = [ + // TX1 + ...startGroups.initInstructions, + ...startGroups.writeFirstPartInstructions, + // TX2 + ...endGroups.initInstructions, + ...endGroups.writeFirstPartInstructions, + // TX3 + ...startGroups.writeSecondPartAndVerifyInstructions, + ...endGroups.writeSecondPartAndVerifyInstructions, + ]; return { + startEncodedVaaAddress: startGroups.encodedVaaAddress, + endEncodedVaaAddress: endGroups.encodedVaaAddress, postInstructions, - closeInstructions, - startEncodedVaaAddress, - endEncodedVaaAddress, + closeInstructions: [ + ...startGroups.closeInstructions, + ...endGroups.closeInstructions, + ], }; } /** - * Helper function to create, init, and write initial data for a VAA - * @param wormhole The Wormhole program instance - * @param updateData The accumulator update data containing the VAA - * @returns The trimmed VAA, generated keypair, and instructions + * Build an instruction to close an encoded VAA account, recovering the rent. */ -async function buildInitEncodedVaaAndWriteInitialDataInstructions( +export async function buildCloseEncodedVaaInstruction( wormhole: Program, - updateData: AccumulatorUpdateData -): Promise<{ - encodedVaaAddress: PublicKey; - postInstructions: InstructionWithEphemeralSigners[]; -}> { - const encodedVaaKeypair = new Keypair(); - const postInstructions: InstructionWithEphemeralSigners[] = []; - - // Create - postInstructions.push( - await buildEncodedVaaCreateInstruction( - wormhole, - updateData.vaa, - encodedVaaKeypair - ) - ); - - // Init - postInstructions.push({ - instruction: await wormhole.methods - .initEncodedVaa() - .accounts({ - encodedVaa: encodedVaaKeypair.publicKey, - }) - .instruction(), - signers: [], - computeUnits: INIT_ENCODED_VAA_COMPUTE_BUDGET, - }); - - // Write initial data - postInstructions.push({ - instruction: await wormhole.methods - .writeEncodedVaa({ - index: 0, - data: updateData.vaa.subarray(0, VAA_SPLIT_INDEX), - }) - .accounts({ - draftVaa: encodedVaaKeypair.publicKey, - }) - .instruction(), + encodedVaa: PublicKey +): Promise { + const instruction = await wormhole.methods + .closeEncodedVaa() + .accounts({ encodedVaa }) + .instruction(); + return { + instruction, signers: [], - computeUnits: WRITE_ENCODED_VAA_COMPUTE_BUDGET, - }); - - return { encodedVaaAddress: encodedVaaKeypair.publicKey, postInstructions }; + computeUnits: CLOSE_ENCODED_VAA_COMPUTE_BUDGET, + }; } /** - * Helper function to write the remaining data and verify VAA - * @param wormhole The Wormhole program instance - * @param vaa The VAA data containing trimmedVaa and encodedVaaKeypair - * @returns Instructions to write remaining data and verify VAA + * Build an instruction to create an encoded VAA account. + * + * This is the first step to post a VAA to the Wormhole program. */ -async function buildWriteRemainingDataAndVerifyVaaInstructions( +export async function buildEncodedVaaCreateInstruction( wormhole: Program, - verifiedVaa: Buffer, - encodedVaaAddress: PublicKey -): Promise { - const postInstructions: InstructionWithEphemeralSigners[] = []; - - // Write remaining data - postInstructions.push({ - instruction: await wormhole.methods - .writeEncodedVaa({ - index: VAA_SPLIT_INDEX, - data: verifiedVaa.subarray(VAA_SPLIT_INDEX), - }) - .accounts({ - draftVaa: encodedVaaAddress, - }) - .instruction(), - signers: [], - computeUnits: WRITE_ENCODED_VAA_COMPUTE_BUDGET, - }); + vaa: Buffer, + encodedVaaKeypair: Keypair +): Promise { + const encodedVaaSize = vaa.length + VAA_START; + return { + instruction: await wormhole.account.encodedVaa.createInstruction( + encodedVaaKeypair, + encodedVaaSize + ), + signers: [encodedVaaKeypair], + }; +} - // Verify - const guardianSetIndex = getGuardianSetIndex(verifiedVaa); - postInstructions.push({ - instruction: await wormhole.methods - .verifyEncodedVaaV1() - .accounts({ - guardianSet: getGuardianSetPda(guardianSetIndex, wormhole.programId), - draftVaa: encodedVaaAddress, - }) - .instruction(), - signers: [], - computeUnits: VERIFY_ENCODED_VAA_COMPUTE_BUDGET, +/** + * Find all the encoded VAA accounts that have a given write authority + * @returns a list of the public keys of the encoded VAA accounts + */ +export async function findEncodedVaaAccountsByWriteAuthority( + connection: Connection, + writeAuthority: PublicKey, + wormholeProgramId: PublicKey +): Promise { + const result = await connection.getProgramAccounts(wormholeProgramId, { + filters: [ + { + memcmp: { + offset: 0, + bytes: bs58.encode( + Buffer.from(sha256("account:EncodedVaa").slice(0, 8)) + ), + }, + }, + { + memcmp: { + offset: 8 + 1, + bytes: bs58.encode(writeAuthority.toBuffer()), + }, + }, + ], }); - - return postInstructions; + return result.map((account) => new PublicKey(account.pubkey)); } From 2cb0b4b1e4e101e80b991bfc86cdefb095b046e6 Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Tue, 17 Dec 2024 11:59:37 -0800 Subject: [PATCH 09/16] refactor: keep buildCloseEncodedVaaInstruction in PythSolanaReceiver for backward compat --- .../pyth_solana_receiver/src/PythSolanaReceiver.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts index 23fd5a4775..6d90944688 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts @@ -803,6 +803,15 @@ export class PythSolanaReceiver { return buildPostEncodedVaaInstructions(this.wormhole, vaa); } + /** + * Build an instruction to close an encoded VAA account, recovering the rent. + */ + async buildCloseEncodedVaaInstruction( + encodedVaa: PublicKey + ): Promise { + return buildCloseEncodedVaaInstruction(this.wormhole, encodedVaa); + } + /** * Build aset of instructions to close all the existing encoded VAA accounts owned by this PythSolanaReceiver's wallet */ @@ -812,9 +821,7 @@ export class PythSolanaReceiver { const encodedVaas = await this.findOwnedEncodedVaaAccounts(); const instructions = []; for (const encodedVaa of encodedVaas) { - instructions.push( - await buildCloseEncodedVaaInstruction(this.wormhole, encodedVaa) - ); + instructions.push(await this.buildCloseEncodedVaaInstruction(encodedVaa)); } return instructions.slice(0, maxInstructions); } From e2df2742ca905d6d83ccfba7c4dcaee7b5e880a9 Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Wed, 18 Dec 2024 10:47:06 -0800 Subject: [PATCH 10/16] fix: update compute budget for postTwapUpdate based on devnet runs --- .../solana/sdk/js/pyth_solana_receiver/src/compute_budget.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/compute_budget.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/compute_budget.ts index 00fdfb76ac..86629be16d 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/compute_budget.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/compute_budget.ts @@ -13,7 +13,7 @@ export const POST_UPDATE_COMPUTE_BUDGET = 35000; /** * A hard-coded budget for the compute units required for the `postUpdate` instruction in the Pyth Solana Receiver program. */ -export const POST_TWAP_UPDATE_COMPUTE_BUDGET = 100_000; +export const POST_TWAP_UPDATE_COMPUTE_BUDGET = 50_000; /** * A hard-coded budget for the compute units required for the `updatePriceFeed` instruction in the Pyth Push Oracle program. */ From e4d4d1bb54e98aa1853765f291d5128023bbc4ce Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Wed, 18 Dec 2024 10:47:44 -0800 Subject: [PATCH 11/16] fix: fix comment --- .../solana/sdk/js/pyth_solana_receiver/src/compute_budget.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/compute_budget.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/compute_budget.ts index 86629be16d..8c310a6718 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/compute_budget.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/compute_budget.ts @@ -11,7 +11,7 @@ export const POST_UPDATE_ATOMIC_COMPUTE_BUDGET = 170000; */ export const POST_UPDATE_COMPUTE_BUDGET = 35000; /** - * A hard-coded budget for the compute units required for the `postUpdate` instruction in the Pyth Solana Receiver program. + * A hard-coded budget for the compute units required for the `postTwapUpdate` instruction in the Pyth Solana Receiver program. */ export const POST_TWAP_UPDATE_COMPUTE_BUDGET = 50_000; /** From 26281338ad02bbcb3461c316e0eaded1a6c0681e Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Wed, 18 Dec 2024 13:29:21 -0800 Subject: [PATCH 12/16] fix: imports, compute budget --- .../sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts index 6d90944688..686669928e 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts @@ -30,13 +30,10 @@ import { parseTwapMessage, } from "@pythnetwork/price-service-sdk"; import { - CLOSE_ENCODED_VAA_COMPUTE_BUDGET, - INIT_ENCODED_VAA_COMPUTE_BUDGET, + POST_TWAP_UPDATE_COMPUTE_BUDGET, POST_UPDATE_ATOMIC_COMPUTE_BUDGET, POST_UPDATE_COMPUTE_BUDGET, UPDATE_PRICE_FEED_COMPUTE_BUDGET, - VERIFY_ENCODED_VAA_COMPUTE_BUDGET, - WRITE_ENCODED_VAA_COMPUTE_BUDGET, } from "./compute_budget"; import { Wallet } from "@coral-xyz/anchor"; import { @@ -694,7 +691,7 @@ export class PythSolanaReceiver { }) .instruction(), signers: [twapUpdateKeypair], - computeUnits: POST_UPDATE_COMPUTE_BUDGET, + computeUnits: POST_TWAP_UPDATE_COMPUTE_BUDGET, }); priceFeedIdToTwapUpdateAccount[ From 36c21a2bfb7c8bdb2259f261707c7e5072cd1a60 Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Wed, 18 Dec 2024 13:56:43 -0800 Subject: [PATCH 13/16] fix: add reclaimTwapRent to recv contract --- .../programs/pyth-solana-receiver/src/lib.rs | 11 +++++++ .../src/PythSolanaReceiver.ts | 15 ++++++++- .../src/idl/pyth_solana_receiver.ts | 32 +++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) diff --git a/target_chains/solana/programs/pyth-solana-receiver/src/lib.rs b/target_chains/solana/programs/pyth-solana-receiver/src/lib.rs index d242f8bde9..4377f230f2 100644 --- a/target_chains/solana/programs/pyth-solana-receiver/src/lib.rs +++ b/target_chains/solana/programs/pyth-solana-receiver/src/lib.rs @@ -283,6 +283,9 @@ pub mod pyth_solana_receiver { pub fn reclaim_rent(_ctx: Context) -> Result<()> { Ok(()) } + pub fn reclaim_twap_rent(_ctx: Context) -> Result<()> { + Ok(()) + } } #[derive(Accounts)] @@ -393,6 +396,14 @@ pub struct ReclaimRent<'info> { pub price_update_account: Account<'info, PriceUpdateV2>, } +#[derive(Accounts)] +pub struct ReclaimTwapRent<'info> { + #[account(mut)] + pub payer: Signer<'info>, + #[account(mut, close = payer, constraint = twap_update_account.write_authority == payer.key() @ ReceiverError::WrongWriteAuthority)] + pub twap_update_account: Account<'info, TwapUpdate>, +} + fn deserialize_guardian_set_checked( account_info: &AccountInfo<'_>, wormhole: &Pubkey, diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts index 686669928e..c6f4bd88e2 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/PythSolanaReceiver.ts @@ -698,7 +698,7 @@ export class PythSolanaReceiver { "0x" + parseTwapMessage(startUpdate.message).feedId.toString("hex") ] = twapUpdateKeypair.publicKey; closeInstructions.push( - await this.buildClosePriceUpdateInstruction(twapUpdateKeypair.publicKey) + await this.buildCloseTwapUpdateInstruction(twapUpdateKeypair.publicKey) ); } @@ -836,6 +836,19 @@ export class PythSolanaReceiver { return { instruction, signers: [] }; } + /** + * Build an instruction to close a TWAP update account, recovering the rent. + */ + async buildCloseTwapUpdateInstruction( + twapUpdateAccount: PublicKey + ): Promise { + const instruction = await this.receiver.methods + .reclaimTwapRent() + .accounts({ twapUpdateAccount }) + .instruction(); + return { instruction, signers: [] }; + } + /** * Returns a set of versioned transactions that contain the provided instructions in the same order and with efficient batching */ diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/idl/pyth_solana_receiver.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/idl/pyth_solana_receiver.ts index 942a824265..5d8e0de72a 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/idl/pyth_solana_receiver.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/idl/pyth_solana_receiver.ts @@ -350,6 +350,22 @@ export type PythSolanaReceiver = { } ]; args: []; + }, + { + name: "reclaimTwapRent"; + accounts: [ + { + name: "payer"; + isMut: true; + isSigner: true; + }, + { + name: "twapUpdateAccount"; + isMut: true; + isSigner: false; + } + ]; + args: []; } ]; accounts: [ @@ -1118,6 +1134,22 @@ export const IDL: PythSolanaReceiver = { ], args: [], }, + { + name: "reclaimTwapRent", + accounts: [ + { + name: "payer", + isMut: true, + isSigner: true, + }, + { + name: "twapUpdateAccount", + isMut: true, + isSigner: false, + }, + ], + args: [], + }, ], accounts: [ { From 469978026da90995063e6edd751d2a0aa0462b2f Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Wed, 18 Dec 2024 16:35:51 -0800 Subject: [PATCH 14/16] fix(cli): increase compute budget to avoid serde issues, add print statements --- target_chains/solana/cli/src/main.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/target_chains/solana/cli/src/main.rs b/target_chains/solana/cli/src/main.rs index 2d458a1ab8..bf5b7568fb 100644 --- a/target_chains/solana/cli/src/main.rs +++ b/target_chains/solana/cli/src/main.rs @@ -431,7 +431,10 @@ pub fn process_write_encoded_vaa_and_post_price_update( update_instructions, &vec![payer, &price_update_keypair], )?; - + println!( + "Price update posted to account: {}", + price_update_keypair.pubkey() + ); Ok(price_update_keypair.pubkey()) } @@ -483,7 +486,7 @@ pub fn process_write_encoded_vaa_and_post_twap_update( )?; // Transaction 3: Write remaining VAA data and verify both VAAs - let mut verify_instructions = vec![ComputeBudgetInstruction::set_compute_unit_limit(400_000)]; + let mut verify_instructions = vec![ComputeBudgetInstruction::set_compute_unit_limit(850_000)]; verify_instructions.extend(write_remaining_data_and_verify_vaa_ixs( &payer.pubkey(), start_vaa, @@ -518,6 +521,10 @@ pub fn process_write_encoded_vaa_and_post_twap_update( post_instructions, &vec![payer, &twap_update_keypair], )?; + println!( + "TWAP update posted to account: {}", + twap_update_keypair.pubkey() + ); Ok(twap_update_keypair.pubkey()) } From 404c21adb52de3eeae96b1142f19d6cfa8d67c58 Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Thu, 19 Dec 2024 09:06:28 -0800 Subject: [PATCH 15/16] Apply suggestions from code review Co-authored-by: guibescos <59208140+guibescos@users.noreply.github.com> --- target_chains/solana/sdk/js/pyth_solana_receiver/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/README.md b/target_chains/solana/sdk/js/pyth_solana_receiver/README.md index 5642c58134..88b987668c 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/README.md +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/README.md @@ -177,9 +177,9 @@ This method does sacrifice some security however -- please see the method docume ### Post a TWAP price update -TWAP prices updates are calculated using a pair of verifiable cumulative price updates per price feed (the "start" and "end" updates for the given time window), and then performing an averaging calculation on-chain to create the time-weighted average price. +TWAP price updates are calculated using a pair of verifiable cumulative price updates per price feed (the "start" and "end" updates for the given time window), and then performing an averaging calculation on-chain to create the time-weighted average price. -The flow of using, verifying, posting, and consuming these prices are the same as standard price updates. Get the binary update data from Hermes or Benchmarks, post and verify the VAAs via the Wormhole contract, and verify the updates against the VAAs via Pyth receiver contract. After this, you can consume the calculated TWAP posted to the TwapUpdate account. You can also optionally close these ephemeral accounts after the TWAP has been consumed to save on rent. +The flow of using, verifying, posting, and consuming these prices is the same as standard price updates. Get the binary update data from Hermes or Benchmarks, post and verify the VAAs via the Wormhole contract, and verify the updates against the VAAs via Pyth receiver contract. After this, you can consume the calculated TWAP posted to the TwapUpdate account. You can also optionally close these ephemeral accounts after the TWAP has been consumed to save on rent. ```typescript // Fetch the binary TWAP data from hermes or benchmarks. See Preliminaries section above for more info. From 200747f200e8902fcd15f3801f5dce9cc0aa46de Mon Sep 17 00:00:00 2001 From: Tejas Badadare Date: Thu, 19 Dec 2024 11:14:29 -0800 Subject: [PATCH 16/16] doc: update docstring --- target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts b/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts index 4242f014a9..18164cb7b9 100644 --- a/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts +++ b/target_chains/solana/sdk/js/pyth_solana_receiver/src/vaa.ts @@ -185,7 +185,7 @@ async function generateVaaInstructionGroups( /** * Build instructions to post a single VAA to the Wormhole program. - * The instructions are packed efficiently into 2 transactions: + * The instructions can be packed efficiently into 2 transactions: * - TX1: Create, init the encoded VAA account and write the first part of the VAA * - TX2: Write the second part of the VAA and verify it *