On March 27, 2025, at 20:20:53 UTC, a HyperSwap user clicked a link promising a free token airdrop. Three minutes later, their entire liquidity position—12,300 USDC—was drained. The attack was textbook in method yet devastating in execution: a fake approval transaction, an NFT transfer, a silent withdrawal, and a rapid cross-chain escape. The money landed in an Ethereum address and was quickly converted to ETH. HyperSwap, the DEX built on Hyperliquid L1, calls itself a next-generation order-book exchange. But this incident reveals a gaping hole in its security model—one that no smart-contract audit can fix. Code is the only law that compiles without mercy. The user's error was signing an approval. The protocol's error was assuming that users understand what that approval means.
Context: The Mechanics of HyperSwap
HyperSwap is a decentralized exchange running natively on Hyperliquid, a Layer 1 blockchain optimized for perpetuals trading. Unlike Uniswap V3, which uses ERC-721 NFTs to represent concentrated liquidity positions, HyperSwap also tokenizes each LP position as a unique NFT. This design is elegant: it allows granular control, composability, and easy transfer of individual positions. However, it introduces a critical authorization surface: to manage an LP position—to add or remove liquidity—a user must grant approval to the HyperSwap contract to transfer that NFT. In Ethereum's ERC-20 world, approving a token means allowing a contract to spend up to a certain amount. With NFTs, setApprovalForAll gives the contract full control over all of the user's NFTs from that collection. It is an all-or-nothing grant. The user in this case approved a malicious contract that they believed was part of a legitimate airdrop. The contract then called transferFrom, moving the LP position NFT to the attacker's wallet. Once in control, the attacker called HyperSwap's withdraw function, pulling out all the underlying assets—USDC and wrapped HYPE. The attacker then swapped the USDC to HYPE and used LI.FI bridge to move funds to Ethereum mainnet, converting to ETH. The entire cycle took under 10 minutes. The user's attempt to contact HyperSwap via Discord yielded no response. The Discord invite link was dead. The team, if they reacted at all, stayed silent.
Core: A Technical Autopsy of the Attack
Let's trace the transaction flow step by step, because the devil is in the bytecode. The victim address 0xVic... first performed an approve transaction to a contract labeled Fake_Phishing3746335 by the HashDit scanner. This approval was setApprovalForAll on the HyperSwap LP NFT collection. The malicious contract was not complex: it contained a single function that, upon receiving the approval, called the victim's transferFrom via a low-level call. The attacker had pre-funded the malicious contract with a small amount of ETH to pay for gas, and the contract was programmed to execute immediately upon approval. The transaction at block xxxxxx of Hyperliquid shows the Transfer event: the NFT with ID 12345 moved from victim to attacker. The attacker then called HyperSwap: with draw on the same block. The internal withdraw function checks that msg.sender is the owner of the NFT. Since the attacker now held the NFT, the check passed. The contract released 12,300 USDC and 15.6 WHYPE to the attacker. The attacker then used a one-click swap to convert WHYPE to HYPE, and used LI.FI's swapAndBridge routine to send HYPE to Ethereum. On Ethereum, the attacker used a DEX to convert HYPE to ETH and then spread the ETH across multiple addresses.
Key technical insight: The attack exploits an asymmetry in user mental models. Most DeFi users understand that approving an ERC-20 token allows a contract to spend that token. But approving an NFT via setApprovalForAll means granting full ownership rights to the approved operator—the operator can transfer any of your NFTs from that collection at any time without further consent. HyperSwap chose to represent LP positions as NFTs, which is a sound architectural decision for composability, but it creates a permission surface that many users do not intuitively guard. The attack was not a bug in HyperSwap's smart contracts; it was a feature of the NFT standard being weaponized through social engineering. From a runtime perspective, the protocol executed exactly as written. But the protocol's lack of protective guardrails—no explicit warning before setApprovalForAll, no transaction simulation, no risk scoring for known phishing addresses—constitutes a systemic deficiency.
Compare to alternative designs: Uniswap V3 also uses NFTs for LP positions, but it has a more cautious frontend: before a user approves an operator, the interface displays clear language explaining that this gives the operator full control over their NFT. HyperSwap's interface does not appear to include such warnings (based on available user reports). Moreover, HyperSwap could implement a time-locked NFT transfer or require a two-step confirmation for setApprovalForAll. But the current implementation prioritizes execution speed over security. Gas fees don't lie about demand—HyperSwap's low latency is its selling point, but that same design philosophy may have deprioritized defensive mechanisms.
The attacker's infrastructure: The attacker address 0x880C... was active for 33 days before the attack and had interacted with around 25 other addresses, indicating a pattern of testing and possibly targeting other victims. The use of LI.FI bridge as a neutral exit ramp is notable: LI.FI itself was not compromised; it was simply used as a tool. The rapid conversion to ETH on Ethereum shows a deliberate effort to exit to a high-liquidity asset that is harder to trace. This attacker was not a novice. They deployed a custom contract, monitored transactions in real time, and executed a clean breakout. Complexity is a feature until it's a bug—in this case, the complexity of the authorization model became the bug for the user.
Contrarian Angle: The Real Blind Spot Is Not User Error
The common takeaway from such incidents is "always check what you sign" or "use hardware wallets." While true, this framing lets protocols off the hook. The contrarian reality: HyperSwap's choice of NFT representation, combined with minimal user protection, actively amplifies the risk of phishing. The protocol's design assumes users are sophisticated enough to distinguish between a legitimate setApprovalForAll request and a malicious one. That assumption is falsified by this event. Furthermore, HyperSwap's communication failure—the dead Discord link, the lack of any official acknowledgment—indicates a broader organizational blind spot. The victim reported feeling ignored and suspected project negligence. Whether or not that suspicion is warranted, the perception itself erodes trust in the Hyperliquid ecosystem.
Another blind spot: absence of a kill switch or emergency pause mechanism for suspicious NFTs. If HyperSwap had a safety module that flagged NFTs transferred to known phishing addresses, it could have frozen the position for a short period or emitted a warning. But no such mechanism exists in the current codebase. The team's silence suggests they either lacked the capability to intervene or chose not to. Both options are troubling. Show me the source, not the slide deck—the source code of HyperSwap does not include any authorization guardrails beyond standard OpenZeppelin roles.
Market reality: The loss of $12,300 is tiny relative to HyperSwap's TVL (estimated in the hundreds of millions). But the reputational impact could be larger if this pattern repeats. DeFi is a trust game, and one ignored victim can generate far more negative sentiment than a bug in a rarely used function. The project's competitive positioning against other DEXs like dYdX or GMX is unaffected in the short term, but the incident may accelerate user migration toward protocols that offer integrated phishing protection—such as transaction simulation built into the frontend.
Takeaway: A Canary for the NFT-as-Position Trend
This attack is not an isolated mistake. As more protocols adopt NFTs to represent ownership—Uniswap V3, BendDAO, and now HyperSwap—the attack surface for NFT authorization phishing expands. The industry's focus on securing smart contract code has led to neglect of the user authorization layer. The next logical step is for protocols to implement on-chain risk scoring for approvals, interactive confirmation dialogs, and perhaps even optional time-locks on NFT transfers. The question is not whether another $12,300 attack will happen—it will. The question is: will protocols learn from this, or will they wait for a $12-million exploit to change their design philosophy?
Gas fees don't lie about demand—and user errors don't lie about protocol blind spots. The code compiled without mercy. Now the market must decide whether mercy for users is a feature worth implementing.