We'll now write a function to track a specific Solana address and log new trades:
async function trackAddress(address) {
try {
const publicKey = new solanaWeb3.PublicKey(address);
console.log(`Tracking address: ${publicKey.toBase58()}`);
let lastSignature = '';
// Fetch initial transactions
const signatures = await connection.getSignaturesForAddress(publicKey, { limit: 1 });
if (signatures.length > 0) {
lastSignature = signatures[0].signature;
}
// Monitor for new transactions
setInterval(async () => {
const signatures = await connection.getSignaturesForAddress(publicKey, {
limit: 10,
});
for (const signatureInfo of signatures) {
if (signatureInfo.signature !== lastSignature) {
const transaction = await connection.getConfirmedTransaction(signatureInfo.signature);
if (transaction) {
const { meta, transaction: tx } = transaction;
const instructions = tx.message.instructions;
const postBalances = meta.postBalances;
const preBalances = meta.preBalances;
// Check if the transaction involves token transfers
instructions.forEach((instruction, index) => {
const programId = instruction.programId.toBase58();
// Solana's SPL Token Program ID
if (programId === solanaWeb3.TOKEN_PROGRAM_ID.toBase58()) {
const data = Buffer.from(instruction.data);
const command = data.readUInt8(0);
// 3 represents the Token Transfer instruction
if (command === 3) {
const amount = data.readUInt64LE(1);
const fromAccount = instruction.keys[0].pubkey.toBase58();
const toAccount = instruction.keys[1].pubkey.toBase58();
const balanceChange = (preBalances[index] - postBalances[index]) / solanaWeb3.LAMPORTS_PER_SOL;
console.log(`New Trade Detected!`);
console.log(`- Signature: ${signatureInfo.signature}`);
console.log(`- From: ${fromAccount}`);
console.log(`- To: ${toAccount}`);
console.log(`- Amount: ${balanceChange} SOL`);
}
}
});
}
lastSignature = signatureInfo.signature;
}
}
}, 10000); // Check every 10 seconds
} catch (error) {
console.error('Error tracking address:', error);
}
}
// Replace with the Solana address you want to track
const addressToTrack = 'YourSolanaAddressHere';
trackAddress(addressToTrack);