Commit Graph

6626 Commits

Author SHA1 Message Date
merge-script d96d0f72b5
Merge rust-bitcoin/rust-bitcoin#4188: ci: update Kani GitHub Actions runners to ubuntu-24.04
e3f409e3c4 ci: update Kani GitHub Actions runners to ubuntu-24.04 (Erick Cestari)

Pull request description:

  GitHub is deprecating the ubuntu-20.04 runner, with removal scheduled for 2025-04-01 (see [GitHub Issue #11101](https://github.com/actions/runner-images/issues/11101)).

  This PR updates the CI/CD workflows to use ubuntu-24.04 instead of ubuntu-20.04 for the following workflows:

  - cron-daily-kani.yml
  - rust.yml (Kani codegen job)

  This change should resolve the CI/CD error in the Kani codegen - stable toolchain job triggered by pull requests.

ACKs for top commit:
  Kixunil:
    ACK e3f409e3c4
  apoelstra:
    ACK e3f409e3c4327c647b64416caa401c883b459c86; successfully ran local tests

Tree-SHA512: 7e235b68226042937e7269cccae4850cd33cc09c1546a068542903bf9756aaf77155fce3991f899b8470bc97a7115c7ed22e4f09a4c4f4061897a0b18a993487
2025-03-05 15:34:35 +00:00
merge-script 16860fefd2
Merge rust-bitcoin/rust-bitcoin#4185: fuzz: cover more stuff for Script
08e0d4f0e5 fuzz: cover minimal_non_dust_custom  for Script (Bruno Garcia)
66fee1ef87 fuzz: add consume_u64 (Bruno Garcia)
35e7027a08 fuzz: move consume_random_bytes to a util file (Bruno Garcia)
eb8ecd5e3c fuzz: cover minimal_non_dust for Script (Bruno Garcia)
cab8a6134f fuzz: cover count_sigops{_legacy} for Script (Bruno Garcia)

Pull request description:

  This PR adds fuzz coverage for `count_sigops`, `count_sigops_legacy`, `minimal_non_dust` and `minimal_non_dust_custom`. In order to not duplicate `consume_random_bytes`, it moves it to a util file and adds a `consume_u64` function to be used in the `deserialize_script` target to fuzz `minimal_non_dust_custom`.

ACKs for top commit:
  apoelstra:
    ACK 08e0d4f0e53d97edd655ec1103d60a2b4715fb91; successfully ran local tests

Tree-SHA512: d9b0b94af3e2c1b06b790e0b7d13095493d372f8c22babb9139f25f45ff580020a04c00bdba023bf4f89e2db1e13ffdff8e43f073516e7699c2ccc0233b0eb4b
2025-03-05 14:46:45 +00:00
Martin Habovstiak ecc5791930 Add test checking `XOnlyPublicKey::deserialize`
This test checks the previous fix - if ordered before the previous
commit it will fail.
2025-03-05 13:09:44 +01:00
Martin Habovstiak bbe87eccf2 Fix bug in PSBT `Deserialize` for `XOnlyPublicKey`
During upgrade of `secp256k1` a number of function calls needed to be
rewritten to not use `from_slice` but `from_byte_array`. Unfortunately,
the conversion wasn't correct and caused panics on invalid inputs
rather than errors.

This fixes it simply by calling `try_into` on the entire slice and
converting the error.
2025-03-05 13:05:04 +01:00
merge-script 69d042c770
Merge rust-bitcoin/rust-bitcoin#4184: Bump GitHub Actions Artifacts to v4
2dad19a20f Bump GitHub Actions Artifacts to v4 (Jamil Lambert, PhD)

Pull request description:

  v3 is deprecated and causes an automatic fail of fuzz workflow.

  Bump the version of `actions/upload-artifact` and `actions/download-artifact` to v4.

ACKs for top commit:
  Kixunil:
    ACK 2dad19a20f
  tcharding:
    ACK 2dad19a20f
  apoelstra:
    ACK 2dad19a20ff0bdf7d99669a18905f1fa253ab6ec; successfully ran local tests

Tree-SHA512: c6b9f68b6ac7050edb753c11c4aad9901a320b93544da6f12b130faa838e92b01da16ac88e9e9f51097ac8eefbd4ece68bbb24b13bce92687a752d254c0effcd
2025-03-05 04:33:25 +00:00
Shing Him Ng 90d909becc Kill mutants in primitives and units
This kills 15 mutants found with the mutants workflow
2025-03-04 21:35:10 -06:00
merge-script d1d538ef49
Merge rust-bitcoin/rust-bitcoin#4167: bitcoin: Remove hash type re-exports
852bcf6017 bitcoin: Remove hash type re-exports (Tobin C. Harding)

Pull request description:

  The `{W}PubkeyHash` and `{W}ScriptHash` types are not likely to be used directly by consumers of the library because we have other function that return them and are more ergonomic to use. There is therefor no good reason to re-export them from the crate root.

ACKs for top commit:
  apoelstra:
    ACK 852bcf60178c9491ebcbf13243cf79857592ccec; successfully ran local tests; will one-ACK merge, still does not affect any public API
  Kixunil:
    ACK 852bcf6017

Tree-SHA512: fbc4a7e3e116e962dc4b65b8681343e6ecd485a2289c5798979ce8e6ead4c0b6bda04ae33af1bdd711e852f95896107f9fa3c63d52fd36a6f802de4a7b677073
2025-03-05 01:56:04 +00:00
merge-script ed772d4fc9
Merge rust-bitcoin/rust-bitcoin#4168: Move `opcodes` back to bitcoin
a74393324b Move opcodes back to bitcoin (Tobin C. Harding)

Pull request description:

  Duplicate `opcodes` in `bitcoin` and hide it in `primitives` so we do not have to commit to the API.

  We use opcodes in `impl fmt::Display for Script`.

  Close: #4144

ACKs for top commit:
  apoelstra:
    ACK a74393324bd47f89fd47281d567ab15ab6bcb2ba; successfully ran local tests; sure
  Kixunil:
    ACK a74393324b

Tree-SHA512: 738685b9cd2288a581daa6219e3b21bd48bb4845ea627bf6b8085e0e48f5649ac5ec616a3421d10cd37543f76b66d31f94fd55bf94effc2fb8f91d1ecf5c8611
2025-03-05 00:57:46 +00:00
merge-script 644adb4c18
Merge rust-bitcoin/rust-bitcoin#4177: Manually update nightly version
a4b9c196b1 Manually update nightly version (Tobin C. Harding)

Pull request description:

  While trying to use the `macro_use_imports` lint I found that there is a bug in last weeks nightly. It has been fixed already so lets update.

  Update to todays nightly compiler. Doing so causes some new linter warnings, for now we just allow them.

ACKs for top commit:
  apoelstra:
    ACK a4b9c196b13a2029ef0de198114a29c71a192d03; successfully ran local tests

Tree-SHA512: a982ba05713c214af3b9375ecf37b66aea07ec0330392c30d2dbe3c9b40e1219b587ee43222f2355292b9b374a6a1d8a19d18b559bb47d33e544ed78509a51b8
2025-03-04 21:47:20 +00:00
Martin Habovstiak 8efacd4dda Deprecate `PrivateKey::from_slice` method
Since arrays better convey the intention than slices when parsing
fixed-sized bytes we're migrating to them. This deprecates the
`from_slice` method similarly to how we do it elsewhere.
2025-03-04 21:01:34 +01:00
Martin Habovstiak 0d5cd7af43 Add `from_byte_array` to `PrivateKey`.
Private keys have statically-known length of 32 bytes and we are
migrating types with known lenths to use `from_byte_array` methods. This
adds the method to `PrivateKey` as well and uses it to implement
`from_slice`.
2025-03-04 20:39:47 +01:00
Martin Habovstiak 1778fea66e Add a test checking `PrivateKey::from_slice`
This test checks the previous fix - if ordered before the previous
commit it will fail.
2025-03-04 20:34:59 +01:00
merge-script 2a9b12b99e
Merge rust-bitcoin/rust-bitcoin#4180: Fix the release script that checks for TBD
fe685b824f Fix the release script that checks for TBD (Jamil Lambert, PhD)

Pull request description:

  `release.sh` is missing `units`.

  Add `units` to the list of crates to check.

  Reorder the crates alphabetically.

  Fix #4163

ACKs for top commit:
  tcharding:
    ACK fe685b824f
  Kixunil:
    ACK fe685b824f
  apoelstra:
    ACK fe685b824f1c63ad0e4aea74a18081d71ccd044d; successfully ran local tests

Tree-SHA512: 0b1ac9610e547f895902ce5d73aa7d2fcdcb319bded3f78e490d3288f177a79c5e2ee354e0481e128dbef0f7b134737422272a615d3bb0fef4f3bd05e5ba4c0a
2025-03-04 19:27:57 +00:00
Martin Habovstiak b87ddc0043 Don't panic in `PrivateKey::from_slice`
During upgrade of `secp256k1` a number of function calls needed to be
rewritten to not use `from_slice` but `from_byte_array`. Unfortunately,
the conversions wasn't correct and caused panics on invalid inputs
rather than errors.

This fixes it simply by calling `try_into` on the entire slice and
converting the error.
2025-03-04 20:25:45 +01:00
merge-script 5f1700e79f
Merge rust-bitcoin/rust-bitcoin#4181: Implement `Rem` for `Weight`
8007840676 Add a test for remainder (Jamil Lambert, PhD)
4787aa1f89 Implement Rem for Weight (Jamil Lambert, PhD)

Pull request description:

  Weight implements `Div` but not `Rem`.

  Add the `Rem` implementation.

  Add a test for the remainder operation on `Weight`

  Close #4171

ACKs for top commit:
  Kixunil:
    ACK 8007840676
  tcharding:
    ACK 8007840676
  apoelstra:
    ACK 80078406768aa5f8e4d21d42cc1d1fe9abeed1ea; successfully ran local tests

Tree-SHA512: cfcbc49a944146f7ba24a2f7b7f79ed2e2758ba2a23e9e69d9662afb5379dd74c646ff787c0e8218053e70410353cb74115e4c03bfdaafc8a1f9a4b0e51a3e15
2025-03-04 17:42:14 +00:00
Erick Cestari e3f409e3c4 ci: update Kani GitHub Actions runners to ubuntu-24.04
GitHub is deprecating the ubuntu-20.04 runner, with removal scheduled for
2025-04-01 (see: https://github.com/actions/runner-images/issues/11101)
This commit updates workflow files to use ubuntu-24.04 instead.
2025-03-04 14:11:22 -03:00
Erick Cestari 3ca3218c23 witness: Improve element access methods with get() and get_back()
Enhance Witness struct element access methods:

- Rename `nth()` to `get()` for clearer slice-like element retrieval
- Introduce `get_back()` method for flexible reverse indexing
- Remove redundant `second_to_last()` and `third_to_last()` methods
- Add `#[track_caller]` to index implementation for better error tracking
- Update all references to use new method names
- Improve documentation with usage examples

The changes provide a more intuitive and consistent approach to
accessing witness elements.
2025-03-04 12:16:48 -03:00
merge-script 95c012ee53
Merge rust-bitcoin/rust-bitcoin#4143: primitives: Inline small functions
b656d7a16c Inline small functions (Jamil Lambert, PhD)

Pull request description:

  Functions that fit the below criteria should be inline:

  > Basically, if a function jut delegates into another function and passing through arguments, it should be inline. Also when doing assignment of `u32` or similarly trivial operation. Also if it checks the validity of argument(s) and then performs something simple (like a call to `_unchecked`).

  _Originally posted by Kixunil in https://github.com/rust-bitcoin/rust-bitcoin/pull/4099#discussion_r1966156399_

  Add `#[inline]` to all functions in `primitives` that fit the criteria.

ACKs for top commit:
  tcharding:
    ACK b656d7a16c
  apoelstra:
    ACK b656d7a16c2d0cdd6d8a94fffeac842ffc0fabf4; successfully ran local tests

Tree-SHA512: 0059aa25252e634e55482b201a9414d19a01435fea801a20dc38b4b701a52f4a14565a1cfb0ff4ed7a771a25629eb192fd69cb4ee81e78f6a0ef79d56db0ef5b
2025-03-04 14:35:14 +00:00
Bruno Garcia 08e0d4f0e5 fuzz: cover minimal_non_dust_custom for Script 2025-03-04 11:13:55 -03:00
Bruno Garcia 66fee1ef87 fuzz: add consume_u64 2025-03-04 11:13:51 -03:00
Jamil Lambert, PhD 2dad19a20f
Bump GitHub Actions Artifacts to v4
v3 is deprecated and causes an automatic fail of fuzz workflow.

Bump the version of `actions/upload-artifact` and
`actions/download-artifact` to v4.
2025-03-04 11:37:58 +00:00
Martin Habovstiak d1d483491f Make `hex` in `internals` optional
The `hex` crate is not always desirable - e.g. when the consumer wants
to work with raw data only. We already had this optional in `hashes` but
if `hashes` is going to depend on `internals` it would break this
property.

This change makes `hash` optional, since it's easy: there's just one
struct that depends on it.
2025-03-04 12:33:04 +01:00
Tobin C. Harding 852bcf6017
bitcoin: Remove hash type re-exports
The `{W}PubkeyHash` and `{W}ScriptHash` types are not likely to be used
directly by consumers of the library because we have other function that
return them and are more ergonomic to use. There is therefor no good
reason to re-export them from the crate root.
2025-03-04 08:15:04 +11:00
Jamil Lambert, PhD 8007840676
Add a test for remainder
A remainder operation has been implemented for `Weight`.

Test the functionality of remainder with both a `Weight` and `u64`
2025-03-03 20:47:01 +00:00
Jamil Lambert, PhD 4787aa1f89
Implement Rem for Weight
`Weight` implements `Div` but not `Rem`

Add `Rem` impl for `Weight`
2025-03-03 20:43:21 +00:00
merge-script 6483244280
Merge rust-bitcoin/rust-bitcoin#4170: Improve crate docs headings
83d071e54b chacha20: Add whitespace (Tobin C. Harding)
4451724d31 chacha20: Add a docs heading (Tobin C. Harding)
d4417f9666 io: Improve crate docs heading (Tobin C. Harding)
c466554948 hashes: Improve crate docs heading (Tobin C. Harding)
6f4eb60936 Improve docs crate headings (Tobin C. Harding)

Pull request description:

  Make them all uniform after taking 2 minutes online to try find a nice format.

ACKs for top commit:
  apoelstra:
    ACK 83d071e54be0bc4ebd760a490a3ca887c0bf90a8; successfully ran local tests; lgtm

Tree-SHA512: 6f08c6cda91a7a870f1080b497f89607ac3d6b3c0234cbd2ba2da8710d46816398acac0bca2a49a3bc9466b814ae446842d3d304a3735df9f983e3ff5df005db
2025-03-03 20:05:29 +00:00
merge-script 5bc08b1d9a
Merge rust-bitcoin/rust-bitcoin#4154: update secp256k1 to 0.30.0
f80cf2cb2a update secp256k1 to 0.30.0 (19年梦醒)

Pull request description:

ACKs for top commit:
  apoelstra:
    ACK f80cf2cb2aa318978da3a6c5df49d82c49344763; successfully ran local tests
  tcharding:
    ACK f80cf2cb2a

Tree-SHA512: 83b8bb72372025c4a4b81c2b7973a7808a4a1d9d6450adef8b60a890e128b2559b55832159c25fa91daac1856049b070cd910d87313fed2851ced9e72ae5ddf5
2025-03-03 19:04:09 +00:00
merge-script 43814eb9e5
Merge rust-bitcoin/rust-bitcoin#4134: chore: fix some typos in comments
ce19d40a80 chore: fix some typos in comments (looklose)

Pull request description:

  fix some typos in comments

ACKs for top commit:
  apoelstra:
    ACK ce19d40a805e2b67f6199cce61a73c6592019b5c; successfully ran local tests
  tcharding:
    ACK ce19d40a80

Tree-SHA512: 4bf5d339e4e73a6f1378881ad62b17f78796e6000f24eea6b3a381d3e03f4fd8b9775710a7eb5a087bfe0d557d1ab1a8291dcc7b86a2c9ded3318774cf2e5b68
2025-03-03 17:33:28 +00:00
Jamil Lambert, PhD fe685b824f
Fix the release script that checks for TBD
`release.sh` is missing `units`.

Add `units` to the list of crates to check.
Reorder the crates alphabetically.
2025-03-03 17:25:34 +00:00
Bruno Garcia 35e7027a08 fuzz: move consume_random_bytes to a util file 2025-03-03 13:47:52 -03:00
merge-script f0e12574aa
Merge rust-bitcoin/rust-bitcoin#4175: Use uniform return statement in docs
85612908af Use uniform return statement in docs (Tobin C. Harding)

Pull request description:

  We have a bunch of 'Returns [`None`] if .. ' statements. Make the whole module uniform.

ACKs for top commit:
  apoelstra:
    ACK 85612908af936c7f0866227e24a3359115991ca2; successfully ran local tests; lgtm

Tree-SHA512: 431b6ced433578c13bfc6134609d11084380310a2fbb66899387ac6982a6c4d63559faf9be460104e120c109cbd352b240886d4aa6b6d92cd5063d7b4ec5e04c
2025-03-03 16:35:41 +00:00
Bruno Garcia eb8ecd5e3c fuzz: cover minimal_non_dust for Script 2025-03-03 12:24:15 -03:00
merge-script b6548931b5
Merge rust-bitcoin/rust-bitcoin#4142: Typo fix in: README.md
539d45420a Typo fix in: README.md (leonarddt05)

Pull request description:

  Hi,

  I suggest some typo fix' for this doc:

  1- "since these are needed to display hashes anway."  Should be "since these are needed to display hashes anyway." (spelling error).

  2- "bench mark" and "bench marks" Should be "benchmark" and "benchmarks" (incorrect spacing; "benchmark" is a single word).

  Thanks.

ACKs for top commit:
  apoelstra:
    ACK 539d45420a4540e13099a61996db87aeb3887002; successfully ran local tests
  tcharding:
    ACK 539d45420a

Tree-SHA512: 36fe65a9ea4d8d2fce90fb91e7966bc41ab5ab1cf9b5ea39efe88b1756d46724428d5dccfb1e7718721747e032ee3c52d848908652d82816f7f990f527c47485
2025-03-03 15:22:33 +00:00
Bruno Garcia cab8a6134f fuzz: cover count_sigops{_legacy} for Script 2025-03-03 12:06:55 -03:00
Jamil Lambert, PhD b656d7a16c
Inline small functions
Functions that just delegate or do trivial operations should be inline.

Add `#[inline]` to all functions in `primitives` that fit the criteria.
2025-03-03 12:26:52 +00:00
Tobin C. Harding a4b9c196b1
Manually update nightly version
While trying to use the `macro_use_imports` lint I found that there is a
bug in last weeks nightly. It has been fixed already so lets update.

Update to todays nightly compiler. Doing so causes some new linter
warnings, for now we just allow them.
2025-03-03 15:05:55 +11:00
Tobin C. Harding 85612908af
Use uniform return statement in docs
We have a bunch of 'Returns [`None`] if .. ' statements. Make the whole
module uniform.
2025-03-03 14:06:01 +11:00
Tobin C. Harding 2434afc40d
Make Weigth::from_kwu const
The other two `Weight` constructors are const already.
2025-03-03 13:46:42 +11:00
Tobin C. Harding 1fe984552e
Improve Weight rustdocs
Do trivial improvement to rustdocs for the `Weight` type.
2025-03-03 13:44:14 +11:00
Tobin C. Harding 83d071e54b
chacha20: Add whitespace
Mirror the other crates. Whitespace only.
2025-03-03 13:33:19 +11:00
Tobin C. Harding 4451724d31
chacha20: Add a docs heading
Like we do for the other crates add a heading to the crate docs.
2025-03-03 13:33:11 +11:00
Tobin C. Harding d4417f9666
io: Improve crate docs heading
Use the same format as the other crates.
2025-03-03 13:30:52 +11:00
Tobin C. Harding c466554948
hashes: Improve crate docs heading
Use same for as the other crates and emphasise that this is a Bitcoin
hashes crate.
2025-03-03 13:30:40 +11:00
Tobin C. Harding 6f4eb60936
Improve docs crate headings
I took a look at the rendered HMTL of `bitcoin`, `primitives`, `units`,
`serde`, and `tokio` and picked a header style that I thought looked
good.

Use it for `primitives` and `units`.
2025-03-03 13:28:01 +11:00
Tobin C. Harding 3ae21d5111
Use impl_add/sub_assign for block interval
We have a macro for implementing `AddAssign` and `SubAssign`.

Use the macro, gets us an additional ref impl for both.
2025-03-03 13:16:10 +11:00
Tobin C. Harding 9d55922952
Use impl_op_for_references for block height/interval
We have a new macro for implementing ops with a bunch of reference
combos. Lets use it for block `Height` and `Interval`.

This patch is strictly additive.
2025-03-03 13:11:19 +11:00
Tobin C. Harding f5e17914b6
Move Assign impls together
Next patch will move all the impls of `Add` and `Sub` into a macro call.
In order to make that patch smaller move the assign impls to be together
below the add/sub impls.

Code move only, no logic change.
2025-03-03 13:09:10 +11:00
Tobin C. Harding cc66838e80
units: Remove unnecessary code comments
These comments to not add much value - remove them.
2025-03-03 13:05:35 +11:00
Tobin C. Harding a74393324b
Move opcodes back to bitcoin
Duplicate `opcodes` in `bitcoin` and hide it in `primitives` so we do
not have to commit to the API.

We use opcodes in `impl fmt::Display for Script`.

Close: #4144
2025-03-03 11:51:28 +11:00
Tobin C. Harding fb29aadc47
Remove bip158 types from crate root
BIP-158 (Compact Block Filters for Light Clients) is not so common as to
require re-exorting its types at the crate root - remove them.
2025-03-03 11:24:37 +11:00