Skip to content
This repository was archived by the owner on Feb 25, 2026. It is now read-only.

fix: validate predicate start_block and end_block - #489

Merged
MicaiahReid merged 14 commits into
developfrom
fix-scan-start-end-blocks
Feb 8, 2024
Merged

MicaiahReid merged 14 commits into
developfrom
fix-scan-start-end-blocks

Conversation

@MicaiahReid

Copy link
Copy Markdown
Contributor

Description

Previously, the scanning threads had some validation for the start_block and end_block that was incorrect. This PR introduces validation that does the following:

This PR also adds some validation to the BlockHeights class. Previously, it was possible to overload the BlockHeights::BlockRange(start_block, end_block) function to allocate a lot of memory into an empty array. We now have limits on this class. However, due to the above validation, it should not be possible to pass through parameters that reach theses limits (with the current usage of the class) until a chain height is up to 1_000_000.


Checklist

  • All tests pass
  • Tests added in this PR (if applicable)

@lgalabru lgalabru left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks @MicaiahReid!

Comment thread components/chainhook-cli/src/scan/bitcoin.rs Outdated

@lgalabru lgalabru left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks @MicaiahReid !

@MicaiahReid
MicaiahReid force-pushed the fix-scan-start-end-blocks branch from 2da51cf to b3d8a19 Compare February 8, 2024 18:23
@MicaiahReid
MicaiahReid merged commit 4b698ec into develop Feb 8, 2024
@MicaiahReid
MicaiahReid deleted the fix-scan-start-end-blocks branch February 8, 2024 18:28
MicaiahReid added a commit that referenced this pull request Feb 8, 2024
### Description

Previously, the scanning threads had some validation for the
`start_block` and `end_block` that was incorrect. This PR introduces
validation that does the following:
- We now allow `start_block` to be omitted by the user and we default to
0
- If there are no blocks in the database, we abort the scan and go to
streaming mode rather than erroring (fixes #477)
- If the user provides an `end_block`, we validate that it is greater
than the `start_block`
- If the `start_block` is greater than chain tip, we abort the scan and
go to streaming mode rather than erroring (fixes #464)

This PR also adds some validation to the `BlockHeights` class.
Previously, it was possible to overload the
`BlockHeights::BlockRange(start_block, end_block)` function to allocate
a lot of memory into an empty array. We now have limits on this class.
However, due to the above validation, it should not be possible to pass
through parameters that reach theses limits (with the current usage of
the class) until a chain height is up to `1_000_000`.

---

### Checklist

- [x] All tests pass
- [x] Tests added in this PR (if applicable)
github-actions Bot pushed a commit that referenced this pull request Feb 8, 2024
## [1.3.0](v1.2.1...v1.3.0) (2024-02-08)

### Features

* optionally serve Prometheus metrics ([#473](#473)) ([67a38ac](67a38ac))

### Bug Fixes

* adjust ordinal_number entry in ts client inscription transfer event, add new reveal data ([#476](#476)) ([28bf5c4](28bf5c4))
* remove early return for event evaluation ([#484](#484)) ([98f9e86](98f9e86)), closes [#469](#469)
* remove unreachable panic; return instead ([#490](#490)) ([abe0fd5](abe0fd5))
* use cli feature for `cargo chainhook-install` ([#486](#486)) ([32f4d4e](32f4d4e))
* validate predicate `start_block` and `end_block` ([#489](#489)) ([e70025b](e70025b)), closes [#477](#477) [#464](#464)
edge-dragonmkop added a commit to edge-dragonmkop/chainhook that referenced this pull request Sep 29, 2025
## [1.3.0](hirosystems/chainhook@v1.2.1...v1.3.0) (2024-02-08)

### Features

* optionally serve Prometheus metrics ([#473](hirosystems/chainhook#473)) ([67a38ac](hirosystems/chainhook@67a38ac))

### Bug Fixes

* adjust ordinal_number entry in ts client inscription transfer event, add new reveal data ([#476](hirosystems/chainhook#476)) ([28bf5c4](hirosystems/chainhook@28bf5c4))
* remove early return for event evaluation ([#484](hirosystems/chainhook#484)) ([98f9e86](hirosystems/chainhook@98f9e86)), closes [#469](hirosystems/chainhook#469)
* remove unreachable panic; return instead ([#490](hirosystems/chainhook#490)) ([abe0fd5](hirosystems/chainhook@abe0fd5))
* use cli feature for `cargo chainhook-install` ([#486](hirosystems/chainhook#486)) ([32f4d4e](hirosystems/chainhook@32f4d4e))
* validate predicate `start_block` and `end_block` ([#489](hirosystems/chainhook#489)) ([e70025b](hirosystems/chainhook@e70025b)), closes [#477](hirosystems/chainhook#477) [#464](hirosystems/chainhook#464)

This branch had an error being deployed

2 failed deployments
Development-mainnet b3d8a19b Deployed Feb 8, 2024 by MicaiahReid
Development-testnet b3d8a19b Deployed Feb 8, 2024 by MicaiahReid
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

No open projects
Archived in project

Development

Successfully merging this pull request may close these issues.

Chainhook should not error when end_block is missing; should just abort scan Support future start_block

2 participants