Every Solana wallet hits the same three problems: failed transactions cost users SOL,
MEV bots drain swap value, and priority fees are guesswork. Users blame the
wallet for all three. We sit between your sendRawTransaction and the network,
pre-flight every send, and refuse the ones we know will fail or drain.
User signs, broadcasts, pays the priority fee, lands in a slot, gets reverted by the program. They blame the wallet for the gas waste. Pre-flight simulation would have caught it.
Priority fee was below the congested-slot threshold. Tx times out, user retries, pays more, gets sandwiched. They blame the wallet for "slow Solana". Fee competitiveness vs. recently-landed txs would have told them what to pay.
The program turned out to be a drainer, a honeypot, or routed through a sandwich bot. User loses funds. They blame the wallet for "letting" them sign. Abort gates on active MEV threats / flash-loan / durable-nonce attacks would have refused the send.
import { TxShield } from "@txshield/sdk"; const shield = new TxShield({ apiKey: process.env.TXS_KEY }); // Right before connection.sendRawTransaction in your wallet's send flow: const verdict = await shield.solana.simulate({ serialized: tx.serialize(), policy: "wallet-default", // or "strict" for high-value sends }); if (verdict.decision === "ABORT") { // show user: "We detected a drainer / failed tx / active MEV threat". // Tx never broadcasts. User keeps their SOL. showAbortDialog(verdict.reason); return; } if (verdict.landing_estimate.fee_percentile_bucket === "low") { // fee is below p25 of recently-landed; suggest bump to p75 suggestFeeBump(verdict.landing_estimate.recommended_fee_for_high_landing); } // Otherwise: safe to broadcast. await connection.sendRawTransaction(tx.serialize());
The SDK is in private preview. Tell us your wallet, your monthly active users, and which failure mode generates the most support tickets — we'll prioritize integration.
Request integration →