Transfer Flow
How Canton transactions are prepared, signed locally, and executed.
All Grofty transactions use a three-step non-custodial flow to ensure your private key never leaves your device:
1. Prepare (Backend)
The backend prepares the Canton transaction — handling Party ID validation, preapproval checks, UTXO selection, fee calculation, and transaction construction. Returns a transaction hash for local signing.
2. Sign (Extension)
The extension decrypts your recovery phrase with your PIN, derives the private key in memory, signs the transaction hash with Ed25519, then immediately discards the private key.
3. Execute (Backend)
The backend submits the signed transaction to Canton Network and tracks confirmation state.
- User enters receiver Party ID, CC amount, and PIN
- Extension validates input and unlocks wallet
- Extension calls backend: prepare transfer
- Backend checks receiver preapproval state
- Backend selects UTXO from Canton wallet (UTXO model)
- Backend builds fee-aware transfer command via DAML
- Backend calls Canton Ledger API to prepare transaction
- Backend returns: prepareId, transactionHash, fee details
- Extension shows transaction review screen to user
- User reviews: receiver Party ID, CC amount, receiver amount, fee
- User clicks "Approve & Send"
- Extension decrypts recovery phrase from local storage
- Extension derives private key in memory (Ed25519)
- Extension signs transaction hash
- Extension sends signature to backend
- Private key is immediately discarded from memory
- Backend submits signed transaction to Canton Network
- Transaction confirmed on Canton ledger
Transfer Fee Example
Sender enters: 12 CC Grofty fee: 6 CC Receiver receives: 6 CC
The amount must be greater than the fee so the receiver receives a positive amount.
- User selects source asset (CC or USDCx) and destination
- User enters swap amount
- Backend prepares swap order and returns quote with swap fee
- User reviews: source amount, destination amount, swap fee
- User confirms swap
- Extension signs locally (same Prepare → Sign → Execute flow)
- Backend executes swap order on Canton
- Settled assets appear in wallet balance
Swap fees are separate from normal CC transfer fees.
Demo: Swap CC to USDCxGrofty provides bridge access for moving supported liquidity into Canton from external networks.
- User selects source network and asset
- User selects Canton as destination
- Backend prepares bridge order and returns bridge fee details
- User reviews: bridge amount, bridge fee, destination Party ID
- User confirms the transaction
- Extension signs locally
- Backend manages bridge order and cross-chain settlement
- Assets appear in Canton wallet after bridge settlement
Bridge fees are separate from swap fees and normal CC transfer fees.
Demo: Bridge Flow- Wallet ownership and unlock checks
- Transaction preparation (CC transfer, swap, bridge)
- Local signing support through the extension
- Transaction execution and state tracking
- Bridge order management
- Swap order management
- Fee-aware normal CC transfer handling via DAML
- Audit-style operational tracking
- Private key exists in memory for milliseconds only during signing
- Backend cannot modify transaction after it is prepared and signed
- Prepared transactions expire — cannot be replayed indefinitely
- Signature cannot be reused (replay protection)
- User reviews full transaction details before signing