Splithub
Splitwise for web3 , but with tap to pay.
Created on 1st December 2025
β’
Splithub
Splitwise for web3 , but with tap to pay.
The problem Splithub solves
π SplitHub
Bridging On-Chain Assets with Real-World Use
The Problem
People hold stablecoins like USDC, but using them for everyday actions splitting a bill, paying at venues, arcade games comes with too much friction.
The Solution
SplitHub turns crypto into a tap-to-pay settlement layer, delivering the ease of Apple Pay with the safety of a hardware wallet.
π― What People Use It For
π Social Settlements "Web3 Splitwise"
Apps track who owes what. Wallets settle. SplitHub does both.
- One person pays β SplitHub auto-calculates each share
- Friends tap phones β instant USDC settlement
- No off-ramping, no bank rails, no friction
ποΈ Venues & Event Credits
Arcades, festivals, and pop-ups lose margins to card fees. SplitHub enables a closed-loop, on-chain economy.
- Users tap to load USDC β credits mint gaslessly
- Tap to play games or buy items
- Sub-second finality and 0% payment processor fees
β‘ How It Makes Tasks Easier
SplitHub removes transaction fatigue from Web3.
Paying a Friend
- Current UX: Wallet unlock β network switch β approvals β gas
- SplitHub UX: Tap phone
Gas Requirements
- Current UX: Must hold ETH/MATIC
- SplitHub UX: Gasless, relayer-powered
Speed
- Current UX: 10β30s waits
- SplitHub UX: Instant optimistic settlement
π‘οΈ How It Makes Tasks Safer
Most users expose main wallets to unknown dApps. SplitHub uses a hardware-isolated signing chip so daily spending is separated from savings.
Device-Bound Security with Arx HaLo
- β Private key generated inside the chip
- β It never leaves the hardware
- β Signing occurs on-chip, requiring physical tap
- β Even a compromised phone cannot extract or misuse the key
Result: A secure "cash wallet" for daily use, while your primary wallet stays untouched.
πͺ Seamless Onboarding with Privy
Web3 onboarding usually requires installing wallets, storing seed phrases, acquiring gas, and understanding networks most users drop off.
SplitHub integrates Privy tsplitting a bill, paying at venues, arcade games comes with too much friction.
The Solution
SplitHub turns crypto into a tap-to-pay settlement layer, delivering the ease of Apple Pay with the safety of a hardware wallet.
π― What People Use It For
π Social Settlements "Web3 Splitwise"
Apps track who owes what. Wallets settle. SplitHub does both.
- One person pays β SplitHub auto-calculates each share
- Friends tap phones β instant USDC settlement
- No off-ramping, no bank rails, no friction
ποΈ Venues & Event Credits
Arcades, festivals, and pop-ups lose margins to card fees. SplitHub enables a closed-loop, on-chain economy.
- Users tap to load USDC β credits mint gaslessly
- Tap to play games or buy items
- Sub-second finality and 0% payment processor fees
β‘ How It Makes Tasks Easier
SplitHub removes transaction fatigue from Web3.
Paying a Friend
- Current UX: Wallet unlock β network switch β approvals β gas
- SplitHub UX: Tap phone
Gas Requirements
- Current UX: Must hold ETH/MATIC
- SplitHub UX: Gasless, relayer-powered
Speed
- Current UX: 10β30s waits
- SplitHub UX: Instant optimistic settlement
π‘οΈ How It Makes Tasks Safer
Most users expose main wallets to unknown dApps. SplitHub uses a hardware-isolated signing chip so daily spending is separated from savings.
Device-Bound Security with Arx HaLo
- β Private key generated inside the chip
- β It never leaves the hardware
- β Signing occurs on-chip, requiring physical tap
- β Even a compromised phone cannot extract or misuse the key
Result: A secure "cash wallet" for daily use, while your primary wallet stays untouched.
πͺ Seamless Onboarding with Privy
Web3 onboarding usually requires installing wallets, storing seed phrases, acquiring gas, and understanding networks most users drop off.
SplitHub integrates Privy to remove all that:
- β¨ Log in with familiar Web2 auth
- β¨ Wallets + identity created behind the scenes
- β¨ No seed phrases or setup
- β¨ No gas management
π Every Twitter User Becomes a Web3 User
If you can log in with Twitter, you can use SplitHub.
That's 500M+ people onboarded instantly.
π― The Outcome
SplitHub combines:
- πΈ Instant social settlements Split bills in seconds
- β½ Gasless on-chain payments No ETH needed
- π Tap-to-pay hardware security Hardware-isolated keys
- π Frictionless onboarding Web2 login β Web3 ready
π‘ The Vision
It makes crypto useful, safe, and invisible powering real-world interactions without the complexity of Web3.
SplitHub: Where On-Chain Meets Real-World
Challenges we ran into
π§ Challenges & Solutions
The Journey to Production-Ready NFC Payments
Building a tap-to-pay system that bridges physical hardware with blockchain infrastructure presented unique cryptographic and architectural challenges. Here's how we solved them.
π The Double-Tap Paradox
The Problem
We hit a fundamental chicken-and-egg problem with NFC authentication. Our EIP-712
PaymentAuth
signature requires thepayer
address embedded in the signed messageβbut we don't know who the payer is until they tap their chip!The circular dependency:
- π· Tap the chip β Get chip address
- π Look up chip in registry β Find the owner (payer)
- β οΈ But wait... The signature already needed the payer address before we knew it
The Solution: Two-Tap Flow
We implemented a clever two-stage authentication pattern:
// π― TAP 1: Sign with placeholder to discover chip address const placeholderAuth = { payer: "0x0000000000000000000000000000000000000000", // ...other fields }; const { address: chipAddress } = await signTypedData({ message: placeholderAuth }); // π Lookup real owner from on-chain registry const owner = await registry.ownerOf(chipAddress); const nonce = await payments.nonces(owner); // β TAP 2: Sign the REAL message with correct payer + nonce const realAuth = { payer: owner, nonce, // ...other fields }; const signature = await signTypedData({ message: realAuth });
Implementation Locations:
This pattern appears throughout the codebase in:
useSettleFlow.ts
useMultiSettleFlow.ts
useCreditPurchase.ts
useCreditSpend.ts
The Challenge: Getting state management right across asynchronous taps while handling errors gracefully required careful orchestration.
π₯ BigInt Serialization Nightmares
The Issue
JavaScript's
JSON.stringify()
silently breaks on BigInt values. Our NFC signing library needed JSON-serializable data, but Ethereum amounts are all BigInts.// β This fails silently JSON.stringify({ amount: 1000000000000000000n }); // TypeError: Do not know how to serialize a BigInt
Signatures would randomly fail verification until we traced it to corrupted message hashes.
The Fix
We built a recursive BigInt serializer in
useHaloChip.ts
:const serializeBigInt = (obj: any): any => { // Handle BigInt primitives if (typeof obj === "bigint") return obj.toString(); // Handle arrays recursively if (Array.isArray(obj)) return obj.map(serializeBigInt); // Handle objects recursively if (obj && typeof obj === "object") { return Object.fromEntries( Object.entries(obj).map(([k, v]) => [k, serializeBigInt(v)]) ); } return obj; };
Result: All BigInt values are recursively converted to strings before JSON serialization, preventing silent data corruption.
π― Gasless Relayer: Struct Encoding Hell
The Challenge
Building a relayer to submit transactions on behalf of users required perfect encoding of nested Solidity structs. One misaligned tuple encoding =
InvalidSignature
errors with zero helpful debug info.Batch Payment Architecture
The batch payment endpoint uses
Multicall3
to atomically execute multiple payments:const calls = payments.map(payment => ({ target: paymentsAddress, allowFailure: false, // βοΈ Atomic: all succeed or all fail callData: encodeFunctionData({ abi: SPLIT_HUB_PAYMENTS_ABI, functionName: "executePayment", args: [authTuple, payment.signature], }), }));
The Debugging Nightmare:
We spent hours debugging why signatures that were valid in unit tests failed through the relayer. The culprit? Subtle differences in how
viem
vs. direct contract calls encode struct arrays.Lesson Learned: Always test signature encoding through the exact same path that production will use.
β¨ How We Got Over It
Our systematic approach to solving these challenges:
1. Extensive Logging π
Detailed logging during the double-tap flow to trace exactly where state diverged
And A lot of AI Agents and Vibe Coding.
Technologies used
Cheer Project
Cheering for a project means supporting a project you like with as little as 0.0025 ETH. Right now, you can Cheer using ETH on Arbitrum, Optimism and Base.
