In Deploy.s.sol
, the Airdrop is created using the Merkle root from makeMerkle.js
. The issue arises because the tree is created with 18 decimals in the JavaScript file, while all Solidity contracts assume amounts have 6 decimals. Given that only 100(e6) USDC are sent to the Airdrop contract, no user can retrieve a number with 18 decimals due to insufficient funds. This prevents users from claiming rewards because the Merkle proof won't pass with a 6-decimal number.
Moreover, the correct root is used in the test file.
The following file shows the generated root, which is the same as the one used in the deployment script.
{"format":"standard-v1","tree":["0xf69aaa25bd4dd10deb2ccd8235266f7cc815f6e9d539e9f4d47cae16e0c36a05",...
Likelihood: High
The contract will never send USDC to users unless the user deposits 100e12 USDC into it.
Impact:
Loss of funds, which become stuck in the Airdrop contract.
Recreate a valid root with 6 decimals (like USDC) and replace the one in the deployment script.
For reference, the calculated Merkle root on my end is 0x3b2e22da63ae414086bec9c9da6b685f790c6fab200c7918f2879f08793d77bd
, which matches the one in the test file.
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.