Nina - Audit

CertiKFiles named in the report

CertiK reviewed Nina (Nina - Audit) on 19 Feb 2025: 12 findings, 0 critical; 5 acknowledged, 7 open.

No open critical findings
Open the reportOpen Nina’s security record

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings12

Statuses are the security firm’s own, from its report.

SeverityOpenAcknowledgedFixed
Critical000
High020
Medium030
Low700
HighCentralization Risks in contract.solAcknowledged

In the contract `DividendPayingToken`, the role `_owner` has authority over the functions shown in the diagram below. Any compromise to the `_owner` account may allow the hacker to take advantage of this authority and distribute dividends to shareholders. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-ea6d-77675410-a736-21cc7bdafef7/diagrams/centralization_contract-DividendPayingToken-_owner.svg) In the contract `DividendTracker`, the role `_owner` has authority over the functions shown in the diagram below. Any compromise to the `_owner` account may allow the hacker to take advantage of this authority and exclude accounts from dividends, set the balance for an account, process account dividends and update claim time, update the claim wait time, set the last processed index, and update the minimum token balance for dividends. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-ea6d-77675410-a736-21cc7bdafef7/diagrams/centralization_contract-DividendTracker-_owner.svg) In the contract `NINA`, the role `_owner` has authority over the functions shown in the diagram below. Any compromise to the `_owner` account may allow the hacker to take advantage of this authority and update fees for buying transactions, update the sell fees, exclude account from receiving dividends, update minimum balance for dividends, set swap tokens at amount, enable or disable swapping, exclude account from fees, update gas processing value, enable trading and swap functionality, claim stuck tokens, set the last processed index, update the claim wait period, change the treasury wallet address, and claim the address for claimee. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-ea6d-77675410-a736-21cc7bdafef7/diagrams/centralization_contract-NINA-_owner.svg) In the contract `Ownable`, the role `_owner` has authority over the functions shown in the diagram below. Any compromise to the `_owner` account may allow the hacker to take advantage of this authority and renounce current ownership or transfer ownership to a new address. ![](https://accelerator-tasks-prod.acc.corp.certik.com/11ef-ea6d-77675410-a736-21cc7bdafef7/diagrams/centralization_contract-Ownable-_owner.svg)

HighInitial Token DistributionAcknowledged

`100_000_000 * (10 ** 9)` of the `NINA` tokens are sent to the contract deployer or one or several externally-owned account (EOA) addresses. This is a centralization risk because the deployer or the owner(s) of the EOAs can distribute tokens without obtaining the consensus of the community. Any compromise to these addresses may allow a hacker to steal and sell tokens on the market, resulting in severe damage to the project.

MediumFunction Call Not Revert on FailureAcknowledged

The function call `_transfer()` will never revert, even though executing the external call `dividendTracker.process(gas)` is failed. The current implementation above applies `try-catch` statement. Since no action is implemented in `catch` statement, it will ignore the exceptions when executing the external function `dividendTracker.process(gas)`. Therefore, although the external call `dividendTracker.process(gas)` reverts, the function `_transfer()` will still take the fees and transfer the tokens, as if no exception has occurred. However, the function would fail to update the user's reward, and the user could not receive rewards as expected.

MediumPotential Out-of-Gas ExceptionAcknowledged

```solidity=912 uint256 public gasForProcessing = 300_000; ``` ```solidity=1174 uint256 gas = gasForProcessing; try dividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) { ``` At the last step of function `_transfer` will call `dividendTracker.process` with constant gas limitation `300000`. But there may be not enough 300 thousand gas till this step. EVM may revert this call and return the out-of-gas exception.

MediumUninitialized `burnFeeOnSell` in ConstructorAcknowledged

In the contract constructor, `burnFeeOnBuy` is initialized to `1` and assigned twice, but the `burnFeeOnSell` variable is left uninitialized. Failing to initialize `burnFeeOnSell` may result in undefined or unexpected behavior when the contract attempts to use this value, leading to a potential free sell operation.

Contracts in scope

No deployed address is recorded for this audit.

The report names a repository or files. Open the report to see its scope.

Repository and files the report names (1)

  • contract.sol

Part of Nina’s security record

Nina
Audits1 audit by 1 firmLast audit Feb 2025, by CertiK.
Critical findingsNo open critical findingsIn 1 report.
Open Nina’s security record

Security firm

CertiK

1,044 projects reviewed · 1,375 reports · latest May 2025

See CertiK’s audits

Something wrong on this page? A missing report, a wrong date, a finding that was fixed since. Tell us and we check it against its source.

Tell us