Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
A payment verifier that releases escrow based on knowledge of a pre-shared secret. Users prove payment by providing the correct OTP/secret that matches a pre-committed hash.
Notes
Word-based secrets: Uses human-readable passphrases converted to bytes32
const secret = ethers.utils.formatBytes32String("horse battery staple magic");Deposit-specific hashing: Prevents cross-deposit attacks by binding secrets to specific deposits
hash = keccak256(abi.encodePacked(secret, payeeDetails))Each deposit gets a unique hash even with the same secret due to payeeDetails salt
Attacker knowing one secret cannot compromise other deposits
No nullifiers needed - escrow prevents double-spending via intent removal
Use Case
Suitable for cash payouts where users can establish a secure side-channel to share word-based secrets after payment completion, trading external payment verification for simplicity and human-readable secrets.