# NFTs can never be redeemed back to their conviction scores leading to lock/loss of funds

FairSide's tokenizeConviction() never credits the protocol's fscAddress checkpoints, so acquireConviction() underflows and tokenized NFTs can never be redeemed back to conviction scores.

- Payout: Audit contest
- Severity: medium
- Program: FairSide
- Disclosed: 2021-07-07
- Write-up quality: 6/10
- Original: https://github.com/code-423n4/2021-05-fairside-findings/issues/31
- Library page: https://bugbountylibrary.com/r/c4%3A2021-05-fairside%3AM-07
- Tags: area:web3 domain:web3 impact:funds-loss kind:contest platform:code4rena sev:medium tech:evm tech:solidity vuln:accounting-error vuln:dos

**Target:** ERC20ConvictionScore / conviction NFT tokenization contract
**Root cause:** tokenizeConviction() fails to accrue the user's conviction score to fscAddress, so no checkpoints exist for fscAddress (fscNum=0, fscOld=0); acquireConviction() then calls sub224() with convictionScore>0 and underflows, reverting.
**Steps:**
1. Alice calls tokenizeConviction() to mint an NFT from her conviction score; no checkpoint is written for fscAddress.
2. Alice sells the NFT to Bob.
3. Bob calls acquireConviction() to redeem the NFT back to a conviction score.
4. sub224() on line 350 of ERC20ConvictionScore.sol underflows because fscOld=0 and convictionScore>0, reverting the call.
**How found:** Code reading: noticed fscAddress tracking exists (reduction on acquire) but the complementary accrual in tokenizeConviction() is missing, and no bootstrap/initialization of fscAddress checkpoints exists, implying sub224 underflow.
**Exploitation:** Any NFT holder attempting to redeem a tokenized conviction score back via acquireConviction() hits a guaranteed revert, permanently losing the conviction score value (FSDs recoverable only via the separate release function).
**Insight:** When a contract tracks a global aggregate alongside per-user balances, check both directions of every update (mint vs redeem) and whether the aggregate address is ever initialized; a missing accrual on one path turns the symmetric subtraction into a guaranteed underflow revert.

