FreeCity

CertiKFiles named in the report

CertiK reviewed FreeCity on 26 Sep 2022: 23 findings, 0 critical; 9 marked fixed, 3 acknowledged, 11 open.

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

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings23

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

SeverityOpenAcknowledgedFixed
Critical000
High031
Medium100
Low1008
MediumPotential Reentrancy AttackOpen

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.

LowDead CodeOpen

One or more internal functions are not used. ```solidity=151 function ____Voice721_init_init_unchained( ``` --- ```solidity=164 function allOwner(uint256 parent, uint256 mother) ``` --- ```solidity=179 function _baseURI() internal view virtual override returns (string memory) { ``` --- ```solidity=13 function unsafeWriteBytes32(uint index, bytes32 source) ``` --- ```solidity=32 function unsafeWriteBytes(uint index, bytes memory source) ``` --- ```solidity=62 function unsafeWriteAddress(uint index, address source) ``` --- ```solidity=82 function unsafeWriteUint(uint index, uint source) ``` --- ```solidity=101 function unsafeWriteUint8(uint index, uint8 source) ``` --- ```solidity=122 function arrayEq(bytes memory a, bytes memory b) ``` --- ```solidity=270 function calculateMatchPrice(Order memory buy, Order memory sell) ```

LowImproper Usage of `public` and `external` TypeOpen

`public` functions that are never called by the contract could be declared as `external`.

LowMisleading Function NameOpen

The linked function is called `receiveApproval()`, however, the actual implementation of the function calls `transferFrom()`, which transfer's ERC20 tokens from one address to another. There is no guarantee the external implementation of `transferFrom()` will require approval in order to execute the function.

LowMissing Error MessagesOpen

**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.

LowMissing Zero Address ValidationOpen

Addresses should be checked before assignment or external call to make sure they are not zero addresses.

LowState Variable Should Be Declared `constant`Open

The following state variables never change and can be declared as `constant` to save gas: * `proxyRegistryAddress` * `delegateProxyImplementation`

LowUnnecessary Use of SafeMathOpen

The `SafeMath` library is used unnecessarily. With Solidity compiler versions 0.8.0 or newer, arithmetic operations will automatically revert in cases of integer overflow or underflow.

LowUnused ContractOpen

```solidity=6 abstract contract ERC20 is ERC20Basic { ``` - The abstract contract `ERC20` is declared but never implemented. --- ```solidity=5 abstract contract ERC721{ ``` - The abstract contract `ERC721` is declared but never implemented.

LowUnused EventOpen

```solidity=89 event Mint(address indexed, address indexed, uint256); ``` - `Mint` is declared in `FreeCityGame_v2` but never emitted. --- ```solidity=92 event Find(address indexed, address indexed, uint256); ``` - `Find` is declared in `FreeCityGame_v2` but never emitted. --- ```solidity=14 event Approval( address indexed owner, address indexed spender, uint256 value ); ``` - `Approval` is declared in `ERC20` but never emitted. --- ```solidity=9 event Transfer(address indexed from, address indexed to, uint256 value); ``` - `Transfer` is declared in `ERC20Basic` but never emitted. --- ```solidity=9 event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); ``` - `Transfer` is declared in `ERC721` but never emitted. --- ```solidity=14 event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); ``` - `Approval` is declared in `ERC721` but never emitted. --- ```solidity=19 event ApprovalForAll(address indexed owner, address indexed operator, bool approved); ``` - `ApprovalForAll` is declared in `ERC721` but never emitted.

Show 1 more
LowUser-Defined GettersOpen

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

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 (22)

  • exchange/Exchange.sol
  • proxy/OwnableDelegateProxy.sol
  • exchange/SaleKindInterface.sol
  • exchange/SafeMath.sol
  • exchange/ERC20.sol
  • FreeCityGame_v2.sol
  • proxy/ProxyRegistry.sol
  • exchange/ERC20Basic.sol
  • proxy/FreeCityProxyRegistry.sol
  • exchange/TokenRecipient.sol
  • MyToken.sol
  • exchange/ArrayUtils.sol
  • proxy/OwnedUpgradeabilityProxy.sol
  • exchange/ERC721.sol
  • exchange/FreeCityExchange.sol
  • proxy/Proxy.sol
  • exchange/ReentrancyGuarded.sol
  • proxy/AuthenticatedProxy.sol
  • exchange/ERC721Instance.sol
  • proxy/TokenTransferProxy.sol
  • exchange/ExchangeCore.sol
  • proxy/OwnedUpgradeabilityStorage.sol

Part of FreeCity’s security record

FreeCity
Audits1 audit by 1 firmLast audit Sep 2022, by CertiK.
Critical findingsNo open critical findingsIn 1 report.
Open FreeCity’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