IOST

CertiKRepository at commit 3d5c255

CertiK reviewed IOST on 10 Mar 2025: 4 findings, 0 critical; 2 marked fixed, 2 open.

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

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings4

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

SeverityOpenAcknowledgedFixed
Critical000
High200
Medium000
Low002
LowMissing Emit EventsFixed

There should always be events emitted in the sensitive functions that are controlled by centralization roles.

LowMissing Input Validation for `createVestingScheduFixed

The following inputs may not be validated in the `createVestingSchedule` function: #### No Zero Address Check to `_beneficiary` The function `createVestingSchedule` does not explicitly validate that the `_beneficiary` is not the zero address. If `_beneficiary = address(0)`, any call to `release` would attempt to transfer tokens to the zero address. Depending on the underlying ERC20 token implementation: - Some tokens treat transfers to address(0) as a burn, which might be unintended. - Others might revert on transfers to address(0), causing the tokens to remain locked in the contract. The current `IOSToken` will revert transfers to `address(0)`, potentially locking the tokens in the contract forever. #### Slice Period Seconds is Larger Than Duration If `slicePeriodSeconds` is larger than `duration`, no tokens become vested until `currentTime >= cliff + duration`. If the intended vesting is truly linear or incremental, it could be an unintended design. If the team wants lump-sum vesting at the end (one big slice), the current design should be okay. The admin could deliberately set `slicePeriodSeconds = duration` or even `slicePeriodSeconds > duration` and get a single unlocking event at the end. #### The `_start` Can be Before the Current Time There is no restriction preventing `_start` from being less than the current block timestamp (`block.timestamp`). When `_start + _cliff` is already in the past, the schedule may be partially or fully vested upon creation. If this design is intended to allow the `beneficiary` to immediately have the right to release some or all of the tokens, the current should be okay.

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

  • https://github.com/gavin11599/iost-bsc-contract/contracts/IOSToken.sol at commit 3d5c25541db25314df32d5ea75a618d6a7b7a5b8
  • https://github.com/gavin11599/iost-bsc-contract/contracts/Vesting.sol at commit 3d5c25541db25314df32d5ea75a618d6a7b7a5b8
  • https://github.com/gavin11599/iost-bsc-contract/contracts/IOSToken.sol at commit e846518c3deae99c74a3c3c74a9d204827821e2a
  • https://github.com/gavin11599/iost-bsc-contract/contracts/Vesting.sol at commit e846518c3deae99c74a3c3c74a9d204827821e2a

Part of IOST’s security record

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