The USDC token address 0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4
hardcoded in Deploy::run()
to transfer tokens differs from the s_zkSyncUSDC
address. While s_zkSyncUSDC
is passed down as airdropToken when deploying MerkleAirdrop
contract, the hardcoded address is used to transfer tokens to the airdrop. This directly affects MerkleAirdrop::claim
which transfer tokens to eligible addresses, thereby directly disrupting the functionality of the protocol if s_zkSyncUSDC
address is not the correct token address of USDC token.
Additionally, for transfering s_amountToAirdrop
USDC to MerkleAirdrop
, the account executing the transaction needs to have sufficient balance of USDC tokens on Mainnet/Testnet, depending on the network. The way deploy script is set up, the owner is the Deploy contract which does not possess any USDC tokens, so the transfer function would revert and deployment would fail.
The inconsistency in the USDC token address and the ownership issue significantly disrupts the functionality of the MerkleAirdrop protocol. Users may experience transaction fails, resulting in a loss of trust and confidence in the protocol. The deployment failures hinder the successful initialization of the contract, delaying or preventing the airdrop distribution process altogether.
Manual Review
The address assigned to s_zkSyncUSDC is not equal to the one used for transfer of token,
Run make deploy
script of the Makefile. The script would revert with error routing to the transfer token function,
Consider using transferFrom
to transfer USDC from another account (with USDC possession) to the airdrop, or ensure the caller of the run() function has enough USDC to transfer. Use s_zkSyncUSDC
for the IERC20 transfer instead of hardcoded address, and ensure that the USDC token address is correct.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.