Rapid Set Dollar Rug Pull

Reported loss $48K
Ethereum
Rugpull

What happened

Rapid Set Dollar (RSD) is an Ethereum token whose contract has an uncapped mint function gated only by the Minter role. On-chain, a mint came in the same transaction as a proxy upgrade: on 2020-12-23 the deployer called implement(address _contract) on its Root proxy 0x4b96392d…7e2B7D, the proxy emitted Upgraded, and in the same transaction 500 RSD was minted to each of five addresses (2,500 RSD in total), one of them the deployer 0xe11b4735…fE3Dd5. Three days later the deployer swapped 30 RSD for 6,125.16 USDC on Uniswap V2. De.Fi's REKT database lists the incident as an exit scam/rugpull with $47,505 lost and describes the mint and the sales that followed.

Mint transaction: Tx 0x4a43…26f0

De.Fi's listing names the five recipients:

  1. 0xe11b4735…fE3Dd5 (the contract deployer). The listing says this address sold tokens for $6,133 (tx 0xec5689a9…57ac77) and distributed tokens to other external wallets, which sold them for $40,440.
  2. 0x3d107BEd…452263. The listing says this address added liquidity (tx 0x178d5cee…e635e2) and removed it with a $932 profit (tx 0x536e814a…fcd055).
  3. 0xBb43A073…aA8369. The listing says this address transferred its tokens on, pointing to its token transfer list.
  4. 0xF2EE8af2…cc5349. Transaction 0xdafa5031…4ea9eb shows it sending its 500 RSD to the Root proxy 0x4b96392d…7e2B7D through a Deposit call on 2020-12-26.
  5. 0x228552b0…6F51b3. The listing says this address transferred its tokens on (tx 0xc0b59e27…ea90a9).

The De.Fi figures add up to the listed $47,505 ($6,133 + $40,440 + $932); the 6,133 and 40,440 sale figures and the recipients' later actions come from the De.Fi listing only, because only the deployer's swap and recipient 4's deposit were opened on Etherscan.

How it happened

  1. The Dollar token contract (0x8e1D3Ab0…658cea) lets any Minter mint an unlimited amount: function mint(address account, uint256 amount) public onlyMinter returns (bool) { _mint(account, amount);. There is no supply cap, no timelock and no vote around it, and addMinter(address account) public onlyMinter lets any existing minter add more minters.
  2. The Minter check is require(isMinter(_msgSender()), "MinterRole: caller does not have the Minter role"). The mint seen on-chain happened in a transaction addressed to the Root proxy 0x4b96392d…7e2B7D, an upgradeable EIP-1967 proxy created by the same address that deployed the token. If the proxy holds the Minter role, whoever can swap its implementation controls whatever code runs as that minter; the token source alone does not show which addresses hold the role.
  3. On 2020-12-23 (block 11511141) the deployer 0xe11b4735…fE3Dd5 sent a transaction to the proxy calling implement(address _contract). The proxy emitted Upgraded with the new implementation 0x3116519C…1C1e82, and the token logged five mints from the zero address of 500 RSD each, to the deployer and to 0x3d107BEd…452263, 0xBb43A073…aA8369, 0xF2EE8af2…cc5349 and 0x228552b0…6F51b3. Because mint is onlyMinter and the mint ran in a transaction addressed to the proxy, the likely reading is that the upgraded proxy code acted as the Minter; this is an inference, since the new implementation's source was not read.
  4. On 2020-12-26 the deployer called swapExactTokensForTokens on Uniswap V2 Router 2 (0x7a250d56…F2488D) and swapped 30 RSD for 6,125.1645 USDC. De.Fi's REKT database lists further sales by wallets that received distributed tokens ($40,440) and a $932 profit from adding and removing liquidity, for $47,505 in total.
  5. What the code allowed (an upgrade that mints without limit) is separate from what is documented to have happened (a single 2,500 RSD mint and the sales above).

Protocol details

Classification Stablecoin
Protocol Type Exit Scam/Rugpull
Affected asset / contract RSD
Protocol links Website @ReserveDollar

Build your security review skills

Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.