Maverick Protocol

CertiKFiles named in the report

CertiK reviewed Maverick Protocol on 21 Apr 2022: 17 findings, 0 critical; 8 marked fixed, 9 acknowledged.

No open critical findings
Open the reportOpen Maverick Protocol’s security record

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings17

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

SeverityOpenAcknowledgedFixed
Critical000
High020
Medium012
Low066
Medium`Checkpoint.initialize()` Can Be Called MultipleFixed

In library Checkpoint, the function `initialize()` is used to initialize `buffer.maxSize` and to push the first Checkpoint instance to `buffer.list`. Currently this function can be called after the first valid call, which would still push new instances but bypass the updating logics in `append()`.

Medium`Pool.initialize()` Can Be Called Multiple TimesFixed

In contract Pool, the function `initialize()` is possible to be called multiple times, if the input `_quote` is zero address.

Low`public` Function Could Be Declared as `external`Fixed

The function(s) which are never called internally within the contract could have external visibility for gas optimization. e.g. Checkpoint.sol: `twap()`

LowDivision Before MultiplicationFixed

Performing integer division before multiplication truncates the low bits, which could potentially lead to the precision loss. Checkpoint.sol: `twap()` ```solidity uint256 previousU = (start.cumulative - previous.cumulative) / (start.timestamp - previous.timestamp); ``` ```solidity cumulativeDiff += (start.timestamp - startTimestamp) * previousU; ```

LowLack of Zero Address ChecksFixed

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

LowPotential Error in Function `Checkpoint.append()`Fixed

In function `append()`, it seems possible that when `append()` is called, and when the function wants to immediately append a new buffer, the `buffer.end - 2` operation would lead to error. E.g. when `buffer.end` is `1`. ```solidity if (previous.timestamp == timestamp) { current = buffer.list[buffer.end - 1]; previous = buffer.list[buffer.end - 2]; ... ``` Also, the `diff` would be `0` when the condition of `previous.timestamp == timestamp` fulfills.

LowTypos in Comments and Variable NamesFixed

`boundries` <> `boundaries`

LowUnused Struct Field / Function ParameterFixed

Checkpoint.sol: The `uint16 array` field in struct `Buffer` is never used. ZeroExRouter.sol: The `bytes calldata auxiliaryData` parameter in functions `sellTokenForToken()`, `sellEthForToken()` and `sellTokenForEth()` is never userd.

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

  • contracts/libraries/AdvancedMath.sol
  • contracts/models/Pool.sol
  • contracts/models/LPToken.sol
  • contracts/libraries/BasicMath.sol
  • contracts/libraries/SafeTransfer.sol
  • contracts/models/ZeroExRouter.sol
  • contracts/libraries/Cast.sol
  • contracts/models/Factory.sol
  • contracts/libraries/Checkpoint.sol
  • contracts/libraries/Bin.sol
  • contracts/models/Router.sol

Part of Maverick Protocol’s security record

Maverick Protocol
Audits3 audits by 2 firmsLast audit May 2023, by ABDK Consulting.
Critical findingsNo open critical findingsAcross 3 reports.
Open Maverick Protocol’s security record

Security firm

CertiK

1,044 projects reviewed · 1,393 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