Snapshot (assumeUTXO)

Status: In development

Github issue, Figma, Prototype

The initial block download can take quite some time. assumeUTXO is a method for allowing users to interact with their wallet more quickly by importing a snapshot of all UTXOs. This allows for calculation of the balance and listing transactions in a wallet that have been received, and not yet spent.

The application only temporarily relies on this snapshot. It still downloads and validates the whole history of blocks in the background. Once it has caught up with the snapshot, it discards it. While there is some data validation, users still trust the data in the snapshot for some time.

This feature can speed things up for the user, and also introduces a new interaction. They need to find and download a trustworthy snapshot file and import it. It is not quite clear yet where users will find these files. Alternatively, users can create their own snapshots from a fully synced node, and import it into another node or share it with others.

Both design and implementation of this feature likely need iteration over time, as best practices for usage become more clear.

The image below shows the two user flows for creating and importing snapshots.

16 screen showing the user flows for snapshot import and generation

The feature is named snapshot to be more broadly understandable. Some other terms were discussed, like quick-start file and bootstrap file. Neither term can fully convey all important aspects of the feature. That can be achieved with short, contextual descriptions.

Onboarding screens introducing users to the snapshot feature

When a snapshot file was imported, but is still being validated, that status is shown in next to the block clock.

Two screen showing the block clock with verification status, and a third screen showing a verification success message

Transactions that have not been verified by the local node show that status (instead of the date). Users can still easily see the date by clicking the transaction.

Wallet activity screen showing one transaction with a verification status

Snapshot files are created at certain points in time. The application source code includes a hash for a specific one, against which downloaded files can be compared. Users should be presented the basic information they need to decide whether to trust the snapshot, and what to convey when sharing their own snapshots with others. The designs are starting points and likely need iteration.

Two screens showing completed snapshot import and generation

Further designs are needed for the send flow. Users may need to be informed when including UTXOs in their transactions that have not been verified yet.