Skip to main content
Buckspay separates who signs (BuckspaySigner) from what account signs (AccountAdapter). They are orthogonal: you can pair any signer with any account type. The two account models ship in v1.

Comparison

Classic account (G...)

For users who already have a Stellar wallet (Freighter, xBull, LOBSTR). Calling connect() resolves the G... address and runs sponsored onboarding - it creates the account and adds the USDC trustline - if either is missing. The network verifies the user’s signature via standard Ed25519 authentication. No contract is involved. The classicAccount() adapter is imported from @buckspay/accounts/classic; the matching signer is walletsKit from @buckspay/signers/wallets-kit.

Passkey / contract account (C...)

The hero flow for new users. connect() creates a WebAuthn credential, derives the deterministic C... address, and deploys the OpenZeppelin Smart Account sponsored by the facilitator. The user only taps an authenticator prompt - no seed phrase, no XLM balance required. Signing happens in the device authenticator (secp256r1). The contract’s __check_auth verifies the signature on-chain. See Gasless on Stellar for the mechanics. The ozContractAccount() adapter is imported from @buckspay/accounts/oz-contract; sponsorAddress is the facilitator’s public sponsor G... address, needed to derive the C... address offline.

The AccountAdapter seam

AccountAdapter is the interface both models implement. OZ Smart Accounts is the only contract implementation in v1, but the interface is open - you can wire in any conforming adapter without changing the rest of the client.

Next

Prepare -> Sign -> Send

The three-phase flow every Buckspay payment follows.

Gasless on Stellar

The native Stellar mechanisms behind sponsored and contract accounts.