A user approves a token swap on a decentralized exchange through their Web3 wallet, and within seconds, their entire balance is gone. The wallet software itself was not compromised. No private key was stolen. The blockchain records the transaction clearly: the user signed it. Yet the user never intended to drain their account. This scenario plays out repeatedly across Ethereum, Solana, Polygon, and other supported blockchains, often blamed on “wallet hacks” when the actual failure occurred at the point where the user granted permission to a contract or application.
Bitget Wallet, the non-custodial Web3 wallet supporting over 90 blockchains, includes security measures designed to prevent exactly this kind of loss: encrypted private key storage on the device, optional biometric authentication, and hardware wallet integration for users who want an extra layer of isolation. Yet the wallet’s architecture cannot prevent a user from approving a malicious or compromised contract, nor can it reverse a signed transaction once it leaves the device. Understanding how dApp connections actually work—and where the real attack surface lies—is essential for anyone managing significant value across multiple chains.
How dApp permissions work at the protocol level
When a user connects a wallet like Bitget Wallet to a decentralized application—whether a DEX, lending protocol, or yield farming contract—they are not simply granting the app permission to view their balance. They are establishing a communication channel between their private key and a smart contract running on a blockchain. The wallet creates a session, transmits the user’s public address to the application, and waits for the application to request a signature.
That signature step is crucial. A well-designed dApp connection should show the user exactly what they are signing before the private key is used. Bitget Wallet displays transaction details during approval: the receiving address, the amount being transferred, the gas fee, and the contract being interacted with. The user reviews this information, and if everything matches their intention, they approve the transaction. The wallet uses the encrypted private key stored locally on the device to sign the transaction, and then broadcasts it to the blockchain.
The problem is not that this flow is broken. The problem is that users often do not read what they are signing. A contract interaction might request unlimited token approval, meaning the contract can withdraw any amount of that token from the user’s wallet indefinitely, not just the amount intended for a single transaction. A different interface might display “contract address” in tiny text while the token amount sits prominently, causing a user to approve a transfer to an unknown contract rather than a token swap. Some applications deliberately obfuscate the approval step by burying it in a transaction sequence, so a user who clicked “swap” without careful attention suddenly approves an allowance they did not realize they were granting.
The blockchain does not question the user’s intention. If the private key signs a transaction, the blockchain accepts it as valid. Bitget Wallet’s role is to store that key securely and display transaction details clearly, not to prevent a user from making an economically damaging decision. This distinction is critical: a secure wallet protects the private key from theft, but it cannot protect the user from themselves.
Real examples of “wallet draining” that were not wallet vulnerabilities
One common incident involves users connecting to a fake dApp that mimics a legitimate exchange interface. The user believes they are swapping tokens on a trusted platform, but the contract address shown in the transaction details—if they bothered to check—points to a different smart contract designed to steal tokens. The wallet displays the real address; the user approves it anyway. Afterward, they blame the wallet for not preventing the loss, when the wallet functioned exactly as designed.
Another pattern involves unlimited token approvals. A user interacts with a legitimate DEX and approves an “infinite” or “unlimited” allowance to simplify future swaps. The DEX is trustworthy initially, but if the DEX is compromised, or if an attacker exploits a bug in the contract, the attacker can drain not just the current swap amount, but the user’s entire balance of that token. The wallet warned the user about the unlimited approval (most Web3 wallets now display this clearly), but the user clicked through without reading.
A third scenario involves governance attacks or contract vulnerabilities. A user stakes tokens in a yield farming protocol, believing the contract is safe. A few days later, an attacker finds a reentrancy bug or flash loan exploit in the contract, and the entire pool is drained. The user’s wallet did not lose security; the underlying contract was vulnerable. The user bore the risk because they approved the contract and deposited funds into it.
A fourth, more subtle case involves signature-based theft. Some contracts use ERC-191 or EIP-712 signatures for approvals, which are cryptographically distinct from on-chain transactions but just as binding. A user signs a message that looks innocuous—perhaps “authorize trade” in plain text—but the signature actually authorizes a contract to transfer tokens. The wallet may display the signed message, but if the user does not understand cryptographic signatures or does not read carefully, they might approve something they did not intend. This is why hardware wallets like Ledger and Trezor, which can be integrated with Bitget Wallet, offer an additional layer: they display signature requests on a separate screen controlled only by the device, not by the connected computer.
Why hardware wallet integration adds a meaningful barrier
Bitget Wallet supports Ledger and Trezor hardware wallets, which function as isolated signing devices. When a user connects a hardware wallet, the application never touches the private key. Instead, the dApp sends a transaction to the Bitget Wallet interface, which transmits it to the hardware device. The user sees the transaction details on the hardware device’s small screen, controlled only by the device’s firmware. The user approves or rejects the transaction on the hardware device itself, and the signed transaction is returned to the application.
This architecture creates a crucial difference: the attacker cannot trick the user through the computer screen alone. If malware on the computer has compromised the browser or the Bitget Wallet application, it can lie about what the user is about to sign on the computer screen. But the hardware device displays the true transaction details independently. The user is forced to confirm the transaction on a screen they control, not on a screen the attacker can manipulate. If the hardware device shows a different token amount or a different contract address than what the application claimed, the user can reject the transaction immediately.
Hardware wallet integration is therefore particularly valuable for high-value transactions or when using less-familiar dApps. For everyday swaps on trusted protocols, the friction may not be worth the added security. For approving a large allowance to a new contract, or for staking a significant amount in a yield farming protocol, the extra step of confirming on the hardware device can prevent catastrophic loss. The security benefit comes from forcing the user to see the real transaction on an independent screen, not from the hardware wallet itself having superior cryptography.
Biometric authentication and encrypted private keys do not prevent transaction approval mistakes
Bitget Wallet offers Face ID and Touch ID biometric authentication on mobile, plus encrypted private key storage on all devices, and optional two-factor authentication. These controls protect against certain threats: a thief who steals a phone cannot immediately access the private key without the biometric match, and encrypted storage ensures that an attacker who gains device access cannot extract the key without the decryption password. For the specific threat of someone stealing the wallet application and moving funds, these protections matter significantly.
They do not, however, prevent the scenario where the legitimate owner of the device approves a malicious transaction. If the user unlocks their phone with their face, opens Bitget Wallet, connects to a dApp, approves a transaction, and signs it with their fingerprint, every protection in the system worked correctly. The biometric verified that the person holding the phone was authorized to sign. The encrypted key remained protected until the user chose to use it. The transaction was signed by the genuine private key. The blockchain accepted the valid signature and executed the contract call. And the user’s funds were transferred to an attacker because the user approved it.
Biometric authentication is a gate between the device and the private key. It is not a gate between the user’s intention and the signature. The user must still verify, before approving, that the transaction details match what they intended. This verification step is entirely cognitive: does the contract address match what I expect? Does the token amount make sense? Am I approving unlimited access when I only wanted a single transaction? If the user skips this verification, no amount of biometric encryption will prevent loss.
Two-factor authentication, similarly, protects the wallet account from unauthorized access if the account is tied to a cloud backup or a centralized platform. Since Bitget Wallet is non-custodial and stores private keys locally, 2FA’s value is limited to scenarios where the user has linked the wallet to a recovery service or social backup. For users who maintain only a local recovery phrase and do not upload it anywhere, 2FA is less relevant than the protection of the recovery phrase itself.
The recovery phrase is the ultimate attack surface
A user can download the Bitget Wallet extension, create a new wallet, and receive a recovery phrase—a series of 12 or 24 words that can restore the wallet on any device. That recovery phrase is the master key to every blockchain supported by the wallet. If an attacker obtains it, they can import the wallet on a different device and move all funds without ever needing the original phone or the biometric password. No amount of encryption or two-factor authentication on the original device matters if the recovery phrase has been compromised.
Recovery phrase theft typically does not involve hacking Bitget Wallet’s code. It involves social engineering, phishing, malware, or user carelessness. A user might photograph the recovery phrase and store it in cloud photos (accessible if the cloud account is compromised). They might write it on a piece of paper and leave it in an unlocked drawer. They might paste it into a “wallet recovery” website that is actually a phishing site. They might share it with someone they trust, who later turns out to be untrustworthy. They might type it into a fake support form after a scammer claims the wallet needs verification.
The wallet provides no protection against these scenarios because the protection would require preventing the user from ever seeing or writing down the recovery phrase, which would make wallet recovery impossible. The security model of non-custodial wallets—where the user maintains full control of the private key—necessarily means the user must be able to access that key in case of device loss. That access becomes an attack vector the moment the user writes it down or stores it digitally. The only mitigation is user education and careful backup procedures: write the phrase on paper, verify it against the wallet’s display (not the reverse), store it physically in a safe location, and never type it anywhere except directly into Bitget Wallet during recovery or initial setup.
Cross-chain and cross-dApp risks multiply as wallet complexity increases
Bitget Wallet supports over 90 blockchains, including Ethereum, BSC, Polygon, Solana, and Tron. A single recovery phrase grants access to addresses on every supported chain, each with its own token ecosystem and dApp landscape. This multi-chain capability is powerful—users can manage assets across different blockchains without creating separate wallets—but it also expands the attack surface. A user might be extremely careful on Ethereum, where they understand the dApp landscape, but careless on a less-familiar chain where they do not recognize scam protocols.
Additionally, dApp bridges and cross-chain swap services introduce additional complexity. A user might approve a token on Ethereum to be bridged to Polygon, a transaction that involves not just the original dApp but also a bridge contract and potentially a wrapped version of the token on the destination chain. If the bridge is compromised or the user approves the wrong contract, the funds can disappear between chains, potentially unrecoverable. Bitget Wallet can facilitate these transactions, but it cannot verify that the bridge contract is legitimate or that the destination address is controlled by the user.
NFT marketplace integration adds another layer. Users can buy and sell digital collectibles directly through the wallet’s marketplace, which again requires approving contracts. An attacker might create a fake NFT that looks identical to a valuable collection, list it at an attractive price, and the user might approve spending their funds without realizing they are purchasing something worthless. The wallet displays the transaction details, but the user must verify that the contract address matches the official collection address, a step that is easy to skip when the interface looks convincing.
Practical steps to reduce dApp connection risk
First, verify the domain before connecting. Attackers often register domains that are one letter different from legitimate sites, such as “uniswap.exchange” instead of “uniswap.org”. Type the URL directly into the address bar rather than following a link from email, social media, or search results. Use browser bookmarks for protocols you use regularly so that you always arrive at the correct address.
Second, always read the transaction details before signing. This is where a hardware wallet becomes especially valuable: if the details on the hardware screen do not match what the application claimed, you can reject the transaction. Even without a hardware wallet, pause before approval, verify the contract address against official documentation, and check the token amount and allowance type. If you are approving a swap, the approval should be limited to the swap amount, not unlimited. If you are staking, verify that the staking contract address is official.
Third, use revoke.cash or similar tools to audit and revoke token approvals periodically. This tool, accessible through any Web3 wallet, shows all the contracts you have approved and their allowances. If you see approvals to contracts you no longer use, or unlimited approvals you forgot about, you can revoke them. This does not protect against future attacks, but it reduces the blast radius of a compromised contract you have already approved.
Fourth, start with small test transactions on unfamiliar protocols. If you are using a dApp for the first time, approve and swap a small amount rather than your entire balance. Once the transaction confirms and funds arrive as expected, you can use the protocol with larger amounts. This approach costs a bit in additional fees, but prevents the scenario where you approve an unlimited allowance to a scam contract and immediately lose everything.
Fifth, separate your recovery phrase from your devices. Store it in a physical location separate from your computer and phone—ideally in a safe deposit box or a home safe. If someone gains access to both your device and your recovery phrase, they can drain your wallet. Separating them means an attacker needs to compromise two different locations. If you use Ledger Wallet or Trezor integration, the hardware device effectively becomes a secondary location where the key is stored, though the recovery phrase should still be backed up separately.
The limits of what a secure wallet can actually do
Bitget Wallet is a secure wallet in the sense that it encrypts private keys, supports hardware wallet integration, and displays transaction details before signing. But security, at the application level, is only one layer in a much larger system. The blockchain does not distinguish between a transaction the user intended and a transaction the user was tricked into approving. The wallet cannot prevent you from connecting to a fake dApp. It cannot prevent you from typing your recovery phrase into a phishing site. It cannot reverse a transaction after it has been signed and broadcast.
What a secure wallet can do is make the correct choice easier and the wrong choice harder. Hardware wallet integration makes it difficult to approve a transaction without seeing it on an independent device. Clear transaction displays make it easier to spot mismatches between intention and approval. Local encryption makes it harder for malware to steal keys directly. But each of these measures can be bypassed by a determined user who is not paying attention. A user can still ignore the hardware device display, can still skip reading transaction details, can still install malware that logs their password.
The most important security feature of Bitget Wallet, paradoxically, is not a feature at all. It is the fact that the wallet is non-custodial, meaning you maintain full control of your private keys. You are not trusting Bitget Wallet’s servers to keep your funds safe; you are trusting only yourself. This is more responsibility, not less. It means you must understand what you are approving, must protect your recovery phrase, and must verify dApp authenticity yourself. A centralized exchange would prevent some of these mistakes by not allowing you to interact with arbitrary contracts, but it would prevent that by taking custody of your funds. The trade-off is security through personal responsibility versus convenience through institutional control.
Frequently asked questions
Can Bitget Wallet prevent me from approving a malicious contract?
No. Bitget Wallet displays the contract address and transaction details before you sign, allowing you to verify the information yourself. But the wallet cannot determine whether a contract is malicious or whether your intention matches what you are approving. If you sign a transaction, it is executed regardless of the outcome. This is why reading transaction details and verifying dApp authenticity before approval is essential.
Is my private key safer if I use biometric authentication and encryption?
Yes, biometric authentication and encrypted private key storage protect against unauthorized access to your device or wallet application. Someone who steals your phone cannot immediately use your private key without your biometric match. However, these protections only guard the key itself. They do not prevent you from voluntarily approving a malicious transaction when you unlock the wallet and sign intentionally. The recovery phrase remains the ultimate security boundary; if compromised, it can restore your wallet on another device regardless of biometric locks.
What should I do if I accidentally approved an unlimited token allowance to a contract I no longer trust?
Use a revoke tool like revoke.cash to find and revoke the allowance. Connect your wallet, view all active approvals, and revoke any that are no longer necessary. This prevents the contract from transferring additional funds in the future, though it does not recover funds already stolen. Going forward, approve only the amount you need for a single transaction, or use a limited approval amount if the dApp supports it. You can download extension if you need to set up a fresh wallet with stricter approval practices.
