@robertprp/intents-sdk
Version:
Shogun Network Intent-based cross-chain swaps SDK
51 lines (42 loc) • 1.94 kB
text/typescript
import { address, createSolanaRpc, type Base58EncodedBytes } from '@solana/kit';
import { getDefaultSolanaRPC } from './client.js';
import { logger } from '../../utils/logger.js';
/**
* Inspect Solana guards to find orders that are currently locked on-chain.
* @param userAddress - The user's Solana address
* @param config - The Solana RPC configuration
* @returns An object containing the Solana guard programs for cross-chain and single-chain orders
*/
export async function getSolanaOrdersWithLockedFunds(userAddress: string, config?: { rpcUrl?: string }) {
const rpc = config?.rpcUrl ? createSolanaRpc(config.rpcUrl) : getDefaultSolanaRPC();
// const singleChainGuardAddress = SINGLE_CHAIN_GUARD_ADDRESSES[ChainID.Solana];
const programAccountAddress = address('43cctGU9QJ4WEPzLoNEvo3TPiv6nMUG9puN2pXQSnB6V');
const programAccountsConfig = {
encoding: 'base64',
filters: [
{
memcmp: {
offset: 8n,
encoding: 'base58',
bytes: userAddress as Base58EncodedBytes,
},
},
],
} as Readonly<unknown>;
logger.info(`Fetching cross-chain guard programs for user: ${userAddress}`);
const crossChainGuardPrograms = await rpc.getProgramAccounts(programAccountAddress, programAccountsConfig).send();
logger.info(`Found ${crossChainGuardPrograms.length} cross-chain guard programs`);
// const singleChainGuardPrograms = await rpc.getProgramAccounts(address(singleChainGuardAddress), programAccountsConfig).send();
// const crossChainCodec = getOrderCodec();
// const singleChainCodec = getLimitOrderCodec();
// const base64Encoder = getBase64Encoder();
const crossChainGuardProgramsWithOrders = crossChainGuardPrograms.map(({ pubkey, account }) => {
logger.info(`Account data: ${account} and pubkey: ${pubkey}`);
return {
pubkey,
};
});
return {
crossChainGuardPrograms: crossChainGuardProgramsWithOrders,
};
}