Introduction
We express our gratitude to the Ideologi team for the collaborative engagement that enabled the execution of this Smart Contract Security Assessment.
Hyperlogue allows for brainstorming tournaments (Funded, Unfunded, or TokenExchange) where participants join during a configured time window, optionally paying tokens, and outcomes are finalized by posting a signed Merkle root that drives payouts/refunds. An upgradeable HyperlogueCreator contract enforces backend-signed actions and configurable platform fees, while type-specific libraries handle lifecycle rules, fee accounting, and token/ETH movements for each hyperlogue variant.
Document | |
|---|---|
| Name | Smart Contract Code Review and Security Analysis Report for Ideologi |
| Audited By | Turgay Arda Usman, Kornel Światłowski |
| Approved By | Seher Saylik |
| Website | https://www.ideologi.org/→ |
| Changelog | 17/02/2026 - Preliminary Report |
| 04/03/2026 - Final Report | |
| 16/03/2026 - Updated Final Report | |
| Platform | EVM |
| Language | Solidity |
| Tags | Upgradable, Signatures, Centralization |
| Methodology | https://docs.hacken.io/methodologies/smart-contracts→ |
Document
- Name
- Smart Contract Code Review and Security Analysis Report for Ideologi
- Audited By
- Turgay Arda Usman, Kornel Światłowski
- Approved By
- Seher Saylik
- Website
- https://www.ideologi.org/→
- Changelog
- 17/02/2026 - Preliminary Report
- 04/03/2026 - Final Report
- 16/03/2026 - Updated Final Report
- Platform
- EVM
- Language
- Solidity
- Tags
- Upgradable, Signatures, Centralization
Review Scope | |
|---|---|
| Repository | https://github.com/Syntax-Studios-Org/ideologi-contracts→ |
| Commit | 699306c80b000069b29d8054aec98bd4eee67384 |
| Final Commit | 4ea2f9438354bb98f4ff76afe836ba27194587d4 |
| Updated Final Commit | 957de5ba7f7f81c81b18a838b0d42da9880dee0b |
Review Scope
- Commit
- 699306c80b000069b29d8054aec98bd4eee67384
- Final Commit
- 4ea2f9438354bb98f4ff76afe836ba27194587d4
- Updated Final Commit
- 957de5ba7f7f81c81b18a838b0d42da9880dee0b
Audit Summary
The system users should acknowledge all the risks summed up in the risks section of the report
Documentation quality
Functional requirements are provided.
The business logic and the aim of the project are specified.
Technical description is provided.
Code quality
The development environment is configured.
NatSpec covers the code and is detailed.
Test coverage
Code coverage of the project is 80.13% (branch coverage).
Deployment and basic user interactions are covered with tests.
Negative cases coverage is present.
364 of 364 tests passed.
System Overview
HyperlogueCreator - Main upgradeable entrypoint contract (UUPS + AccessControl + EIP-712). It validates backend signatures (create/join/post-root), stores all hyperlogue state in a single storage layout, and routes each action to the correct per-type library (Funded, Unfunded, TokenExchange). Also exposes admin/maintainer setters for platform fees/limits and view helpers to query hyperlogues, roots, participants, and config.
FundedHyperlogue - Library implementing the Funded hyperlogue lifecycle: create, join (with optional participant fee), increase max participants, increase creator contribution, reject, refund (batch), post payout merkle root, and claim payouts. Handles ERC20 transfers + fee accounting (contribution fee to treasury; agency fee to creator), enforces timing/participant constraints, and uses a bitmap to prevent double-claims per hyperlogue id.
UnfundedHyperlogue - Library implementing the Unfunded hyperlogue lifecycle: create, join, increase max participants, reject, and post payout merkle root. No token claim flow; instead, it focuses on participant management plus an ETH-based payment model for increasing max participants beyond a configured free tier.
TokenExchangeHyperlogue - Library implementing the Token Exchange hyperlogue lifecycle where creator deposits a payout token, participants contribute a different participant token, and participants later claim payout-token rewards via a merkle root (after a configured reward-claim date). Tracks and distributes dual-token fees (creator-side contribution fee in payout token + participant-side contribution fee in participant token to treasury) and routes the accumulated participant tokens to the creator as “agencyFee/reward”.
SafeERC20WithTaxCheck - Small helper library wrapping safeTransferFrom() to compute the actual amount received (by balance delta) and revert if it’s below a required minimum—useful for fee-on-transfer / taxed tokens.
Structs - Defines the core data model: Hyperlogue, the shared Storage struct (all mappings/sets/bitmaps + configs + signer/treasury/relayer), HyperlogueType, and the config structs used during initialization and fee/limit enforcement.
Events - Central list of emitted events for hyperlogue creation/join/refund/rejection, payout root posting, claims, and config/admin changes.
Errors - Central list of custom errors used across the contract and libraries (signature/timing/role/type/fee/participant-limit validation, refund/claim gating, etc.).
Privileged roles
HyperlogueCreator uses OpenZeppelin AccessControlUpgradeable (and UUPSUpgradeable for upgrades) as its access control mechanism. It defines the following roles with the following capabilities:
DEFAULT_ADMIN_ROLEcan:setSigner()
setResultPostRelayer()
setTreasury()
setAgencyFeePercentageThresholdForFundedHyperlogues()
setMaxContributionFeePercentage()
authorize upgrades via _authorizeUpgrade() (upgrade the implementation)
MAINTAINER_ROLEcan:setContributionFeePercentage()
setInitiatorPlatformFee()
setParticipantPlatformFee()
setInitiatorPeripheryPlatformFee()
setFreeParticipantsForUnfundedHyperlogues()
setPerParticipantFeeForUnfundedHyperlogues()
setMinOffsetForSubmissionStart()
setDefaultPostResultsGraceOffset()
setMaxPostResultsGraceOffset()
setMinimumMaxParticipants()
setMaxRewardClaimOffsetForTokenExchangeHyperlogues()
MODERATOR_ROLEcan:rejectHyperlogue()
It also relies on privileged addresses (not roles) that gate critical actions:
signer (backend EIP-712 signer) effectively authorizes:
createHyperlogue()
joinHyperlogue()
postPayoutRoot()
resultPostRelayer can (depending on time window enforced in the libraries):
postPayoutRoot() after maxReleaseTimeByAgent
treasury:
receives protocol fees; claimEth() (callable by anyone) transfers all ETH balance to treasury
FundedHyperlogue is a library and does not define AccessControl roles; privileged behavior is enforced via actor/time checks:
Hyperloguecreator can:increaseMaxParticipants()
increaseCreatorContribution()
postPayoutRoot() before maxReleaseTimeByAgent
resultPostRelayer can:
postPayoutRoot() after maxReleaseTimeByAgent
Moderator (
MODERATOR_ROLEon HyperlogueCreator) can:rejectHyperlogue() (via HyperlogueCreator routing into the library)
Other flows are generally permissionless (but condition-gated), e.g.:
refundHyperlogue() (batch refunds when minimum participants not reached)
claimFeesFromHyperlogue() (once root is posted and minimum participants reached)
UnfundedHyperlogue is a library and does not define AccessControl roles; privileged behavior is enforced via actor/time checks:
Hyperlogue creator can:
increaseMaxParticipants()
postPayoutRoot() before maxReleaseTimeByAgent
resultPostRelayer can:
postPayoutRoot() after maxReleaseTimeByAgent
Moderator (MODERATOR_ROLE on HyperlogueCreator) can:
rejectHyperlogue() (via HyperlogueCreator routing into the library)
TokenExchangeHyperlogue is a library and does not define AccessControl roles; privileged behavior is enforced via actor/time checks:
Hyperlogue creator can:
increaseMaxParticipants()
increaseCreatorContribution()
postPayoutRoot() before maxReleaseTimeByAgent
resultPostRelayer can:
postPayoutRoot() after maxReleaseTimeByAgent
Moderator (MODERATOR_ROLE on HyperlogueCreator) can:
rejectHyperlogue() (via HyperlogueCreator routing into the library)
Other flows are permissionless (but condition-gated), e.g.:
claimFromHyperlogue() (requires rewardClaimDate reached, valid merkle proof, and minimum participants)
claimFeesFromHyperlogue() (once root is posted and minimum participants reached)
Potential Risks
Reliance on Off-Chain Merkle Tree Generation for Payout Distribution: The payout mechanism for completed Hyperlogues relies on an off-chain backend system to generate and sign a Merkle tree root, which is then submitted on-chain by the creator or a designated relayer. Each Merkle tree leaf defines a participant address and the corresponding claimable payout amount. The contract itself does not perform on-chain validation to confirm that the full payout amount is distributed or that allocations precisely reflect the intended participant set. Since payout calculations and Merkle tree construction occur entirely off-chain, any malfunction, misconfiguration, or compromise of the backend system could potentially lead to incorrect payout allocations, including cases where tokens become claimable by unintended or non-participating addresses.
Single Points of Failure and Control: The project is fully or partially centralized, introducing single points of failure and control. This centralization can lead to vulnerabilities in decision-making and operational processes, making the system more susceptible to targeted attacks or manipulation.
Administrative Key Control Risks: The digital contract architecture relies on administrative keys for critical operations. Centralized control over these keys presents a significant security risk, as compromise or misuse can lead to unauthorized actions or loss of funds.
Flexibility and Risk in Contract Upgrades: The project's contracts are upgradable, allowing administrators to update the contract logic when necessary. While this flexibility can be beneficial for addressing issues and improving the system, it also introduces certain risks if upgrade procedures are not properly controlled or secured, as unauthorized or improper upgrades could affect the system’s integrity.
Absence of Upgrade Window Constraints: The contract suite allows upgrades to be executed immediately without a mandatory review or waiting period. While this enables fast response to issues, it may also increase the risk of quickly deploying flawed or unintended changes that could impact system integrity or user assets.
Insufficient Multi-signature Controls for Critical Functions: The lack of multi-signature requirements for key operations centralizes decision-making power, increasing vulnerability to single points of failure or malicious insider actions, potentially leading to unauthorized transactions or configuration changes.
Owner's Unrestricted State Modification: The owner currently has broad permissions to modify certain state variables. While this may be intended for administrative flexibility, unrestricted modification capabilities can potentially affect contract integrity and user trust, particularly during sensitive operations such as minting phases.
Findings
Code ― | Title | Status | Severity | |
|---|---|---|---|---|
| F-2026-1511 | Refund Mechanism Fails for Funded Hyperlogues With Zero Participant Fee | fixed | High | |
| F-2026-1505 | Creator Contribution Fee Accounting Discrepancy Causes Insolvency | fixed | High | |
| F-2026-1505 | Incomplete EIP-712 Signature Verification Allows Parameter Manipulation | fixed | High | |
| F-2026-1511 | Reentrancy Vulnerabilities in Core Hyperlogue Functions | fixed | Medium | |
| F-2026-1508 | Payout Claim Allowed for Non-Participants in Hyperlogue | fixed | Medium | |
| F-2026-1505 | Mismatch Between Depositor and Creator Addresses Can Lead to Permanent Funds Lock | fixed | Medium | |
| F-2026-1494 | Creator Refund Failure Blocks Participant Refunds | fixed | Medium | |
| F-2026-1505 | Time-Based Access Control Bypass in postPayoutRoot | fixed | Low | |
| F-2026-1513 | Absence of Granular Role Separation | mitigated | Low | |
| F-2026-1511 | Inconsistent Validation Leads to Bypass of Minimum Participants | fixed | Low |
Appendix 1. Definitions
Severities
When auditing smart contracts, Hacken is using a risk-based approach that considers Likelihood, Impact, Exploitability and Complexity metrics to evaluate findings and score severities.
Reference on how risk scoring is done is available through the repository in our Github organization:
Severity | Description |
|---|---|
Critical | Critical vulnerabilities are usually straightforward to exploit and can lead to the loss of user funds or contract state manipulation. |
High | High vulnerabilities are usually harder to exploit, requiring specific conditions, or have a more limited scope, but can still lead to the loss of user funds or contract state manipulation. |
Medium | Medium vulnerabilities are usually limited to state manipulations and, in most cases, cannot lead to asset loss. Contradictions and requirements violations. Major deviations from best practices are also in this category. |
Low | Major deviations from best practices or major Gas inefficiency. These issues will not have a significant impact on code execution. |
Severity
- Critical
Description
- Critical vulnerabilities are usually straightforward to exploit and can lead to the loss of user funds or contract state manipulation.
Severity
- High
Description
- High vulnerabilities are usually harder to exploit, requiring specific conditions, or have a more limited scope, but can still lead to the loss of user funds or contract state manipulation.
Severity
- Medium
Description
- Medium vulnerabilities are usually limited to state manipulations and, in most cases, cannot lead to asset loss. Contradictions and requirements violations. Major deviations from best practices are also in this category.
Severity
- Low
Description
- Major deviations from best practices or major Gas inefficiency. These issues will not have a significant impact on code execution.
Potential Risks
The "Potential Risks" section identifies issues that are not direct security vulnerabilities but could still affect the project’s performance, reliability, or user trust. These risks arise from design choices, architectural decisions, or operational practices that, while not immediately exploitable, may lead to problems under certain conditions. Additionally, potential risks can impact the quality of the audit itself, as they may involve external factors or components beyond the scope of the audit, leading to incomplete assessments or oversight of key areas. This section aims to provide a broader perspective on factors that could affect the project's long-term security, functionality, and the comprehensiveness of the audit findings.
Appendix 2. Scope
The scope of the project includes the following smart contracts from the provided repository:
Scope Details | |
|---|---|
| Repository | https://github.com/Syntax-Studios-Org/ideologi-contracts→ |
| Commit | 699306c80b000069b29d8054aec98bd4eee67384 |
| Final Commit | 4ea2f9438354bb98f4ff76afe836ba27194587d4 |
| Updated Final Commit | 957de5ba7f7f81c81b18a838b0d42da9880dee0b |
| Whitepaper | N/A |
| Requirements | provided as a file |
| Technical Requirements | N/A |
Scope Details
- Commit
- 699306c80b000069b29d8054aec98bd4eee67384
- Final Commit
- 4ea2f9438354bb98f4ff76afe836ba27194587d4
- Updated Final Commit
- 957de5ba7f7f81c81b18a838b0d42da9880dee0b
- Whitepaper
- N/A
- Requirements
- provided as a file
- Technical Requirements
- N/A
Assets in Scope
Appendix 3. Additional Valuables
Additional Recommendations
The smart contracts in the scope of this audit could benefit from the introduction of automatic emergency actions for critical activities, such as unauthorized operations like ownership changes or proxy upgrades, as well as unexpected fund manipulations, including large withdrawals or minting events. Adding such mechanisms would enable the protocol to react automatically to unusual activity, ensuring that the contract remains secure and functions as intended.
To improve functionality, these emergency actions could be designed to trigger under specific conditions, such as:
Detecting changes to ownership or critical permissions.
Monitoring large or unexpected transactions and minting events.
Pausing operations when irregularities are identified.
These enhancements would provide an added layer of security, making the contract more robust and better equipped to handle unexpected situations while maintaining smooth operations.
Frameworks and Methodologies
This security assessment was conducted in alignment with recognised penetration testing standards, methodologies and guidelines, including the NIST SP 800-115 – Technical Guide to Information Security Testing and Assessment →, and the Penetration Testing Execution Standard (PTES) →, These assets provide a structured foundation for planning, executing, and documenting technical evaluations such as vulnerability assessments, exploitation activities, and security code reviews. Hacken’s internal penetration testing methodology extends these principles to Web2 and Web3 environments to ensure consistency, repeatability, and verifiable outcomes.