1ex Audit

CertiKCode version: not recorded (see the report)

CertiK reviewed 1 Exchange (1ex Audit) on 29 Dec 2023: 15 findings, 0 critical; 4 marked fixed, 5 acknowledged, 6 open.

No open critical findings
Open the reportOpen 1 Exchange’s security record

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings15

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

SeverityOpenAcknowledgedFixed
Critical000
High040
Medium010
Low604
LowIncompatible with USDT contractFixed

Some stable coin contract like [USDT](https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7#code) is not compatible with the Openzeppelin ERC20 template, for example, it will not return bool value when transfer operation finished, which may cause the require statement always revert. **[Note]**: Since the `_usdContract` is unknown during the auditing and is a third-party dependency, the team should be careful with this issue.

LowMissing Validation of `vestingContract`Fixed

The linked function allows the `ADMIN` role to revoke vesting schedules. However, this function does not check whether `_revokableVestings` has contained the input `vestingContract`. Invoking functions on an unverified third-party address may introduce significant risks.

LowMissing Zero Address ValidationFixed

The provided code snippet lacks a validation check to ensure that the input address is not `address(0)`. This input `address` is utilized to create a new `Schedule`: ```solidity schedule = Schedule( account, amount, 0, startTime, startTime + (cliffDays * 1 days), startTime + (cliffDays * 1 days) + (vestingDays * 1 days), asset, revokable, false ); ``` This address is designated to receive the vested `amount` in the `claim()` function. If `schedule.account` is set to the zero address, the `claim()` function will always fail. ```solidity require(IERC20(schedule.asset).transfer(schedule.account, amountToTransfer), "Vesting: transfer failed"); ```" It's crucial to add a validation check for the input address to prevent such issues.

LowUnused Return ValueFixed

The smart contract does not check or store the return value of an external call in a local or state variable, which may introduce vulnerabilities due to the unhandled outcome. ```solidity=203 _allVestings.add(_contract); ``` --- ```solidity=204 if (revokable) { _revokableVestings.add(_contract); } ``` --- ```solidity=260 _revokableVestings.remove(vestingContract); ```

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.

Part of 1 Exchange’s security record

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