Reproduce DeFi hack incidents using Foundry.
902 incidents included.
Let's make Web3 secure! Join Discord
Notion: 101 root cause analysis of past DeFi hacked incidents
Disclaimer: This content serves solely as a proof of concept showcasing past DeFi hacking incidents. It is strictly intended for educational purposes and should not be interpreted as encouraging or endorsing any form of illegal activities or actual hacking attempts. The provided information is for informational and learning purposes only, and any actions taken based on this content are solely the responsibility of the individual. The usage of this information should adhere to applicable laws, regulations, and ethical standards.
- Getting Started
- Who Support Us
- Donate Us
- List of Past DeFi Incidents
- Transaction debugging tools
- Ethereum Signature Database
- Useful tools
- Hacks Dashboard
- List of DeFi Hacks & POCs
-
Follow the instructions to install Foundry.
-
Clone and install dependencies:
git submodule update --init --recursive
All articles are also published on Substack.
- Lesson 1: Tools ( English | 中文 | Vietnamese | Korean | Spanish | 日本語 )
- Lesson 2: Warm up ( English | 中文 | Korean | Spanish | 日本語 )
- Lesson 3: Write Your Own PoC (Price Oracle Manipulation) ( English | 中文 | Korean | Spanish | 日本語 )
- Lesson 4: Write Your Own PoC (MEV Bot) ( English | 中文 | Korean | Spanish | 日本語 )
- Lesson 5: Rugpull Analysis ( English | 中文 | Spanish | 日本語 )
- Lesson 6: Write Your Own PoC (Reentrancy) ( English | 中文 | Spanish | 日本語 )
- Lesson 7: Hack Analysis: Nomad Bridge, August 2022 ( English | 中文 | Spanish | 日本語 )
If you appreciate our work, please consider donating. Even a small amount helps us continue developing and improving our projects, and promoting web3 security.
- Gitcoin - Donate DeFiHackLabs
- EVM Chains - 0xD7d6215b4EF4b9B5f40baea48F41047Eb67a11D5
- Giveth
20261014 UNCXSmartTokenVesting
20261006 SetProtocol ETHMACOAPY
20260921 GaslessReservoirEnabler
20260625 OceanBPoolSideStaking
20260420 ThetanutsVaultShareRounding
20260419 AaveRebalancerCreditDelegation
20260407 SquidMulticallAllowanceDrain
20260331 WhalebitOracleManipulation
2025
20250725 WhereIsMyDragonTreasure
20250716 StrategyLlamaLendConvex
20250702 ActivePoolUrgentRedemption
20250509 Nalakuvara_LotteryTicket50
2024
20240703 UnverifiedContr_0x452E25
20240610 UwuLend - Price Manipulation
2023
20231201 UnverifiedContr_0x431abb
20230715 USDTStakingContract28
2022
20221024 MulticallWithoutCheck
20221011 Rabby Wallet SwapRouter
20220908 Ragnarok Online Invasion
20220701 Quixotic - Optimism NFT Marketplace
20220624 Harmony's Horizon Bridge
20220608 Optimism - Wintermute
20220430 Rari Capital/Fei Protocol
2021
Before 2020
Phalcon | Tx tracer | Cruise | Ethtx | Tenderly | eigenphi
ABI to interface | Get ABI for unverified contracts | ETH Calldata Decoder | ETHCMD - Guess ABI | Abi tools
Slowmist | Defillama | De.Fi | Rekt | Cryptosec | BlockSec | Telem
20261025 Yapeswap - Yapeswap's WorkersUnion DAO carries a zero quorum (minimumVotes and minimumVotesForProposing are both 0) and factory.feeToSetter, held by the DAO timelock, can re-point the factory's Yearn registry and operator, while each YapePair farms its reserves into whatever vault registry.latestVault(token) returns and credits every token it ships out back to farming[token] so its keepBalance invariant (erc20 balance + farming) still holds after the real tokens have left, so anyone can buy a dust amount of the freely-traded YAPE, lock it for sqrt-weighted voting power, pass a proposal that moves feeToSetter to themselves through real voting and the timelock, swap in a registry pointing at a vault they own, and force a 100% rebalance that ships every pair's reserves straight to the attacker
Lost: ~$21.9K drained from six Yapeswap pairs on Ethereum; the attacker contract received DAI 1,691.8, USDC 2,286.2, USDT 8,386.3, WETH 10.516 and WBTC 0.0316. This PoC runs the full governance capture end to end on a pre-execution fork (buy YAPE, lock for voting power, propose, vote, schedule, execute so factory.feeToSetter moves to the attacker through the real DAO and timelock, with no prank and no storage write) and drains the directly-liquid reserves through the malicious registry for a measured 2,254.32 USD; the larger on-chain figure additionally pulled each pair's Yearn-farmed balance back first via setFarmingRatio(0,0)+rebalance, a Yearn v3 allocator withdrawal that is not replayable in pinned pre-execution fork state
forge test --contracts src/test/2026-10/Yapeswap_exp.sol --evm-version cancun -vvv20261024 X100Senate - the X100 Senate treasury has no snapshot and no timelock, so applyForSenate() is permissionless and propose, vote and execute run in one block, so the attacker flash-borrows 1,942,457 USDT from Aave, buys 38,200 X and freezes it across two helper contracts to seize 2 of 3 senate seats, then passes a DexTreasury v3Swap that dumps 400,000 treasury X into an attacker-created PancakeV3 pool at a manipulated price and resells it on the deep Uniswap pool, repaying the flash loan for a 4,749,726.03 USDT net gain
Lost: ~4.75M USDT drained from the X100 treasury on Ethereum in a single atomic tx; the attacker netted 4,749,726.10 USDT. This PoC rebuilds the full capture on a fork at the parent block and lands at 4,749,726.037865 USDT, a 0.06 USDT drift from fork re-ordering
forge test --contracts src/test/2026-10/X100Senate_exp.sol --evm-version cancun -vvv20261020 SliceFundsModule - permissionless entry point (0x9d2edfac) credits each caller-supplied source's returned amount as a deposit without verifying the module's balance rose, then pays it out of pooled reserves when the flag is set
Lost: ~$41K drained from Slice's FundsModule on Base: 8.716935563284127414 ETH and 19,820.734002 USDC to the attacker EOA. The attacker first calls 0x9d2edfac with flag false against the real Slice product contracts to pool other users' funds into the module, then with flag true against two self-deployed source contracts that return a non-zero amount while transferring nothing, paying the pooled reserves out to itself. The PoC reconstructs all 8 ETH legs and 55 of 66 USDC legs; the 11 reverting legs send to recipients that are themselves slicers and do not feed the drainable balance, matching the on-chain loss to within the module's 1-unit payout rounding
forge test --contracts src/test/2026-10/SliceFundsModule_exp.sol --evm-version cancun -vvvhttps://basescan.org/tx/0x02b039a6345348d984e4a0b70dd233127772206e61ce82c390c4709c0b8d790a
20261019 Argent - an Argent-style smart wallet relays owner and guardian signatures through an execution module that never consumes a nonce or records the signed-message hash, and whose signed deadline is unchecked and overflows, so two signatures that authorized wallet 0xe545 in 2020 and 2021 still pass today and can be resubmitted by anyone, and a recovery-deadline setter whose attacker-supplied period wraps the deadline into the past forces an immediate same-transaction owner change, so the attacker flash-borrows WETH from Balancer, replays the old signatures to drive the wallets to buy MARK in a thin MARK/WETH pool while trading around them, and repeats across the e545 and 5a79 wallets for 50,655.92 USDC
Lost: ~$59.8K reported by SlowMist, ~50,655.92 USDC measured on-chain (48,778.499253 from the e545 wallet and 1,877.419234 from the 5a79 wallet). The attacker lifts two owner and guardian signatures that were valid on the e545 wallet at blocks 11266059 (2020-11-16) and 11948627 (2021-02-28) and resubmits them through the execution module, which has no nonce or used-hash check and does not enforce the signed deadline, after a recovery-deadline overflow flips the wallet owner in the same transaction. The PoC forks each leg at the parent of its attack tx, redeploys the attacker's own creation bytecode from a fresh address, and reproduces both legs to the unit
forge test --contracts src/test/2026-10/Argent_exp.sol --evm-version cancun -vvvhttps://etherscan.io/tx/0xbfed8d33561ed5f9cbd0f4e62a5bbd20187a64f3e22180148dcb58ed6ebaa795
20261018 AlpsCon - AlpsCon AI Trade Hub still trusts the canonical Hardhat default account 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 on its onlyVerified whitelist, and that account's private key is public, so the attacker uses an EIP-7702 authorization signed with the known key to delegate the account to exploit code and pass every reward gate, and because each reward hub version imports the previous version's balances through migrate() and then pays claimServiceResults() against the version's already-accumulated profitPerShare while the fresh deposit's entryProfitPerShare is still zero, a brand-new flash-funded ALPS stake in the still-open V6 hub is credited the full historical reward history, so the attacker flash-borrows 1,027,990 USDC from Aave, buys and stakes ALPS, imports the stake forward, over-claims the rewards out of V7/V8/V9, unstakes and sells back, and repays the loan for a 152,295.3625 USDC net gain
Lost: ~152.8K USDC drained from the AlpsCon AI Trade Hub reward pools on BNB Chain; the attacker EOA received 152,295.3625 USDC before gas, with the Aave flash loan of 1,027,990 USDC repaid in full at 1,028,503.995 USDC. This PoC reconstructs the dominant V9 over-claim leg at a 129,775.6074 USDC net; the remaining 22,519.75 USDC is the V7/V8 cascade inside the real single claimServiceResults() call, which an equivalent standalone call does not reproduce
forge test --contracts src/test/2026-10/AlpsCon_exp.sol --evm-version prague -vvv20261017 TIPMine - TIPMine.mine() is permissionless (its only guards are a supply flag and a once-per-day timer that is already open at lastMineTime 0), and it burns and pushes 2% of the TIP supply straight out of the live TIP/SOL Pancake pair through the TIP token's burnFromPool and distributeFromPool, each of which force-syncs the pair, so the pair's TIP reserve collapses while its SOL reserve is untouched and TIP reprices ~10^8x, letting anyone holding TIP sell it back into the pool and take the SOL side, so the attacker deals in ~36k SOL of flash capital, buys a little TIP then dumps 35,121 SOL to move most of the pool's TIP onto its own side, calls the ungated mine() to burn the pool's remaining TIP down, and sells the held TIP back for almost the entire SOL reserve
Lost: ~667 SOL drained from the TIP/SOL pool on BNB Chain, taken to the attacker EOA as 667.228863551156127021 SOL (SOL Transfer, log index 182); the PoC reconstructs 706.253909658913182860 SOL, the pool's full ~715 SOL reserve, with the ~39 SOL difference being the real multi-source flash-sourcing cost (a Venus-fork SOL borrow plus 13 ecosystem-pool flash loans) that the deal()-modelled, fee-free capital does not incur
forge test --contracts src/test/2026-10/TIPMine_exp.sol --evm-version cancun -vvv20261017 BiFi - the idle BiFi USDT market freezes its per-block exchange rate and stores the entire 264,059-block inactive gap on the first action, then the interest model charges that full ~36 day gap of deposit interest on every later action in the same block at a utilization rate the attacker sets through permissionless deposit and borrow, so the attacker flash-borrows 40.5M USDT from Morpho, deposits it to seed the frozen gap, borrows to spike utilization, runs a repay and withdraw loop twice to cash out the inflated deposit interest, then repays the loan and swaps the 165,574 USDT surplus to 68.0572 WETH
Lost: ~165,574 USDT drained from the BiFi USDT market on Ethereum, swapped to 68.057203111718789216 WETH (the PoC reproduces the surplus to 68.057464 WETH, a sub-0.0003 WETH intra-block drift from the parent-block fork point); the profit was taken one block after the exploit contract was deployed by the MEV bot c0ffeebabe front-running the same permissionless mechanism
forge test --contracts src/test/2026-10/BiFi_exp.sol -vvv20261015 KolanHook - KolanHook settles its escrowed ETH buy-windows at the same Uniswap v4 pool's instantaneous spot price with no TWAP or bound and accept() is ungated once a window has expired, so the attacker flash-borrows 6.7 WETH from Balancer, swaps it to move the KLN spot, then calls accept() on two expired windows it does not own so _closeWindow() mispositions their escrowed ETH as single-sided liquidity around the manipulated price and runs an unbounded buyback, and reverses the swap back through that freshly placed ETH liquidity before repaying the loan for a 1.279453 ETH net gain
Lost: 1.279453 ETH net to the attacker EOA on Ethereum (surplus 1.279914429958618589 ETH after the 6.7 WETH Balancer flash loan is repaid, minus ~0.00046 ETH gas), draining KolanHook's full 2.309861 ETH of escrowed window funds
forge test --contracts src/test/2026-10/KolanHook_exp.sol --evm-version cancun -vvv20261014 UNCXSmartTokenVesting - VestingManager pools every deposit of a given token in one contract and release() pays a slice of the full contract balance over a global share count, release() debits that global count but leaves the position's deposited shares in place and cancel() then debits the same shares a second time, so the attacker flash-borrows each token, creates self-owned vestings whose tranches are already elapsed and so instantly releasable, releases and cancels soft helper vestings to shrink the share denominator while donating token straight into the pool to raise the balance, then releases a payout vesting against the corrupted denominator and inflated balance to over-withdraw the other vesters backing tokens across five ERC-20s
Lost: ~88-89K USD across five ERC-20s on Ethereum, retained after the per-token flash loans are repaid and each reproduced to the wei against the tx transfer logs (EDGEN 55,601,598.708417972560603048, ZC 9,055,847.637887682268154756, pepecoin 40,155.284285661160205717, LO0P 65,372.217059159993437512, PAAL 113,657.766933968), the working capital flash-borrowed per token from Uniswap V3 (EDGEN), Uniswap V2 (pepecoin, PAAL) and Uniswap V4 (ZC, LO0P) and repaid in the same leg
forge test --contracts src/test/2026-10/UNCXSmartTokenVesting_exp.sol --evm-version cancun -vvv20261009 BitBay - the UsdcDaiV4Vault _withdraw liquidity==0 branch pays the vault entire DAI and USDC balance to the caller with no share-weighted cap, and reposition() is permissionless once the tick is outside the narrow LP range, so the attacker deposits one wei for a single share, swaps the Uniswap v4 pool to push the tick onto tickUpper, calls reposition to recompute a position whose liquidity rounds to zero and leaves the pooled funds as raw balance, then redeems that one share to sweep the whole 14838 DAI pool
Lost: 14838.466608989135865711 DAI swept from the vault by a single 1-wei share on Polygon (reproduced to the wei against the on-chain Withdrawn amount), the attacker then unwound the drained DAI plus flash-loaned capital to a net ~14,813 USDC profit
forge test --contracts src/test/2026-10/BitBay_exp.sol --evm-version cancun -vvv20261008 X7Finance - X7Pioneer's claimRewards() adds the unaccounted ETH balance delta into totalRewards on every call but only refreshes lastETHBalance when claimable is non-zero, so calling it with an empty tokenIds array re-counts the same donated delta each time and inflates the per-token reward until a single owned NFT drains the whole pool, the ~26.96 ETH donation supplied by a flash loan and repaid from the drain
Lost: ~6.78 ETH to the attacker on Ethereum (attacker EOA balance rose 6.777538 ETH; this reconstruction nets 6.793749214542107991 ETH, the difference being the on-chain Aave flash-loan premium and gas, neither modeled); the single draining claimRewards([300]) pays 33.756919822234785023 ETH, matching the on-chain RewardsClaimed to the wei, with the ~26.96 ETH donation capital returned
forge test --contracts src/test/2026-10/X7Finance_exp.sol -vvv20261006 SetProtocol - a second RebalancingSetTokenV3 vault (ETHMACOAPY) hit by the same permissionless actualizeFee() divCeil rounding, the attacker issues the rebalancing set then donates the residual base set into the vault own backing so the zero-fee recompute bumps unitShares from 12253 to 12264, then redeems the same quantity for more collateral than was deposited, the ~116,000 WETH issue/redeem size supplied fee-free by an Aave-v3-fork flash loan
Lost: 4.047988247781965824 WETH to the attacker in the first tx (reproduced to the wei) on Ethereum; two independent EOAs drained the ETHMACOAPY rebalancing set across two txs two blocks apart for ~8.11 WETH total, this PoC reconstructs the first tx (0xb54c77dae4c5ff8664779bacfb56d75242f39005b0b7778109d2f9033b9e8fc2) only, the ~116,000 WETH working capital borrowed and repaid in the same tx via a zero-premium Aave-v3-fork flash loan
forge test --contracts src/test/2026-10/SetProtocolETHMACOAPY_exp.sol -vvv20261006 SetProtocol - actualizeFee() is permissionless and recomputes unitShares with a divCeil even when it mints zero fee, rounding the backing collateral per share up by one with no fee actually taken, so issuing the rebalancing set before the bump and redeeming the same quantity after returns more collateral than was deposited, the ~25,044 ETH issue/redeem size supplied fee-free by a Uniswap v4 native-ETH flash-accounting loan
Lost: 5.083725683631735476 ETH to the attacker (reconstructed, 0.011% over the 5.083148662083682304 ETH taken on-chain) on Ethereum; the collateral backing Set Protocol's RebalancingSetTokenV3 was skimmed through the per-share rounding surplus, the ~25,044 ETH issue/redeem working capital borrowed and repaid in the same tx via Uniswap v4 zero-fee flash accounting
forge test --contracts src/test/2026-10/SetProtocol_exp.sol --evm-version cancun -vvv20261006 MakerDAOFlipKeeper - the dormant ETH-A flip-keeper proxy's drain selector has no ds-auth check, so anyone can call it to make the keeper vat.hope() a caller-supplied worker and then deal its four undealt 2020 ETH-A auctions and flux/exit the freed 200 WETH of collateral out
Lost: exactly 200 ETH (200.000000000000000000 WETH, 0xad78ebc5ac6200000 wei, reproduced with zero variance) to a fresh attacker on Ethereum; the dormant keeper proxy's unprotected drain settled its four undealt 2020 ETH-A liquidation auctions (#1457-1460, 50 WETH each) and swept the freed collateral out - not a MakerDAO core bug, the keeper impl's drain selector simply omits the ds-auth modifier that the contract's other functions carry
forge test --contracts src/test/2026-10/MakerDAOFlipKeeper_exp.sol -vvv20261003 MALT - the MALT/DAI sLP runs its below-peg price recovery inside swap() before sending the output, pulling DAI from the Capital Source treasury into the pool, then checks its constant-product invariant against the final balances without separating the injected treasury DAI from the caller's own input, so a negligible 1 DAI swap is credited with thousands of injected DAI and releases a disproportionate MALT output
Lost: 13,440.581562307921517594 DAI net profit to the attacker (exactly reproduced) on Polygon; the Capital Source treasury was drained of 12,744.644506590589136718 DAI across two below-peg rebalance injections, the attacker paying just 1 DAI per exploit swap and arbitraging the extracted MALT out on QuickSwap - the ~$72K figure in the original alert does not match the on-chain reconstruction
forge test --contracts src/test/2026-10/MALT_exp.sol -vvv20261002 GoldPesa - the GPX V4 hook rebalances protocol liquidity inside beforeSwap via a burn and TAKE_PAIR that run in the attacker's own open PoolManager unlock, and never checks the PositionManager deltas are settled first, so an unsettled mint debt parked in the same unlock nets against the hook's burn credit and the attacker walks the freed USDC out
Lost: 114,999.999186 USDC (exactly reproduced) on Base; the GPX/USDC V4 pool's protocol liquidity was burned by the hook's own hourly rebalance, and its 148,868.602188 USDC burn credit was split by the shared-unlock delta bug - 33,868.603002 USDC reached the hook while 114,999.999186 USDC paid off the attacker's unsettled mint debt and then exited to the attacker, funded by a 175,000 USDC Morpho flash loan repaid in the same tx
forge test --contracts src/test/2026-10/GoldPesa_exp.sol --evm-version cancun -vvv20261001 FlashLoopAdapter - a Safe module authenticates its caller by asking that caller whether the module is enabled (self-attestation) and then makes an unconstrained call to a caller-supplied router, letting a fake Safe drive the adapter into draining real Safes that enabled it
Lost: 114.096151 WETH (~$305k, exactly reproduced) on Ethereum; two Safes that enabled the module as a victim were emptied - Safe #1 lost 1306.48 weETH of Aave collateral once its 1335.26 WETH debt was repaid, Safe #2 lost 6.426 weETH, all swapped to WETH via ODOS for the attacker's net
forge test --contracts src/test/2026-10/FlashLoopAdapter_exp.sol --evm-version cancun -vvv20260930 SKYDAO - sell-path controller burns the pair's SKYDAO and syncs before the net sell is credited, latching a near-zero reserve that a direct pair.swap drains for the pair's entire USDT
Lost: 59,914.12 USDT net to the attacker (exactly reproduced) on BNB Chain; the SKYDAO/USDT PancakeSwap V2 pair lost its entire 183,482.88 USDT reserve, drained by a direct pair.swap against the reserve the sell-path burn+sync latched to ~0
forge test --contracts src/test/2026-09/SKYDAO_exp.sol --evm-version cancun -vvv20260930 PositionManager - deposit values the vault's existing USDT at the manipulable PancakeSwap V3 spot price, so crashing the spot before depositing mints inflated shares that withdraw redeems in the same transaction
Lost: 32,080.604282 USDT (exactly reproduced) on BNB Chain; one atomic tx crashed the USDT/BTCB spot with an 8,000,000 USDT swap, then ran 24 deposit(1,000,000 USDT)/withdraw cycles to drain the vault's own PancakeSwap V3 position, the pool losing 32,096.098596 USDT
forge test --contracts src/test/2026-09/PositionManager_exp.sol -vvv20260930 MUS - deposit refunds a first-deposit bonus and also credits it as withdrawable allocation, so a single deposit-withdraw from a fresh address returns more ETH than deposited
Lost: ~0.400168 ETH per deposit-withdraw cycle (exactly reproduced) on Ethereum; the MUS pool's standing 5.335 ETH was drained to 0 across the attack block, reported campaign total ~$36.9k across many fresh addresses
forge test --contracts src/test/2026-09/MUS_exp.sol -vvv20260929 LPBonus - reserve inconsistency between reward accrual and LP withdrawal lets a manipulated MSN reserve inflate an LP reward claim
Lost: 92,607 USDT ($92.6k) on BNB Chain; one LP position claimed 1,442,165.713011 FIST against an accrual that funded ~940,041.612768 FIST, extracted by flash-swapping the MSN reserve down at accrual and back up at withdrawal
forge test --contracts src/test/2026-09/LPBonus_exp.sol -vvv20260926 DAOstack - permissionless newOrganization lets an attacker hijack an existing Reputation contract and drain the Avatar
Lost: 4.025 ETH (full Genesis Alpha treasury); attacker minted 20,000 REP against the victim's real Reputation contract (supply 9,738.6 to 29,738.6, ~67% majority after a 200 REP GenesisProtocol vote-cost burn) and used it to self-install as a full-permission scheme
forge test --contracts src/test/2026-09/DAOstack_exp.sol -vvvBSC_RPC=https://bsc-mainnet.public.blastapi.io forge test --contracts ./src/test/2026-09/PancakeV3SwapHelper_exp.sol -vvv --evm-version shanghaihttps://bscscan.com/tx/0x70bc4ff8439f74d26d454a53e9a135ac3659a958aa3462218d0db7ed55cf5104
20260921 TheRedVillage - ungated PolygonTRVRouter forwardRequest relays an attacker-supplied upgradeTo through the router's _authorizeUpgrade role on the SeasonService UUPS proxy, installing a malicious implementation that uses the proxy's TRVZooKeeper roles to pull every player's approved WETH and sweep the vault
Lost: 31.426018474517367982 WETH (~$80.7K) swept from TRVZooKeeper on Polygon; 299 players with standing WETH approvals were pulled for 31.350379502001368 WETH and the vault's pre-existing 0.075638972516 WETH was swept with them, reproduced to the wei
forge test --contracts src/test/2026-09/TheRedVillage_exp.sol -vvvLost: 35,380.154566 USDC net (two byte-identical acceptOffer calls each paid out 35,486.935717 USDC from escrow; funded via a UniV2 flash swap, repaid 35,593.716868 USDC)
forge test --contracts src/test/2026-09/DoinGud_exp.sol -vvv20260921 GaslessReservoirEnabler - erc20WithTransfersAndExecute lets a whitelisted module run unvalidated transferFrom calldata
Lost: 8.72 WETH ($23.8K) across 466 victims with standing approvals to the Enabler; PoC reproduces 3 victims, 2.3546 WETH ($6.4K, ~27% of the WETH-leg loss)
forge test --contracts src/test/2026-09/GaslessReservoirEnabler_exp.sol -vvvGaslessReservoirEnabler_exp.sol
20260921 InternetToken - permissionless swapV3 with caller-supplied pool lets a fake callback mint INT arbitrarily
Lost: 764,145,702 INT + 5.846988 WETH (attacker minted 925.41M INT total, dumped 161.27M into the real INT/WETH pool for the WETH, reproduced to the wei)
forge test --contracts src/test/2026-09/InternetToken_exp.sol -vvvBSC_RPC=https://bsc-mainnet.public.blastapi.io forge test --contracts src/test/2026-09/Likwid_exp.sol -vvv20260916 Startale - transient storage init flag outlives the constructor and lets anyone reinitialize an ERC7579 account and drain it
Lost: 427.551160 USDC drained in this batch tx (32.555561 USDC reproduced across 3 of 23 victim accounts; ~$2,876 USDC+USDT aggregate across 41 known batches)
forge test --contracts src/test/2026-09/Startale_exp.sol -vvv20260916 Flamincome - permissionless Convex stakeFor inflates Strategy NAV and lets VaultYUSDT overpay on withdrawAll
forge test --contracts src/test/2026-09/Flamincome_exp.sol -vvvforge test --contracts src/test/2026-09/PrimeFinance_exp.sol -vvvforge test --contracts src/test/2026-09/Nimiq_exp.sol -vvv20260915 RsETHSafeModule - nested self-referential multicall authorization bypass drains Gnosis Safe via DELEGATECALL
forge test --contracts src/test/2026-09/RsETHSafeModule_exp.sol -vvv20260915 BonfireSwap - missing caller authorization lets anyone force-sell any approved holder's tokens
forge test --contracts src/test/2026-09/BonfireSwap_exp.sol -vvvforge test --contracts src/test/2026-09/SpiralHookV2_exp.sol --evm-version cancun -vvvforge test --contracts src/test/2026-09/YamFinance_exp.sol -vvvforge test --contracts src/test/2026-09/ORB_exp.sol -vvv --evm-version cancun20260911 GDC - chained EOA bypass, liquidity misclassification, burn mismatch, and reentrant tax-free exit
forge test --contracts src/test/2026-09/GDC_exp.sol -vvvforge test --contracts src/test/2026-09/EtherFiAtomicQueue_exp.sol -vvvforge test --contracts src/test/2026-09/OMNI404_exp.sol -vvvforge test --contracts src/test/2026-09/UnifiProtocol_exp.sol -vvvforge test --contracts src/test/2026-09/BeatXswap_exp.sol -vvvLost: ~5.6 ETH (5.277 ETH realized in this PoC after slippage selling looted UNI/AAVE/MKR back to WETH)
forge test --contracts src/test/2026-09/EnsoFinance_exp.sol -vvv20260909 ZentraFinance - aToken burn safeguard clamps to zero, repayWithATokens clears debt without burning
forge test --contracts src/test/2026-09/ZentraFinance_exp.sol -vvvforge test --contracts src/test/2026-09/OrderFactory_exp.sol -vvvforge test --contracts src/test/2026-09/RouterDrain_exp.sol -vvv20260907 CozyFinance - unverified UMA Optimistic Oracle trigger enables unbacked protection-token redemption
forge test --contracts src/test/2026-09/CozyFinance_exp.sol -vvvforge test --contracts src/test/2026-09/DHC_exp.sol -vvvforge test --contracts src/test/2026-09/Reddio_exp.sol -vvvforge test --contracts src/test/2026-09/SecuredFi_exp.sol -vvvforge test --contracts src/test/2026-09/NotionalFinance_exp.sol -vvvforge test --contracts src/test/2026-08/ReflexerGEB_exp.sol -vvvforge test --contracts src/test/2026-08/FloatProtocol_exp.sol -vvvforge test --contracts src/test/2026-08/BalancerV1BPool_exp.sol -vvvLost: ~$124.8K for this cbETH pool (1 of 7 pools hit by the same bug the same day, ~$775K aggregate)
forge test --contracts src/test/2026-08/AjnaFinance_exp.sol -vvvforge test --contracts src/test/2026-08/CashCowCoin_exp.sol --evm-version cancun -vvvforge test --contracts src/test/2026-08/EnjinCryptoItems_exp.sol -vvvforge test --contracts src/test/2026-08/FHToken_exp.sol --evm-version cancun -vvvforge test --contracts src/test/2026-08/ArrakisGUNI_exp.sol -vvvforge test --contracts src/test/2026-08/TermFinance_exp.sol -vvvLost: 10,000,000 SAND minted unbacked (~$517,170 face value, one of 400+ repeated txs in an ongoing campaign)
forge test --contracts src/test/2026-08/SandboxOFT_exp.sol -vvvforge test --contracts src/test/2026-08/AllbridgeCCTP_exp.sol --evm-version cancun -vvvforge test --contracts src/test/2026-08/USM_exp.sol -vvvforge test --contracts src/test/2026-08/UnistreetLaunchpad_exp.sol -vvvforge test --contracts src/test/2026-08/StrongBlock_exp.sol -vvvforge test --contracts src/test/2026-08/AIC_exp.sol -vvv20260802 MOKE - settle() tx.origin check lets any EOA latch a manipulated MOKE/USDT price, then claim() mints inflated MOKE against it
forge test --contracts src/test/2026-10/MOKE_exp.sol --evm-version prague -vvv20260728 LULA - Rental reward claims call LULA.recycle(), which moves up to a third of the pair's LULA to Rental and sync()s with no USDT leaving, so after a buy routed to the fee-excluded owner bypasses buyEnabled, the claims drain the pair's LULA reserve and 4,999 LULA buys back the pushed USDT plus the pool's liquidity
forge test --contracts src/test/2026-07/LULA_exp.sol --evm-version cancun -vvv20260716 CrowdRingCircle - sell-destroy path burns CRC out of the pair on any non-exempt sell, collapsing the reserve so a follow-up swap drains the pool's USDT
forge test --contracts src/test/2026-10/CrowdRingCircle_exp.sol -vvv20260716 PerpetualProtocol - v2 (Curie) unguarded OrderBook funding-growth update lets anyone poison cached funding, draining the Vault
forge test --contracts src/test/2026-10/PerpetualProtocol_exp.sol --evm-version cancun -vvvforge test --contracts ./src/test/2026-07/SummerFi_exp.sol -vvv --evm-version cancunhttps://etherscan.io/tx/0x0db528c44f23fc7fa4544684a2fab81096450a14aae8bc89f42cd0592d43da12
forge test --contracts ./src/test/2026-07/edel-xstock_exp.sol -vvvhttps://x.com/TenArmorAlert/status/2072130807356129726
forge test --contracts ./src/test/2026-06/Vault4626_exp.sol --evm-version shanghai -vvvhttps://x.com/DefimonAlerts/status/2071495744071086510
forge test --contracts ./src/test/2026-06/AIDC_exp.sol -vvv --evm-version shanghaihttps://x.com/TenArmorAlert/status/2071415914948685892
forge test --contracts ./src/test/2026-06/CookFinanceIssuance_exp.sol -vvv --evm-version shanghaihttps://x.com/DefimonAlerts/status/2071497001443770684
forge test --contracts ./src/test/2026-06/LixirPermitDrain_exp.sol -vvvhttps://x.com/DefimonAlerts/status/2070362661691207935
forge test --contracts ./src/test/2026-06/OceanBPoolSideStaking_exp.sol -vvvhttp://x.com/defimonalerts/status/2070362661540286735
forge test --contracts ./src/test/2026-06/DLMC_exp.sol -vvv --evm-version cancunhttps://x.com/TenArmorAlert/status/2069957542109958498
forge test --contracts ./src/test/2026-06/RoyalRoyalties_exp.sol -vvvhttps://x.com/TenArmorAlert/status/2069596801725002121
Lost: N/A (purely educational; worst-case impact would have been ~$2M, matching the separate vulnerability that actually drained the contracts)
forge test --contracts src/test/2026-06/AztecEscapeHatch_exp2.sol -vvvhttps://github.com/AztecProtocol/aztec-2.0
https://x.com/ivanbogatyy/status/2069159603942596830
forge test --contracts ./src/test/2026-06/ATM_LP_Burn_exp.sol -vvv --evm-version shanghaihttps://x.com/TenArmorAlert/status/2068993748936151209
forge test --contracts ./src/test/2026-06/OLPC_exp.sol --evm-version shanghai -vvvhttps://x.com/exvulsec/status/2068308334512365924
forge test --contracts ./src/test/2026-06/JB_exp.sol -vvv --evm-version cancunhttps://x.com/audit_911/status/2067943961327763788
forge test --contracts src/test/2026-06/AztecEscapeHatch_exp.sol -vvvforge test --contracts ./src/test/2026-06/WHALE_exp.sol -vvv --evm-version cancunhttps://x.com/audit_911/status/2067451654694412720
forge test --contracts ./src/test/2026-06/LBP_exp.sol -vvv --evm-version cancunhttps://x.com/DefimonAlerts/status/2067329401977532429
forge test --contracts ./src/test/2026-06/DIP_exp.sol -vvv --evm-version shanghaihttps://x.com/TenArmorAlert/status/2067059314519417163
forge test --contracts ./src/test/2026-06/Thetanuts_exp.sol -vvvhttps://x.com/PeckShieldAlert/status/2066540451126190312
forge test --contracts src/test/2026-06/AztecConnect_exp.sol -vvvhttps://www.cryptotimes.io/2026/06/15/aztec-exploit-drains-2-19m-from-dormant-privacy-protocol/
forge test --contracts ./src/test/2026-06/TOPBPool_exp.sol -vvvhttps://x.com/DefimonAlerts/status/2064616112822583505
forge test --contracts ./src/test/2026-06/NovaBox_exp.sol --evm-version prague -vvvhttps://x.com/DefimonAlerts/status/2064616360466919793
forge test --contracts ./src/test/2026-06/AmbientCrocSwapDex_exp.sol -vvvhttps://x.com/TenArmorAlert/status/2063816231023427861
forge test --contracts ./src/test/2026-06/BOSS_exp.sol -vvv --evm-version shanghaihttps://x.com/audit_911/status/2063819348305985748
forge test --contracts ./src/test/2026-06/DTXT_exp.sol -vvv --evm-version shanghaihttps://x.com/audit_911/status/2063793931138347015
forge test --contracts ./src/test/2026-06/AISOTHPresale_exp.sol -vvv --evm-version shanghaihttps://x.com/audit_911/status/2063565495073415618
forge test --contracts src/test/2026-06/BYToken_exp.sol -vvv20260604 ATM Token - Hidden transferFrom Auto-Swap Drain
forge test --contracts src/test/2026-06/ATM_exp.sol -vvvforge test --contracts src/test/2026-05/AROS_exp.sol -vvv --evm-version praguehttps://bscscan.com/tx/0xe89fe640ec5241edfca7d8dcae77a0a4270dee15e4bbd043fc60e393aabf41e1 https://x.com/TenArmorAlert/status/2061289921990570349
forge test --contracts src/test/2026-05/YSDAO_exp.sol -vvvhttps://bscscan.com/tx/0x91f26d96373bbec6a6a8517c7be995a739d65f20fed589d53bc47d8140f91907
forge test --contracts src/test/2026-05/LegendaryMoneyMonNft_exp.sol -vvvhttps://x.com/SlowMist_Team/status/2060205558687486441
forge test --contracts src/test/2026-05/DxSale_exp.sol -vvvhttps://crypto.news/dxsale-exploit-drains-7-3m-in-bnb-through-hidden-contract-backdoor/ https://x.com/Tahax1/status/1928169316736651568 https://x.com/CoinsultAudits/status/1928203831996297670
forge test --contracts src/test/2026-05/JoeAgent_exp.sol -vvvhttps://x.com/SlowMist_Team/status/2059887450663551352
forge test --contracts src/test/2026-05/SKP_exp.sol -vvvClassification: Premeditated insider exploit — NOT a conventional external hack.
forge test --contracts src/test/2026-05/SKP_exp2.sol -vvv- https://bscscan.com/tx/0xbc01ea37bd2ff8f6aa6afcfbe0406114ff27a01e9aa56102bfa4ad8a0c2f25ee
- https://bscscan.com/tx/0xadf1b6ff02a917043c816bc8bd1ed67038d64a19d06544b09ceeb872518fda37
- https://www.bitget.com/amp/news/detail/12560605230076
FOUNDRY_EVM_VERSION=cancun forge test --contracts ./src/test/2026-05/SquidRouterModule_exp.sol -vvvhttps://t.me/defimon_alerts/3045
FOUNDRY_EVM_VERSION=cancun forge test --contracts src/test/2026-05/NewMarketTrading_exp.sol --match-contract NewMarketTradingExploit -vvhttps://rekt.news/newmarkettrading-rekt
forge test --contracts src/test/2026-05/WUSD_exp.sol -vvvhttps://x.com/exvulsec/status/2058803971947385330
forge test --contracts src/test/2026-05/FractalProtocol_exp.sol -vvvhttps://arbiscan.io/tx/0x20db78913a51c3b3aece860ea142c240f3f8fa3b5bbf533a3d1d48eed857e10f https://x.com/DefimonAlerts/status/2058619391776878967
forge test --contracts src/test/2026-05/MureDistribution_exp.sol -vvvhttps://etherscan.io/tx/0xb83040361a0ec72fa2d06ad69493226518a5f8b5d96c19b400626248f9c5b798 https://x.com/DefimonAlerts/status/2058211424761942226
forge test --contracts src/test/2026-05/MAPProtocol_exp.sol -vvvhttps://etherscan.io/tx/0x31e56b4737649e0acdb0ebb4eca44d16aeca25f60c022cbde85f092bde27664a https://x.com/MapProtocol/status/2059587998409490510
forge test --contracts ./src/test/2026-05/ElevateFi_exp.sol -vvv --evm-version cancunhttps://t.me/defimon_alerts/3040
forge test --contracts ./src/test/2026-05/TesseraSwap_exp.sol -vvv --evm-version shanghaihttps://t.me/defimon_alerts/3038
forge test --contracts src/test/2026-05/VerusBridge_exp.sol -vvvhttps://etherscan.io/tx/0x6990f01720f57fc515d0e976a0c4f8157e0a9529194c4c15d190e98d087eb321 https://x.com/VerusCoin/status/2057465214975492358
forge test --contracts src/test/2026-05/SEAToken_exp.sol -vvvhttps://arbiscan.io/tx/0x001cb16e17c4c5a5c4d02423c9e9b2f2b11ab6b2a1baf2ba53b8fcaf06167716 https://anomly.rs/metasea-redeemposition-distributor-drain-arb-2026-05-17
forge test --contracts src/test/2026-05/AdsharesBridge_exp.sol -vvvhttps://etherscan.io/tx/0x8844b4ec371c4b13d7fac701b5d546a7c2fba12621a9596dd14b662b14408789 https://etherscan.io/tx/0xfba82bb34515d7aefbf0c89582b71d915ec8861c96babaafdc882743dbc23509 https://etherscan.io/tx/0xa3476575183204b4a662dd6ee56f6499d806e4f41ce83d98366752d31e9e9ca3 https://x.com/DefimonAlerts/status/2055751467579936770
forge test --contracts src/test/2026-05/SQTokenStaking_exp.sol -vvv --evm-version praguehttps://bscscan.com/tx/0x1bae633eda9b3d98999ea116bc403712eaa07093ec32bd6d559085cc4607f5b8 https://x.com/Defi_Nerd_sec/status/2054425936746148148
forge test --contracts src/test/2026-05/INKFinance_exp.sol -vvvhttps://polygonscan.com/tx/0xb469a24ec737be16fe41367a7b5b315c7f03b4e0ff3af50b3a2db03b3066b982 https://www.cryptotimes.io/2026/05/11/ink-finance-exploited-on-polygon-140k-usdt-drained-in-flash-loan-attack/
forge test --contracts src/test/2026-05/HumaCreditApprovalBypass_exp.sol -vvHumaCreditApprovalBypass_exp.sol
https://www.cryptotimes.io/2026/05/11/huma-finance-v1-exploit-on-polygon-drains-101k-in-usdc/
forge test --contracts src/test/2026-05/Renegade_exp.sol -vvvhttps://arbiscan.io/tx/0x0e494685ace16d372066c5b4db959b58ebac6d88166c2d9d618e0e421dc0c77e https://x.com/renegade_fi/status/2053531772634427599 https://x.com/DefimonAlerts/status/2053538325969977801
forge test --contracts src/test/2026-05/TrustedVolumes_exp.sol --match-contract TrustedVolumesExploit -vvhttps://rekt.news/trustedvolumes-rekt https://www.darknavy.org/web3/exploits/trustedvolumes-rfq-proxy-drain/ https://blog.verichains.io/p/trustedvolumes-exploit-analysis
forge test --contracts src/test/2026-05/Ekubo_exp.sol -vvvhttps://etherscan.io/tx/0x770bc9a1f7c32cb63a5002b9ceb5c7994cd3af0fc6b2309cb32d3c46f629daa0 https://x.com/EkuboProtocol/status/2051754481465856038 https://x.com/blockaid_/status/2051757787714118125
forge test --contracts ./src/test/2026-05/SharwaMarginTrading_exp.sol -vvvhttps://t.me/defimon_alerts/2975
forge test --contracts ./src/test/2026-04/RWAVault_exp.sol -vvvhttps://t.me/defimon_alerts/2958
forge test --contracts ./src/test/2026-04/JUDAO_exp.sol -vvv --evm-version shanghaihttps://t.me/defimon_alerts/2955
forge test --contracts ./src/test/2026-04/unverified_a152_exp.sol -vvvhttps://t.me/defimon_alerts/2987
forge test --contracts ./src/test/2026-04/SingularityDynaVault_exp.sol -vvv --evm-version shanghaihttps://x.com/DefimonAlerts/status/2048698708309705069
forge test --contracts ./src/test/2026-04/giddyvaultv3_compound_auth_exp.sol -vvv --evm-version cancungiddyvaultv3_compound_auth_exp.sol
https://x.com/DefimonAlerts/status/2047334517535642024
forge test --contracts ./src/test/2026-04/KipseliPropAMM_exp.sol -vvv --evm-version cancunhttps://x.com/DefimonAlerts/status/2046873857571934254
forge test --contracts ./src/test/2026-04/JuiceboxREVLoans_exp.sol -vvvhttps://x.com/DefimonAlerts/status/2046862935650345139
forge test --contracts ./src/test/2026-04/ThetanutsVaultShareRounding_exp.sol -vvvThetanutsVaultShareRounding_exp.sol
https://t.me/defimon_alerts/2933
forge test --contracts ./src/test/2026-04/AaveRebalancerCreditDelegation_exp.sol -vvvAaveRebalancerCreditDelegation_exp.sol
https://x.com/DefimonAlerts/status/2046504796463808991
forge test --contracts ./src/test/2026-04/XLootStaking_exp.sol -vvvhttps://x.com/DefimonAlerts/status/2044709964091187660
forge test --contracts src/test/2026-04/MONA_LisaVault_exp.sol -vvvhttps://x.com/exvulsec/status/2043928546662592949
TVL at Risk: ~$35.7M
forge test --contracts src/test/2026-04/SaturnProtocol_exp.sol -vvv --fork-url https://rpc.ankr.com/ethhttps://gist.github.com/sgInnora/b70ad98327649ed4ab976a122f45e485
Note: Vendor states SAT-001 (underflow) is mitigated by _validateTotals, and SAT-002 (tolerance compound) is a trusted-role design observation.
forge test --contracts ./src/test/2026-04/SubQuerySettings_exp.sol -vvv --evm-version shanghaihttps://t.me/defimon_alerts/2909
forge test --contracts ./src/test/2026-04/SquidMulticallAllowanceDrain_exp.sol -vvv --evm-version shanghaiSquidMulticallAllowanceDrain_exp.sol
https://x.com/DefimonAlerts/status/2041530294369386806
forge test --contracts ./src/test/2026-04/PerpPair_exp.sol -vvv --evm-version praguehttps://x.com/DefimonAlerts/status/2041070927908126897
forge test --contracts ./src/test/2026-03/WhalebitOracleManipulation_exp.sol -vvvWhalebitOracleManipulation_exp.sol
https://x.com/DefimonAlerts/status/2039372077686251787
forge test --contracts ./src/test/2026-03/VTSwapHook_exp.sol -vvv --evm-version cancunhttps://x.com/DefimonAlerts/status/2038647146098954283
forge test --contracts src/test/2026-03/EST_exp.sol -vvv --evm-version shanghaihttps://bscscan.com/address/0xD4524Be41cd452576aB9FF7b68a0b89aF8498a91
forge test --contracts ./src/test/2026-03/XocolatlLiquidator_exp.sol -vvv --evm-version shanghaihttps://t.me/defimon_alerts/2834
forge test --contracts ./src/test/2026-03/Univ3CollateralToken_exp.sol -vvv --evm-version shanghaihttps://x.com/DefimonAlerts/status/2036449500512891317
forge test --contracts ./src/test/2026-03/bce_exp.sol -vvv --evm-version cancunhttps://t.me/defimon_alerts/2814
forge test --contracts ./src/test/2026-03/ATMBlindBox_exp.sol -vvv --evm-version shanghaihttps://t.me/defimon_alerts/2808
forge test --contracts ./src/test/2026-03/Revamp_exp.sol -vvv --evm-version cancunhttps://x.com/DefimonAlerts/status/2034532544239088053
forge test --contracts ./src/test/2026-03/unverified_1304_exp.sol -vvv --evm-version cancunhttps://x.com/DefimonAlerts/status/2034532547191820390
forge test --contracts src/test/2026-03/Venus_THE_exp.sol --match-test testTraceDrivenPoC -vvvhttps://bscscan.com/tx/0x4f477e941c12bbf32a58dc12db7bb0cb4d31d41ff25b2457e6af3c15d7f5663f
forge test --contracts ./src/test/2026-03/unverified_237d_exp.sol -vvvhttps://x.com/DefimonAlerts/status/2034532549905580417
forge test --contracts ./src/test/2026-03/AlkemiEarn_exp.sol -vvvhttps://x.com/blockaid_/status/2031351881029546194
forge test -vvv --contracts ./src/test/2026-03/Curve_LlamaLend_exp.solhttps://x.com/yieldsandmore/status/2028368378457362629
forge test src/test/2026-02/LAXO_Token_exp.sol -vvvhttps://x.com/CertiKAlert/status/2027317095420072317
forge test --contracts ./src/test/2026-02/XDKRecycle_exp.sol -vvv --evm-version shanghaihttps://x.com/DefimonAlerts/status/2024163654631882916
forge test --contracts ./src/test/2026-02/Moonwell_exp.sol -vvvhttps://forum.moonwell.fi/t/mip-x43-cbeth-oracle-incident-summary/2068
https://forum.moonwell.fi/t/recovery-plan-cbeth-incident-and-moonwell-apollo-onboarding/2084
https://x.com/pashov/status/2023872510077616223
https://x.com/moo9000/status/2024040101982990534
NOTICE: SynapLogic is totally a cheat contract, with backdoors, vulnerabilities and rug pulls.
forge test -vvv --contracts ./src/test/2026-01/SynapLogic_exp.solhttps://x.com/TenArmorAlert/status/2013432861366292520?s=20
https://x.com/hklst4r/status/2013440353844461979?s=20
https://x.com/CertiKAlert/status/2013440963851755610?s=20
https://x.com/nn0b0dyyy/status/2013445844394279260?s=20
forge test -vvv --contracts ./src/test/2026-01/makina_exp.sol --evm-version cancun
# MUST use evm >= cancunhttps://x.com/nn0b0dyyy/status/2013472538832314630
https://x.com/TenArmorAlert/status/2013460083078836342
https://x.com/CertiKAlert/status/2013473512116363734
forge test -vvv --contracts ./src/test/2026-01/MTToken_exp.solhttps://x.com/TenArmorAlert/status/2010630024274010460?s=20
https://x.com/nn0b0dyyy/status/2010638145155661942?s=20
forge test -vvv --contracts ./src/test/2026-01/futureswap_exp.solhttps://x.com/nn0b0dyyy/status/2009922304927731717?s=20
forge test --contracts ./src/test/2026-01/Truebit_exp.sol -vvvhttps://www.certik.com/zh-CN/resources/blog/truebit-incident-analysis
forge test --contracts ./src/test/2026-01/PRXVT_exp.sol -vvv --block-gas-limit 60000000 # use gas limit control iterationshttps://x.com/CertiKAlert/status/2006685174587605315
Foundry also has the ability to report the gas used per function call which mimics the behavior of hardhat-gas-reporter. Generally speaking if gas costs per function call is very high, then the likelihood of its success is reduced. Gas optimization is an important activity done by smart contract developers.
Every poc in this repository can produce a gas report like this:
forge test --gas-report --contracts <contract> -vvvFor Example: Let us find out the gas used in the Audius poc
Execution
forge test --gas-report --contracts ./src/test/Audius.exp.sol -vvvDemo
Moved to DeFiVulnLabs
Moved to DeFiLabs
This project is licensed under the Apache License 2.0.
