## Summary
The smart contract implementation for an NFT (Non-Fungible Token) stream includes a function to restrict the transferability of tokens upon minting. The `_update` function checks this `isTransferable` flag during each transfer attempt, ensuring compliance with the specified transferability restriction. However, a limitation exists: once a token is marked as non-transferable, it remains permanently non-transferable. This lack of a toggling mechanism may limit flexibility in token transfers in future scenarios where such transfers become necessary.
## Vulnerability Details
1. **Transferability Limitation**:
- The `_update` function enforces a one-time setting of transferability for each token at creation, based on the `isTransferable` flag. Once the token is minted as non-transferable, it cannot later be toggled to become transferable.
- This restriction affects any subsequent recipient of the token, preventing them from ever transferring it, even if such an action become authorized or necessary.
2. **Code Review**:
- The `_update` function in its current form does not allow for the transferability status of a token to be changed post-mint.
- While preventing accidental burns and unauthorized transfers, this static transferability setting introduces a rigidity that could be improved with a toggling feature.
## Impact
The inability to toggle the transferability status of tokens post-creation can have several implications:
- A token that was initially marked as non-transferable may require transferability in later stages, for example, due to an ownership change or an authorization granted to a third party. E.g Payroll tracking, promotion of staff.
- Certain use cases may require tokens to become transferable over time or under specific conditions, such as upon reaching a specific period or an authorized change in status.
- Token holders who initially agreed to non-transferable status might need to later transfer or exchange the token, and the lack of flexibility in doing so could reduce the token’s overall utility.
## Tools Used
- **Manual Review**:
## Recommendations
1. **Introduce a Transferability Toggle Function**:
Implement a function to enable authorized parties (e.g., original sender, current owner, or approved third parties) to toggle the `isTransferable` status of a token. This could allow flexibility in token usage while maintaining controlled access.
2. **Controlled Transferability Update**:
Introduce conditions that can modify `isTransferable` only under specific, controlled circumstances. For example, a token could become transferable if it reaches a designated age or if approved by the contract owner, thus preserving intended security while enabling flexibility.
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.