Contribute Protocol Rug Pull
What happened
Contribute.Protocol (CTB) is a fixed-supply Ethereum token whose entire 8,000-token supply is credited to the deployer in the constructor. The deployer paired 7,440 CTB with 3.5 ETH on Uniswap V2 on 2021-01-08 and received the 161.3691 LP tokens, and the code contains nothing that locks them. On 2021-03-10 the same address called removeLiquidityWithPermit on the Uniswap V2 router, burning 170.2846 LP tokens for 4.536765 WETH and 6,682.3183 CTB. The source has no sell block, blacklist or hidden mint; what it does give the owner is uncapped fee setters and a max-transaction setter that can be turned against holders. De.Fi's REKT database lists the token as an exit scam/rug pull with a loss of 3,919 USD.
The contract deployer added initial liquidity at: Tx 0x9b42…3669
The liquidity was removed by the contract deployer at: Tx 0xb6e9…6d5c
How it happened
- The constructor assigns the whole supply to the deployer:
_rOwned[_msgSender()] = _rTotal;withuint256 private _tTotal = 8000 * 10**18;. There is no mint function, so the deployer is the only initial holder. - The deployer adds 7,440 CTB and 3.5 ETH to the CTB/WETH Uniswap V2 pair and receives 161.3691 LP tokens (add-liquidity transaction 0x9b42811e…523669). The token code does not lock or burn liquidity; LP tokens sit with whoever received them.
- Fees and limits stay under owner control.
setTaxFeePercent(uint256 taxFee)andsetLiquidityFeePercent(uint256 liquidityFee)areonlyOwnerwith no upper bound, and_getTValuescomputestAmount.sub(tFee).sub(tLiquidity), so a combined fee above 100 makes every fee-paying transfer revert.setMaxTxPercentcan set_maxTxAmountto 0, after whichrequire(amount <= _maxTxAmount, ...)fails for any transfer where neither side is the owner. Fee-exempt addresses (_isExcludedFromFee, set for the owner and the contract in the constructor) are not charged fees. The opened transactions do not show these setters being called. - On 2021-03-10 the deployer address calls
removeLiquidityWithPermiton the Uniswap V2 router (transaction 0xb6e977b1…346d5c), burning 170.2846 LP tokens and receiving 4.536765 WETH and 6,682.3183 CTB. The WETH leaves the pair, so the liquidity against which other holders could sell CTB is reduced by that amount.
Protocol details
Evidence
- transaction Etherscan transaction 0x9b42811e...523669 (addLiquidityETH) etherscan.io
- transaction Etherscan transaction 0xb6e977b1...346d5c (removeLiquidityWithPermit) etherscan.io
- address Etherscan verified source, CTB 0xF776e108e50560075f69b6754cAe708975E74a2c etherscan.io
- analysis Sourcify repository, CTB repo.sourcify.dev
Build your security review skills
Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.