Reach Protocol security record

Ethereumreach.sh

As of 3 Nov 2026, Reach Protocol has 1 audit report on Trustblock, by Quantstamp, dated 13 Nov 2023. That report lists no open critical findings.

Critical findings
No open critical findings
In 1 report.
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
/Reach ProtocolSecurity firm: QuantstampDate: Scope: Files named in the reportNo open critical findingsOpen · certificate.quantstamp.com

Findings15

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

SeverityOpenAcknowledgedFixed
Critical000
High010
Medium321
Low143
HighCentralized Power / Security Mainly Depends on Off-Chain Component/Reach Protocol · Quantstamp · 13 Nov 2023Acknowledged

It is a rather centralized design; the reward withdrawal logic depends solely on Merkle roots provided by the off-chain component. Currently the design: 1. Allows the off-chain component (i.e., the admins) to withdraw all the funds supplied by the creators for different missions from the contract at once. 2. Allows an admin to unpause the protocol paused by another admin. This means if an attacker manages to manipulate one of the admins, there will be nothing remaining to stop them.

Open the report
MediumMerkle Tree Leaf Format Could Lead to Users Losing Rewards/Reach Protocol · Quantstamp · 13 Nov 2023Acknowledged

A leaf in the Reach’s Merkle tree is computed as `leaf = keccak256(abi.encodePacked(msg.sender, _amount))` and can be interpreted as the caller, `msg.sender`, should get `_amount` of rewards. However, it is unclear if the amount should be in ETH or ERC20 tokens. If the variable `tokenDistribution` is wrongly set, the user might get the rewards in the wrong denomination and the original beneficiary of those rewards might not get them at all.

Open the report
MediumUsers Might Expect Inexistent Rewards/Reach Protocol · Quantstamp · 13 Nov 2023Acknowledged

The function `createDistribution()` accepts two input arguments: the `_merkleRoot` containing all the users and the amount each user should get, and the `_amount` input representing the total amount to be distributed. The `_amount` value should be equal to the total amount to be distributed to all the leaves in the Merkle tree, and also less or equal to the current ETH or token balance of the contract. Otherwise, some users would be expecting rewards that are not even available.

Open the report
LowCritical Role Transfer Not Following Two-Step Pattern/Reach Protocol · Quantstamp · 13 Nov 2023Acknowledged

The owner of the contracts can call `transferOwnership()` to transfer the ownership to a new address. If an uncontrollable address is accidentally provided as the new owner address then the contract will no longer have an active owner, and functions with the `onlyOwner` modifier can no longer be executed.

Open the report
LowMissions Can only Be Tracked if Their Rewards Are in ETH/Reach Protocol · Quantstamp · 13 Nov 2023Acknowledged

The contract allows users to claim rewards in either ETH or an ERC20 token. When initiating a mission through the `createMission()` function, the amount of ETH they send to this function also designates the total rewards that the mission creator will distribute. Furthermore, this function emits the `DistributionCreated(currentVersion, _amount)` event, serving as a trigger for additional processing within the off-chain system. However, it's important to note that there is currently no corresponding function for missions offering rewards in ERC20 tokens. While creators (or the Reach team's Discord bot) can naturally transfer ERC20 tokens directly to the smart contract, there is an equivalent function missing to handle ERC20 token rewards as seen in the `createMission()` for ETH.

Open the report
LowUndefined Behavior with Unclaimed Rewards/Reach Protocol · Quantstamp · 13 Nov 2023Acknowledged

If users forget or for some other reason (i.e. sickness) do not claim their rewards before the next Merkle root is updated, those rewards will remain in the contract and some possibilities are in place: 1. The rewards are re-introduced in the tree for the next version. 2. The rewards are diluted between the beneficiaries of the next distribution.

Open the report
LowUpdating the ERC20 Token Could Temporarily Lock Funds/Reach Protocol · Quantstamp · 13 Nov 2023Acknowledged

When updating the `erc20token` without updating the Merkle root could force the function `claimRewards()` to fail, if `tokenDistribution` is true, since the contract’s balance of the new token might still be zero. Additionally, it might cause unclaimed rewards to get locked in the contract until the `erc20token` gets updated back to the old one.

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="reach-protocol"
></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