As of 3 Nov 2026, OpenWorld has 1 audit report on Trustblock, by CertiK, dated 16 May 2023. That report lists no open critical findings.
Record last updated . It holds audits, findings and contracts up to Nov 2026, and incidents up to Oct 2026. Trustblock does not review code.
Newest first
| Audit | Security firm | Date | Scope | Critical findings | Report |
|---|---|---|---|---|---|
| Open World | Security firm: CertiK | Date: | Scope: Files named in the report | No open critical findings | Open · skynet.certik.com |
Statuses are the security firm’s own, from each report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 0 |
| High | 0 | 4 | 0 |
| Medium | 0 | 2 | 1 |
| Low | 10 | 0 | 13 |
In `OpenWorld.sol`, the contract inherits `ERC20PausableUpgradeable` and uses extensively the `whenNotPaused` modifier to prevent many functions from being called if the contract is paused. \ However, the contract does not implement any function allowing to set `_paused` as true. Therefore the contract is not pausable.
Open the reportIn `OpenWorld.sol`, the function `burn()` is the only function allowing any user to modify the state of the contract `OPEN` (under specific conditions) that is not pausable.
Open the reportIn `RewardRouterV2.sol`, the function `_unstakeOpen()` computes a `reductionAmount` to burn as follow: ```solidity=695 uint256 reductionAmount = stakedBnOpen.mul(_amount).div( balance ); ``` if `stakedBnOpen.mul(_amount) < balance` then the burnt amount will be zero.
Open the reportIn `OpenWorld.sol`, the state variable `stakerAddress` is defined and can be set to any address, however, it is never used.
Open the reportBoolean constants can be used directly and do not need to be compared to true or false. --- ```solidity=45 require( tokenBlacklist[msg.sender] == false && tokenBlacklist[_to] == false, "Blacklist address cannot transfer" ); ``` --- ```solidity=50 require( isContractTransferBlock(msg.sender, _to) == false, "This address cannot send to ContractBlacklist Address" ); ``` --- ```solidity=54 require( isContractTransferBlock(_to, msg.sender) == false, "This address cannot receive from ContractBlacklist Address" ); ``` --- ```solidity=81 require( tokenBlacklist[_from] == false && tokenBlacklist[_to] == false, "Blacklist address cannot transfer" ); ``` --- ```solidity=86 require( tokenBlacklist[msg.sender] == false, "Blacklist address cannot transfer" ); ``` --- ```solidity=91 require( isContractTransferBlock(_from, _to) == false, "This address cannot send to ContractBlacklist Address" ); ``` --- ```solidity=95 require( isContractTransferBlock(_to, _from) == false, "This address cannot receive from ContractBlacklist Address" ); ```
Open the reportIn `OpenWorld.sol`, the function `transferFrom()` performs two checks returning the same error message: ```solidity=81 require( tokenBlacklist[_from] == false && tokenBlacklist[_to] == false, "Blacklist address cannot transfer" ); require( tokenBlacklist[msg.sender] == false, "Blacklist address cannot transfer" ); ```
Open the reportIn `OpenWorld.sol`, the function `initialize()` takes an address as a parameter named `owner_`. This parameter will be used to set the `feeAddress` and will receive all the `INITIAL_SUPPLY`. \ `OwnableUpgradeable.__Ownable_init();` will set the initializer address as the `owner` of the contract. The name `owner_` could lead one to think that the address provided will be the owner of the contract when it is not the case.
Open the reportIn `OpenWorld.sol`, There are no upper boundaries for `setSellFeeRate()`, it is possible to set `sellFeeRate` up to any arbitrary amount. \ However, if `sellFeeRate > 1000` then `getValuesWithSellRate()` might fail unexpectedly, preventing `transfer()` and `transferFrom()` to work correctly. ----- In `OpenStaking.sol`, there are no upper boundaries for `setUnstakingThreshold()`, it is possible to set `unstakingThreshold` up to any arbitrary value. \ If `unstakingThreshold` is set to a very high value then `unstake()` will fail before the threshold is passed, preventing users from unstaking their tokens.
Open the reportIn `RewardRouterV2.sol`, the function `batchStakeOpenForAccount()` does not check that `_accounts` and `_amounts` have the same length.
Open the reportThe **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 reportIn `OapRouter.sol`, the function `swapAndStake()` does not require any type of whitelisting for `tokenIn`. A malicious contract could be given as input. Moreover, some legit contracts could interfere with the logic of the functions, for example, deflationary tokens will not work well with `swapExactTokensForTokens()`.
Open the reportThe mathematical expression does not check arithmetic overflow. Such unsafe math operations may cause unexpected behavior if unusual parameters are given. Here `depositToken` is set when deploying the contract, hence it is not possible to guarantee the logic of the ERC20 will interact safely with `OpenStaking`.
Open the report```solidity=24 event Mint(address indexed from, address indexed to, uint256 value); ``` - `Mint` is declared in `OPEN` but never emitted. --- ```solidity=25 event Burn(address indexed burner, uint256 value); ``` - `Burn` is declared in `OPEN` but never emitted.
Open the reportIn `OpenWorld.sol`, the mapping `_nextClaimTime` is private and never used in the contract `OPEN`. ```solidity=15 mapping(address => uint256) private _nextClaimTime; ```
Open the reportThe reports name a repository or files. Open a report to see its scope.
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.
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.
<head><script src="https://widget.trustblock.run/project-widget.min.js" defer></script></head><body><divdata-tb-project-widgetdata-tb-project-slug="open-world"></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