SwapChan
Never holds your keys · your wallet signs
blocktools CLI

Stellar

Addresses and keys only. SEP-0005 path m/44'/148'/{i}' (SLIP-10 ed25519, all hardened); the recovery preset also tries m/44'/148'/{account}'/{i}' and…

Addresses and keys only. SEP-0005 path m/44'/148'/{i}' (SLIP-10 ed25519, all hardened); the recovery preset also tries m/44'/148'/{account}'/{i}' and m/44'/148'/{i}'/0'. Addresses are StrKey G...; secrets are StrKey S... (field private_key, always redacted).

./blocktools run 'seed-repair < /in/xlm-mnemonic.txt | seed-to-master | derive --chain xlm --count 1'

A Stellar secret seed (S...) is classified as xlm_seed; key-to-addresses --chain xlm gives its account id.

./blocktools run 'classify /in/xlm-seed.txt'


./blocktools run 'key-to-addresses --chain xlm < /in/xlm-seed.txt'

Payments and sweep (acct-tx)

utxo-fetch --chain xlm G...   # host-side: Horizon: native balance, next_seq, subentry_count
acct-tx build --chain xlm --from G... --to G... --amount STROOPS --fee 100 --seq NEXT_SEQ --memo-id N > u.json
acct-tx build --chain xlm --from G... --to G... --sweep --fee 100 --seq NEXT_SEQ > u.json   # AccountMerge
acct-tx decode --chain xlm < u.json
acct-tx sign --chain xlm --tx u.json --expect-to G... < secret.txt > signed.json   # typed code on /dev/tty

One native Payment or one AccountMerge per transaction, memo none/id/text, optional max time. The sweep is an AccountMerge: it moves the whole balance including the reserve and deletes the account; Stellar refuses it while the account has trustlines, offers or other subentries (check subentry_count). A missing memo is warned about, because exchanges credit deposits by memo. KAT: unsigned and signed envelopes and hashes byte-equal to py-stellar-sdk 16.1.1 (crates/acct/tests/kat.rs, scripts/e2e.d/acct.sh).

NOT BUILT: broadcast (submit the signed base64 to Horizon POST /transactions yourself), muxed (M...) accounts, non-native assets, multi-op transactions, fee-bump. UNTESTED: a real network submit; utxo-fetch was run once against horizon.stellar.org (2026-10-25) and is not in CI. UNTESTED: wallets that use non-SEP-0005 paths beyond the three tried by the recovery preset.

Worked sweep (tested)

Unsigned sweep for the SEP-0005 vector-1 accounts 0 -> 1 (AccountMerge), decoded through the agent boundary. Only public fields come back (from, to, amount, fee in base units, signed=false). Signing is the TTY step above (acct-tx sign ... --expect-to). It is a human-typed code, so recipe-check can't run it here; scripts/e2e.d/acct.sh drives it through a pty.

./blocktools run 'acct-tx build --chain xlm --from GDRXE2BQUC3AZNPVFSCEZ76NJ3WWL25FYFK6RGZGIEKWE4SOOHSUJUJ6 --to GBAW5XGWORWVFE2XTJYDTLDHXTY2Q2MO73HYCGB3XMFMQ562Q2W2GJQX --sweep --fee 100 --seq 123456789013 | acct-tx decode --chain xlm'