Tap-to-redeem crypto vouchers with iPhone proximity. No addresses. No QR codes. Just touch phones.
Copying 42-character addresses is error-prone and intimidating for non-technical users.
Scanning QR codes in social settings is clunky and breaks the flow of interaction.
Web3 UX is too complex for everyday peer-to-peer transactions like splitting bills or gifting.
Bump two iPhones together โ send crypto. That's it.
Alice locks 0.001 ETH in the smart contract. The app generates a random 32-byte secret and stores only its keccak256 hash on-chain.
createVoucher(hash, 0x0, amount, 24h)
Alice and Bob touch their iPhones. Using Multipeer Connectivity, the secret is transferred peer-to-peer. No servers, no internet needed.
MCSession.send(secretBytes)
Bob receives the secret and taps "Redeem". The smart contract verifies keccak256(secret) matches the hash and transfers the ETH to Bob's wallet.
redeem(secret) โ 0.001 ETH to Bob
Ultra-low gas fees (~$0.001/tx)
Smart contract with OpenZeppelin security
Development & deployment framework
14 comprehensive tests (all passing)
Cross-platform mobile app
Blockchain integration library
Apple's P2P proximity framework
Cryptographic hash function
Production-ready contract on Base Sepolia with comprehensive test coverage
0xA0bbf7730C9065830c51d2A57b2C0A98d3876bD1
Base Sepolia Testnet (84532)
October 18, 2025
View on BaseScan โ
๐ Generates random secret (32 bytes)
๐ Computes keccak256(secret) = hash
๐ธ Locks 0.001 ETH in contract
Base Sepolia L2
Stores: vouchers[hash] = {
creator: Alice
amount: 0.001 ETH
expiry: 24h
}
Multipeer Connectivity
Alice touches Bob's iPhone
Secret transferred P2P (encrypted)
No internet needed โจ
๐ฒ Receives secret on his device
๐ Calls contract.redeem(secret)
โ Contract verifies hash matches
๐ฐ Bob receives 0.001 ETH!
โ Secret never stored on-chain (only hash)
โ One-time use (cannot redeem twice)
โ Time-locked (24h expiry for refund)
โ Trustless (no intermediaries)