Create Payment + flag
Sponsor sends XRP with tfSponsorCreatedAccount:
- Sponsee owns the new account (their keys)
- Sponsee holds the Payment amount in balance
- Sponsor underwrites the ~1 XRP base reserve via AccountRoot.Sponsor
Xspence
Interactive Devnet sandbox for the Sponsor amendment. Create accounts, co-sign or prefund, manage recoveries, with clear guidance, expandable detail, and full transaction JSON.
Ownership almost never swaps. The sponsee owns their account and trust lines. The sponsor only temporarily underwrites reserve requirements (and sometimes pays fees). Ending sponsorship does not take objects away. It only says the sponsee must cover that reserve again.
Sponsor sends XRP with tfSponsorCreatedAccount:
On Devnet roughly: 1 XRP base per account + 0.2 XRP per owned object. That XRP is not a separate vault. It is locked accounting against free balance. Sponsorship changes who the ledger holds responsible for that lock.
| Layer | Sponsor covers when… | Sponsor free when… | Cash back to sponsor? |
|---|---|---|---|
| Account base | Create with flag · AccountRoot.Sponsor set | End account (Transfer, no ObjectID; sponsor must set Sponsee) | No automatic return of the create Payment |
| Object reserve | TrustSet etc. with spfSponsorReserve · High/LowSponsor | End object: sponsee Transfer+ObjectID; sponsor must add Sponsee=owner — or object deleted | No 0.2 XRP payment back; obligation moves |
| Fee pool | Prefund locks FeeAmount | Delete pool (tfDeleteObject) | Yes: leftover FeeAmount refunded |
| Per-tx fee | Cosign / prefund fee for that tx | After that tx settles | Never: fees are burned |
Tip: after each lab step, use Inspect sponsor / sponsee and check Sponsor, SponsoringAccountCount, SponsoringOwnerCount, and High/LowSponsor on objects.
XLS-68 is not one switch. A sponsee can stack several independent obligations at once. There are two payment rails (cosign each tx, or prefund once) that can cover fees and/or object reserves, plus a separate account-base relationship set at create time. Each layer is created and torn down with a different tool. Mixing them up is the usual lab failure mode.
Rails (how the sponsor pays or underwrites): Cosign = sponsee + sponsor both sign that tx (Sponsor, SponsorFlags, SponsorSignature). Prefund = sponsor locks budget in a Sponsorship ledger object; later sponsee txs can spend it without the sponsor signing every time (unless require-sign flags are set).
What can be covered on a sponsored tx: spfSponsorFee (burned fee), spfSponsorReserve (who underwrites new object / account reserve), or both on the same tx from the same sponsor. Ownership of the account and objects stays with the sponsee.
Deeper refunds / ownership notes: How reserves & sponsorship work.
Sponsor pays that transaction's fee only. No Sponsorship object is created. Sponsee free balance stays flat for the fee. The fee is burned, never refunded.
Sponsor locks XRP into a Sponsorship object via SponsorshipSet. Later sponsee txs debit the pool instead of cosigning every fee. Optional cap fields (e.g. MaxFee) bound what the sponsee can burn per use.
Sponsee still owns the object. The sponsor only underwrites the incremental owner reserve (~0.2 XRP on Devnet). Ledger fields: HighSponsor / LowSponsor (or object Sponsor). Not only trust lines: any object that can take spfSponsorReserve (this lab uses TrustSet).
Set when the sponsor creates the sponsee with tfSponsorCreatedAccount (or later create/reassign flows). Sponsor underwrites the ~1 XRP base reserve. Sponsee keys still own the account; the Payment amount is their balance, not an escrow to reclaim by "End".
Rule of thumb: fees burn or sit in a pool; reserves are underwriting (not a vault). Only leftover FeeAmount auto-refunds on pool delete.
Create a few test wallets, then run the lab.
Setup Accounts makes three Devnet wallets for you and assigns the roles: Sponsor (pays fees / covers reserves), Sponsee (the user account), and Control (a normal wallet for side-by-side comparison). You can run the lab right after this.
The sponsee owns their account and keys. The sponsor is only covering the base reserve cost, not taking ownership. Stopping sponsorship later does not take back the XRP that was sent when the account was created. Clear Accounts only removes wallets from this browser; it does not delete them from Devnet.
Want the deeper picture? How reserves & sponsorship work
Setup Accounts assigns these three wallets for you. They stay fixed for the lab — use Clear Accounts for a fresh set.
Business wallet. Pays fees and covers reserves.
User wallet. Can be fee/reserve covered.
Normal wallet. Self-pay baseline.
Work left to right. The submit pipeline shows each phase, its description, and raw tx_json. Full multi-tx demos live under Guide.
Per-transaction sponsorship. The sponsee authors the tx; the sponsor co-signs once so they can pay the fee and/or underwrite a new object reserve. No standing fee pool is created.
Explains: the sponsee submits a small AccountSet. The sponsor co-signs with spfSponsorFee so the sponsor burns the network fee and the sponsee’s free balance stays flat.
Explains: the sponsee opens a trust line (issuer = Control; currency rotates). The sponsor co-signs with fee + spfSponsorReserve so they underwrite the ~0.2 XRP object reserve while the sponsee still owns the line.
Standing budget. The sponsor locks fee funds (and optional object-reserve slots) in a Sponsorship ledger object once. Later spends do not need a cosign on every tx. Separate from account-base sponsorship created at Setup.
Explains: the sponsor creates a SponsorshipSet with FeeAmount (and MaxFee). That locks XRP the sponsee can later burn as fees without a sponsor signature each time.
Explains: same fee pool, plus RemainingOwnerCount slots so later TrustSets can take fee and object reserve from the pool without per-tx cosign.
Spend the standing pool. The sponsee submits alone (no cosign). Requires an open Prefund first. If require-sign flags are set on the pool, unsigned use will fail.
Explains: the sponsee alone submits an AccountSet with spfSponsorFee pointing at the sponsor. The fee is taken from the locked FeeAmount, not from the sponsee’s free balance.
Explains: the sponsee alone opens a trust line (issuer = Control; currency rotates) using fee + reserve from the pool. Needs Prefund with object slots remaining.
Three separate ways to stop underwriting or reclaim fee budget. They do not substitute for each other. Clean order: end objects → delete fee pool (if any) → end account.
Close the prefund pool. Leftover FeeAmount returns to you.
Stop underwriting base reserve (~1 XRP). Sponsee keeps the account.
Shaped path: End+ObjectID+Sponsee. Omit Sponsee → tecNO_PERMISSION.
Actions the end-user wallet can take: take reserve duty back, reclaim residual to the sponsor, or reassign / faucet.
Reassign base sponsor to Control, or faucet XRP. Neither ends pools/objects alone.
Take reserve duty yourself. Object End needs ObjectID only (you own the line).
Close the account and send residual XRP to the sponsor (while still sponsored).
A normal account with no sponsorship, used as a comparison and as a trust-line issuer.
Control pays its own AccountSet fee. Compare with co-signed or prefunded runs where the sponsee balance stays flat. Also create Control before TrustSet labs so you have an issuer.
Full multi-tx demos on Devnet. While a path runs, stay on the submit pipeline below (Prepare → Submit → Result). Use Prev / Next to review every tx when finished.
Last harness runs for review without re-running. Index
Answers from live Devnet testing. Expand a question or jump to official docs.
Three things at once: (1) sponsee owns the new account, (2) sponsee holds the Payment amount, (3) sponsor underwrites the base reserve via AccountRoot.Sponsor. Ownership does not go to the sponsor. A plain gift of XRP without the flag does not set account sponsorship.
Full reserves explainer →No. The sponsee always owns the account and trust lines. Sponsorship only underwrites reserves: account base via AccountRoot.Sponsor, objects via HighSponsor / LowSponsor (~0.2 XRP). Ending sponsorship clears underwriting; ownership stays with the sponsee.
Ownership vs underwriting →Layers are independent. Deleting the fee pool does not clear account or object sponsors. Ending the account does not clear High/LowSponsor. Cosign never creates a Sponsorship SLE — only Prefund does.
Four layers →Yes: leftover prefund FeeAmount when you delete the fee pool; residual sponsee balance only via AccountDelete → sponsor while still account-sponsored (and account is old enough).
No: ending account or object sponsorship does not claw back XRP, and burned fees are never refunded.
Reserves & refunds table →Canonical sponsor shape: SponsorshipTransfer with tfSponsorshipEnd, ObjectID, and Sponsee = the object owner. rippled resolves ownership as Sponsee ?? Account — omit Sponsee and you get tecNO_PERMISSION.
The sponsee can End with ObjectID only. This sandbox’s Manage · Sponsor button uses the shaped path automatically.