Smart Wallets (C-Addresses)
Smart wallets let a user onboard with a passkey (WebAuthn — Face ID / Touch ID / a security key) that controls a Stellar smart contract account, a C-address, instead of a classic ed25519 account (a G-address). The account's authorization logic lives in a Soroban contract rather than in a fixed signature scheme.
Unlike Pollar's custodial login (social / email → platform-custodied G-address), a smart wallet is a non-custodial, passkey-controlled account: the user signs with their device credential, and Pollar sponsors the on-chain deploy and fees.
Availability: implemented in
@pollar/core/@pollar/react0.10.1. It is browser-only for now —@pollar/reactwires the WebAuthn ceremony automatically on web; React Native needs a native passkey provider. Some features (Swap, Earn, and manual trustlines) are not yet supported for smart wallets.
How you use it
Smart wallet login is a distinct entry point — there is no walletType switch. Turn on the option and the SDK exposes it:
- Enable it in the dashboard: Build → Branding → Smart Wallet (passkey). This surfaces a passkey option in the login modal (
styles.smartWallet). - From the built-in modal:
openLoginModal()then renders a Smart Wallet (passkey) option with two actions — sign in (returning user) and create (new user). - Headless: call the client directly:
const pollar = usePollar().getClient();
pollar.createSmartWallet(); // new user: passkey create() + sponsored C-address deploy
pollar.loginSmartWallet(); // returning user: passkey get()Both drive AuthState (creating_passkey → deploying_smart_account → authenticated). After login the wallet is:
usePollar().wallet;
// { custody: 'smart', address: 'C…', provider: 'passkey', existsOnStellar, fundingMode }Payments use the same transaction API as any other wallet (runTx / buildTx + signAndSubmitTx) — for a smart wallet the SDK signs the Soroban auth entries with the passkey credential under the hood.
In this section
| C-Address Quickstart | Passkey sign-up through to a payment-ready smart wallet |
| G-Addresses vs C-Addresses | What differs (and what doesn't) between the two account types |
| How the C-Address Lifecycle Works | Deploy, rent/TTL, the SAC, and auth-entry signing under the hood |
How it differs from classic accounts at a glance
| Aspect | G-address (custodial, classic) | C-address (passkey smart wallet) |
|---|---|---|
| Identifier | Starts with G | Starts with C |
| Login | Social / email (custodial) | Passkey (WebAuthn) |
| Authorization | Native ed25519 signature | __check_auth in the contract |
| Creation | createAccount operation | InvokeHostFunction (contract deploy) |
| Holding an asset | changeTrust trustline | SAC balance (no classic trustline) |
| Keeping it alive | XLM reserve (one-time) | Storage rent + TTL (recurring) |
See How the C-Address Lifecycle Works for the full breakdown.