Skip to content

[DRAFT] Expose AssumeUTXO Load Snapshot Functionality To The GUI #870

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

D33r-Gee
Copy link

@D33r-Gee D33r-Gee commented Apr 30, 2025

based on the QML PR 424. For evaluation purposes only!

GUI Integration for UTXO Snapshot Loading

Overview

This PR adds initial GUI support for loading a UTXO snapshot, building on Bitcoin Core's assumeutxo infrastructure.

What This PR Does

  1. Adds a basic GUI interface for loading UTXO snapshots via the Options Dialog panel
  2. Provides visual confirmation of snapshot activation
  3. Adds a snapshot progress notification bar accessible via a handler

Implementation Details

Core Components Modified

  1. Node Interface (src/node/interfaces.cpp)
  1. QT Integration (src/qt/optionsdialog.cpp)
  • Manages snapshot loading state and progress
  • makes use of a worker class to manage snapshot metadata (src/qt/snapshotmodel.cpp)
  • Provides progress updates via a progress bar

Key Design Decisions

  1. Extensibility
  • Interface designed to accommodate future assumeutxo changes
  • Error handling framework in place

Testing Instructions

  1. Build
  2. Launch Bitcoin Core GUI (bitcoin-qt)
  3. Navigate to Settings -> Options
  4. Click Load Snapshot button
  5. Follow pop-up instructions
  6. Test with sample snapshot:

https://bitcoin-snapshots.jaonoctus.dev/ (No affiliation with the maintainer of this site. As always "Don't trust! Verify!")

POC Ubuntu Screenshots `signet`

Screenshot 2025-04-28 100528
Launch bitcoin-qt on signet
Screenshot 2025-04-28 100541
Navigate to Settings -> Options
Screenshot 2025-04-28 100559
Click the "Load Snapshot..." button
Select_file
Navigate to where your snapshot file is. The snapshot was downloaded from here
Screenshot 2025-04-28 100735
Click "Yes"
Screenshot 2025-04-28 100950
Wait for the snapshot to load and for this pop-up to appear and click "Ok"
Screenshot 2025-04-28 101743
Verify the "chain_snapshot" directory is present in your datadir

Expected Behavior

  • File selection dialog works
  • Success/failure state properly displayed
  • Node becomes usable while background validation continues

Notes for Reviewers

  • This is a POC so all feedback is welcomed
  • I am not a designer so please feel free to chime in if there's a more elegant way to achieve this

This is a work in progress - feedback welcome on the approach and implementation details.

@DrahtBot
Copy link
Contributor

DrahtBot commented Apr 30, 2025

The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

Reviews

See the guideline for information on the review process.

Type Reviewers
Concept ACK Sjors

If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update.

Conflicts

Reviewers, this pull request conflicts with the following ones:

If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

LLM Linter (✨ experimental)

Possible typos and grammar issues:

  • %u -> %s [The format specifier should match the type of version_value when parsing fails and you want to print the string.]

@D33r-Gee
Copy link
Author

friendly ping @Sjors

@Sjors
Copy link
Member

Sjors commented May 1, 2025

Concept ACK

Although I'm not sure how much effort we should put into maintaining the current GUI codebase (if it's going to be replaced with QML eventually), this particular feature is high on my wish list. And the code changes here seem very simple. So I'm happy to test and review it.


The first commit which touches the node interface should eventually be PR'd to bitcoin/bitcoin. But let's wait with that until this PR has enough concept ACK and some initial review.

@luke-jr
Copy link
Member

luke-jr commented May 14, 2025

Seems like this would be more appropriate for the first-run intro page?

@D33r-Gee
Copy link
Author

Seems like this would be more appropriate for the first-run intro page?

yep that's a great idea! I will update soon.

fanquake and others added 3 commits May 20, 2025 10:36
faf55fc doc: Remove ParseInt mentions in documentation (MarcoFalke)
3333282 refactor: Remove unused Parse(U)Int* (MarcoFalke)
fa84e6c bitcoin-tx: Reject + sign in MutateTxDel* (MarcoFalke)
face251 bitcoin-tx: Reject + sign in vout parsing (MarcoFalke)
fa8acaf bitcoin-tx: Reject + sign in replaceable parsing (MarcoFalke)
faff25a bitcoin-tx: Reject + sign in locktime (MarcoFalke)
dddd9e5 bitcoin-tx: Reject + sign in nversion parsing (MarcoFalke)
fab06ac rest: Use SAFE_CHARS_URI in SanitizeString error msg (MarcoFalke)
8888bb4 rest: Reject + sign in /blockhashbyheight/ (MarcoFalke)
fafd43c test: Reject + sign when parsing regtest deployment params (MarcoFalke)
fa123af Reject + sign when checking -ipcfd (MarcoFalke)
fa47985 Reject + sign in SplitHostPort (MarcoFalke)
fab4c29 net: Reject + sign when parsing subnet mask (MarcoFalke)
fa89652 init: Reject + sign in -*port parsing (MarcoFalke)
fa9c455 cli: Reject + sign in -netinfo level parsing (MarcoFalke)
fa98041 refactor: Use ToIntegral in CreateFromDump (MarcoFalke)
fa23ed7 refactor: Use ToIntegral in ParseHDKeypath (MarcoFalke)

Pull request description:

  The legacy int parsing is problematic, because it accepts the `+` sign for unsigned integers. In all cases this is either:

  * Useless, because the `+` sign was already rejected.
  * Erroneous and inconsistent, when third party parsers reject it. (C.f. bitcoin/bitcoin#32365)
  * Confusing, because the `+` sign is  neither documented, nor can it be assumed to be present.

  Fix all issues by removing the legacy int parsing.

ACKs for top commit:
  stickies-v:
    re-ACK faf55fc
  brunoerg:
    code review ACK faf55fc

Tree-SHA512: a311ab6a58fe02a37741c1800feb3dcfad92377b4bfb61b433b2393f52ba89ef45d00940972b2767b213a3dd7b59e5e35d5b659c586eacdfe4e565a77b12b19f
This is a quick and dirty POC to showcase and test the load snapshot functionality. This is by no means meant to be a robust approach...
This serves as a quick and dirty POC to display a progress bar when an AssumeUTXO snapshot is loading. The gui code is by no means production or deployment ready. For backend evaluation pruposes only...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants