Labels: Stellar Wave, stellar, feature, drips, help-wanted
Tier: L (1–2 weeks)
Type: feature
Context
The Stellar chain module currently builds stealth payments for native XLM. Real Stellar usage involves issued assets: USDC (issued by Circle on Stellar), bridged tokens, and project-specific tokens. Without custom-asset support, Wraith on Stellar is a "send XLM privately" tool, not a "send anything privately" tool.
Scope
Add a builder buildSendStellarAsset to sdk/src/chains/stellar/builders.ts (create if missing). It must:
- Accept
{ recipientMetaAddress, amount, asset: { code: string, issuer: string }, sourceAccount, options? }.
- Verify the recipient stealth address has a trustline for the asset, OR include trustline-establishment as part of the transaction:
- Option A: Build a single tx with
ChangeTrust + Payment ops, signed by both source and stealth account.
- Option B: Use a fee-bump pattern where source funds the stealth account first, then pays.
- Picking the right model is part of the issue; argue both in the PR.
- Build the Stellar transaction with both the payment and the announcement (Soroban call), atomically.
- Return the same
{ transaction, stealthAddress, ephemeralPubKey, viewTag } shape the existing XLM builder uses, so consumers can stay consistent.
Open design questions
- Trustlines cost reserve. Who pays it? Should the stealth address need to be pre-funded to hold a trustline before receiving?
- Asset code validation — Stellar codes are 4 or 12 characters. Validate before building.
- Issuer address validation — must be a valid
G... strkey.
- Authorization-required assets — if the issuer requires authorization (
authRequired), the stealth address can't receive. Detect and error out cleanly.
Acceptance criteria
Why this matters
USDC on Stellar is the closest thing to "money" most users care about. Without it, Stellar Wraith is a demo. With it, Wraith is a payments product.
Files
Labels:
Stellar Wave,stellar,feature,drips,help-wantedTier: L (1–2 weeks)
Type: feature
Context
The Stellar chain module currently builds stealth payments for native XLM. Real Stellar usage involves issued assets: USDC (issued by Circle on Stellar), bridged tokens, and project-specific tokens. Without custom-asset support, Wraith on Stellar is a "send XLM privately" tool, not a "send anything privately" tool.
Scope
Add a builder
buildSendStellarAssettosdk/src/chains/stellar/builders.ts(create if missing). It must:{ recipientMetaAddress, amount, asset: { code: string, issuer: string }, sourceAccount, options? }.ChangeTrust+Paymentops, signed by both source and stealth account.{ transaction, stealthAddress, ephemeralPubKey, viewTag }shape the existing XLM builder uses, so consumers can stay consistent.Open design questions
G...strkey.authRequired), the stealth address can't receive. Detect and error out cleanly.Acceptance criteria
buildSendStellarAssetimplemented.docs/sdk/chains/stellar.mdx) with examples.Why this matters
USDC on Stellar is the closest thing to "money" most users care about. Without it, Stellar Wraith is a demo. With it, Wraith is a payments product.
Files
sdk/src/chains/stellar/builders.ts(likely create new)sdk/src/chains/evm/builders.ts::buildSendERC20(reference for the EVM equivalent)