Commit Graph

6303 Commits

Author SHA1 Message Date
yancy 812c21e2e4 refactor: Replace fold with try_fold
The and_then combinator performs a kind of bitwise and operation on two
Option types here.  This is useful since the `checked` arithmetic
returns an option thereby accumulating Option types.  Therefore, either
the checked arithmetic operation performs the addition of the unwrapped
accumulator, or it returns None.

Instead of using `and_then` use the provided `try_fold` method which
will short circuit on `None` when the checked arithmetic is used.  Also,
simplify the staring condition using `Amount:ZERO` since this is
logically equivalent to using the first value if one exists.

Lastly, by using the built in `try_fold`, it's possible the performance
will be improved by making use of the short circuit ability instead of
evaluating each item even when the accumulator holds a None type.
2025-04-15 08:21:11 -05:00
merge-script e5b0f9cd92
Merge rust-bitcoin/rust-bitcoin#4337: Add impls for `NumOpResult` div and mul
0361604bab Add impls for NumOpResult div and mul (Tobin C. Harding)

Pull request description:

  We recently added div and mul for combinations of `Amount`, `FeeRate`, and `Weight`. When doing so we forgot to add variations for `NumOpResult`.

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

Tree-SHA512: 6d262b9079b8a670f32d58d49e3c7e9a79d5d795a4c9f37f6bc2213879649d41900e95f515d8685c3870c935358bcb25567b2f6f332301e1ad88188056047b7b
2025-04-15 13:20:09 +00:00
dufucun d0e1cd72fe chore: Fix the typos in the comments and variables
Signed-off-by: dufucun <dufuchun@sohu.com>
2025-04-15 18:31:52 +08:00
merge-script 7c51612136
Merge rust-bitcoin/rust-bitcoin#4332: fix typo in test function name
a697af9755 Update tests.rs (Maxim Evtush)

Pull request description:

  Description:
  This PR fixes a typo in the test function name `p2pk_pubkey_bytes_emptry_script_returns_none()` by correcting 'emptry' to 'empty'. This is a minor correction that improves code readability without affecting functionality.

ACKs for top commit:
  tcharding:
    ACK a697af9755
  apoelstra:
    ACK a697af97558332950a1b6c088eed9a1cde85c709; successfully ran local tests

Tree-SHA512: 8fd8b29a4d0e0dfac8769eaf6b9c7bfaea395f58ce58280410dbe8cbcda7e52bc15e542034826c7e7f1a0117256d99dca43789015c3f0e946acbf9714d8c5562
2025-04-14 19:27:45 +00:00
merge-script e3c5f8cbdf
Merge rust-bitcoin/rust-bitcoin#4329: units: Add a test to kill mutants in MathOp
ec38860b65 Add a test to kill mutants in MathOp (Jamil Lambert, PhD)

Pull request description:

  Weekly mutation testing found mutants in `is_overflow` and `is_divide_by_zero`.

  Add a test to kill them.

  Closes #4310
  Closes #4334

ACKs for top commit:
  tcharding:
    ACK ec38860b65
  apoelstra:
    ACK ec38860b65d01d09bf9189cc1b2d043e4b36a140; successfully ran local tests

Tree-SHA512: 05d46d5792cb355d8b79f197bcb397d762c8f5593005589f46b9d085f357d168b767e6deaf30b8bf61434652f9f1db1a09b5f753f30c2e22d7e80450cef61182
2025-04-14 18:20:57 +00:00
merge-script 0089b535ea
Merge rust-bitcoin/rust-bitcoin#4327: primitives: Add tests to improve coverage
7e1369b3f1 Cover all TryFrom implementations in Script (Jamil Lambert, PhD)
6dfa3d8f4d Update test to increase coverage (Jamil Lambert, PhD)

Pull request description:

  Update test in borrowed to cover the `default` implementation of `Script`.

  Add tests to cover all `TryFrom` implementations in `Script`

ACKs for top commit:
  apoelstra:
    ACK 7e1369b3f1a7789b2757951c2e3ff58937442200; successfully ran local tests
  tcharding:
    ACK 7e1369b3f1

Tree-SHA512: 766b8eb63abbb1f10670f42b3789a8a4d4d73470ade13f14a1140d4cdd93b49d79865645d49f404774d8ff7aeb22b68059275902dc063d2baaf79fc8a89dca95
2025-04-14 13:53:01 +00:00
jrakibi 0498f7b7b7 Remove Option return from `minimal_non_dust`
we replace Option<Amount> return type with Amount in minimal_non_dust

- Use `.expect("dust_relay_fee or script length should not be absurdly large")` to handle overflow from .checked_mul()

`.expect()` is only triggered if the value calculateed overflows u64
such an overflow would require a script size exceeding ~6.15 petabytes
2025-04-14 20:07:41 +08:00
merge-script 9312ff25dd
Merge rust-bitcoin/rust-bitcoin#4331: Automated daily update to rustc (to nightly-2025-04-11)
267deee60d Automated update to Github CI to rustc nightly-2025-04-11 (Update Nightly Rustc Bot)

Pull request description:

  Automated update to Github CI workflow `rust.yml` by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action

ACKs for top commit:
  tcharding:
    ACK 267deee60d

Tree-SHA512: 88f6af37da2557ced9004819b953634644df72c3952296874417616f1ae6a4b06859ffed00feafe28fbf3a1c9147dc1065ca63bd7c39b68aee10287b33e74467
2025-04-14 15:23:11 +10:00
Tobin C. Harding 53837d9a2e
units: Improve crate level docs
Add a bit more to the crate level docs. This is a simple crate so we
don't need all that much.

Done for: C-CRATE-DOC
2025-04-14 14:33:26 +10:00
Tobin C. Harding 35ca48a85c
primitives: Document script to/from bytes
The byte slice/vector in the to/from methods for the script types does
not include the length prefix that is used when consensus
encoding.

Add docs to make this more clear.
2025-04-14 12:18:05 +10:00
Tobin C. Harding 0361604bab
Add impls for NumOpResult div and mul
We recently added div and mul for combinations of `Amount`, `FeeRate`,
and `Weight`. When doing so we forgot to add variations for
`NumOpResult`.
2025-04-14 11:32:24 +10:00
Tobin C. Harding 0f62c9a582
units: Make minor improvements to MathOp
Follow up from #4312, improve the `MathOp` type by:

- Do not provide public constructor
- Add cast protection
2025-04-14 10:37:28 +10:00
Fmt Bot 19c5fcc78f 2025-04-13 automated rustfmt nightly 2025-04-13 02:50:07 +00:00
Maxim Evtush a697af9755
Update tests.rs 2025-04-12 16:09:18 +02:00
Update Nightly Rustc Bot 267deee60d Automated update to Github CI to rustc nightly-2025-04-11 2025-04-12 01:47:41 +00:00
merge-script e2149ec4e9
Merge rust-bitcoin/rust-bitcoin#4326: primitives: Add tests to kill mutants
b669a93eab Add tests to kill mutants (Jamil Lambert, PhD)

Pull request description:

  New mutants found in weekly mutation testing in `Witness`.

  Add a test to kill the mutants in From impl,  and expand the test to kill PartialEq mutants.

  Closes #4296

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

Tree-SHA512: 1b23c37c7a0e9c9d2f6f982cc4f5f9923ffbfa255e2b3d7b24d07f2c07273313d4563af9ab8c6f972f2d814cde05bd1af7c2cd4cdee6e03453be81631be52d0e
2025-04-11 22:24:32 +00:00
merge-script da6aa37b4a
Merge rust-bitcoin/rust-bitcoin#4328: fix typo in `array.rs` documentation
1654d2e899 Update array.rs (FT)

Pull request description:

  This PR corrects a typo in the documentation comment for the array splitting method in `internals/src/array.rs`. Changed "overlaping" to the correct spelling "overlapping".

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

Tree-SHA512: b59257dbdd1764b4c99d97b158bedb8a1b87e98eb58b7400d8bc54186960ea07eafadc8b9a4b2332156d254e22039cecc0a926e4c5bf8ec404036d5e309dc224
2025-04-11 19:11:35 +00:00
Jamil Lambert, PhD ec38860b65
Add a test to kill mutants in MathOp
Weekly mutation testing found mutants in `is_overflow` and
`is_divide_by_zero`.

Add a test to kill them.
2025-04-11 09:31:13 +01:00
FT 1654d2e899
Update array.rs 2025-04-11 09:40:13 +02:00
Tobin C. Harding a5f904559d
primitives: Make hex optional
Make the `hex` dependency optional. This means not implementing
`Display` for some types if `hex` is not enabled and only implementing
`Debug`.

Also without `hex` enabled:

- We loose the ability to parse an `OutPoint` from string because we
  can no longer parse `Txid`.

- We loose the hex formatting of witness elements.

Note also that `primitives` builds with the `serde` feature even if
`hex?/serde` is excluded from the `serde` feature. I found this
surprising.
2025-04-11 10:55:34 +10:00
merge-script c5b1b31963
Merge rust-bitcoin/rust-bitcoin#4320: units: Do trivial docs fixes
da69e636a9 units: Use 100 column width in rustdoc comments (Tobin C. Harding)
53c6ae4d40 units: Remove expect from rustdoc example (Tobin C. Harding)

Pull request description:

  A couple of quick docs fixes while trying to polish `units`.

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

Tree-SHA512: acfbec90b0327850b882c5e1b1e7eaadbf0a09a30dcc46529386ea419ed74846a678a5980f5706f8d280f30ec6f6d06af2db8f0e1748523b15ad47a654caee4b
2025-04-10 20:54:11 +00:00
Tobin C. Harding f268ca20c5
hashes: Add api test file
As we did for `units` and as part of the stabalization effort.

Add an `api` test module that verifies the public API for the `hashes`
crate.
2025-04-11 06:50:43 +10:00
Tobin C. Harding d6296cd3d1
Remove usage of hex::test_hex_unwrap
We have the `hex_lit` dependency for converting a hex string literal
to an array.

Currently we have a `test_hex_unwrap` macro in the `hex v0.3.0` release
but not on either `master` or the upcoming `v1.0.0-alpha.0` release.
This is making PRs around releasing and depending on the release more
noisy than required.

Use `hex_lit::hex` where possible (often needing an additional call to
`to_vec()`) and where not possible use `Vec::from_hex`.
2025-04-11 06:49:06 +10:00
Tobin C. Harding 37035e20e8
Simplify and improve transaction benchmarks
We can use `deserialize_hex` when outside of the actual benchmark code
to simplify the functions.

Also add an additional test that benchmarks `deserialize_hex`.
2025-04-11 06:48:04 +10:00
merge-script b4326f0806
Merge rust-bitcoin/rust-bitcoin#4321: hashes: update serde dependency to match workspace
d878e5b367 chore(hashes): update serde dependency to workspace (Nick Johnson)

Pull request description:

  Update serde from 1.0 to 1.0.103 to align with versions used in other workspace crates. This makes the dependency constraint match reality since it was almost always implicitly raised by the other crates.

  I ran the `update-lock-files`, but no changes, which makes sense since other crates in the workspace bumped the version.

  A bit more info in https://github.com/rust-bitcoin/rust-bitcoin/issues/4313#issuecomment-2786281653 with talk about minimal version testing.

ACKs for top commit:
  tcharding:
    ACK d878e5b367
  apoelstra:
    ACK d878e5b3678e3354740a584fa9cc239f8181fa67; successfully ran local tests

Tree-SHA512: 3fe3eaddb58c54ac809f025e3a95f02c4c15f6209a3d17c9262923bdcbf8a094975d150c76e85de25a68e6e7574aa7e3fe40d4707bd4d159bd8cc97f36be0ee9
2025-04-10 19:48:44 +00:00
Jamil Lambert, PhD b669a93eab
Add tests to kill mutants
New mutants found in weekly mutation testing.

Add a test to kill the mutants in From impl,  and expand the test to
kill PartialEq mutants.
2025-04-10 20:28:57 +01:00
merge-script d4c10a8af0
Merge rust-bitcoin/rust-bitcoin#4317: add copy trait to address and AddressInner
52f9c13358 Implement Copy for Address and AddressInner (tushar994)

Pull request description:

  solves #4237

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

Tree-SHA512: 007092c57b893cfa62a6185c21b8839daf946a5b8ca505fc7d5f3b78c056fc5ce44cfb32936469f1955d535f4798506ea20a936218f0bf6808b17506e87836f2
2025-04-10 18:57:38 +00:00
Jamil Lambert, PhD 7e1369b3f1
Cover all TryFrom implementations in Script
Add tests to cover `TryFrom` implementations in `Script`
2025-04-10 19:25:44 +01:00
Jamil Lambert, PhD 6dfa3d8f4d
Update test to increase coverage
The `default` implementation is missed in the test coverage.

Change calling `new()` to using the `default` implementation, which then
calls `new()` anyway.
2025-04-10 19:25:17 +01:00
merge-script d222fdd879
Merge rust-bitcoin/rust-bitcoin#4312: units: Return `NumOpResult` when implementing `Div`
d6881ff5f8 units: Enable differentiating div-by-zero (Tobin C. Harding)
5fb64953c5 units: Return NumOpResult when implementing Div (Tobin C. Harding)
dba61c9efe units: Fix internal docs (Tobin C. Harding)
512326b8b9 units: Macroize implementing OptionExt (Tobin C. Harding)
f5b54e5fe0 units: Move general result stuff to a separate module (Tobin C. Harding)
f49efdf3f7 units: Remove mention of amount in result module (Tobin C. Harding)

Pull request description:

  First 4 patches are preparatory clean up. Patch 5 and 6 make all implementations of `Div` in the crate return `NumOpResult`. Done as two separate patches to assist review and in case we need to iterate, patch 5 is likely trivial to review.

  Fix: #4215

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

Tree-SHA512: 7188262dbe61d5b7ec051b4310918680b2732788f364419d85e30a98c94778cffabda166ef716fe2298a70b69626aaa3b51cff0ce6efeeb3e93e51066ab358a1
2025-04-10 14:17:00 +00:00
yancy f6105ea417 Use InputWeightPrediction to calculate effective_value
InputWeightPrediction can be used to determine the weight needed
to calculate the effective_value.  This simplifies the process for api
consumers by allowing an easier interface with which to use to predict
the weight.  Prior to this change, it was required to manually calculate
the predicted weight for whichever input type was to be used.
2025-04-10 07:25:12 -05:00
tushar994 52f9c13358 Implement Copy for Address and AddressInner
Enables by-value Address semantics for easier use; large sizes can use Box.
2025-04-09 12:25:43 +05:30
Nick Johnson d878e5b367
chore(hashes): update serde dependency to workspace
Update serde from 1.0 to 1.0.103 to align with versions used in other
workspace crates. This makes the dependency constraint match reality
since it was almost always implicitly raised by the other crates.
2025-04-08 14:45:47 -07:00
Tobin C. Harding da69e636a9
units: Use 100 column width in rustdoc comments
We typically use 100 column width for comments, do so but only if it
does not make the layout worse.
2025-04-08 14:25:04 +10:00
Tobin C. Harding 53c6ae4d40
units: Remove expect from rustdoc example
We can just assert against an explicit `Some` value instead of using
`expect`.
2025-04-08 14:25:04 +10:00
merge-script 265f9ebee0
Merge rust-bitcoin/rust-bitcoin#4306: chore: remove unused cortex-m dependency
dab577471d chore: remove unused cortex-m dependency from embedded Cargo.toml files in bitcoin and hashes modules. (lfgtwo)

Pull request description:

ACKs for top commit:
  tcharding:
    ACK dab577471d
  Kixunil:
    ACK dab577471d

Tree-SHA512: 77e852313f067d10241b47db3516716344383a670011e56f7b7ffadbcdb82787aac3800971d13e3160b4d1f533b71398c2bfaa0f6e47dc24d4c8a1d7d82e2405
2025-04-08 02:47:16 +00:00
Tobin C. Harding d6881ff5f8
units: Enable differentiating div-by-zero
Division by zero is a different error class that overflow. Add a
`MathOp` enum that enables one to check the error class.
2025-04-08 09:04:30 +10:00
merge-script 8599ceefe3
Merge rust-bitcoin/rust-bitcoin#4309: Automated nightly rustfmt (2025-04-06)
4c35e06c01 2025-04-06 automated rustfmt nightly (Fmt Bot)

Pull request description:

  Automated nightly `rustfmt` changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action

ACKs for top commit:
  tcharding:
    ACK 4c35e06c01
  apoelstra:
    ACK 4c35e06c0164f4cc18550e4a8e8eec9b79daf4f2; successfully ran local tests; nicee

Tree-SHA512: a989a58511e3e1ecfc14885aa0a3b1c1d8c54bdf49221d39f88a4cc230c8808701ddad4ef2d62b30e6819f75f86e77796848304a170720ba5c3c38d0125f3d1f
2025-04-07 20:56:12 +00:00
merge-script 808771d87e
Merge rust-bitcoin/rust-bitcoin#4311: fix correction in comment mod.rs
0a1efdaa66 fix correction in comment mod.rs (Bilog WEB3)

Pull request description:

  assoctiated - associated

ACKs for top commit:
  tcharding:
    ACK 0a1efdaa66
  apoelstra:
    ACK 0a1efdaa669c37892371ae0df0b94848e554154a; successfully ran local tests

Tree-SHA512: bdeb08b17e7f39b7fbe6644fdc76c1c264f078039c51801de66fd1ebf02cd89a5951cb2ebd5d8e052331a82cdc0b0e2796c37c7a2e43403ea22d8420e76f03cf
2025-04-07 16:48:04 +00:00
merge-script 372f376997
Merge rust-bitcoin/rust-bitcoin#4307: Rename 'indecies' to 'indices' in bip_174.rs for correct terminology
c55da5c342 Update bip_174.rs (fuder.eth)

Pull request description:

  This pull request renames the variable 'indecies' to 'indices' throughout the bip_174.rs file to use the correct plural form of 'index'. The change affects both variable names and comments, ensuring consistent and proper terminology throughout the codebase.

  Changes include:
  - Renamed 'indecies' to 'indices' in comments
  - Renamed the variable declaration and all references
  - Updated the for loop iteration

  This is a simple terminology correction with no functional changes to the code.

ACKs for top commit:
  tcharding:
    ACK c55da5c342
  apoelstra:
    ACK c55da5c3427ff2d850feb2e5891ce5d52cc304ba; successfully ran local tests; lol

Tree-SHA512: 04249c13599824dc56ea8b86ca1b989bc727cad16f771100e1af00017e3c11559a8dd9fc906569bebed94e36119ff4086cc806dda3b7606c011c5bc95f1398b6
2025-04-07 13:26:23 +00:00
merge-script 7307c115e8
Merge rust-bitcoin/rust-bitcoin#4294: Automated daily update to rustc (to nightly-2025-04-04)
b01152ef5d Automated update to Github CI to rustc nightly-2025-04-04 (Update Nightly Rustc Bot)

Pull request description:

  Automated update to Github CI workflow `rust.yml` by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action

ACKs for top commit:
  tcharding:
    ACK b01152ef5d

Tree-SHA512: 720894224ed8f4b49457f13e0fd93eb21fda5ebcdfee59ede998ff1f92ec04554bf923f322aa92e43c9d6d7d79827abd1954d741f467dbd13127038c985394e6
2025-04-07 15:27:14 +10:00
Tobin C. Harding 5fb64953c5
units: Return NumOpResult when implementing Div
Currently we use a std numeric type for the output of various `Div`
implementations while other ops use `NumOpResult`. This makes it
difficult to chain operations.

Throughout the crate use `Output = NumOpResult<Foo>` when implementing
`Div`.

Later we want to enable users differentiating between an overflow and a
div-by-zero. Explicitly do not implement that yet, done separately to
assist review.
2025-04-07 15:08:01 +10:00
Tobin C. Harding dba61c9efe
units: Fix internal docs
The `impl_op_for_references` macro implements an `ops` trait, nothing to
do with opcodes.
2025-04-07 12:14:12 +10:00
Tobin C. Harding 512326b8b9
units: Macroize implementing OptionExt
We are going to add implementations of `OptionExt` for various other
types and all impls are almost identical. To make doing so easier
macroize the implementation for `Amount` and `SignedAmount`.

Internal change only, no logic changes.
2025-04-07 12:14:12 +10:00
Tobin C. Harding f5b54e5fe0
units: Move general result stuff to a separate module
We currently use the `NumOpResult` for operations involving more than
just amount types (e.g. `FeeRate`) however when the `result` module was
written we only used amount types.

To make the intention of the custom result types more clear introduce a
top level `result` module and move the general code there. Leave the
amount implementations in the `amount` module. Note that both `result`
modules are private.

Move the `OptionExt` impls because later we will add a bunch more of them.

Internal change only, no logic changes.
2025-04-07 12:14:09 +10:00
Tobin C. Harding f49efdf3f7
units: Remove mention of amount in result module
We currently use the `NumOpResult` for operations involving more than
just amount types (e.g. `FeeRate`) however when the `result` module was
written we only used amount types.

To make the docs and code clearer use 'numeric type' instead of
'amount' in docs. And for local variables use `x` instead of `amount`.

This is docs and internal changes only.
2025-04-07 12:13:45 +10:00
Bilog WEB3 0a1efdaa66
fix correction in comment mod.rs 2025-04-06 13:38:37 +02:00
Fmt Bot 4c35e06c01 2025-04-06 automated rustfmt nightly 2025-04-06 01:26:49 +00:00
fuder.eth c55da5c342
Update bip_174.rs 2025-04-05 20:34:17 +02:00
lfgtwo dab577471d chore: remove unused cortex-m dependency from embedded Cargo.toml files in bitcoin and hashes modules. 2025-04-05 18:25:41 +08:00