verificar-existencia.js•2.1 kB
/**
* Tool 3: Verify Transaction Existence
* Checks if a transaction exists with specific assets (for fully private transactions)
*/
import { checkTxExists } from '@mistcash/sdk';
import { CHAMBER_ADDR_MAINNET, CHAMBER_ADDR_SEPOLIA, CHAMBER_ABI } from '@mistcash/config';
import { VerificarExistenciaTransaccionSchema } from '../utils/validation.js';
import { createProvider, getChamberContract, retryWithBackoff } from '../utils/provider.js';
export async function verificarExistenciaTransaccion(params) {
// Validate parameters
const validated = VerificarExistenciaTransaccionSchema.parse(params);
try {
// Create provider
const provider = createProvider(validated.provider_rpc_url ? { nodeUrl: validated.provider_rpc_url } : undefined);
// Get contract address based on network
const network = (process.env.STARKNET_NETWORK || 'mainnet');
const contractAddress = network === 'mainnet' ? CHAMBER_ADDR_MAINNET : CHAMBER_ADDR_SEPOLIA;
// Get contract instance
const contract = await getChamberContract(provider, contractAddress, CHAMBER_ABI);
// Check transaction existence with retry logic and timeout
const checkPromise = retryWithBackoff(() => checkTxExists(contract, validated.claiming_key, validated.recipient, validated.token_address, validated.amount));
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Request timeout after 30s')), 30000));
const exists = await Promise.race([checkPromise, timeoutPromise]);
return {
success: true,
exists,
transaction_details: {
claiming_key: validated.claiming_key,
recipient: validated.recipient,
token_address: validated.token_address,
amount: validated.amount
},
note: 'This method is for fully private transactions where assets are not publicly visible'
};
}
catch (error) {
throw new Error(`Failed to verify transaction existence: ${error.message}`);
}
}