I Dare You Info

Your fans crowdfund a dare aimed at you. You opt in, set your floor and your limits, do the thing, and post the proof. The pot releases to your wallet onchain and you keep 97.5%. No proof, everyone gets refunded.

I Dare You 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.

63.45
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

"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 Rust / Solana
Onboard date 2026/06/19
Revision date 2026/06/23

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 upgradeable

The contract uses a proxy pattern or similar mechanism, enabling future upgrades. This can introduce risks if the upgrade mechanism is not securely managed.

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

Program Analysis

The IDareYou program is a multi-funder crowdfunded escrow for "dares" on the Solana blockchain, where a crowd pools SPL tokens toward a creator-set floor, the dared party posts proof of performance within a window, settlement is optimistic, and disputes are resolved by a platform arbiter into one of three outcomes. The overall design follows common Anchor patterns and is unusually well prepared, with a clear state machine, snapshotted per-dare economics, pull-style refunds, and careful pooled-funds accounting. No critical or high severity issue was identified.

This is a re-audit statement following a remediation pass. Every code-level issue from the original review has been verified fixed in source, and no fix introduced a new fund-loss path or weakened the safety posture:

  • The pause toggle now rejects a call that does not change the pause state, so the freeze timestamps only move on a real pause or unpause. The indefinite deadline-deferral path is closed.
  • The parameter-rotation instruction now bounds the post-unpause grace by the same one-day cap the creation instruction enforces, restoring the intended timing control.
  • The final close and dispute resolution now create the fee-recipient token account on demand, so a missing fee account can no longer block rent reclaim or any dispute verdict.
  • The funding and performance deadlines now extend for a pause that overlapped them, matching the settlement and dispute deadlines, so a completed freeze no longer forces a premature expiry.
  • The admin actions now emit events, and the fee is now charged on the live vault balance so direct vault transfers are fee-charged rather than handed to the receiver untaxed.

The items that remain are operational or accepted by design, plus two minor informational notes opened during the re-audit:

  • The program is upgradeable and its upgrade authority is currently a single ordinary wallet rather than a multisig. This remains the single largest risk and must be placed under a multisig, or the program finalized, before mainnet; the team has committed to this as a pre-mainnet step.
  • Mints added to the allowed list are still not checked for a freeze authority. This is accepted with rationale because the stated primary settlement token is a regulated stablecoin that carries an issuer freeze authority by design; the residual risk is that such an authority could freeze a vault and lock that dare's pooled funds, and it should be disclosed to users.
  • The standalone formal proof of the fee arithmetic and a coverage note still describe the previous fee basis and should be updated to the live-balance basis; the new formula is safe by inspection.
  • The funding and performance pause compensation only applies once a freeze has ended, so a window that lapses while the program is still paused can still be expired to the refunding state during the freeze. This is safe-direction, since funds become refundable rather than trapped or paid out.

Authority Privileges

The upgrade authority of the program has been set to a single ordinary wallet on devnet and has not been moved to a multisig or finalized. The authority retains full privileges including:

  • Replacing the entire program with new code through an upgrade, which is the highest-impact power and must be placed under a multisig or finalized before mainnet.
  • Pausing and unpausing the program, which blocks new funding, creation, claiming, and optimistic settlement while leaving every exit, refund, and cleanup path available.
  • Rotating the platform role, the claim authority, and the fee recipient, and re-pricing fees and time windows for future dares only.
  • Adding token mints to the allowed list and acting as the sole recovery path for a lost or compromised claim authority.
  • The admin cannot change the economics of dares that already exist, because the fee and all time windows are snapshotted onto each dare at creation.
  • The admin cannot move funds out of any existing vault, because the vault's authority is the per-dare program-derived account, not the admin.
  • The platform role can flag and resolve disputes and can take down a dare before any proof exists, but every outcome only pays the receiver, refunds the funders, or burns the bond to a fixed incinerator address, so it can never route funds to itself.
  • The claim authority can bind a wallet as the receiver of a dare, so a compromise there is an impersonation risk rather than a direct theft, and it is intended to be hardened to a signed attestation before mainnet.

Security Features

The program implements several positive security features:

  • Strong pooled-funds accounting, where the recorded pledged total stays in lockstep with the actual vault balance on every payout state, the fee split was proven not to overflow or underflow, and each funder can receive only one of a refund or a share of the payout.
  • A one-way state machine with write-once fields and hard state checks on every transition, so a claim, a proof, or a dispute record cannot be silently rewritten and there is no dead state from which funds cannot exit.
  • Consistent account validation, with framework-checked account ownership and discriminators, program-derived addresses re-derived on-chain with stored canonical bumps, no calls to user-supplied programs, and every fund destination pinned to the expected account or address.
  • A circuit breaker that fails safe by blocking new value coming in while keeping every refund and recovery path live, so funds remain recoverable while the program is paused.

Note - This Audit report consists of a security analysis of the IDareYou Solana program. This analysis did not include economic analysis of the project's tokenomics. Moreover, we only audited the main program for the IDareYou team. Other programs and the off-chain services associated with the project, including the components that hold the claim authority and platform keys, were not audited by our team. We recommend investors do their own research before investing.

Files and details

Findings and Audit result

medium Issues | 1 findings

Acknowledged

#1 medium Issue
Program is upgradeable under a single-key authority
lib.rs
L37
Description

The program is deployed under the upgradeable loader with the upgrade authority set to a single ordinary wallet rather than a multisig, and it has not been finalized. Whoever holds that one key can replace the entire program with arbitrary code, which would let them drain every vault and take full control. This is the single largest risk in the deployment. It is currently a devnet configuration and the fix is operational, so it is rated here as a pre-mainnet issue, but if the program ships to mainnet with a single-key upgrade authority the effective severity is much higher.

low Issues | 2 findings

Acknowledged

#1 low Issue
Allowed mints are not restricted to freeze-authority-free tokens
lib.rs
L230-243
Description

The add_allowed_token instruction stores an arbitrary mint address and never checks that the mint has no freeze authority. The design targets wrapped SOL, which has no freeze authority, but any allowed mint that does have one (for example a common stablecoin) exposes its dare vault to being frozen by that external authority. A frozen vault makes both the payout transfer and the per-funder refund transfer fail, which locks the pooled funds for that dare with no recovery path inside the program. This is gated by the admin's choice of allowed mints and by a third party's freeze action, but the impact on an affected dare is severe.

Acknowledged

#2 low Issue
Platform dispute opening is time-unbounded and not blocked by pause
lib.rs
L631-669
Description

The platform role may move a claim-submitted lock to the disputed state with no upper time bound, and the dispute-opening instruction is not blocked while the program is paused, so the platform can dispute a ready-to-settle lock even during a freeze when optimistic settlement is blocked. This is a deliberate late-remedy lever for an off-policy claim that the watchdog missed. It cannot redirect funds because dispute resolution only ever pays the receiver, refunds the funders, or burns the bond to a fixed incinerator address. It remains a liveness lever held by the same role that both disputes and adjudicates.

optimization Issues | 2 findings

Acknowledged

#1 optimization Issue
Full lock account deserialized on hot paths that do not need the variable-length fields
lib.rs
L396-480
Description

Frequently-used instructions such as contribute and settle deserialize the entire lock account, including the description, proof url, and stretch-tier list, which those instructions do not read. The lock is about seven hundred bytes. This is acceptable today and has no correctness or safety impact, but it is the main avoidable deserialization cost if compute usage ever needs to be reduced.

Acknowledged

#2 optimization Issue
Minor redundant clock reads and account-info clones
lib.rs
L0
Description

Several handlers read the clock and clone account-info handles more than strictly necessary. The compute cost is negligible and there is no safety impact; this is noted only for completeness.

informational Issues | 9 findings

Pending

#1 informational Issue
Formal fee proof and rounding note model the old pledged-total fee basis, not the shipped live-balance basis
kani-harness/src/lib.rs
L35-41
Description

During the remediation the fee basis was changed so the fee is taken on the live vault balance instead of the recorded pledged total. The standalone model-checker harness that the review relied on still transcribes the old formula and computes the fee from the pledged total, so the proof that the fee arithmetic is safe over its full input domain no longer mirrors the deployed code, and the standard-coverage rounding note still describes the old basis. The new formula is safe by inspection, since the fee is a fraction of the vault balance bounded by the fee cap and the payout is the remainder of that same balance, so the payout cannot underflow and the vault empties exactly; the gap is one of verification hygiene rather than a live defect. A secondary observation: because the fee is now a fraction of the vault balance, and the vault balance can be increased by a direct token transfer into the public vault, the fee multiplication operates on a value an outsider can influence. For the intended vetted mints this is not reachable at any economically meaningful scale, the multiplication is checked so an overflow would only fail the receiver-payout path and force the safe refunding route, and any donated amount is ultimately swept to the fee recipient, so there is no theft.

Pending

#2 informational Issue
Funding and performance pause compensation applies only after a freeze ends, not during an active freeze
state.rs
L324-344
Description

The overlap-gated deadline helper compensates a window only for a freeze that has both started and ended, because while the program is still paused the recorded freeze interval is open and the helper returns the un-extended base deadline. The expire-funding and expire-perform paths are permissionless and intentionally remain available while the program is paused so that funds stay recoverable. As a result, a dare whose funding or performance window lapses while the program is still paused can be moved to the refunding state during the freeze, before the post-unpause extension would apply. This is the same safe-direction outcome that the funding-window pause item describes, where funds become refundable and are never trapped or paid out, and it is consistent with the design choice to keep exit paths live under pause, but it means the new compensation does not protect a window that elapses mid-freeze.

Acknowledged

#3 informational Issue
No on-chain guard preventing the receiver from funding their own dare
lib.rs
L396-480
Description

The self-fund check is enforced only when a dare is claimed, not on contributions. A bound receiver can therefore contribute to their own pool and be paid it back minus the fee on settlement. On-chain this only costs the receiver a fee on their own money, with no gain or theft, and any wash-trading concern relates to an off-chain leaderboard that is outside this scope. The team states that real anti-wash protection is handled off-chain through unique-funder weighting and identity checks. This is a documented economic and clean-identity choice rather than a security issue, so it is recorded as informational.

Acknowledged

#4 informational Issue
Immutable admin with no two-step transfer or renounce path
state.rs
L125-128
Description

The admin is fixed at initialization and is the sole recovery path for a lost or compromised claim authority. There is no instruction to transfer or renounce the admin role, so the only way to migrate the admin is a program upgrade. This is a documented choice, but it is worth re-confirming given how central the admin is to recovery.

Acknowledged

#5 informational Issue
No way to remove a mint from the allowed list
lib.rs
L230-243
Description

Once a mint is added to the allowed list it can never be removed. Combined with the lack of a freeze-authority check on allowed mints, a mistakenly allowed or later compromised mint cannot be revoked except through a program upgrade.

Acknowledged

#6 informational Issue
Claiming a dare rebaselines the funding window to the claim time
lib.rs
L507-512
Description

When a dare is claimed, the funding deadline origin moves from the creation time to the claim time, so a late claim effectively restarts the funding clock and extends the lockup for early funders. Funds remain refundable while the dare is in the committed state, so there is no trap. This is a documented design choice.

Acknowledged

#7 informational Issue
Deployed devnet binary does not match the audited source and the program is upgradeable under a single key
lib.rs
L37
Description

The program is deployed to devnet under the upgradeable loader with a live single-key upgrade authority, which is a plain wallet rather than a multisig. Local build reproducibility was confirmed during the review: building the program on the pinned toolchain produces a binary that is byte-for-byte identical to the documented canonical artifact, so the audited source provably compiles to the published binary. The remaining gaps are operational: the live devnet binary predates the audited commit, so it does not include the latest fixes, and a containerized verifiable build for the published mainnet hash is still pending. A single upgrade key is full program takeover if compromised.

Acknowledged

#8 informational Issue
Unmaintained transitive dependency
Cargo.lock
L0
Description

A dependency-scan flags a transitive serialization crate as unmaintained. This is an informational advisory rather than a vulnerability, and the crate is pulled in indirectly rather than used directly by the program. There is no known exploitable issue here.

Acknowledged

#9 informational Issue
Toolchain and command-line version skew
Anchor.toml
L0
Description

The command-line build tool version differs from the on-chain framework crate version, and the local validator tool version differs from the documented one. During the review the fuzzer was upgraded to the version the harness pins and the campaign was re-run successfully, and the program was built directly to its on-chain binary with a byte-identical result, so these skews did not block the reproduction. Aligning the documented command-line versions before release remains worthwhile for tidiness and for a clean interface-definition diff.