# LITRA Security Audit Report ## GENERAL ### Project Brief Title | Description --- | --- Client | Litra Project name | Litra App Timeline | 22-02-2023 - N/A Initial commit | [26eb98aa2709707db72c9d9d065eba7f6616486c](https://github.com/litrafi/litra-contract/commit/26eb98aa2709707db72c9d9d065eba7f6616486c) Final commit | N/A #### Short Overview Very chaotic, poorly commented code, no explanatory documentation. Many non-optimal decisions are made in the code, the review of which is beyond the scope of the audit. #### Project Scope The audit covered the following files: File name | Link --- | --- LA.sol | [LA.sol](https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/LA.sol) Voting.sol | [Voting.sol](https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/Voting.sol) EmergencyAdminManaged.sol | [EmergencyAdminManaged.sol](https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/admin/EmergencyAdminManaged.sol) OwnershipAdminManaged.sol | [OwnershipAdminManaged.sol](https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/admin/OwnershipAdminManaged.sol) ParameterAdminManaged.sol | [ParameterAdminManaged.sol](https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/admin/ParameterAdminManaged.sol) Stoppable.sol | [Stoppable.sol](https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/admin/Stoppable.sol) SimpleBurner.sol | [SimpleBurner.sol](https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/burner/SimpleBurner.sol) WrappedNFT.sol | [WrappedNFT.sol](https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/tokenize/WrappedNFT.sol) NftReceiver.sol | [NftReceiver.sol](https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/NftReceiver.sol) ### Finding Severity breakdown Each vulnerability discovered during the audit is classified based on their severity and likelihood and have the following classification: Severity | Description --- | --- Critical | Bugs leading to assets theft, funds locking, or any other issues that lead to fund loss. High | Bugs that break contract core logic or lead to the contract state corruption, or any bugs that require manual recovery. Medium | Bugs leading to partial failure of the contract minor logic under specific conditions or significant gas optimizations. Informational | Bugs, suggestions, or optimizations that do not have a significant impact in terms of contract security. Based on the feedback received from the Client regarding the report, all issues assigned the following statuses: Status | Description --- | --- Fixed | Recommended fixes have been made to the project code and no longer affect its security. Acknowledged | The Customer is aware of the finding. Recommendations for the finding are planned to be resolved in the future. ### Summary of findings Severity | # of Findings --- | --- CRITICAL| 1 HIGH | 1 MEDIUM | 2 INFORMATIONAL | 5 ### Conclusion File name | Contract deployed on mainnet --- | --- N/A ## FINDINGS REPORT ### CRITICAL #### 1. Unlimited mint of `LA` token, no checks on epoch supply. ##### Description Despite having a complicated calculation model of mintable amounts, the `mint` method allows the `minter` to produce an unlimited number of tokens. If this behavior is by design, then it is not at all obvious from the provided code. Links to the code: - https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/LA.sol#L155 ##### Recommendation Add token mint limits according to the logic of mintable quantity calculation. ##### Status **NEW** ##### Client's comments > comment here https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/LA.sol#L151 - -- ### HIGH #### 2. Creator has unlimited rights for mint/burn and can't be changed ##### Description Due to the lack of project documentation, the deployment model is not clear. In case of the `creator` is an EOA address there is no way to chenge it address or transfer the role. At the same time `creator` has no limits to `mint` and `burn`. If this address is compromised, the users of the project are not protected in any way. Link to the code: https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/tokenize/WrappedNFT.sol#L10-L22 ##### Recommendation Create a separate method to set the creator's address, or use an role based access control. Add documented deployement plan and contract relationships. ##### Status **NEW** ##### Client's comments > comment here - -- ### MEDIUM #### 3. Wrong `totalSupply` value in the event when creating the vote. ##### Description At the moment of creating a vote, an incorrect value of `token.totalSupply()` is written to the `StartVote` event. It is necessary to write value at the snapshot block: `token.totalSupplyAt(snapshotBlock)`, which is already stored in `votingPower` var. Links to the code: - https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/Voting.sol#L448 ##### Recommendation Replace event emit code with next one: ```solidity emit StartVote(voteId, msg.sender, _metadata, minBalance, minTime, votingPower, token.balanceOfAt(msg.sender, snapshotBlock)); ``` ##### Status **NEW** ##### Client's comments > comment here #### 4. Wrong `totalSupply` value in the event when creating the vote. ##### Description Voting allows specifying a partial use of the user's vote power, which can be used to manipulate the voting process. For example, a user with significant voting power, votes with a very small part, thereby sabotaging the quorum. Links to the code: - https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/Voting.sol#L472 ##### Recommendation Enforce votes by all available user's voting power. ##### Status **NEW** ##### Client's comments > comment here - -- ### INFORMATIONAL #### 5. Ill-conceived logic of access rights in `LA.sol` ##### Description Although there is a separate method for set the `minter`, it can be set only once, as there is a `require(minter == address(0), "Already set");`. Thus, due to the fact the `admin` account is not used anywhere else, it seems logical to set `minter` value in the constructor. Links to the code: - https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/LA.sol#L140 ##### Recommendation Refactor access model, or clarify it documentation if it required by design. ##### Status **NEW** ##### Client's comments > comment here #### 6. Unnecessary calculations ##### Description In `LA.sol` contract constant `INITIAL_RATE` is defined by the expression `100638977635782747603833865 / YEAR`, which: 1. leads to loss of precision in integer division 2. leads to extra bytecode (and therefore more gas consumption) when deploying a contract Links to the code: - https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/LA.sol#L14 ##### Recommendation It is recommended to calculate absolute vakue of the constant given the division. ##### Status **NEW** ##### Client's comments > comment here #### 7. Unused imports ##### Description The imported external contracts are not used in code. Links to the code: - https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/tokenize/WrappedNFT.sol#L4 - https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/admin/Stoppable.sol#L4 ##### Recommendation It is recommended to remove unused imports. ##### Status **NEW** ##### Client's comments > comment here #### 8. Addresses in constructor are not checked to zero. ##### Description In constructors, when specifying addresses used inside a contract, there is no check for a zero value, which may lead to the need to re-deploy contracts in case of an error. Links to the code: - https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/tokenize/WrappedNFT.sol#L11 - https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/burner/SimpleBurner.sol#L21 ##### Recommendation It is recommended to add checks for zero. ##### Status **NEW** ##### Client's comments > comment here #### 9. Text typos. ##### Description There are some typos in code: Links to the code: - https://github.com/litrafi/litra-contract/blob/26eb98aa2709707db72c9d9d065eba7f6616486c/contracts/dao/LA.sol#L145 ##### Recommendation It is recommended to fix the typos. ##### Status **NEW** ##### Client's comments > comment here