Skip to content

SatoshiPortal/lqmassive

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lqmassive

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.

Install

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env

Run

cd lqmassive
cargo run --release

The GUI opens. Flow:

  1. Enter wallet → paste your BIP-39 mnemonic in the form, pick Mainnet/Testnet, leave the default waterfalls URL or paste your own.
  2. 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.
  3. 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).
  4. Confirm & broadcast (or Cancel) → only on confirm does the app sign locally and submit.
  5. 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.

High-volume test harness

examples/massive_test.rs builds a realistic massive wallet so the Sync path can be stress-tested:

cargo run --release --example massive_test

It 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 ones
  • OUTPUT_COUNT — drop this if 3000 outputs in one tx ends up rejected (e.g. OUTPUT_COUNT=1000)

Default waterfalls servers

Network URL
Liquid mainnet http://170.75.173.102:3100
Liquid testnet (set via the waterfalls_url field — Bull Bitcoin testnet URL TBD)

Descriptor

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.

Limitations (v0.1)

  • No BIP-39 passphrase. lwk_signer::SwSigner::new in 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.

Privacy note

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.

About

desktop app to sweep large liquid wallets

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages