Mintlayer security record

As of 5 Nov 2026, Mintlayer has 1 audit report on Trustblock, by CertiK, dated 8 Mar 2023. That report lists no open critical findings.

Critical findings
No open critical findings
In that report, 1 critical finding was reported. It is marked fixed by the firm that reported it. See the findings
Open the latest report
Your label, live
Get the label for your site

Record last updated . It holds audits and findings, contracts and incidents up to Nov 2026. Trustblock does not review code.

Audits1

Newest first

AuditSecurity firmDateScopeCritical findingsReport
Mintlayer (Audit #2)Security firm: CertiKDate: Scope: Files named in the report1 critical finding, fixedOpen · skynet.certik.com

Findings3

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

SeverityOpenAcknowledgedFixed
Critical001
High000
Medium000
Low101
CriticalInsufficient Check in Function `addRoot()`Mintlayer (Audit #2) · CertiK · 8 Mar 2023Fixed

The `addRoot()` permits a holder of the `MLTToken` to create a new vesting, and it checks if the caller holds enough tokens (in L125) when calling the function. However, this check is insufficient since there is no guarantee to ensure the caller will pay for the vesting tokens. For instance, an attacker can repeatedly create the vesting with his balance or dramatically inflate his balance instantly by flashloan and creating a huge investing schedule. ```solidity=113 function addRoot( bytes32 _root, uint256 _amount, uint256 _startTimestamp, bytes32[] calldata _proofBalance ) external { bytes32 _leaf = keccak256(abi.encodePacked(_amount)); require( MerkleProof.verify(_proofBalance, _root, _leaf), 'The supply sent does not match that of the merketree' ); require(_amount <= balanceOf(msg.sender), 'Amount exceeds balance'); require(!rootWhitelist[_root], 'Root hash already exists'); rootWhitelist[_root] = true; balanceByRootHash[_root] = _amount; startTimestampByRootHash[_root] = _startTimestamp; } ``` As the function relies only on the `balanceOf(msg.sender)`, an attacker can create multiple vestings by abusing the function `addRoot()`. This can lead to disastrous consequences as the attacker will set a vesting period extremely small, then withdraw tokens earlier than the previous vesting created by legitimate users of the project. The *scenarios* and a *proof of concept* to illustrate the attack are shown below,

Open the report
LowFeatures from `Ownable` not usedMintlayer (Audit #2) · CertiK · 8 Mar 2023Fixed

The contracts `MLTTokenV1` and `MLTToken` inherit of `Ownable` library from OpenZeppelin but doesn't use features from it.

Open the report

Contracts

No deployed address is recorded for these audits.

The reports name a repository or files. Open a report to see its scope.

The repositories and files the reports name

Show this on your site

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.

Content

Facts

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.

Fixed as
Language

Style

Layout
Theme
Accent
Corners

Format

Size
Date
Embed as
HTML
<head>
<script src="https://widget.trustblock.run/project-widget.min.js" defer></script>
</head>
<body>
<div
data-tb-project-widget
data-tb-project-slug="mintlayer"
></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