Menu
Sections
Partner Technical Brief

Non-Custodial
by Design

BitVoy never holds user funds — across key management, payment fees, and gas fees. This document explains how.

Dimension ❌ Custodial Pattern ✅ BitVoy's Design
Key Management Server holds private key FAST: FROST MPC 2-of-2 (BitVoy wallet, server alone cannot sign) · WC: User's own external wallet (BitVoy has zero key access)
Checkout Fees System receives full amount, deducts fee, forwards to merchant FAST: Relayer calls PaymentRouterV4_2.eip3009Pay() — Router pulls totalAmount then splits atomically · WC: eip3009Pay / pay / permitAndPay
Gas Fees Gas deducted from user's tokens FAST: Relayer sponsors gas (zero cost to user) · WC: eip3009/permit2: Relayer sponsors · approve: user pays from own wallet
01 / Key Management

FROST MPC — 2-of-2 Threshold Signing

🧑

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.

🌐

Backup — Guardian Node

Stores an encrypted backup of the user's share (Party 1). Encrypted by the user with Passkey PRF → AES-256-GCM before upload — the Guardian cannot decrypt or use it for signing. Used solely for account recovery.

🔒 Non-Custodial Rationale: Signing requires both shares (Party 1 + Party 2). The server's share alone is cryptographically useless. The Guardian holds only an encrypted backup of the user's share and cannot participate in signing. Private key export is intentionally unsupported — the complete key is never reconstructed in a single location.
🔗 WC Mode: The user connects their own external wallet (e.g. MetaMask) via WalletConnect. BitVoy has zero access to external wallet keys — signing occurs entirely within the user's own wallet, with no BitVoy server involvement.
02 / Checkout Fees

On-Chain Atomic Fee Splitting

User funds never pass through a BitVoy address. Based on the content the user signed, the payment contract (PaymentRouter) distributes directly to the merchant and fee recipient within a single transaction.

① User Sign (amount &recipient fixed) ② Relayer Submit only· no modification ③ Router Split in same tx Merchant Fee Recipient

What this design guarantees

GuaranteeDetail
No intermediate custodyDistribution completes within the same transaction — no funds enter a BitVoy address. No balance remains in the Router at transaction end. This can be verified in the contract code, which is verified on each chain's explorer.
Tamper-proofThe signature nonce is generated as keccak256(abi.encode(intentIdBytes32, payee, feeRecipient, totalAmount, feeAmount, deadline, chainId)), binding it to the intentId, recipient, fee recipient, total amount, fee amount, deadline, and chain. No one — including the Relayer — can alter it after signing. If the content does not match, the Router reverts.
Funds stay put on failureIf the transaction fails, funds remain in the user's wallet.
Fixed feeThe fee rate is fixed at 1% and enforced on-chain.

For details on signature methods, contract functions, and per-mode breakdown, see Appendix: Technical Details.

03 / Gas Fees

Gas Sponsorship by BitVoy

In gasless modes, the Relayer pays gas in native tokens. The Relayer only submits the signed content on-chain and cannot alter the transfer amount, recipient, or deadline. Gas is never deducted from the user's ERC-20 token balance. Gas sponsorship is BitVoy's service cost, not custody of user funds.

ModeGas Payer
FAST (BitVoy wallet)BitVoy (Relayer). User needs no native tokens
WC: eip3009 / permit2BitVoy (Relayer). User needs no native tokens
WC: approveUser (native tokens from own wallet: KAIA / POL / AVAX / ETH)
04 / Checkout Flows

FAST & WC Modes

FAST mode uses the BitVoy wallet (MPC passkey), WC mode uses an external wallet (e.g. MetaMask). Signing occurs entirely within the user's own wallet. Final distribution is executed on-chain by the PaymentRouter in all modes.

ModeUser ActionSenderGasContract · Function
FAST EIP-3009 signature via MPC passkey Relayer BitVoy PaymentRouterV4_2 eip3009Pay (USDT: V5_2 permitAndPay)
WC: eip3009 EIP-3009 signature via external wallet Relayer BitVoy PaymentRouterV4_2 eip3009Pay
WC: permit2 (USDT) Permit2 Witness signature via external wallet Relayer BitVoy PaymentRouterV5_2 permitAndPay
WC: approve Send approve and pay (2 transactions) via external wallet User User PaymentRouterV4_2 pay
Conclusion

Non-Custodial Across All Three Layers

BitVoy employs a non-custodial design across key management, payment fees, and gas fees. BitVoy does not hold or manage user funds at any point. This is the essence of non-custodial design.

Appendix: Technical Details

A. Signature Design and Relayer Permissions (FAST / WC eip3009)
ItemDetail
Signature contentEIP-3009 transferWithAuthorization with from = User, to = PaymentRouter, value = totalAmount
Nonce generationkeccak256(abi.encode(intentIdBytes32, payee, feeRecipient, totalAmount, feeAmount, deadline, chainId)) — bound to intentId, recipient, fee recipient, total amount, fee amount, deadline, and chain
Router behaviorWhen Relayer calls eip3009Pay(), the Router verifies the signature, withdraws totalAmount, and distributes to merchant and fee recipient via safeTransfer. If nonce and arguments don't match, reverts — Relayer cannot substitute recipient or amount
Relayer's holdingsOnly native tokens for gas (no user funds)
FeetotalAmount * 100 / 10000 (1%) — enforced on-chain
B. Tamper-proof mechanism by mode
ModeTamper-proof
FAST / WC eip3009payee, feeRecipient, amounts etc. encoded in EIP-3009 nonce. Router reverts on mismatch
WC permit2 (USDT)Payment content included in Permit2 Witness signature. Reverts on mismatch
WC approveAmount and recipient enforced in Router.pay() calldata
C. Checkout Flow (Steps)

FAST (BitVoy wallet)

StepDetail
1. AuthenticationUser performs passkey authentication (BitVoy MPC)
2. Typed data generationServer generates EIP-3009 TransferWithAuthorization typed data (from = payer, to = Router, value = totalAmount, nonce = hash of checkout data)
3. SigningClient signs via MPC passkey. BitVoy server cannot sign alone
4. On-chain submissionRelayer calls PaymentRouterV4_2.eip3009Pay(). For USDT, uses Permit2 Witness signature to call PaymentRouterV5_2.permitAndPay()
5. DistributionRouter distributes to merchant and fee recipient within the same transaction

WC (External Wallet)

StepDetail
1. Page loadUser opens the checkout page and selects a wallet
2. ConnectionConnect to external wallet via WalletConnect
3. Sign / SubmitDepending on mode: (a) EIP-3009 signature → Relayer submits, (b) approve → pay (user submits), (c) Permit2 Witness signature → Relayer submits (USDT)
4. DistributionRouter distributes to merchant and fee recipient within the same transaction
05 / Contract Registry

On-Chain Contract Registry

PaymentRouterV4_2 EIP-3009 · USDC / JPYC · No Owner
Chain Contract Address Verified Deployed
Polygon 0xD2561A8eE9E115C5c2547EFE1269a3811522444D ✓ Polygonscan 2026-09-30
Avalanche 0xBef55Dd61591dc813A8682e6e1485B49dE9cf21E ✓ Snowtrace 2026-10-01
Base 0xE8165806C55C75319896467CAF21135E7e312436 ✓ Basescan 2026-10-01
Kaia 0x745aaAa418c81a33b82ef51bcEB538d84B67d69E ✓ Kaiascan 2026-10-01
PaymentRouterV5_2 Permit2 Witness · USDT · No Owner
Chain Contract Address Verified Deployed
Polygon 0x47A801Fa39E38A93b63E1E60379b27d7C5BC7811 ✓ Polygonscan 2026-10-01
Avalanche 0xbdc6652960718D95EEccDf8458eAC18352025184 ✓ Snowtrace 2026-10-01
Base 0xbe082A1Aa29709D28fCA3451838F6aAfab8b96b3 ✓ Basescan 2026-10-01
Owner None — no privileged address, no upgrade mechanism
Fee 1% fixed, enforced on-chain (totalAmount * 100 / 10000)
Compiler Solidity 0.8.24+commit.e11b9ed9 · optimizer 200 runs · viaIR · evmVersion cancun
Source Standard JSON Input verified on each chain's explorer — bytecode is deterministic and auditable