FROST MPC — 2-of-3 Threshold Signing
No complete private key exists anywhere. Signing requires cooperation from at least two parties.
Party 1 — User
Key share stored in the browser, encrypted with Passkey PRF → AES-256-GCM. The server cannot decrypt it.
Party 2 — BitVoy Server
Holds one encrypted share only. Cannot produce a valid signature alone. Server compromise ≠ fund loss.
Party 3 — Guardian Node
Distributed nodes hold the third share, encrypted with AES-256-GCM. Used for account recovery.
On-Chain Atomic Fee Splitting
Funds are split directly on-chain in the same transaction — BitVoy never receives and redistributes.
Fee splitting via executeIntentV3 in the Smart Account contract.
BitVoyPaymentRouter.sol pulls tokens via Permit2 and splits within the same atomic transaction.
| ❌ Custodial Pattern | ✅ BitVoy's Design | |
|---|---|---|
| Fund Flow | User → BitVoy → Merchant | Contract splits directly (AA: inside SA, STANDARD: via Router) |
| Intermediate Custody | Yes — BitVoy temporarily holds funds | None — instant distribution within the same tx |
| Tampering Risk | BitVoy could manipulate amounts | AA: intentHash signature · STANDARD: Permit2 signature prevents tampering |
Verifying Paymaster Sponsorship
BitVoy sponsors gas costs — without touching the user's ERC-20 tokens.
How It Works
BitVoyPaymaster.solpaymasterAndData, authorizing gas sponsorship for this specific UserOpEntryPoint settles gas costs from the Paymaster's deposit to the Bundler — user's ERC-20 balance is never touchedpaymasterAndData Structure — 97 bytes
OIDC Payment — Step-by-Step
Detailed flow for both modes showing exactly where signatures and splits occur.
computeIntentHashV3executeIntentV3 callData (V3 ABI)executeIntentV3 → atomic splitPOST /prepare — server generates Permit2 EIP-712 typed dataPOST /execute — server builds payWithFee() callDataPaymentRouter.payWithFee() → Permit2 pull → atomic split to merchant + fee recipient| Feature | Mode | Fee Method | Contract | Mechanism |
|---|---|---|---|---|
| OIDC Payment | AA | executeIntentV3 |
BitVoySmartAccountIBUOv3 | On-chain split inside SA |
| OIDC Payment | STANDARD | payWithFee |
BitVoyPaymentRouter | Permit2 Pull → Split transfer |