FORTUNE

CertiK1 address on BNB Chain

CertiK reviewed Fortuneum (FORTUNE) on 18 Nov 2022: 13 findings, 0 critical; 1 acknowledged, 12 open.

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

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings13

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

SeverityOpenAcknowledgedFixed
Critical000
High010
Medium000
Low1200
Low`liquidityShare` and `marketingShare` can be diffOpen

Assume the fees are all zero except for `marketingFeeOnBuy` and `marketingFeeOnSell` are `1` as they are in the `constructor()`. In this assume that the fees are gathered using these fees up until `canSwap` would be true and before there is a sell so that `swapAndSendMarketing()` has not been called. Then assume the buy and sell fees are updated so that all fees are zero except for `liquidityFeeOnBuy` and `liquidityFeeOnSell` which are set to 1. Then a sell is executed so that in this case it will `swapAndLiquify()` the entire `contractTokenBalance` as the `marketingShare` will be zero because of the updated fees. However, all those fees were generated to be swapped and sent to the marketing address instead of added to liquidity. In addition, the `walletToWalletTransferFee` is split between marketing and liquidity based on the buy and sell fees. This can cause confusion as to what percentage of a transfer is allocated for marketing versus liquidity.

LowFunction Should Be Declared ExternalOpen

The following functions are never called internally within the contract and should have external visibility: - `enableTrading()` - `isExcludedFromFees(address account)`

LowInconsistency between Function Name and FunctionaOpen

The function `excludeFromFees()` allows not only to exclude an address from fees but also allows to include an address paying fees.

LowLeftover tokens caused by the unoptimized one-sidOpen

The `swapAndLiquify()` function converts half of the `FORTUNEUM` tokens to `BNB`. The other half of `FORTUNEUM` tokens and part of the converted `BNB` tokens are then added as liquidity to the `uniswapV2Pair`. For every `swapAndLiquify()` function call, a small amount of `BNB` is left over in the contract. This is because the price of `FORTUNEUM` drops after swapping the first half into `BNB`, and the other half of `FORTUNEUM` require less than the converted `BNB` to be paired with when adding liquidity. The contract has a `claimStuckTokens()` function, which withdraws the contracts `BNB` balance to the `msg.sender`, so we mark this finding as **informational** as the tokens will not be locked forever.

LowMissing Emit EventsOpen

There should always be events emitted in the sensitive functions that are controlled by centralization roles. Specifically: - `enableTrading()` does not emit an event when is executed. - `claimStuckTokens()` emits an event only when `ERC20token.transfer()` is executed. No event is emitted when BNB is withdrawn from the contract.

LowPrivilege not Revoked or TransferredOpen

When the contract is deployed the following addresses are exempted from fees: - the current `owner` - the current `marketingWallet` If ownership is transferred or renounced with `transferOwnership()` or `renounceOwnership()`, the exemptions are not granted to the new owner nor are they revoked from the previous owner. Also if `marketingWallet` is updated with `changeMarketingWallet()` the exemptions are not granted to the new marketing wallet nor are they revoked from the previous marketing address.

LowSolidity Version Not RecommendedOpen

The contract uses the latest solidity version available at the moment which is `0.8.17`. Using the most recent version can be risky as all bugs for the current version may not be known.

LowThird Party DependencyOpen

The contract is serving as the underlying entity to interact with a third party AMM protocol. The scope of the audit treats third party entities as black boxes and assume their functional correctness. However, in the real world, third parties can be compromised and this may lead to lost or stolen assets. In addition, upgrades of third parties can possibly create severe impacts, such as increasing fees of third parties, migrating to new LP pools, etc.

LowUnchecked ERC-20 `transfer()` CallOpen

The return value of the transfer() call is not checked. ```solidity=760 ERC20token.transfer(msg.sender, balance); ```

LowUnused InterfaceOpen

```solidity=20 interface IUniswapV2Pair { ``` - `IUniswapV2Pair` is declared but never used.

Show 2 more
LowUsage of Magic NumbersOpen

The linked magic numbers are hardcoded in the codebase.

LowVariable That Could Be Declared as ImmutableOpen

`uniswapV2Pair` assigned in the constructor can be declared as `immutable`. Immutable state variables can be assigned during contract creation but will remain constant throughout the lifetime of a deployed contract. A big advantage of immutable variables is that reading them is significantly cheaper than reading from regular state variables since they will not be stored in storage.

Contracts in scope1

AddressChainSource code
0x2d716831d82d837c3922ad8c10fe70757b5814feChain: BNB ChainSource code: Verified source

Part of Fortuneum’s security record

Fortuneum
Audits2 audits by 1 firmLast audit Nov 2022, by CertiK.
Critical findingsNo open critical findingsAcross 2 reports.
Open Fortuneum’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