Contracts (Safe multisigs, ERC-4337 accounts) can hold tokens and be listed in the Merkle tree, so they should be able to claim like any beneficiary.
Two independent blocks exclude them: _isValidSignature is pure and only uses ECDSA.tryRecover, ignoring EIP-1271 (how contracts sign), so a smart wallet's valid signature is rejected; and mintSnowman uses _safeMint, which reverts for a contract without onERC721Received.
Likelihood:
The beneficiary is a contract (multisig / smart wallet), which is common among holders with meaningful balances.
Impact:
An entire class of legitimate beneficiaries is permanently excluded from the airdrop.
There is no user-side workaround - an account cannot become an EOA.
The test deploys an EIP-1271 smart wallet that validly approves its own signature per the standard, yet claimSnowman rejects it; a second test shows a plain contract without onERC721Received cannot receive the NFT even via the direct mint path.
Verified with Foundry (test_unaSmartWalletEip1271NoPuedeReclamar, test_unContratoSinOnErc721ReceivedNoPuedeRecibirLosNfts), forge test passing:
Validate signatures with OpenZeppelin's SignatureChecker, which falls back to EIP-1271 for contract signers (this requires dropping pure):
Decide consciously whether to support contract receivers; if so keep _safeMint and document the onERC721Received requirement, otherwise use _mint.
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.