The ApprovalFacet
contract implements a setApprovalForAll
function, which is intended to allow users to grant or revoke approval for an operator to manage all of their tokens. However, this function's effects are never utilized in any other part of the contract, rendering it completely non-functional.
1: Alice calls setApprovalForAll(Bob, true)
, believing she has granted Bob permission to manage all her tokens.
2: The contract emits an ApprovalForAll
event, reinforcing Alice's belief.
3: Alice later calls setApprovalForAll(Bob, false)
, thinking she has revoked Bob's permissions.
4: In reality, neither action has any effect on Bob's ability to manage Alice's tokens, as no other function checks the approval status set by setApprovalForAll
.
1: Users are provided with a false sense of security, believing they can grant or revoke broad permissions when in reality, these actions have no effect.
2: External systems relying on the ApprovalForAll
event may make incorrect assumptions about the contract's state.
Manual review
1: Introduce a mechanism to revoke individual token allowances in addition to the global approval.
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.