Creating a SablierV2MerkleLL
or SablierV2MerkleLT
contract using SablierV2MerkleLockupFactory
is not necessary as it is not stored in the factory contract.
This results in SablierV2MerkleLockupFactory
being useless as users could simply deploy their own SablierV2Merkle
contracts.
Usually, a factory contract stores the contracts it creates in its storage in order for the dApp to easily retrieve the legitimate contracts deployed.
Users would trust the contracts displayed on the web interface as it is shown by Sablier
on which they rely.
Since that is not the case, SablierV2MerkleLockupFactory
simply acts as a helper contract and it doesn't enforce users to create their SablierV2Merkle
from the factory.
In this case, a potential error can occur in SablierV2MerkleLT
as it does not check that the supplied tranche percentages add up to 100% which was supposed to be done by the factory.
Add a storage variable in SablierV2MerkleLockupFactory
which is responsible for tracking the contracts created by it.
In case it is a design choice to not track the contracts created by the factory, the SablierV2MerkleLT
's constructor should verify the tranchesWithPercentages
variable adds up to 100%.
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.