As of 21 Oct 2026, Tokemak has 6 audit reports by 2 security firms on Trustblock; the latest is by Hexens, dated 25 Mar 2025. Those reports list no open critical findings.
Record last updated . It holds audits and findings, contracts and incidents up to Oct 2026. Trustblock does not review code.
Newest first
| Audit | Security firm | Date | Scope | Critical findings | Report |
|---|---|---|---|---|---|
| Tokemak security review | Security firm: Hexens | Date: | Scope: Not recorded (see the report) | No open critical findings | Open · GitHub |
| Tokemak security review | Security firm: Hexens | Date: | Scope: Not recorded (see the report) | 1 critical finding, fixed | Open · GitHub |
| Tokemak Acctoke Migration security review | Security firm: Hexens | Date: | Scope: Not recorded (see the report) | 1 critical finding, fixed | Open · GitHub |
| Tokemak Mainnet Follow Up security review | Security firm: Hexens | Date: | Scope: Not recorded (see the report) | No open critical findings | Open · GitHub |
| Tokemak security review | Security firm: Hexens | Date: | Scope: Not recorded (see the report) | No open critical findings | Open · GitHub |
| Tokemak | Security firm: Quantstamp | Date: | Scope: Files named in the report | No open critical findings | Open · certificate.quantstamp.com |
Statuses are the security firm’s own, from each report.
| Severity | Open | Acknowledged | Fixed |
|---|---|---|---|
| Critical | 0 | 0 | 2 |
| High | 0 | 1 | 9 |
| Medium | 0 | 2 | 15 |
| Low | 1 | 9 | 21 |
The report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the report`_executeControllerCommand` is defined as a public function. This function carries a very dangerous logic, i.e., executing arbitrary transactions without any access control.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe report gives no description here.
Open the reportThe listed parameters are not validated properly: 1. `contracts/wallet/ZeroExTradeWallet.sol:32~33`: check newRouter and newManager against zero addresses 1. `contracts/wallet/ZeroExTradeWallet.sol:46~47`: check `signer` against zero 1. `contracts/controllers/SushiswapController.sol:25~26`: check router snd factory against zero 0. `contracts\manager\Manager.sol::_executeControllerCommand`, should check if `registeredControllers[transfer.controllerId]` is not zero. 0. `contracts\controllers\ZeroExController.sol::constructor`, should check if the input addresses are non-zeros. 0. `contracts\controllers\UniswapController.sol::constructor`, should check if the input addresses are non-zeros. 0. `contracts\pools\Pool.sol::initialize`, should check if the input addresses are non-zeros. 0. `contracts\pools\EthPool.sol::initialize`, should check if the input addresses are non-zeros.
Open the reportDivision takes place before multipliciation: ``` uint256 effectiveSecondsStaked = (secondsStaked.div(schedule.interval)).mul(schedule.interval); ``` This potentially leads to precision loss.
Open the reportThere is no possiblity to alter properties of a given schedule. It might be needed to set certain props, namely `isActive` and `isPublic`. Not being able to unset `isActive` seems to be a bigger issue. To stop deposits, the only possibilities would be **i)** to pause the contract (which would affects all schedules) or **ii)** remove the schedule of interest.
Open the reportThe `withdraw` function in the stated contracts, unlike the deposit function, is not pausable. The same holds true for the `slash` function in the staking contract.
Open the reportThe provided liquidity is not eligible for SUSHI rewards.
Open the reportBy calling the functions listed below, the allowance is set to a very large number. This could be used by external contracts that are not under admin team’s control to drain the contract, whenever the target becomes malicious, or being controlled by malicious users. 0. `contracts\controllers\SushiswapController.sol::_approve`. 0. `contracts\controllers\ZeroExController.sol::_approve`. 0. `contracts\controllers\BalancerController.sol::_approve`. 0. `contracts\controllers\UniswapController.sol::_approve`. 0. `contracts\controllers\ZeroExTradeWallet.sol::_approve`.
Open the reportBoth `deposit` and `withdraw` functions accept external addresses and trust them with calling transfer (safeTransfer) on them. Calling token methods on arbitrary addresses is a bad security practice. At the moment, only the manager can call these methods. Moreover, deposit does not check duplicates before adding tokens to the token list.
Open the reportAll the deposited tokens are approved with the maximum value to be pulled out by the `zeroExRouter` address.
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="tokemak"></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