Skip to content
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

feat: add encoder/decoder for withdrawal id compression (for storage in OP_RETURN) #1525

Merged
merged 100 commits into from
Mar 20, 2025

Conversation

cylewitruk
Copy link
Member

@cylewitruk cylewitruk commented Mar 18, 2025

Description

Part of: #1478 and supersedes #1486 (due to the size of the changes and the fact that most comments are now invalidated).

This introduces a new module idpack to the sbtc crate which contains an encapsulated integer sequence compression encoding using a multi-bitmap segmentation algorithm.

Compared to #1486, this PR is substantially slimmed down and drops support for the eventual handling of multiple encodings within the same encoding format, i.e. adding or changing the encodings will require a new implementation.

Changes

  • Removed EncodingStrategy trait and moved the full encode/decode implementations to encoder.rs and decoder.rs respectively.
  • Removed a bunch of other stuff as well.
  • The LEB128 implementation is moved to feat: add leb128 variable length integer implementation to sbtc crate #1523 and this PR targets that.
  • The encode-path is now infallible.
  • The packaging path remains fallible:
    • The only errors that can be produced (in practice) are due to input validation.
    • The same applies to size-estimations from Segmenter.
    • Reason being that these work on slices instead of requiring new allocs to sortable types (we expect our input to be sorted, anyway - see this comment for more context).
  • Added a bunch of tests.
  • The Segments type now upholds the invariant that its inner segments must be sequential without overlaps.

Checklist:

  • I have performed a self-review of my code
  • My changes generate no new warnings
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published in downstream modules

Copy link
Contributor

@djordon djordon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Largely looks good, just a couple of comments.

matteojug
matteojug previously approved these changes Mar 20, 2025
@cylewitruk cylewitruk changed the base branch from feat/leb128 to main March 20, 2025 12:50
@cylewitruk cylewitruk dismissed matteojug’s stale review March 20, 2025 12:50

The base branch was changed.

Copy link
Contributor

@djordon djordon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good

@cylewitruk cylewitruk added this pull request to the merge queue Mar 20, 2025
Merged via the queue into main with commit f5d6582 Mar 20, 2025
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
needed-for-withdrawals-v1 transaction library Common library for handling transaction manipulation. withdrawal The withdrawal sBTC operation.
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

3 participants