
Pulse In Private Security Review — April 2025
Second review of the private-withdrawal contract and circuit, focused on relayer request validation and fee visibility.
Kann Audits / Security Review
Pulse In PrivateReview of the Pip contract and withdrawal circuit, covering recovery of stuck funds and relayer-fee configuration.
Executive summary
Review of the Pip contract and withdrawal circuit, covering recovery of stuck funds and relayer-fee configuration.
This page reflects only the scope and review context disclosed in the published report. Fields the report does not provide are omitted rather than inferred; the PDF remains the source of record for issue detail and limitations.
Security is contextual. This report does not guarantee that the protocol is free from vulnerabilities. It applies to the review context documented in the report.
Scope & record
/src/Pip.sol/circuits/height12/withdraw.circomFindings overview
The counts below are transcribed from the published report. Status and issue detail remain subject to that report’s exact terminology.
Published findings
Findings below are reproduced from the complete Kann Audits security review. View the full PDF for complete scope, methodology, assumptions, and audit context.
6.1.1
In Pip.sol, when a user deposits, they receive a nullifier code which is required when withdrawing from a different address. However, since it is possible for a user to forget their nullifier code, the funds could become permanently stuck in the contract.
Add a rescueFunds function along with an on-chain view function to check whether the nullifier hash (used during withdrawal) has been consumed. This would enable the protocol to verify that the user genuinely forgot their nullifier code and facilitate the recovery of their funds.
6.1.2
Gas consumption on the chain could increase—either temporarily during high congestion periods or permanently due to evolving network conditions. With the current fixed fee parameters, relayersmaynotreceivesufficientincentivestocovertheirgasexpenses. Insomecases, arelayer might end up paying more in gas fees than the reward they receive. This imbalance not only discourages relayer participation but also forces new addresses to source gas from elsewhere in order to call the withdraw() function, which negatively impacts the protocol’s overall usability and efficiency.
User-Defined Relayer Fee: Allow users to input a custom relayer fee when initiating a transaction. This approach gives users the flexibility to determine what they consider a fair incentive for the relayer, based on current network conditions and their own willingness to pay. Dynamic Gas Fee Function: Alternatively, implement a function that can adjust the gas fee for relayers. This function would allow the protocol administrator (or even potentially the community through governance mechanisms) to update the relayer fee dynamically in response to changes in gas prices. This ensures that the fee remains competitive and sufficient to cover relayer costs.
Methodology
Kann Audits reports describe independent researcher review followed by collaborative analysis of findings and attack paths. The standard review foundation includes:
Audit team
Final assessment
One medium finding was fixed and the other was acknowledged.
The assessment applies only to the review context and limitations documented in the published report. Missing details are not inferred, and later changes require separate analysis.
Start a conversation
Share the system, fixed scope, and target date. Build enough time into the plan for review, remediation, and verification.