A counterfactual pool address should commit to the economic parameters a funder relies on, especially stakeToken and recoveryAddress. The factory salt only commits to (agreement, index). A third party can prefund the predicted clone address, then the agreement owner can create the pool at that address with a different recovery configuration and sweep the prefund.
The deterministic salt excludes the token, expiry, minimum stake, recovery address, and scope:
The pool is then initialized with creator-controlled economic parameters:
If an integration or user transfers tokens to the predicted pool address before PoolCreated, the eventual creator can choose a recovery address that captures those unaccounted tokens after expiry.
Prefunded tokens can be captured by the creator-selected recoveryAddress.
Integrations relying on predicted pool addresses can lose funds without ever interacting with stake().
This also combines with balance-delta callback accounting: a prefunded source pool can be deployed with recoveryAddress = PoolA, swept during a callback, and credited as attacker stake in PoolA. The salt issue is the setup that allows the prefund to be captured through the chosen recovery path.
Prefund laundering composition:
Commit all economically relevant configuration into the deterministic salt.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
View preliminary resultsAppeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.