Gasless Transactions
Pay transaction fees from a different wallet than your main one. Your primary wallet never appears as the fee payer on-chain, adding an extra layer of privacy.
The Problem
On Solana, every transaction requires a fee payer. By default, this is the sender's wallet. This creates a privacy leak:
Standard Transaction: fee_payer: Your_Main_Wallet β Visible on-chain signatures: [Your_Main_Wallet] instructions: [transfer 100 SOL to Recipient] Problem: Your main wallet is now linked to this transaction
The Solution
SHADE allows you to designate a separate wallet (typically a burner) as the fee payer. Your main wallet signs the transaction intent, but the fee comes from elsewhere.
Gasless Transaction: fee_payer: Burner_Wallet β This appears on-chain signatures: [ Main_Wallet, β Signs the intent Burner_Wallet β Pays the fee ] instructions: [transfer 100 SOL to Recipient] Result: Observers see Burner_Wallet, not your main wallet
How It Works
Create a Prepaid Burner
Create a burner wallet and fund it with a small amount of SOL (0.1 SOL is enough for hundreds of transactions).
Set as Fee Payer
Designate the burner as your active fee payer. All subsequent transactions will use this wallet for fees.
Send Transactions
When you send a transaction, both wallets sign itβyour main wallet for authorization, the fee payer for the fee.
Rotate as Needed
When the fee payer runs low or you want fresh privacy, create a new burner and destroy the old one.
Privacy Comparison
Standard Transaction
- β’ Fee payer = sender (visible)
- β’ Main wallet exposed
- β’ Transaction history linkable
- β’ Balance deducible
Gasless Transaction
- β’ Fee payer = burner (disposable)
- β’ Main wallet hidden
- β’ Burner can be destroyed
- β’ No link to your identity
Technical Implementation
Solana transactions support separate fee payers natively. SHADE leverages this:
async function sendWithFeePayer(
transaction,
mainKeypair,
feePayerKeypair
) {
// Set fee payer to burner
transaction.feePayer = feePayerKeypair.publicKey;
// Get recent blockhash
transaction.recentBlockhash = await getBlockhash();
// Both wallets sign
transaction.sign(mainKeypair, feePayerKeypair);
return await sendTransaction(transaction);
}Use Cases
Cold Wallet Transactions
Keep your cold storage address hidden while still transacting.
Treasury Operations
DAO treasuries can transact without revealing the main wallet.
Whale Privacy
Large holders can move funds without signaling to the market.
Combined with Burners
Ultimate privacy: burner as sender + different burner as fee payer.
Cost Efficiency
Solana transaction fees are incredibly low: