Nomad security record

As of 14 Oct 2026, Nomad has 1 audit report on Trustblock, by Quantstamp, dated 6 Jun 2022. That report lists no open critical findings. It also holds 1 incident (latest 31 Jul 2022).

Critical findings
No open critical findings
In 1 report.
Incident
Incident 31 Jul 2022
Source: De.Fi incident database. No audit on Trustblock is dated after it. See the incident
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 Oct 2026. Statuses are the security firms’ own. Trustblock does not review code.

Audits1

Newest first

AuditSecurity firmDateScopeCritical findingsReport
NomadSecurity firm: QuantstampDate: Scope: Files named in the reportNo open critical findingsOpen · certificate.quantstamp.com

Findings40

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

SeverityOpenAcknowledgedFixed
Critical000
High001
Medium204
Low4245
HighMessages Can Be Proven And Processed In The Replica Even On `Failed` StateNomad · Quantstamp · 6 Jun 2022Fixed

The `prove`, `process`, and `proveAndProcess` methods can be called even if the `Replica` contract is on `Failed` state. Therefore, if governance does not deal with the replica immediately (replace replica in the corresponding `XAppConnectionManager` or remove fraudulent roots via the `setConfirmation` method), fraudulent roots might have enough time to be confirmed, thereby letting fraudulent messages to be proven and processed.

Open the report
MediumImpossibility To Recover From A Failed StateNomad · Quantstamp · 6 Jun 2022Fixed

Whenever fraud is detected in the `Home` or `Replica` contracts, they will be moved to a `Failed` state (via the `doubleUpdate` or `improperUpdate` methods). However, once a contract moves to that state, it's not possible to return it to `Active`. The only way out is to upgrade the contracts' code or deploy new instances.

Open the report
MediumMessages Can Be Delivered Out Of OrderNomad · Quantstamp · 6 Jun 2022Fixed

According to the [Nomad documentation](https://docs.nomad.xyz/#replica), the replica has to ensure that messages are delivered in order. However, that's not the case. As long as a message has been marked as `PROVEN`, the processor is free to call the `process` method in the replica in any order it wants. This is a problem because a malicious processor or malicious third-party (the `process` method is not protected, so anyone could call it) could force the replica to process their messages in a way that is beneficial to them (front-run).

Open the report
MediumMissing Validation On The `optimisticSeconds`Nomad · Quantstamp · 6 Jun 2022Fixed

The `optimisticSeconds` parameter is not validated, so it could be set to 0 or a minimal amount. This would allow updates to be accepted in a very short time, thereby not leaving the replica with enough time to respond to fraud (this is also a problem in the `initialize` method).

Open the report
MediumMissing Verification On The `FEE_NUMERATOR`Nomad · Quantstamp · 6 Jun 2022Fixed

During an upgrade of the contract, `PRE_FILL_FEE_NUMERATOR` could be set to a value greater than 10000. This behaviour would result in impacting the logic of the contract.

Open the report
LowFloating PragmaNomad · Quantstamp · 6 Jun 2022Fixed

The contract makes use of the floating-point pragma ^0.6.11. Contracts should be deployed using the same compiler version. Locking the pragma helps ensure that contracts are not unintentionally deployed using another pragma, such as an obsolete version, that may introduce issues in the contract system.

Open the report
LowFront Running Can Make Liquidity Providers Lose Their FundsNomad · Quantstamp · 6 Jun 2022Fixed

The `preFill` method allows a liquidity provider (LP) to fill a transfer that hasn't been verified yet for a fee. This method ensures that only one liquidity provider can provide liquidity to a single transfer (`L230`). However, it does not verify if the transfer has already been processed by the `handle` method (`L107`). A malicious processor (or even a malicious miner) could wait to send the message that will trigger the `handle` method just before a `preFill` method call is done, thereby letting the recipient receive funds from both, the router and the liquidity provider. To make things worse, once the `send` method has been processed, another LP would be able to call `preFill` again for the same transaction.

Open the report
LowInteger Overflow /UnderflowNomad · Quantstamp · 6 Jun 2022Fixed

The codebase is not using `SafeMath` in the arithmetic operations. Some places can potentially be overflow or underflow in edge cases.

Open the report
LowLiquidity Provider Fee Can Be BypassedNomad · Quantstamp · 6 Jun 2022Fixed

In the `_applyPreFillFee` function, the `_amtAfterFee` is calculated using the following formula ``` (_amnt * PRE_FILL_FEE_NUMERATOR) / PRE_FILL_FEE_DENOMINATOR; ``` The issue here is that is if `_amt * PRE_FILL_NUMERATOR` is less than `PRE_FILL_FEE_DENOMATOR` the `_amtAfterFee` will be equal to 0.

Open the report
LowTransactions Are Marked As Processed Even If They FailNomad · Quantstamp · 6 Jun 2022Fixed

The `process` method forwards messages to their destination and mark the messages as processed regardless of the outcome of the method. If dApps do not account for this, they might end up in invalid states. For example, the `BridgeRouter` is assuming that trades sent across the chain always work and has no functionality to recover if the `handle` method fails for any reason.

Open the report

Incidents1

Attached through a shared contract address. Our incident data ends in Oct 2026.

Incident

Incident,

Source: De.Fi incident database.

Audits before it
1.
Audits since
None on Trustblock.

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="nomad"
></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