Browser Extension
Chrome Manifest V3 extension. Auto-detects Solana dApps, intercepts transactions, and pairs with mobile.
Features
Transaction Intercept
Hooks into wallet's signTransaction. Blocks until intent is verified on-chain.
Mobile Pairing
One-time QR pairing (like WhatsApp Web). Encrypted WebSocket channel for notifications.
Bypass List
Trusted sites skip 2FA. Max 50 entries. Managed from popup.
Protocol Stats
Popup shows total commits, verifies, verify fee, and protocol status.
How It Works
- Content script injects into Solana dApp pages
- Detects wallet adapter's
signTransactioncalls - Checks bypass list — if site is trusted, allows through
- Sends push notification to paired mobile device
- Blocks TX until
IntentCommitPDA is detected on-chain - Allows TX to proceed once intent is verified
Pairing Protocol
- Extension generates ephemeral ECDH key pair (non-extractable)
- Displays QR code containing public key + session ID
- Mobile app scans QR, derives shared secret via ECDH
- Both sides establish encrypted WebSocket channel
- Pairing info stored in extension's
chrome.storage.local
Popup Sections
- Connection Status — Shows RPC connection state and network
- Protocol Stats — Total commits, verifies, and current verify fee
- Intent Checker — Lookup pending intents by wallet + app ID
- Paired Devices — Manage paired mobile devices
- Bypass List — Manage trusted sites that skip 2FA
App Registry
The extension resolves app_id program addresses to human-readable names using a bundled app registry:
// Known apps resolved in popup and content script
Jupiter JUP6LkbZbjS1jKKwa...
Raydium 675kPX9MHTjS2zt1qf...
Tensor TSWAPaqyCSx2KABk68...
Magic Eden M2mx93ekt1fmXSVkTr...
Marinade MarBmsSgKXdrN1egZf...
Security
- All user input sanitized (no
innerHTML) - Request IDs use
crypto.getRandomValues(not sequential) - Pairing keys are non-extractable
CryptoKeyobjects - Bypass list limited to 50 entries with hostname validation
- Fail-closed: RPC errors block transactions (not fail-open)
Installation (Dev Mode)
- Clone the repo:
git clone https://github.com/selcuk07/intentguard - Open Chrome →
chrome://extensions - Enable "Developer mode"
- Click "Load unpacked" → select the
extension/directory