Whenever a vault is transfered, next function is triggered
As we can see smartVaultIndex.transferTokenId(_from, _to, _tokenId); is triggered
Then
This last function deletes tokenIds[_user], here _user = _from. Therefore vaults transfers of address _from can be DOS if _from has enough vaults by transfering many empty vaults to force SmartVaultIndex::removeTokenId to consume gas over block gas limit through for loop
Anyone can DOS smart vault transfers by transfering empty vaults to the user to DOS
Alice has 3 vaults and want to transfer 1 to Bob
Eve see these and mint 30.000 empty vaults. Each time he mint a vault he transfer it to Alice
When Alice try to tranfer her vault to Bob, the transaction revert because block gas limit is reached
Make more sense to make SmartVault an ERC721 NFT. To get the every vault from a user a mapping(address user => uint256[]tokenId) can be added, and modified every time a vault is minted or transfered.
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.