Repository navigation
Conversation
2411e62 to
57bd7e8
Compare
57bd7e8 to
f57a96e
Compare
282a579 to
3eece74
Compare
|
Pushed 91fa79b: fixes from the first mainnet Convert run.
|
|
Pushed
|
7473560 to
2616c13
Compare
|
QA: Tested on a Pixel 10 Pro and an iPhone, on mainnet, on 27 Oct. The first four cases ran on Android 3eece74 and iOS 56d7adf3, before this PR's current head; the last ran on the current heads, Android 2616c13 and iOS 68e07be9. 🟢 Convert sats to USDBConvert on the Pixel failed until Spark held Lightning sats, then bought $ 2.00 of USDB for 2,504 sats with Flashnet's 0.05% pool fee. The quote showed the fee as 801 USDB base units ($ 0.0008). An insufficient Spending balance now stops the conversion with a clear message, and the fee shows in dollars.
🟢 Send USDB Pixel to iPhoneThe Pixel paid the iPhone $ 1.00 USDB, and it arrived with no fee on either side. 🟢 Send USDB iPhone to PixelThe iPhone paid the Pixel $ 0.50 USDB, and it arrived with no fee on either side. 🟢 Swap USDB to Arbitrum USDTAt 15:55 CET, To USDT on the Pixel moved USDB through Orchestra, and the Pixel received $ 1.41 USDT. The amount sent wasn't recorded, so this bridge's fee is unknown.
🟢 USDB activity, details and receiptsChecked by @ovitrif on both phones at about 16:30 CET: USDB sends, receives and conversions show in Home and All Activity with their details, a send ends on a success sheet, and a receive shows the Received sheet. The same $ 0.50 USDB payment from 14:41 shows its dollar amount, sats side, status, $ 0.00 fee, invoice and transaction id on both phones.
|
024b6bb to
d7be600
Compare
|
Closing: Bitkit keeps its current USDT0 implementation and is not adding dollars on Spark. |




Twin: synonymdev/bitkit-ios#1145
Dependency: #1697
Stacked on #1697: base this PR on
feat/breez-spark-lightningand merge it after that PR.This PR adds a dollar balance held on Spark, next to the Arbitrum USDT wallet, so two Bitkit wallets can pay each other dollars over Spark through the Breez SDK.
Description
_sparkstrings in every locale.ConversionOptionson a payment to the wallet's own Spark address).crossChainConfig, a route to Arbitrum USDT that accepts USDB).usdb-spark-addresson Paykit with the wallet's Spark address, with the Spending endpoints, while Spark holds dollars; paying a contact who publishes it, while you hold Spark dollars, opens the dollar send flow with the address filled in.Env.sparkUsdTokenId), since anyone can issue a token with any ticker: USDB on mainnet, a 6-decimal "Test USDB" on regtest.Out of Scope
usdb-spark-addressstays out of accepted-method lists and allowances.Design
N/A — no design available.
Preview
Wallet B pays wallet A $ 10.00 over Spark (left B, right A, 2x), and A's Home afterwards.
case3-b-to-a.mp4
QA Notes
Setup
Two dev (regtest) builds of this branch, A and B, onboarded with a new wallet each; Spark connects to Lightspark's hosted regtest with no extra setup.
The regtest test token is
btknrt1wrr0qtshpyuzrx5p0mvd605dnwvfv3dcpfexqgfzpgl3rykdacsq6p8z6l("Test USDB",USDB, 6 decimals). Its issuer wallet holds the minted supply in a Breez SDK CLI data dir. To fund a wallet without it, build the Breez CLI (breez/spark-sdktag0.27.2,cargo build -p cli --release), create a token of your own (issuer create-token "Test USDB" USDB 6 -f 1000000000000000,issuer mint-token 1000000000000) and set its identifier asEnv.sparkUsdTokenIdfor regtest in a local build.Mainnet: Convert in the dollar wallet turns Spending sats into USDB; no other funding is needed.
Journeys
spark-usd-bitkit-to-bitkit.xml— two Bitkits pay each other dollars over Spark, free, and a sats invoice is refusedManual Tests
pay -r <invoice> -a 100000000) → A's tile and wallet show $ 100.00 and a Received row — the token issuer wallet is not in the Capabilities tableAutomated Checks
SparkRepoTest.kt— loads the token balance and transfers (mints left out), scales 6- and 8-decimal tokens to dollar units and back, recognizes Spark inputs, reads an invoice's fixed amount, rejects an invoice for another tokenEvidence
At
ad0a4b7a8(the fixed-amount case at2411e626e), dev build on two Android 16 emulators (A, B) against Lightspark's regtest, 27 Oct:lightning:<invoice>(A $ 75.00, B $ 25.00), then B paid A $ 10.00 (B $ 15.00, A $ 85.00, recording above). No fee on either side.USDT Spark $ 0.00before funding, and the token metadata (ticker, decimals) loaded from Spark.usdb-spark-address) ate0eeefa8e:just testandjust lintpass; no device run yet. The cases above ran with the earlier regtest test token, "Test Tether USD".bfc43b533at3eece748e:just testandjust lintpass.74735603d:just testandjust lintpass; no device run yet.Gaps
usdb-spark-address: unit-tested builds only; publishing and paying a contact are not run on a device.Models used
claude-opus-5-5(reasoning: Not exposed)claude-opus-5-5(reasoning: Not exposed),claude-sonnet-5-5(reasoning:high)Metadata note: the session exposes the model id but not its reasoning setting; the Sonnet worker read existing code only.