Skip to main content
Confiroll composes proven building blocks from the Stellar ecosystem rather than reinventing them. Each component does one job. This page names every part of the stack and shows how Confiroll uses it, with links to the deep-dive pages.

Powered by

Stellar

The settlement network. Confiroll settles every confidential payout on Stellar.

Soroban

Stellar’s smart-contract platform. Runs the confidential token, the vault, the payslip anchor, and the passkey wallet.

Stellar Wallets Kit

Wallet connection and signing. Connects Freighter, xBull, Albedo, and more.

OpenZeppelin

The Confidential Token that hides amounts on-chain.

Nethermind

The on-chain zero-knowledge verifier for the confidential token’s proofs.

Circle CCTP

Cross-Chain Transfer Protocol. Bridges canonical USDC into the confidential balance.

Stellar Disbursement Platform

Vendored and headless. Channel-account pool, fee-bump, submit, and retry.

Privy

Email sign-in with an embedded Stellar wallet, no seed phrase.

Noir and bb.js

The proving toolchain that builds each payout’s zero-knowledge proof in your browser.

At a glance

Stellar

Stellar is the settlement layer. Every confidential payout, deposit, merge, and withdrawal is a Stellar transaction. Confiroll runs on the Stellar testnet. Two Stellar features are load-bearing:
  • CAP-15 fee-bumps. One account pays the network fee for another account’s transaction. This is how the fee sponsor makes every user action cost 0 XLM.
  • Source-account authorization. Because the employer is the transaction source, the confidential token’s from.require_auth() is satisfied by an ordinary envelope signature, not a fragile auth entry. This is the basis of Fork B.
The live SDP stellar.toml and health surfaces are served from sdp.confiroll.com, and the BFF from api.confiroll.com.

Soroban

Soroban is Stellar’s smart-contract platform. Confiroll runs four Soroban components:

Confidential Token

The OpenZeppelin token that holds encrypted balances and hides transfer amounts.

CctpVault

The employer-owned landing point for bridged USDC that deposits it into the confidential balance.

PayslipAnchor

Stores one tamper-evidence hash per payroll cycle, never contents or amounts.

PasskeyWallet

A seedless contract account authorized by a WebAuthn passkey.
All four are immutable and store zero secrets. See Soroban contracts for functions, storage, and the on-chain testnet addresses.

Stellar Wallets Kit

Confiroll connects wallets with Stellar Wallets Kit v2.5, which supports Freighter, xBull, Albedo, and other Stellar wallets behind one interface. It does two jobs:
1

Sign-in (SEP-10)

The wallet signs a one-time SEP-10 challenge. This proves account ownership and issues a session. It moves no funds and costs nothing.
2

Authorize a payout (Fork B)

The wallet signs the confidential transfer’s envelope with signTransaction. Confiroll never uses signAuthEntry, which is unreliable across wallets. The employer is the transaction source, so a plain signature authorizes the transfer.
Because signing is a plain envelope signature, all major Stellar wallets work, and Confiroll can fee-bump the signed transaction without ever holding a key. See The non-custodial model.

OpenZeppelin Confidential Token

The privacy primitive is OpenZeppelin’s Confidential Token. It behaves like a USDC-backed token, but balances and transfer amounts are encrypted on-chain. Each account holds a confidential scalar sk, from which the client derives a viewing key vk, a spending key Y, and a public viewing key PVK. The lifecycle is register, deposit, confidential_transfer, merge, and withdraw. A confidential_transfer carries no plaintext amount argument: the value lives inside the proof and the encrypted event fields, readable only with a viewing key. Deposit and withdraw amounts are public by design. Full detail, including what is public versus hidden at each step, is on Confidential token flow.

Nethermind

The confidential token’s zero-knowledge proofs are generated with Noir and bb.js (UltraHonk) and verified on-chain on Soroban by Nethermind’s verifier. The proving transcript uses keccak Fiat-Shamir because that is what the on-chain verifier expects; a proof built with any other transcript fails verification.
Mainnet amount-hiding is gated on the OpenZeppelin and Nethermind audit of the confidential token. Until that audit completes, Confiroll runs on testnet and makes no mainnet privacy claim. See Security and claims.

Circle CCTP

To bring canonical USDC across chains, Confiroll uses Circle’s Cross-Chain Transfer Protocol (CCTP). On testnet the source chain is Base Sepolia.
1

Burn

USDC is burned on the source chain.
2

Attest

Circle attests the burn.
3

Mint into the vault

The attested message mints USDC into Confiroll’s CctpVault contract.
4

Deposit

The vault deposits the USDC into the employer’s confidential balance in one call.
The vault is owned by the employer, not Confiroll. See Funding.

Stellar Disbursement Platform

Confiroll vendors the Stellar Disbursement Platform (SDP) v6.6.1 (Apache-2.0) and runs it headless. It is not used as a disbursement platform. It provides reliable submission infrastructure only:

Channel-account pool

Pre-provisioned accounts that source outbound transactions.

Fee-bump, submit, retry

Wraps a queued operation, fee-bumps it from the distribution account, submits, and retries.
Confiroll keeps SDP close to upstream with a single patch: the TSS sponsored-transaction handler accepts an ed25519 (G-address) sponsored account, not only a contract address. See SDP integration.

Also in the stack

Privy

Email sign-in. Privy creates an embedded Stellar wallet and issues an access token that the BFF exchanges for a session JWT. See API reference.

Noir and bb.js

The Aztec proving toolchain. Noir solves the witness and bb.js generates the UltraHonk proof, both in your browser, so sk and amounts never leave your device.

How they fit together

Sign in with a wallet or email, build the proof in your browser, and Confiroll fee-bumps the signed transfer onto Stellar, where the OpenZeppelin token executes and the Nethermind verifier checks the proof. Funding flows in through Circle CCTP and the vault. Confiroll holds no user keys at any point.