Liquid wallet rescue & consolidation GUI. Loads a YAML config containing your mnemonic + a Liquid destination address, syncs the wallet via a high-volume waterfalls indexer, and sweeps every L-BTC UTXO into one address after you explicitly confirm the constructed transaction.
lqmassive is not a wallet. It is a rescue tool. It builds one transaction — a full consolidation sweep — and broadcasts it only after you click Confirm & broadcast on the summary screen.
Sibling to swap_rescue (the gui branch in particular):
same iced frontend, same Bull Bitcoin red palette.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/envcd lqmassive
cargo run --releaseThe GUI opens. Flow:
- Enter wallet → paste your BIP-39 mnemonic in the form, pick Mainnet/Testnet, leave the default waterfalls URL or paste your own.
- Sync wallet → the red button connects to waterfalls and scans. The Wallet stats card then shows network, L-BTC balance, transaction count and UTXO count. Re-sync and Reset sit beside it.
- Build sweep → fill in the Sweep section's destination address and fee rate, then click the red button. lqmassive constructs the PSET and shows a Transaction summary card (inputs, outputs, recipient, recipient amount, fee, PSET preview).
- Confirm & broadcast (or Cancel) → only on confirm does the app sign locally and submit.
- Done → success card shows the txid + explorer URL. New rescue wipes state and goes back to step 1.
A scrollable Logs panel at the bottom records every step; the Copy / Save / Clear buttons mirror swap_rescue.
examples/massive_test.rs builds a realistic massive wallet so the Sync
path can be stress-tested:
cargo run --release --example massive_testIt generates two testnet mnemonics, prints wallet-1's first receive
address, polls until that address is funded with testnet L-BTC, then
broadcasts ONE transaction with OUTPUT_COUNT (default 3000) confidential
L-BTC outputs all pointing at wallet-2's first receive address. The
wallet-2 mnemonic is printed at the end so you can paste it straight into
the GUI's form to test syncing/sweeping ~3000 UTXOs.
Env vars:
WALLET_1_MNEMONIC,WALLET_2_MNEMONIC— reuse mnemonics across runs instead of generating fresh onesOUTPUT_COUNT— drop this if 3000 outputs in one tx ends up rejected (e.g.OUTPUT_COUNT=1000)
| Network | URL |
|---|---|
| Liquid mainnet | http://170.75.173.102:3100 |
| Liquid testnet | (set via the waterfalls_url field — Bull Bitcoin testnet URL TBD) |
Hardcoded to the variant used by Bull Bitcoin / Aqua / reference Liquid
(matches lwk-dart::Descriptor::new_confidential):
ct(slip77(<master-blinding>), elwpkh([fingerprint/84'/...]xpub/<0;1>/*))
i.e. confidential WPKH with SLIP77 blinding.
- No BIP-39 passphrase.
lwk_signer::SwSigner::newin 0.9.0 hardcodes the passphrase to empty and SLIP77 needs the full seed, so passphrase support means hand-deriving the descriptor. Not done yet. - L-BTC only. Other assets are reported but not swept.
- No on-disk cache. Every run does a fresh scan, by design.
Using a waterfalls server reveals all of your wallet's scriptpubkeys to that
server (the descriptor minus the blinding key is shared). Output amounts
remain confidential. On mainnet you are trusting Bull Bitcoin's indexer at
170.75.173.102:3100.