Nimbus Platform security record

BNB Chain, Ethereumnimbusplatform.ioGitHub

As of 3 Nov 2026, Nimbus Platform has 1 audit report on Trustblock, by CertiK, dated 30 Sep 2022. That report lists no open critical findings.

Critical findings
No open critical findings
In 1 report.
Open the latest report
Your label, live
Get the label for your site

Record last updated . It holds audits, findings and contracts up to Nov 2026, and incidents up to Oct 2026. Trustblock does not review code.

Audits1

Newest first

AuditSecurity firmDateScopeCritical findingsReport
NimbusPlatform ET - NFTSecurity firm: CertiKDate: Scope: Files named in the reportNo open critical findingsOpen · skynet.certik.com

Findings22

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

SeverityOpenAcknowledgedFixed
Critical000
High042
Medium003
Low0013
HighContract's State Can Be Re-initializedNimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

The `initialize` function can be called by the contract `owner` multiple times. This introduces a centralization risk where contract `owner` can be change important parameters of contract such as address of the staking and router contracts.

Open the report
HighUnchecked Success of `deposit` CallNimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

In the function `buyStakingSet()`, we call `deposit()` but do not check if the call succeeds. We should ensure the call succeeds otherwise a users balance can be updated with a positive amount without actually depositing assets.

Open the report
MediumPotential Reentrancy Attack (Not Involving Ether)NimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

A reentrancy attack can occur when the contract creates a function that makes an external call to another untrusted contract before resolving any effects. If the attacker can control the untrusted contract, they can make a recursive call back to the original function, repeating interactions that would have otherwise not run after the external call resolved the effects. ### External call(s) ```solidity=191 _withdrawUserRewards(tokenId, tokenOwner, nbuReward, cakeReward); ``` * This function call executes the following external call(s). * In `StakingSet._withdrawUserRewards`, * `NbuStaking.getReward()` * In `TransferHelper.safeTransfer`, * `(success,data) = token.call(abi.encodeWithSelector(0xa9059cbb,to,value))` * In `StakingSet._withdrawUserRewards`, * `GnbuStaking.getReward()` * In `StakingSet._withdrawUserRewards`, * `TransferHelper.safeTransfer(address(nbuToken),tokenOwner,totalNbuReward)` * In `StakingSet._withdrawUserRewards`, * `CakeStaking.deposit(CAKE_PID,0)` * In `StakingSet._withdrawUserRewards`, * `TransferHelper.safeTransfer(address(cakeToken),tokenOwner,totalCakeReward)` ```solidity=195 NbuStaking.withdraw(userSupply.NbuStakingAmount); ``` ```solidity=196 GnbuStaking.withdraw(userSupply.GnbuStakeNonce); ``` ```solidity=197 CakeStaking.withdraw(CAKE_PID, userSupply.CakeBnbAmount); ``` ```solidity=199 TransferHelper.safeTransfer(address(nbuToken), tokenOwner, userSupply.NbuStakingAmount); ``` ```solidity=200 TransferHelper.safeTransfer(address(gnbuToken), tokenOwner, userSupply.GnbuStakingAmount); ``` ```solidity=201 pancakeRouter.removeLiquidityETH(address(cakeToken), userSupply.CakeBnbAmount, 0, 0, tokenOwner, block.timestamp); ``` ### State variables written after the call(s) ```solidity=203 userSupply.IsActive = false; ``` ```solidity=204 userSupply.BurnTime = block.timestamp; ``` --- ### External call(s) ```solidity=199 _withdrawUserRewards(tokenId, tokenOwner, nbuReward, cakeReward); ``` * This function call executes the following external call(s). * In `TransferHelper.safeTransfer`, * `(success,data) = token.call(abi.encodeWithSelector(0xa9059cbb,to,value))` * In `StakingSetBusd._withdrawUserRewards`, * `NbuStaking.getReward()` * In `StakingSetBusd._withdrawUserRewards`, * `GnbuStaking.getReward()` * In `StakingSetBusd._withdrawUserRewards`, * `TransferHelper.safeTransfer(address(nbuToken),tokenOwner,totalNbuReward)` * In `StakingSetBusd._withdrawUserRewards`, * `CakeStaking.deposit(CAKE_PID,0)` * In `StakingSetBusd._withdrawUserRewards`, * `TransferHelper.safeTransfer(address(cakeToken),tokenOwner,totalCakeReward)` ```solidity=203 NbuStaking.withdraw(userSupply.NbuStakingAmount); ``` ```solidity=204 GnbuStaking.withdraw(userSupply.GnbuStakeNonce); ``` ```solidity=205 CakeStaking.withdraw(CAKE_PID, userSupply.CakeBnbAmount); ``` ```solidity=207 TransferHelper.safeTransfer(address(nbuToken), tokenOwner, userSupply.NbuStakingAmount); ``` ```solidity=208 TransferHelper.safeTransfer(address(gnbuToken), tokenOwner, userSupply.GnbuStakingAmount); ``` ```solidity=209 pancakeRouter.removeLiquidityETH(address(cakeToken), userSupply.CakeBnbAmount, 0, 0, tokenOwner, block.timestamp); ``` ### State variables written after the call(s) ```solidity=211 userSupply.IsActive = false; ``` ```solidity=212 userSupply.BurnTime = block.timestamp; ```

Open the report
MediumTransaction May FailNimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

The deadline of the transaction is set to the current `block.timestamp`. This may not leave a sufficient amount of time for the function calls `swapExactETHForTokens()` and `swapExactBNBForTokens()` to succeed.

Open the report
MediumUnchecked Success of External CallsNimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

The linked statements are external calls to independent contracts. We should ensure the calls succeed since the rewards amounts are dependent on the success of these calls.

Open the report
LowDivide Before MultiplyNimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

Performing integer division before multiplication truncates the low bits, losing the precision of calculation. ```solidity=123 uint CakeEAmount = amount / 100 * 30; ``` --- ```solidity=131 uint CakeEAmount = amount / 100 * 30; ```

Open the report
LowFunction Should Be Declared ExternalNimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

The functions which are never called internally within the contract should have external visibility for gas optimization. ```solidity=250 function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { ``` --- ```solidity=344 function getUserTokens(address user) public view returns (uint[] memory) { ``` --- ```solidity=352 function balanceOf(address owner) public view virtual override returns (uint256) { ``` --- ```solidity=363 function name() public view virtual override returns (string memory) { ``` --- ```solidity=367 function symbol() public view virtual override returns (string memory) { ``` --- ```solidity=372 function approve(address to, uint256 tokenId) public virtual override { ``` --- ```solidity=389 function setApprovalForAll(address operator, bool approved) public virtual override { ``` --- ```solidity=397 function transferFrom(address from, address to, uint256 tokenId) public virtual override { ``` --- ```solidity=403 function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { ```

Open the report
LowMissing Error MessagesNimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

The **require** can be used to check for conditions and throw an exception if the condition is not met. It is better to provide a string message containing details about the error that will be passed back to the caller.

Open the report
LowMissing Zero Address ValidationNimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

Addresses should be checked before assignment or external call to make sure they are not zero addresses. File: HubRouting.sol (Line 25, Function `transferOwnership`) ```sol newOwner = transferOwner; ``` - `transferOwner` is not zero-checked before being used. --- File: HubRouting.sol (Line 79) ```sol constructor(address _StakingMain) { StakingMain = _StakingMain; } ``` - `_StakingMain` is not zero-checked before being used. --- File: StakingMain.sol (Line 148, Function `transferOwnership`) ```sol newOwner = transferOwner; ``` - `transferOwner` is not zero-checked before being used. --- File: StakingSetStorage.sol (Line 104, Function `transferOwnership`) ```sol newOwner = transferOwner; ``` - `transferOwner` is not zero-checked before being used.

Open the report
LowPotential Reentrancy Attack (Benign)NimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

*This issue is considered benign because the reentrancy only acts as a double call.* A reentrancy attack can occur when the contract creates a function that makes an external call to another untrusted contract before resolving any effects. If the attacker can control the untrusted contract, they can make a recursive call back to the original function, repeating interactions that would have otherwise not run after the external call resolved the effects. ### External call(s) ```solidity=252 NbuStaking.getReward(); ``` * This call sends Ether. ```solidity=253 GnbuStaking.getReward(); ``` * This call sends Ether. ```solidity=258 TransferHelper.safeTransfer(address(nbuToken), tokenOwner, totalNbuReward); ``` * This call sends Ether. ### State variables written after the call(s) ```solidity=259 weightedStakeDate[tokenId] = block.timestamp; ``` --- ### External call(s) ```solidity=252 NbuStaking.getReward(); ``` * This call sends Ether. ```solidity=253 GnbuStaking.getReward(); ``` * This call sends Ether. ```solidity=258 TransferHelper.safeTransfer(address(nbuToken), tokenOwner, totalNbuReward); ``` * This call sends Ether. ```solidity=261 CakeStaking.deposit(CAKE_PID, 0); ``` * This call sends Ether. ### State variables written after the call(s) ```solidity=263 tikSupplies[tokenId].CurrentRewardDebt = user.rewardDebt; ``` ```solidity=264 tikSupplies[tokenId].CurrentCakeShares = user.amount; ``` --- ### External call(s) ```solidity=264 NbuStaking.getReward(); ``` * This call sends Ether. ```solidity=265 GnbuStaking.getReward(); ``` * This call sends Ether. ```solidity=270 TransferHelper.safeTransfer(address(nbuToken), tokenOwner, totalNbuReward); ``` * This call sends Ether. ### State variables written after the call(s) ```solidity=271 weightedStakeDate[tokenId] = block.timestamp; ``` --- ### External call(s) ```solidity=264 NbuStaking.getReward(); ``` * This call sends Ether. ```solidity=265 GnbuStaking.getReward(); ``` * This call sends Ether. ```solidity=270 TransferHelper.safeTransfer(address(nbuToken), tokenOwner, totalNbuReward); ``` * This call sends Ether. ```solidity=273 CakeStaking.deposit(CAKE_PID, 0); ``` * This call sends Ether. ### State variables written after the call(s) ```solidity=275 tikSupplies[tokenId].CurrentRewardDebt = user.rewardDebt; ``` ```solidity=276 tikSupplies[tokenId].CurrentCakeShares = user.amount; ``` --- ### External call(s) ```solidity=286 TransferHelper.safeTransferFrom(purchaseToken, msg.sender, stakingSet, _amount); ``` * This call sends Ether. ### State variables written after the call(s) ```solidity=289 _userTokens[msg.sender].push(tokenCount); ``` ```solidity=288 tokenCount++; ``` ```solidity=290 _mint(msg.sender, tokenCount); ``` * This function call executes the following assignment(s). * In `StakingMain._mint`, * `_balances[to] += 1` *Note: Only a sample of 3 assignments (out of 4) are shown above.* --- ### External call(s) ```solidity=85 (uint256 nbuAmount,uint256 gnbuAmount,uint256 cakeLPamount) = makeSwaps(amountBNB); ``` * This function call executes the following external call(s). * In `StakingSet.makeSwaps`, * `amountsBnbCakeSwap = pancakeRouter.swapExactETHForTokens{value: (CakeEAmount / 2) / MULTIPLIER}(0,path,address(this),block.timestamp)` * In `StakingSet.makeSwaps`, * `(amountBnbCake,liquidityBnbCake) = pancakeRouter.addLiquidityETH{value: (amount - CakeEAmount / 2) / MULTIPLIER}(address(cakeToken),amountsBnbCakeSwap[1],0,0,address(this),block.timestamp)` * In `StakingSet.makeSwaps`, * `amountsBnbNbuStaking = nimbusRouter.swapExactBNBForTokens{value: NbuAmount}(0,path,address(this),block.timestamp)` * In `StakingSet.makeSwaps`, * `amountsBnbGnbuStaking = nimbusRouter.swapExactBNBForTokens{value: NbuAmount}(0,path,address(this),block.timestamp)` * This call sends Ether. ```solidity=87 NbuStaking.stake(nbuAmount); ``` * This call sends Ether. ### State variables written after the call(s) ```solidity=88 _balancesRewardEquivalentNbu[tokenId] += nbuAmount; ``` --- ### External call(s) ```solidity=85 (uint256 nbuAmount,uint256 gnbuAmount,uint256 cakeLPamount) = makeSwaps(amountBNB); ``` * This function call executes the following external call(s). * In `StakingSet.makeSwaps`, * `amountsBnbCakeSwap = pancakeRouter.swapExactETHForTokens{value: (CakeEAmount / 2) / MULTIPLIER}(0,path,address(this),block.timestamp)` * In `StakingSet.makeSwaps`, * `(amountBnbCake,liquidityBnbCake) = pancakeRouter.addLiquidityETH{value: (amount - CakeEAmount / 2) / MULTIPLIER}(address(cakeToken),amountsBnbCakeSwap[1],0,0,address(this),block.timestamp)` * In `StakingSet.makeSwaps`, * `amountsBnbNbuStaking = nimbusRouter.swapExactBNBForTokens{value: NbuAmount}(0,path,addres

Open the report
Show 8 more
LowPotential Reentrancy Attack (Events)NimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

*This finding has a minor impact because the reentrancy only causes out-of-order events.* A reentrancy attack can occur when the contract creates a function that makes an external call to another untrusted contract before resolving any effects. If the attacker can control the untrusted contract, they can make a recursive call back to the original function, repeating interactions that would have otherwise not run after the external call resolved the effects. ### External call(s) ```solidity=191 _withdrawUserRewards(tokenId, tokenOwner, nbuReward, cakeReward); ``` * This function call executes the following external call(s). * In `StakingSet._withdrawUserRewards`, * `NbuStaking.getReward()` * In `TransferHelper.safeTransfer`, * `(success,data) = token.call(abi.encodeWithSelector(0xa9059cbb,to,value))` * In `StakingSet._withdrawUserRewards`, * `GnbuStaking.getReward()` * In `StakingSet._withdrawUserRewards`, * `TransferHelper.safeTransfer(address(nbuToken),tokenOwner,totalNbuReward)` * In `StakingSet._withdrawUserRewards`, * `CakeStaking.deposit(CAKE_PID,0)` * In `StakingSet._withdrawUserRewards`, * `TransferHelper.safeTransfer(address(cakeToken),tokenOwner,totalCakeReward)` ```solidity=195 NbuStaking.withdraw(userSupply.NbuStakingAmount); ``` ```solidity=196 GnbuStaking.withdraw(userSupply.GnbuStakeNonce); ``` ```solidity=197 CakeStaking.withdraw(CAKE_PID, userSupply.CakeBnbAmount); ``` ```solidity=199 TransferHelper.safeTransfer(address(nbuToken), tokenOwner, userSupply.NbuStakingAmount); ``` ```solidity=200 TransferHelper.safeTransfer(address(gnbuToken), tokenOwner, userSupply.GnbuStakingAmount); ``` ```solidity=201 pancakeRouter.removeLiquidityETH(address(cakeToken), userSupply.CakeBnbAmount, 0, 0, tokenOwner, block.timestamp); ``` ### Events emitted after the call(s) ```solidity=206 emit BurnStakingSet(tokenId, userSupply.NbuStakingAmount, userSupply.GnbuStakingAmount, userSupply.CakeBnbAmount); ``` --- ### External call(s) ```solidity=199 _withdrawUserRewards(tokenId, tokenOwner, nbuReward, cakeReward); ``` * This function call executes the following external call(s). * In `TransferHelper.safeTransfer`, * `(success,data) = token.call(abi.encodeWithSelector(0xa9059cbb,to,value))` * In `StakingSetBusd._withdrawUserRewards`, * `NbuStaking.getReward()` * In `StakingSetBusd._withdrawUserRewards`, * `GnbuStaking.getReward()` * In `StakingSetBusd._withdrawUserRewards`, * `TransferHelper.safeTransfer(address(nbuToken),tokenOwner,totalNbuReward)` * In `StakingSetBusd._withdrawUserRewards`, * `CakeStaking.deposit(CAKE_PID,0)` * In `StakingSetBusd._withdrawUserRewards`, * `TransferHelper.safeTransfer(address(cakeToken),tokenOwner,totalCakeReward)` ```solidity=203 NbuStaking.withdraw(userSupply.NbuStakingAmount); ``` ```solidity=204 GnbuStaking.withdraw(userSupply.GnbuStakeNonce); ``` ```solidity=205 CakeStaking.withdraw(CAKE_PID, userSupply.CakeBnbAmount); ``` ```solidity=207 TransferHelper.safeTransfer(address(nbuToken), tokenOwner, userSupply.NbuStakingAmount); ``` ```solidity=208 TransferHelper.safeTransfer(address(gnbuToken), tokenOwner, userSupply.GnbuStakingAmount); ``` ```solidity=209 pancakeRouter.removeLiquidityETH(address(cakeToken), userSupply.CakeBnbAmount, 0, 0, tokenOwner, block.timestamp); ``` ### Events emitted after the call(s) ```solidity=214 emit BurnStakingSet(tokenId, userSupply.NbuStakingAmount, userSupply.GnbuStakingAmount, userSupply.CakeBnbAmount); ``` --- ### External call(s) ```solidity=252 NbuStaking.getReward(); ``` ```solidity=253 GnbuStaking.getReward(); ``` ### Events emitted after the call(s) ```solidity=255 emit BalanceNBURewardsNotEnough(tokenOwner, tokenId, totalNbuReward); ``` --- ### External call(s) ```solidity=252 NbuStaking.getReward(); ``` ```solidity=253 GnbuStaking.getReward(); ``` ```solidity=258 TransferHelper.safeTransfer(address(nbuToken), tokenOwner, totalNbuReward); ``` ```solidity=261 CakeStaking.deposit(CAKE_PID, 0); ``` ```solidity=266 TransferHelper.safeTransfer(address(cakeToken), tokenOwner, totalCakeReward); ``` ### Events emitted after the call(s) ```solidity=268 emit WithdrawRewards(tokenOwner, tokenId, totalNbuReward, totalCakeReward); ``` --- ### External call(s) ```solidity=264 NbuStaking.getReward(); ``` ```solidity=265 GnbuStaking.getReward(); ``` ### Events emitted after the call(s) ```solidity=267 emit BalanceNBURewardsNotEnough(tokenOwner, tokenId, totalNbuReward); ``` --- ### External call(s) ```solidity=264 NbuStaking.getReward(); ``` ```solidity=265 GnbuStaking.getReward(); ``` ```solidity=270 TransferHelper.safeTransfer(address(nbuToken), tokenOwner, totalNbuReward); ```

Open the report
LowRedundant CodeNimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

The following functions should only be called by the `hubRouting` contract : - ``buyStakingSet()`` - `withdrawUserRewards()` - `burnStakingSet()` The functions do include a check; however, we should use the modifier `onlyHub`.

Open the report
LowSPDX license identifier not providedNimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

The source file does not specify SPDX license identifier in the attached Solidity files.

Open the report
LowUnchecked ERC-20 `transfer()`/`transferFrom()` CaNimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

The return value of the transfer()/transferFrom() call is not checked. ```solidity=289 IBEP20(tokenAddress).transfer(to, amount); ``` --- ```solidity=301 IBEP20(tokenAddress).transfer(to, amount); ``` --- ```solidity=536 IBEP20(tokenAddress).transfer(to, amount); ```

Open the report
LowUnused Return ValueNimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

The return value of an external call is not stored in a local or state variable. ```solidity=201 pancakeRouter.removeLiquidityETH(address(cakeToken), userSupply.CakeBnbAmount, 0, 0, tokenOwner, block.timestamp); ``` --- ```solidity=209 pancakeRouter.removeLiquidityETH(address(cakeToken), userSupply.CakeBnbAmount, 0, 0, tokenOwner, block.timestamp); ``` --- ```solidity=334 IBEP20(token).approve(spender, allowance); ``` --- ```solidity=346 IBEP20(token).approve(spender, allowance); ``` --- ```solidity=53 IBEP20(_nbuToken).approve(_nimbusRouter, type(uint256).max); ``` --- ```solidity=54 IBEP20(_gnbuToken).approve(_nimbusRouter, type(uint256).max); ``` --- ```solidity=55 IBEP20(_nbuToken).approve(_NbuStaking, type(uint256).max); ``` --- ```solidity=56 IBEP20(_gnbuToken).approve(_GnbuStaking, type(uint256).max); ``` --- ```solidity=57 IBEP20(_nbuToken).approve(_nimbusRouter, type(uint256).max); ``` --- ```solidity=58 IBEP20(_gnbuToken).approve(_nimbusRouter, type(uint256).max); ``` --- ```solidity=58 IBEP20(_lpBnbCake).approve(_CakeStaking, type(uint256).max); ``` --- ```solidity=59 IBEP20(_lpBnbCake).approve(_pancakeRouter, type(uint256).max); ``` --- ```solidity=59 IBEP20(_nbuToken).approve(_NbuStaking, type(uint256).max); ``` --- ```solidity=60 IBEP20(CakeStaking.CAKE()).approve(_pancakeRouter, type(uint256).max); ``` --- ```solidity=60 IBEP20(_gnbuToken).approve(_GnbuStaking, type(uint256).max); ``` --- ```solidity=61 IBEP20(_busdToken).approve(_nimbusRouter, type(uint256).max); ``` --- ```solidity=63 IBEP20(_lpBnbCake).approve(_CakeStaking, type(uint256).max); ``` --- ```solidity=64 IBEP20(_lpBnbCake).approve(_pancakeRouter, type(uint256).max); ``` --- ```solidity=65 IBEP20(CakeStaking.CAKE()).approve(_pancakeRouter, type(uint256).max); ```

Open the report
LowUnused State VariableNimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

The state variable `target` is never assigned an address.

Open the report
LowUser-Defined GettersNimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

The linked functions are equivalent to the compiler-generated getter functions for the respective variables.

Open the report
LowVariables That Could Be Declared as ImmutableNimbusPlatform ET - NFT · CertiK · 30 Sep 2022Fixed

The linked variables 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.

Open the report

Contracts

No deployed address is recorded for these audits.

The reports name a repository or files. Open a report to see its scope.

The repositories and files the reports name

Show this on your site

Is this your project? Show this record on your own website. The label states what the record holds, links to this page and updates by itself. It is free and needs no sign-in.

Content

Facts

Automatic: the three strongest facts of this project’s own record (its last audit and two more), highlighted. They update with the record. Picking a fact turns Automatic off.

Fixed as
Language

Style

Layout
Theme
Accent
Corners

Format

Size
Date
Embed as
HTML
<head>
<script src="https://widget.trustblock.run/project-widget.min.js" defer></script>
</head>
<body>
<div
data-tb-project-widget
data-tb-project-slug="nimbus"
></div>
</body>

Paste the code where the label should appear. It uses no API credit and updates by itself.

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