diff --git a/packages/solana/package.json b/packages/solana/package.json index e3bd7f9..36e7dd6 100644 --- a/packages/solana/package.json +++ b/packages/solana/package.json @@ -14,7 +14,8 @@ "test": "vitest" }, "dependencies": { - "@chainflip/utils": "0.4.0" + "@chainflip/utils": "0.4.0", + "@solana/web3.js": "^1.95.8" }, "files": [ "dist", diff --git a/packages/solana/src/__test__/deposit.test.ts b/packages/solana/src/__test__/deposit.test.ts new file mode 100644 index 0000000..39047b7 --- /dev/null +++ b/packages/solana/src/__test__/deposit.test.ts @@ -0,0 +1,476 @@ +import { + type ConfirmedSignatureInfo, + Connection, + MessageV0, + PublicKey, + type VersionedTransactionResponse, +} from '@solana/web3.js'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { findSolanaDepositSignature } from '../deposit'; + +vi.mock('@solana/web3.js', async (importOriginal) => { + const actual = await importOriginal(); + + const ConnectionMock = vi.fn(); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + ConnectionMock.prototype.getSignaturesForAddress = vi.fn(); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + ConnectionMock.prototype.getTransactions = vi.fn(); + + // @ts-expect-error typescript cannot infer the type of actual + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return { ...actual, Connection: ConnectionMock }; +}); + +const transactions: Record = { + '3zC67SpVaUAMXitSZw6Z1HtTPFtEEeKdJ2cAkHGAPYyBdWkbbT3RRva9Do6SbQjk8Zs8oHJrprV8txdc3YgBp33x': { + blockTime: 1733324203, + meta: { + computeUnitsConsumed: 450, + err: null, + fee: 45000, + innerInstructions: null, + loadedAddresses: { + readonly: [], + writable: [], + }, + logMessages: null, + postBalances: [13136009466, 6000000000, 1, 1], + postTokenBalances: [], + preBalances: [19136054466, 0, 1, 1], + preTokenBalances: [], + }, + slot: 305374576, + transaction: { + message: new MessageV0({ + header: { + numReadonlySignedAccounts: 0, + numReadonlyUnsignedAccounts: 2, + numRequiredSignatures: 1, + }, + staticAccountKeys: [ + new PublicKey('HGDmbWtWotT3YH4SMinHsJ1QjziYtpHPHxBiy63tGFpn'), + new PublicKey('8z1bM4fWJwvz6shKBvdfFBtW1mNAvhZ6dw8TJo7ZxP4R'), + new PublicKey('11111111111111111111111111111111'), + new PublicKey('ComputeBudget111111111111111111111111111111'), + ], + recentBlockhash: 'HPn7zUWcbtNDGMUJoH9t6m7c33LA6MPmnRWCiZErHhLG', + compiledInstructions: [ + { + accountKeyIndexes: [], + data: Uint8Array.from('3QAwFKa3MJAs'), + programIdIndex: 3, + }, + { + accountKeyIndexes: [], + data: Uint8Array.from('Fj2Eoy'), + programIdIndex: 3, + }, + { + accountKeyIndexes: [0, 1], + data: Uint8Array.from('3Bxs3zyoqgkX7Cqd'), + programIdIndex: 2, + }, + ], + addressTableLookups: [], + }), + signatures: [ + '3zC67SpVaUAMXitSZw6Z1HtTPFtEEeKdJ2cAkHGAPYyBdWkbbT3RRva9Do6SbQjk8Zs8oHJrprV8txdc3YgBp33x', + ], + }, + version: 'legacy', + }, + '546q8d7bhBaNBLL8jj3mPHeN3DGD3n1Y2qyhAVeuwsuPRNj8UVFerB3DRzh4sDS3ftaKBtoSiJsXMgx6aHTNhwEr': { + blockTime: 1733324356, + meta: { + computeUnitsConsumed: 300, + err: null, + fee: 10000, + innerInstructions: null, + loadedAddresses: { + readonly: [], + writable: [], + }, + logMessages: null, + postBalances: [3675268583, 0, 6000001000, 1], + postTokenBalances: [], + preBalances: [3675279583, 0, 6000000000, 1], + preTokenBalances: [], + }, + slot: 305374928, + transaction: { + message: new MessageV0({ + header: { + numReadonlySignedAccounts: 0, + numReadonlyUnsignedAccounts: 1, + numRequiredSignatures: 2, + }, + staticAccountKeys: [ + new PublicKey('7N6ZMcfhSxsgfNgYFN6TvVNXXTPsjGkiTL1Hjeu87123'), + new PublicKey('HjTk9xBQdywVrX12qozPtRyc2sKAWXjK51Jsv7kkGFpn'), + new PublicKey('8z1bM4fWJwvz6shKBvdfFBtW1mNAvhZ6dw8TJo7ZxP4R'), + new PublicKey('11111111111111111111111111111111'), + ], + recentBlockhash: '2XabT5WpyP5MCqAt6fVqYji3guCHMV9xw8JqMFguyJLC', + compiledInstructions: [ + { + accountKeyIndexes: [0, 1], + data: Uint8Array.from('3Bxs4ffTu9T19DNF'), + programIdIndex: 3, + }, + { + accountKeyIndexes: [1, 2], + data: Uint8Array.from('3Bxs4ffTu9T19DNF'), + programIdIndex: 3, + }, + ], + addressTableLookups: [], + }), + signatures: [ + '546q8d7bhBaNBLL8jj3mPHeN3DGD3n1Y2qyhAVeuwsuPRNj8UVFerB3DRzh4sDS3ftaKBtoSiJsXMgx6aHTNhwEr', + '4jV5xFtVRV89CL4dztJX6iMXzE5E5bziSM8rEpMroidiiLNt16PJMF3zSNb8B2UPL226GzdbFsNPcngFemHEtZAz', + ], + }, + version: 'legacy', + }, + YvQLEdk8ZP4MQeDk657bXyyj7xtEGtUcPMrdAM5546F9QAaS87WGniitisbUy1E68aiKXvPFXvw3zPdJk1UcWjE: { + blockTime: 1733301977, + meta: { + computeUnitsConsumed: 25639, + err: null, + fee: 25000, + innerInstructions: null, + loadedAddresses: { + readonly: [], + writable: [], + }, + logMessages: null, + postBalances: [ + 1571749976, 2039280, 2039280, 1, 731913600, 0, 321908068466, 1, 934087680, 1009200, + ], + postTokenBalances: [ + { + accountIndex: 1, + mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', + owner: 'EqkWgheG46WRqAR5Tsi3x7PvgHcW1gq8gPaN7JLtXri4', + programId: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', + uiTokenAmount: { + amount: '100000000', + decimals: 6, + uiAmount: 100, + uiAmountString: '100', + }, + }, + { + accountIndex: 2, + mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', + owner: '67ta16PhyLVxcDNM9XpJMbpougPCPm1tQvZvkT75GfiP', + programId: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', + uiTokenAmount: { + amount: '80805910', + decimals: 6, + uiAmount: 80.80591, + uiAmountString: '80.80591', + }, + }, + ], + preBalances: [1573814256, 0, 2039280, 1, 731913600, 0, 321908068466, 1, 934087680, 1009200], + preTokenBalances: [ + { + accountIndex: 1, + mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', + owner: 'EqkWgheG46WRqAR5Tsi3x7PvgHcW1gq8gPaN7JLtXri4', + programId: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', + uiTokenAmount: { + amount: '0', + decimals: 6, + uiAmount: 0, + uiAmountString: '0', + }, + }, + { + accountIndex: 2, + mint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', + owner: '67ta16PhyLVxcDNM9XpJMbpougPCPm1tQvZvkT75GfiP', + programId: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', + uiTokenAmount: { + amount: '180805910', + decimals: 6, + uiAmount: 180.80591, + uiAmountString: '180.80591', + }, + }, + ], + }, + slot: 305320588, + transaction: { + message: new MessageV0({ + header: { + numReadonlySignedAccounts: 0, + numReadonlyUnsignedAccounts: 7, + numRequiredSignatures: 1, + }, + staticAccountKeys: [ + new PublicKey('67ta16PhyLVxcDNM9XpJMbpougPCPm1tQvZvkT75GfiP'), + new PublicKey('7PuSGgyanuGbrEcsDrb6awuSNbmJqsxuPexjQ6PQPmDR'), + new PublicKey('EeBCFzEPXootrQnrKfDQsZbK7f1WqbqQVvE5UWL3C97T'), + new PublicKey('ComputeBudget111111111111111111111111111111'), + new PublicKey('ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'), + new PublicKey('EqkWgheG46WRqAR5Tsi3x7PvgHcW1gq8gPaN7JLtXri4'), + new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'), + new PublicKey('11111111111111111111111111111111'), + new PublicKey('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'), + new PublicKey('SysvarRent111111111111111111111111111111111'), + ], + recentBlockhash: 'Bu6e6utVPYsR5Z6sZJjcKxVKseaaQhYfLDYLAV3YWj8y', + compiledInstructions: [ + { + programIdIndex: 3, + accountKeyIndexes: [], + data: Uint8Array.from([3, 160, 134, 1, 0, 0, 0, 0, 0]), + }, + { + programIdIndex: 3, + accountKeyIndexes: [], + data: Uint8Array.from([2, 64, 13, 3, 0]), + }, + { + programIdIndex: 4, + accountKeyIndexes: [0, 1, 5, 6, 7, 8, 9], + data: Uint8Array.from([]), + }, + { + programIdIndex: 8, + accountKeyIndexes: [2, 1, 0], + data: Uint8Array.from([3, 0, 225, 245, 5, 0, 0, 0, 0]), + }, + ], + addressTableLookups: [], + }), + signatures: [ + 'YvQLEdk8ZP4MQeDk657bXyyj7xtEGtUcPMrdAM5546F9QAaS87WGniitisbUy1E68aiKXvPFXvw3zPdJk1UcWjE', + ], + }, + version: 0, + }, +}; + +const solDepositSignatures: ConfirmedSignatureInfo[] = [ + { + blockTime: 1733324375, + confirmationStatus: 'finalized', + err: null, + memo: null, + signature: + '2hibMzUfqY18nB68Di1sy6zo55PuWgtVxNLaTck3WJP7VUyCKPdNExGaa6oCD5tafcYe1kuhaLdWLWSug92Bc3aM', + slot: 305374972, + }, + { + blockTime: 1733324356, + confirmationStatus: 'finalized', + err: null, + memo: null, + signature: + '546q8d7bhBaNBLL8jj3mPHeN3DGD3n1Y2qyhAVeuwsuPRNj8UVFerB3DRzh4sDS3ftaKBtoSiJsXMgx6aHTNhwEr', + slot: 305374928, + }, + { + blockTime: 1733324203, + confirmationStatus: 'finalized', + err: null, + memo: null, + signature: + '3zC67SpVaUAMXitSZw6Z1HtTPFtEEeKdJ2cAkHGAPYyBdWkbbT3RRva9Do6SbQjk8Zs8oHJrprV8txdc3YgBp33x', + slot: 305374576, + }, +]; + +const usdcDepositSignatures: ConfirmedSignatureInfo[] = [ + { + blockTime: 1733302161, + confirmationStatus: 'finalized', + err: null, + memo: null, + signature: + '4TgKWMLrWAiw8muqjaABqqRgNWKjaW2f3iyMXixGTqfguU6o3QirMyJcoBKsPsi4myXpLcMTcqH3BEHbBxAK5sSs', + slot: 305321032, + }, + { + blockTime: 1733301977, + confirmationStatus: 'finalized', + err: null, + memo: null, + signature: + 'YvQLEdk8ZP4MQeDk657bXyyj7xtEGtUcPMrdAM5546F9QAaS87WGniitisbUy1E68aiKXvPFXvw3zPdJk1UcWjE', + slot: 305320588, + }, +]; + +describe('deposit', () => { + beforeEach(() => { + vi.mocked(Connection.prototype.getTransactions).mockImplementation((signatures) => + Promise.resolve(signatures.map((sig) => transactions[sig])), + ); + }); + + it('finds sol deposit in sol signatures', async () => { + vi.mocked(Connection.prototype.getSignaturesForAddress).mockResolvedValue(solDepositSignatures); + + // https://scan.chainflip.io/events/5561277-2061 + const result = await findSolanaDepositSignature( + 'https://test.solana.com', + null, + '8z1bM4fWJwvz6shKBvdfFBtW1mNAvhZ6dw8TJo7ZxP4R', + 6000000000n, + 0, + 305374642, + ); + + expect(result).toEqual( + '3zC67SpVaUAMXitSZw6Z1HtTPFtEEeKdJ2cAkHGAPYyBdWkbbT3RRva9Do6SbQjk8Zs8oHJrprV8txdc3YgBp33x', + ); + expect(Connection.prototype.getTransactions).toHaveBeenCalledWith( + ['3zC67SpVaUAMXitSZw6Z1HtTPFtEEeKdJ2cAkHGAPYyBdWkbbT3RRva9Do6SbQjk8Zs8oHJrprV8txdc3YgBp33x'], + { maxSupportedTransactionVersion: 0 }, + ); + }); + + it('finds sol deposit in sol signatures with exact slot', async () => { + vi.mocked(Connection.prototype.getSignaturesForAddress).mockResolvedValue(solDepositSignatures); + + // https://scan.chainflip.io/events/5561277-2061 + const result = await findSolanaDepositSignature( + 'https://user:password@test.solana.com', + null, + '8z1bM4fWJwvz6shKBvdfFBtW1mNAvhZ6dw8TJo7ZxP4R', + 6000000000n, + 305374576, + 305374576, + ); + + expect(result).toEqual( + '3zC67SpVaUAMXitSZw6Z1HtTPFtEEeKdJ2cAkHGAPYyBdWkbbT3RRva9Do6SbQjk8Zs8oHJrprV8txdc3YgBp33x', + ); + expect(Connection).toHaveBeenCalledWith('https://test.solana.com/', { + httpHeaders: { + Authorization: 'Basic dXNlcjpwYXNzd29yZA==', + }, + }); + expect(Connection.prototype.getTransactions).toHaveBeenCalledWith( + ['3zC67SpVaUAMXitSZw6Z1HtTPFtEEeKdJ2cAkHGAPYyBdWkbbT3RRva9Do6SbQjk8Zs8oHJrprV8txdc3YgBp33x'], + { maxSupportedTransactionVersion: 0 }, + ); + }); + + it('finds sol deposit in sol signatures with spam tx', async () => { + vi.mocked(Connection.prototype.getSignaturesForAddress).mockResolvedValue(solDepositSignatures); + + // https://scan.chainflip.io/events/5561277-2061 + const result = await findSolanaDepositSignature( + 'https://test.solana.com', + null, + '8z1bM4fWJwvz6shKBvdfFBtW1mNAvhZ6dw8TJo7ZxP4R', + 6000001000n, + 0, + 305374958, + ); + + expect(result).toEqual( + '3zC67SpVaUAMXitSZw6Z1HtTPFtEEeKdJ2cAkHGAPYyBdWkbbT3RRva9Do6SbQjk8Zs8oHJrprV8txdc3YgBp33x', + ); + expect(Connection).toHaveBeenCalledWith('https://test.solana.com/', { + httpHeaders: {}, + }); + expect(Connection.prototype.getTransactions).toHaveBeenCalledWith( + [ + '546q8d7bhBaNBLL8jj3mPHeN3DGD3n1Y2qyhAVeuwsuPRNj8UVFerB3DRzh4sDS3ftaKBtoSiJsXMgx6aHTNhwEr', + '3zC67SpVaUAMXitSZw6Z1HtTPFtEEeKdJ2cAkHGAPYyBdWkbbT3RRva9Do6SbQjk8Zs8oHJrprV8txdc3YgBp33x', + ], + { maxSupportedTransactionVersion: 0 }, + ); + }); + + it('does not find sol deposit for wrong address', async () => { + vi.mocked(Connection.prototype.getSignaturesForAddress).mockResolvedValue(solDepositSignatures); + + const result = await findSolanaDepositSignature( + 'https://test.solana.com', + null, + '97R4UGhdj7WqXA5AhfQqxM2CGDscJ5meFC8ZJvSoNUBs', + 6000000000n, + 305374576, + 305374576, + ); + + expect(result).toEqual(undefined); + expect(Connection.prototype.getTransactions).toHaveBeenCalledWith( + ['3zC67SpVaUAMXitSZw6Z1HtTPFtEEeKdJ2cAkHGAPYyBdWkbbT3RRva9Do6SbQjk8Zs8oHJrprV8txdc3YgBp33x'], + { maxSupportedTransactionVersion: 0 }, + ); + }); + + it('does not find usdc deposit in sol signatures', async () => { + vi.mocked(Connection.prototype.getSignaturesForAddress).mockResolvedValue(solDepositSignatures); + + const result = await findSolanaDepositSignature( + 'https://test.solana.com', + 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', + '8z1bM4fWJwvz6shKBvdfFBtW1mNAvhZ6dw8TJo7ZxP4R', + 6000000000n, + 0, + 305374642, + ); + + expect(result).toEqual(undefined); + expect(Connection.prototype.getTransactions).toHaveBeenCalledWith( + ['3zC67SpVaUAMXitSZw6Z1HtTPFtEEeKdJ2cAkHGAPYyBdWkbbT3RRva9Do6SbQjk8Zs8oHJrprV8txdc3YgBp33x'], + { maxSupportedTransactionVersion: 0 }, + ); + }); + + it('finds usdc deposit in usdc signatures', async () => { + vi.mocked(Connection.prototype.getSignaturesForAddress).mockResolvedValue( + usdcDepositSignatures, + ); + + // https://scan.chainflip.io/events/5557575-2017 + const result = await findSolanaDepositSignature( + 'https://test.solana.com', + 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', + 'EqkWgheG46WRqAR5Tsi3x7PvgHcW1gq8gPaN7JLtXri4', + 100000000n, + 0, + 305320684, + ); + + expect(result).toEqual( + 'YvQLEdk8ZP4MQeDk657bXyyj7xtEGtUcPMrdAM5546F9QAaS87WGniitisbUy1E68aiKXvPFXvw3zPdJk1UcWjE', + ); + expect(Connection.prototype.getTransactions).toHaveBeenCalledWith( + ['YvQLEdk8ZP4MQeDk657bXyyj7xtEGtUcPMrdAM5546F9QAaS87WGniitisbUy1E68aiKXvPFXvw3zPdJk1UcWjE'], + { maxSupportedTransactionVersion: 0 }, + ); + }); + + it('does not find usdc deposit for wrong address', async () => { + vi.mocked(Connection.prototype.getSignaturesForAddress).mockResolvedValue( + usdcDepositSignatures, + ); + + // https://scan.chainflip.io/events/5557575-2017 + const result = await findSolanaDepositSignature( + 'https://test.solana.com', + 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', + '97R4UGhdj7WqXA5AhfQqxM2CGDscJ5meFC8ZJvSoNUBs', + 100000000n, + 0, + 305320684, + ); + + expect(result).toEqual(undefined); + expect(Connection.prototype.getTransactions).toHaveBeenCalledWith( + ['YvQLEdk8ZP4MQeDk657bXyyj7xtEGtUcPMrdAM5546F9QAaS87WGniitisbUy1E68aiKXvPFXvw3zPdJk1UcWjE'], + { maxSupportedTransactionVersion: 0 }, + ); + }); +}); diff --git a/packages/solana/src/deposit.ts b/packages/solana/src/deposit.ts new file mode 100644 index 0000000..0a9813e --- /dev/null +++ b/packages/solana/src/deposit.ts @@ -0,0 +1,80 @@ +import { isNotNullish } from '@chainflip/utils/guard'; +import { Connection, PublicKey, type VersionedTransactionResponse } from '@solana/web3.js'; + +const getSolanaConnection = (solanaEndpoint: string) => { + const rpcUrl = new URL(solanaEndpoint); + + let authorizationHeader: string | undefined; + if (rpcUrl.username || rpcUrl.password) { + authorizationHeader = `Basic ${Buffer.from(`${rpcUrl.username}:${rpcUrl.password}`).toString('base64')}`; + rpcUrl.username = ''; + rpcUrl.password = ''; + } + + return new Connection(rpcUrl.toString(), { + httpHeaders: authorizationHeader ? { Authorization: authorizationHeader } : {}, + }); +}; + +const getTransferAmount = ( + tx: VersionedTransactionResponse, + destinationAddress: string, + tokenMintAddress: string | null, +) => { + if (tokenMintAddress) { + const preBalance = BigInt( + tx.meta?.preTokenBalances?.find( + (b) => b.mint === tokenMintAddress && b.owner === destinationAddress, + )?.uiTokenAmount.amount ?? 0, + ); + const postBalance = BigInt( + tx.meta?.postTokenBalances?.find( + (b) => b.mint === tokenMintAddress && b.owner === destinationAddress, + )?.uiTokenAmount.amount ?? 0, + ); + + return postBalance - preBalance; + } + + const depositPublicKey = new PublicKey(destinationAddress); + const accountIndex = tx.transaction.message.staticAccountKeys.findIndex((key) => + key.equals(depositPublicKey), + ); + + const preBalance = tx.meta?.preBalances[accountIndex] ?? 0; + const postBalance = tx.meta?.postBalances[accountIndex] ?? 0; + + return BigInt(postBalance - preBalance); +}; + +export const findSolanaDepositSignature = async ( + solanaEndpoint: string, + tokenAddress: string | null, + depositAddress: string, + depositAmount: bigint, + minSlot: number, + maxSlot: number, +) => { + const connection = getSolanaConnection(solanaEndpoint); + const allSignatures = await connection.getSignaturesForAddress(new PublicKey(depositAddress)); + const filteredSignatures = allSignatures.filter( + (sig) => sig.slot >= minSlot && sig.slot <= maxSlot, + ); + + const txs = await connection.getTransactions( + filteredSignatures.map((sig) => sig.signature), + { maxSupportedTransactionVersion: 0 }, + ); + + for (const tx of txs.filter(isNotNullish)) { + const txAmount = getTransferAmount(tx, depositAddress, tokenAddress); + const txAmountRatio = Number(txAmount) / Number(depositAmount.toString()); + + // witnessed amount can be slightly higher than transaction amount if deposit is witnessed together with spam transactions + if (txAmountRatio > 0.99) { + return tx.transaction.signatures[0]; + } + } + + return undefined; +}; diff --git a/packages/solana/src/index.ts b/packages/solana/src/index.ts index cef1680..dcc2ea6 100644 --- a/packages/solana/src/index.ts +++ b/packages/solana/src/index.ts @@ -1 +1,2 @@ export * from './address'; +export * from './deposit'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d95a073..2e86375 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -157,6 +157,9 @@ importers: '@chainflip/utils': specifier: 0.4.0 version: 0.4.0 + '@solana/web3.js': + specifier: ^1.95.8 + version: 1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) packages/utils: dependencies: @@ -208,6 +211,10 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + engines: {node: '>=6.9.0'} + '@babel/types@7.24.5': resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} engines: {node: '>=6.9.0'} @@ -1000,12 +1007,25 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/web3.js@1.95.8': + resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} + '@substrate/ss58-registry@1.47.0': resolution: {integrity: sha512-6kuIJedRcisUJS2pgksEH2jZf3hfSIVzqtFzs/AyjTW3ETbMg5q1Bb7VWa0WYaT6dTrEXp/6UoXM5B9pSIUmcw==} + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@types/bn.js@5.1.5': resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} @@ -1015,9 +1035,18 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@types/node@22.10.1': resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + '@types/ws@8.5.13': resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} @@ -1190,6 +1219,10 @@ packages: '@vitest/utils@2.1.5': resolution: {integrity: sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==} + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1205,6 +1238,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -1277,15 +1314,28 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base-x@3.0.10: + resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + base-x@5.0.0: resolution: {integrity: sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + bech32@2.0.0: resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + bignumber.js@9.1.2: resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bip174@3.0.0-rc.1: resolution: {integrity: sha512-+8P3BpSairVNF2Nee6Ksdc1etIjWjBOi/MH0MwKtq9YaYp+S2Hk2uvup0e8hCT4IKlS58nXJyyQVmW92zPoD4Q==} engines: {node: '>=18.0.0'} @@ -1297,6 +1347,9 @@ packages: bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -1307,12 +1360,18 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + bs58@6.0.0: resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} bs58check@4.0.0: resolution: {integrity: sha512-FsGDOnFg9aVI9erdriULkd/JjEWONV/lQE5aYziB5PoBsXRind56lh8doIZIc9X4HoxT5x4bLjMWN1/NB8Zp5g==} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + bufferutil@4.0.8: resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} engines: {node: '>=6.14.2'} @@ -1399,6 +1458,9 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -1474,6 +1536,10 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -1535,6 +1601,12 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + esbuild-plugin-file-path-extensions@2.1.4: resolution: {integrity: sha512-lNjylaAsJMprYg28zjUyBivP3y0ms9b7RJZ5tdhDUFLa3sCbqZw4wDnbFUSmnyZYWhCYDPxxp7KkXM2TXGw3PQ==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} @@ -1670,6 +1742,10 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + fast-check@3.21.0: resolution: {integrity: sha512-QpmbiqRFRZ+SIlBJh6xi5d/PgXciUc/xWKc4Vi2RWEHHIRx6oM3f0fWNna++zP9VB5HUBTObUK9gTKQP3vVcrQ==} engines: {node: '>=8.0.0'} @@ -1687,6 +1763,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -1705,6 +1784,9 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -1843,11 +1925,17 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + husky@9.1.6: resolution: {integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==} engines: {node: '>=18'} hasBin: true + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} @@ -1971,6 +2059,11 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -1991,6 +2084,11 @@ packages: resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} engines: {node: '>=14'} + jayson@4.1.3: + resolution: {integrity: sha512-LtXh5aYZodBZ9Fc3j6f2w+MTNcnxteMOrb+QgIouguGOulWi0lieEkOUg+HkjjFs0DGoWDds6bi4E9hpNFLulQ==} + engines: {node: '>=8'} + hasBin: true + joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -2014,6 +2112,9 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true @@ -2021,6 +2122,10 @@ packages: jsonc-parser@3.3.1: resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -2142,6 +2247,15 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + node-gyp-build@4.8.4: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true @@ -2335,6 +2449,9 @@ packages: resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} engines: {node: '>= 14.16.0'} + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regexp.prototype.flags@1.5.3: resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} engines: {node: '>= 0.4'} @@ -2374,6 +2491,9 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rpc-websockets@9.0.4: + resolution: {integrity: sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ==} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -2384,6 +2504,9 @@ packages: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} @@ -2525,6 +2648,10 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -2546,6 +2673,9 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -2556,6 +2686,9 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tightrope@0.2.0: resolution: {integrity: sha512-Kw36UHxJEELq2VUqdaSGR2/8cAsPgMtvX8uGVU6Jk26O66PhXec0A5ZnRYs47btbtwPDpXXF66+Fo3vimCM9aQ==} engines: {node: '>=16'} @@ -2598,6 +2731,9 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} @@ -2633,6 +2769,9 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsup@8.3.5: resolution: {integrity: sha512-Tunf6r6m6tnZsG9GYWndg0z8dEV7fD733VBFzFJ5Vcm1FtlXB8xBD/rtrBi2a3YKEV7hHtxiZtW5EAVADoe1pA==} engines: {node: '>=18'} @@ -2726,6 +2865,10 @@ packages: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + valibot@0.38.0: resolution: {integrity: sha512-RCJa0fetnzp+h+KN9BdgYOgtsMAG9bfoJ9JSjIhFHobKWVWyzM3jjaeNTdpFK9tQtf3q1sguXeERJ/LcmdFE7w==} peerDependencies: @@ -2807,9 +2950,15 @@ packages: jsdom: optional: true + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} @@ -2846,6 +2995,18 @@ packages: resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} engines: {node: '>=18'} + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -2899,6 +3060,10 @@ snapshots: dependencies: '@babel/types': 7.24.5 + '@babel/runtime@7.26.0': + dependencies: + regenerator-runtime: 0.14.1 + '@babel/types@7.24.5': dependencies: '@babel/helper-string-parser': 7.24.1 @@ -3480,22 +3645,64 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/web3.js@1.95.8(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.26.0 + '@noble/curves': 1.5.0 + '@noble/hashes': 1.6.1 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 9.0.4 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + '@substrate/ss58-registry@1.47.0': {} + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + '@types/bn.js@5.1.5': dependencies: '@types/node': 22.10.1 + '@types/connect@3.4.38': + dependencies: + '@types/node': 22.10.1 + '@types/estree@1.0.6': {} '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} + '@types/node@12.20.55': {} + '@types/node@22.10.1': dependencies: undici-types: 6.20.0 + '@types/uuid@8.3.4': {} + + '@types/ws@7.4.7': + dependencies: + '@types/node': 22.10.1 + '@types/ws@8.5.13': dependencies: '@types/node': 22.10.1 @@ -3742,6 +3949,11 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + acorn-jsx@5.3.2(acorn@8.13.0): dependencies: acorn: 8.13.0 @@ -3754,6 +3966,10 @@ snapshots: acorn@8.14.0: {} + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -3841,12 +4057,26 @@ snapshots: balanced-match@1.0.2: {} + base-x@3.0.10: + dependencies: + safe-buffer: 5.2.1 + base-x@5.0.0: {} + base64-js@1.5.1: {} + bech32@2.0.0: {} + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + bignumber.js@9.1.2: {} + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + bip174@3.0.0-rc.1: dependencies: uint8array-tools: 0.0.9 @@ -3866,6 +4096,12 @@ snapshots: bn.js@5.2.1: {} + borsh@0.7.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -3879,6 +4115,10 @@ snapshots: dependencies: fill-range: 7.1.1 + bs58@4.0.1: + dependencies: + base-x: 3.0.10 + bs58@6.0.0: dependencies: base-x: 5.0.0 @@ -3888,6 +4128,11 @@ snapshots: '@noble/hashes': 1.6.1 bs58: 6.0.0 + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + bufferutil@4.0.8: dependencies: node-gyp-build: 4.8.4 @@ -3972,6 +4217,8 @@ snapshots: commander@12.1.0: {} + commander@2.20.3: {} + commander@4.1.1: {} concat-map@0.0.1: {} @@ -4043,6 +4290,8 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + delay@5.0.0: {} + doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -4145,6 +4394,12 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + esbuild-plugin-file-path-extensions@2.1.4: {} esbuild@0.20.2: @@ -4454,6 +4709,8 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + eyes@0.1.8: {} + fast-check@3.21.0: dependencies: pure-rand: 6.1.0 @@ -4472,6 +4729,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-stable-stringify@1.0.0: {} + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -4486,6 +4745,8 @@ snapshots: dependencies: flat-cache: 4.0.1 + file-uri-to-path@1.0.0: {} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -4622,8 +4883,14 @@ snapshots: human-signals@5.0.0: {} + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + husky@9.1.6: {} + ieee754@1.2.1: {} + ignore@5.3.1: {} import-fresh@3.3.0: @@ -4728,6 +4995,10 @@ snapshots: isexe@2.0.0: {} + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + istanbul-lib-coverage@3.2.2: {} istanbul-lib-report@3.0.1: @@ -4755,6 +5026,24 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jayson@4.1.3(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + joycon@3.1.1: {} js-tokens@4.0.0: {} @@ -4771,12 +5060,16 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + json-stringify-safe@5.0.1: {} + json5@1.0.2: dependencies: minimist: 1.2.8 jsonc-parser@3.3.1: {} + jsonparse@1.3.1: {} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -4898,6 +5191,10 @@ snapshots: natural-compare@1.4.0: {} + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + node-gyp-build@4.8.4: optional: true @@ -5069,6 +5366,8 @@ snapshots: readdirp@4.0.2: {} + regenerator-runtime@0.14.1: {} + regexp.prototype.flags@1.5.3: dependencies: call-bind: 1.0.7 @@ -5124,6 +5423,19 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.24.0 fsevents: 2.3.3 + rpc-websockets@9.0.4: + dependencies: + '@swc/helpers': 0.5.15 + '@types/uuid': 8.3.4 + '@types/ws': 8.5.13 + buffer: 6.0.3 + eventemitter3: 5.0.1 + uuid: 8.3.2 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -5139,6 +5451,8 @@ snapshots: has-symbols: 1.0.3 isarray: 2.0.5 + safe-buffer@5.2.1: {} + safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 @@ -5283,6 +5597,8 @@ snapshots: pirates: 4.0.6 ts-interface-checker: 0.1.13 + superstruct@2.0.2: {} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -5322,6 +5638,8 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 + text-encoding-utf-8@1.0.2: {} + text-table@0.2.0: {} thenify-all@1.6.0: @@ -5332,6 +5650,8 @@ snapshots: dependencies: any-promise: 1.3.0 + through@2.3.8: {} + tightrope@0.2.0: {} tinybench@2.9.0: {} @@ -5362,6 +5682,8 @@ snapshots: totalist@3.0.1: {} + tr46@0.0.3: {} + tr46@1.0.1: dependencies: punycode: 2.3.1 @@ -5389,6 +5711,8 @@ snapshots: tslib@2.6.2: {} + tslib@2.8.1: {} + tsup@8.3.5(postcss@8.4.38)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.5.1): dependencies: bundle-require: 5.0.0(esbuild@0.24.0) @@ -5507,6 +5831,8 @@ snapshots: node-gyp-build: 4.8.4 optional: true + uuid@8.3.2: {} + valibot@0.38.0(typescript@5.7.2): optionalDependencies: typescript: 5.7.2 @@ -5587,8 +5913,15 @@ snapshots: - supports-color - terser + webidl-conversions@3.0.1: {} + webidl-conversions@4.0.2: {} + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + whatwg-url@7.1.0: dependencies: lodash.sortby: 4.7.0 @@ -5640,6 +5973,11 @@ snapshots: string-width: 7.1.0 strip-ansi: 7.1.0 + ws@7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): optionalDependencies: bufferutil: 4.0.8