# 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