async function simulateBeforeSend(ix: TransactionInstruction) {
const tx = new Transaction().add(ix);
tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;
tx.feePayer = user;
const simulation = await connection.simulateTransaction(tx);
if (simulation.value.err) {
console.error("Simulation failed:", simulation.value.err);
console.error("Logs:", simulation.value.logs);
throw new Error("Transaction would fail");
}
console.log("Simulation successful");
console.log(` Compute units: ${simulation.value.unitsConsumed}`);
return simulation;
}