Hyperdrome Info

Hyperdrome is a ve(3,3) DEX on Hyperliquid / HyperEVM with an AI-assisted app experience around swaps, liquidity, voting, rewards, strategy creation, and content workflows. The AI layer is there to help users understand, compare, prepare, and review actions. It does not take custody of funds. When an action touches a wallet, the user reviews the proposed transaction and signs from their own wallet.

Hyperdrome Logo

TrustNet Score

The TrustNet Score evaluates crypto projects based on audit results, security, KYC verification, and social media presence. This score offers a quick, transparent view of a project's credibility, helping users make informed decisions in the Web3 space.

62.34
Poor Excellent

Real-Time Threat Detection

Real-time threat detection, powered by Cyvers.io, is currently not activated for this project.

This advanced feature provides continuous monitoring and instant alerts to safeguard your assets from potential security threats. Real-time detection enhances your project's security by proactively identifying and mitigating risks. For more information, click here.

Security Assessments

Select the audit
"Static Analysis Dynamic Analysis Symbolic Execution SWC Check Manual Review"
Contract address
N/A
Network N/A
License N/A
Compiler N/A
Type N/A
Language Solidity
Onboard date 2026/07/20
Revision date 2026/07/20

Summary and Final Words

No crucial issues found

The contract does not contain issues of high or medium criticality. This means that no known vulnerabilities were found in the source code.

Ownership is not renounced

The owner retains significant control, which could potentially be used to modify key contract parameters.

Contract is not upgradeable

The contract does not use proxy patterns or other mechanisms to allow future upgrades. Its behavior is locked in its current state.

Scope of Work

This audit encompasses the evaluation of the files listed below, each verified with a SHA-1 Hash. The team referenced above has provided the necessary files for assessment.

The auditing process consists of the following systematic steps:

  1. Specification Review: Analyze the provided specifications, source code, and instructions to fully understand the smart contract's size, scope, and functionality.
  2. Manual Code Examination: Conduct a thorough line-by-line review of the source code to identify potential vulnerabilities and areas for improvement.
  3. Specification Alignment: Ensure that the code accurately implements the provided specifications and intended functionalities.
  4. Test Coverage Assessment: Evaluate the extent and effectiveness of test cases in covering the codebase, identifying any gaps in testing.
  5. Symbolic Execution: Analyze the smart contract to determine how various inputs affect execution paths, identifying potential edge cases and vulnerabilities.
  6. Best Practices Evaluation: Assess the smart contracts against established industry and academic best practices to enhance efficiency, maintainability, and security.
  7. Actionable Recommendations: Provide detailed, specific, and actionable steps to secure and optimize the smart contracts.

A file with a different Hash has been intentionally or otherwise modified after the security review. A different Hash may indicate a changed condition or potential vulnerability that was not within the scope of this review.

Final Words

The following provides a concise summary of the audit report, accompanied by insightful comments from the auditor. This overview captures the key findings and observations, offering valuable context and clarity.


Smart Contract Analysis Statement

Contract Analysis

The MerkleClaim contract implements a Merkle-based airdrop that mints vote-escrow locks for eligible claimers.

Ownership Privileges

The ownership of the contract has been retained by a single owner account and has not been renounced. The owner retains full privileges including:

  • Setting and replacing the Merkle root that decides who is eligible and for how much.
  • Setting the start time and the duration of the claim window.
  • Overwriting the recorded claimed amount for any account.
  • Withdrawing the remaining token balance once the claim window has ended.
  • The owner cannot make an eligible user receive more than the amount attested in the active root during a single distribution.
  • The owner cannot withdraw funds while the claim window is open under a correctly configured start time.
  • The owner cannot change the logic of the contract, which is not upgradeable.
  • The owner cannot mint new tokens, since the contract only distributes tokens it already holds.

Security Features

The contract implements several positive security features:

  • Every claim is checked against a Merkle proof, so only addresses included in the active root can claim.
  • Claimed accounting is updated before the external calls, which prevents a re-entrant double claim during lock creation.
  • Under a fixed root no address can receive more than its attested amount, a property confirmed by extensive randomized testing.
  • The claim window is bounded by a configured start and end, and remaining funds are intended to be withdrawable only after the window closes.

Note - This Audit report consists of a security analysis of the MerkleClaim smart contract. This analysis did not include economic analysis of the contract's tokenomics. Moreover, we only audited the main contract for the MerkleClaim team. Other contracts associated with the project were not audited by our team. We recommend investors do their own research before investing.

Files and details

Findings and Audit result

medium Issues | 2 findings

Pending

#1 medium Issue
Owner can replace the Merkle root at any time
MerkleClaim.sol
L74
Description

The owner can set a new Merkle root at any moment, including while the claim window is open. This lets the owner run repeated airdrops, redirect the distribution, or grief a pending claimer by switching to a root that excludes them just before they claim. Combined with the ability to withdraw after the window ends, it gives the owner broad control over who ultimately receives the distribution. Recon describes a single externally owned administrator with no delay, which increases the concern.

Pending

#2 medium Issue
Owner can arbitrarily rewrite claimed accounting, enabling repeat distribution
MerkleClaim.sol
L122
Description

The owner can set any claimed balance to any value for any account. Setting a claimed balance back to zero lets the same beneficiary claim the full amount a second time under the same root, doubling the distribution, and setting it high blocks a legitimate claim. A compromised or malicious owner can pair this with a chosen root to drain the funded balance during the open window, when direct withdrawal is otherwise disabled. Because the owner already funds the airdrop the assets are theirs, but this breaks the fair one time claim guarantee that users rely on.

low Issues | 5 findings

Pending

#1 low Issue
Batch claimed amount setter has no length check and is unbounded
MerkleClaim.sol
L122
Description

The owner-only function that overwrites claimed accounting iterates over the accounts array and reads the amounts array by the same index, but it never checks that the two arrays have the same length. If the amounts array is shorter the call reverts partway through, and if it is longer the extra entries are silently ignored. The loop is also unbounded, so a very large input can exceed the block gas limit and always fail. The impact is limited because the function is owner only, but the missing validation makes operational mistakes easy.

Pending

#2 low Issue
Claim window is tied to absolute epoch time because start time defaults to zero
MerkleClaim.sol
L88
Description

The end of the airdrop is computed as the start time plus the duration in seconds, and the start time defaults to zero until the owner sets it. With a normal duration and a default start time, the end lands at a fixed timestamp near the Unix epoch, so on any live chain the finished check is already satisfied and the owner can withdraw all funds before the airdrop is ever configured, while claims stay closed. With an unusually large duration the window can instead span the current time, allowing eligible users to claim before the start time is set at all. A related initialization gap is that the constructor accepts a duration of zero even though the duration setter rejects zero, so a contract can be deployed with duration zero and, while the start time is still unset, the end also evaluates to zero, leaving the withdrawal path immediately open while claims stay permanently closed until both values are configured. All of these behaviors stem from deriving the schedule from unvalidated defaults rather than from a required nonzero start and duration.

Pending

#3 low Issue
Return values of token approve and transfer are not checked
MerkleClaim.sol
L104
Description

The claim path approves the escrow and the withdrawal path transfers the remaining balance, and in both cases the boolean return value is ignored. The in repository token returns true and would not misbehave, but the escrow and token are external trust boundaries, and relying on a call that could return false without reverting is unsafe practice. A safe wrapper that reverts on a false return or a missing return value should be used.

Pending

#4 low Issue
Withdrawal recipient is not checked for the zero address
MerkleClaim.sol
L113
Description

The owner-only withdrawal function transfers the remaining token balance to a recipient supplied by the caller without checking that the recipient is not the zero address. A mistaken call would move the entire remaining balance to an address from which it cannot be recovered. Since this is owner controlled the likelihood is low, but a simple guard removes the hazard.

Pending

#5 low Issue
Distribution is not solvency checked so underfunding produces first come first served claims
MerkleClaim.sol
L106
Description

The claim function verifies an individual entitlement and immediately creates the vote escrow lock, but the contract never checks that its own balance of the claim token covers the sum of all outstanding entitlements in the tree. If the contract is funded with less than the total the tree allocates, or funding is otherwise reduced before every eligible account has claimed, the early claims succeed and the lock creation for a later, equally eligible account reverts once the balance is exhausted. Eligible beneficiaries are then treated unequally based only on the order in which they claim. Because airdrop recipients have not necessarily paid for their allocation, the impact is lower than the unfunded presale claim, but the absence of any reserve or solvency invariant is a real fairness and availability weakness.

optimization Issues | 2 findings

Pending

#1 optimization Issue
Escrow and token references can be immutable
MerkleClaim.sol
L21
Description

The escrow and token state variables are only ever set in the constructor, yet they are stored as regular state variables. Declaring them immutable would remove the storage reads on every claim and withdrawal and make the intent explicit. This is an efficiency note and does not change behavior.

Pending

#2 optimization Issue
Use custom errors and cache the balance read
MerkleClaim.sol
L90
Description

The contract uses string based require reasons throughout. Moving to custom errors reduces bytecode size and revert cost. Minor read caching in the withdrawal path also saves gas. These are efficiency considerations only.

informational Issues | 4 findings

Pending

#1 informational Issue
Lock duration constant contradicts its comment
MerkleClaim.sol
L16
Description

The lock duration constant is documented as a twenty six week maximum lock period, but its value of eighty six thousand four hundred times seven times fifty two times four is about one hundred and twenty five million seconds, which is roughly two hundred and eight weeks or close to four years. The value is functionally consistent with the vote escrow maximum lock of four years and creates a valid lock, but the comment is wrong in both the number and the wording. The danger is that a future change trusting the comment would drastically shorten the lock. There is no runtime impact today, so this is a documentation defect rather than an availability or fund loss issue.

Pending

#2 informational Issue
Start time and duration setters emit no events
MerkleClaim.sol
L61
Description

The functions that set the start time and the duration change important schedule parameters but do not emit events, unlike the root setter which does. This makes it harder for off chain monitoring and for users to detect a schedule change.

Pending

#3 informational Issue
Single hashed Merkle leaf where a double hash would add defense in depth
MerkleClaim.sol
L98
Description

The claim leaf is a single hash of the packed recipient address and amount. Because both values are fixed size there is no packing ambiguity and no practical collision risk, so this is acceptable. Adopting a double hashed leaf, as the sibling points contract does, would provide defense in depth against leaf and node confusion and give the project one consistent tree format.

Pending

#4 informational Issue
Anyone can trigger a claim for an eligible beneficiary
MerkleClaim.sol
L83
Description

The claim function accepts the beneficiary as a parameter and does not require the caller to be that beneficiary. The tokens are locked for the beneficiary, so there is no theft, but a third party can force the creation of the beneficiary's long vote escrow lock at a time the beneficiary did not choose, and if the beneficiary is a contract that cannot receive the escrow position the claim simply reverts. This is a timing and user experience consideration rather than a loss of funds.