The deployment script declares the zkSync Era Mainnet USDC token address as 0x1D17CbCf0D6d143135be902365d2e5E2a16538d4
at line 8. However, the actual token address is 0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4
. The wrong address uses a b
instead of an a
as the 21st character. The MerkleAirdrop
receives the wrong token address, which causes all token transfers to fail when users try to claim their airdrop amounts, essentially locking the funds in the contract.
Severity: High
Likelihood: High
The MerkleAirdrop
contract receives an invalid zkSync Era USDC address. However, the correct address is used to transfer USDC to the contract at line 18 in the deployment script. This will cause the USDC tokens to be stuck in the contract, as all transfers will fail when users will try to claim their airdrop amounts. The fact that the token pointed to by the MerkleAirdrop
contract is immutable and cannot be changed by the owner of the contract aggravates the issue.
Manual review.
Use the correct zkSync Era Mainnet USDC address, and use the same address variable throughout the deployment script. If the same variable (with incorrect address) had been used throughout, the deployment script would have failed at line 18 (token tranfer to the MerkleAirdrop
contract), saving the protocol team from loss of funds.
In the deployment script, make the following changes:
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.