24971a21d7 Automated update to Github CI to rustc nightly-2025-06-27 (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 24971a21d7
Tree-SHA512: 980497f649d2440f813924da62458c9ed67f4eeae72421ac19994a73aae103872b98c2908be37fd06e804efb55a5b60688f7f593006ae806f081e562c25f6deb
53b93321c8 psbt: add test vector where non-witness UTXO TXID does not match input txid (Andrew Poelstra)
74f22a0a67 psbt: validate that non_witness_utxo txids match the input txids (Andrew Poelstra)
3337b7a030 psbt: introduce IncorrectNonWitnessUtxo error variant (Andrew Poelstra)
Pull request description:
Fixes#4617
ACKs for top commit:
tcharding:
ACK 53b93321c8
Tree-SHA512: bf841708493fe38a37c7448cc02a26061ea66fd3c7acdbf9df4bbdfe07d8611075dceed20813de2b7cd63864ad80a9f66eaf8b869249c3a2028e1be25b48c5ae
806b34aefc units: Bump version to 1.0.0-rc.0 (Tobin C. Harding)
1f9c48b5d3 units: Set explicit internals dependency version to v0.4.0 (Tobin C. Harding)
Pull request description:
In preparation for doing the first 1.0 RC release set the version number, add a changelog entry, and update the lock files.
Lets go!
ACKs for top commit:
apoelstra:
ACK 806b34aefc554c23cec2d1293113a589718c8cdf; successfully ran local tests
Tree-SHA512: 4d87865990fc66d0150156cf9aaae53b80602b826e68bc7e0210bea7dc488b72beb90b64034a4debb455c3d902efe574ec15ed7a8e638bc6f670cdd16b7a4e20
This requires updating a couple serde test vectors -- we are tightening
validation so that some existing serde-serialized PSBTs no longer
deserialize. I believe this is the correct thing to do.
`cargo publish` does not allow publishing a crate without all
dependencies having explicit version numbers. We discovered recently
that having patching the root manifest was annoying when downstream
testing so we removing the version numbers in #4284 in favor of `path`.
It turns out we can include both.
Props to nyonson for discovering that.
ref: https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#multiple-locations
Use an explicit version number to the `internals` dep in `units`.
a5db001fc0 Update Github CI to rustc nightly-2025-06-20 (Jamil Lambert, PhD)
0624d96415 Use the anonymous lifetime for path (Jamil Lambert, PhD)
f22f10b5ca Simplify PartialOrd implementation (Jamil Lambert, PhD)
Pull request description:
Automated daily update to rustc (to nightly-2025-06-20) failed CI due to new lint errors (#4598).
Fix the lint errors.
Update to nightly-2025-06-20.
ACKs for top commit:
apoelstra:
ACK a5db001fc0be214fd7027997cfac991fa0c1e0c4; successfully ran local tests
Tree-SHA512: a396b7b696c2a6a904a832e3ffd14bc2a6f27936aa076641d3f03c6000be4962606b9398c1f82d9aa12ddf919023d87302b338a9779084ef521411f6f0151220
Lint error from new nightly "lifetime flowing from input to output with
different syntax can be confusing".
Add the anonymous lifetime to make it explicit.
Lint error with new nightly version "non-canonical implementation of
`partial_cmp` on an `Ord` type".
Update to directly call instead of dereferencing first.
352712257e psbt: Use new `derive_xpriv` flexibility in GetKey (Daniel Roberts)
bd3f4b6bf1 psbt: Add test for GetKey bip32 (Daniel Roberts)
c7bdec14fb Fix clippy lint and formatting for `Xpriv::derive_xpriv` and `Xpriv::derive_xpub` calls (Daniel Roberts)
9d4381c8fe Improve `Xpriv::derive_xpriv` and `Xpub::derive_xpub` ergonomics (Daniel Roberts)
Pull request description:
This enables a couple more things to be passed to the bip32 derive methods, with (afaict) no downside (all existing call sites remain valid and work as before).
Given
```
let secp = Secp256k1::new();
let path: DerivationPath = "42'/350'/0".parse().unwrap();
let xpriv: Xpriv = "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi".parse().unwrap();
```
The following *new* ways to call derive are enabled:
```
/// Derive using only part of the path
xpriv.derive_xpriv(&secp, &path[1..])
```
```
/// Derive moving into the method
xpriv.derive_xpriv(&secp, path)
```
The second case is probably of questionable usefulness, but I've ended up writing something like
```
let path: DerivationPath = path.into_iter().skip(n).cloned().collect()
```
enough that the first case would be welcome, and can be done with a minimal change.
I'm reasonably confident this doesn't break anything (and it indeed doesn't break any tests that I can see) but this is definitely on the edge of my comfort with the rust type system, which is why I've created this as a draft.
ACKs for top commit:
tcharding:
ACK 352712257e
apoelstra:
ACK 352712257e66c7959b80a9f6375961295a292306; successfully ran local tests; nice!
Tree-SHA512: 0babdd9589d3312d4df54d77202a71dbb021e216167514c1a87f1f992f254f2b298b874411f8c7a3d56d7f730b22d104c3a78f9145715ea8df6bedad35c1ffd5
70221ffa08 Fix link to use new name (Tobin C. Harding)
ebf92fcb01 Use ASCII in rusdocs (Tobin C. Harding)
64ece63f19 Add missing whitespace character to rustdoc (Tobin C. Harding)
64e10686de Improve rustdoc examples for absolute locktime (Tobin C. Harding)
Pull request description:
In preparation for release go over the locktime rustdocs.
Close: #4463
ACKs for top commit:
jamillambert:
ACK 70221ffa08
apoelstra:
ACK 70221ffa085e3cd0a50683f788f5e78cdfae04ae; successfully ran local tests
Tree-SHA512: 67bc51400056e08018f92f8e7ff91c8f8db9e6b575e83f8937a382bde45541a31e75277e200694180fa5098b681e200858fb7b0c9330065af0019955ed126a61
ef56baa696 Improve fee_rate test to kill a mutant (Jamil Lambert, PhD)
5edcc5dad4 Remove repeated fee_rate test (Jamil Lambert, PhD)
bd50943234 Add a roundtrip test to kill a mutant (Jamil Lambert, PhD)
0b4b17307d Test SignedAmount edge case to kill mutant (Jamil Lambert, PhD)
f3338655f1 Test OutPoint edge case to kill mutant (Jamil Lambert, PhD)
Pull request description:
Weekly mutation testing found new mutants in units and primitives.
- Add tests or improve existing tests to kill all of the mutants.
- Remove a duplicate test in `fee_rate`
Closes#4601, Closes#4622
ACKs for top commit:
tcharding:
ACK ef56baa696
apoelstra:
ACK ef56baa69670f9c2e453cb981d6f3488247d000c; successfully ran local tests
Tree-SHA512: b5301ae76e6b1d94831054d348d7eb544ab052178a1ce362cff2e6876fd4eb243c842d158e7d174b7ec4700083367ed0e3c6f6d8e1f6c0a4c888d5bb3205f72f
d8377d90dd units: Remove serde derive feature (Tobin C. Harding)
1031851da4 units: Manually implement serde traits for block types (Tobin C. Harding)
Pull request description:
Currently we only need the `derive` feature of `serde` in test code.
Observe:
- We do not need the error testing logic because `ParseAmountError` is already exhaustively tested.
- The rest of the `serde` test logic in `amount` can be done using the public API so it can be moved to the integration test directory.
Move the unit test code to `tests/` excluding the error testing logic. Remove the `derive` feature from the `serde` dependency. Add a `dev-dependency` on `serde` that enables the `derive` feature.
ACKs for top commit:
apoelstra:
ACK d8377d90dd8d6bd066f51f45c23ffdfe2d0ab694; successfully ran local tests; nice!
Tree-SHA512: 03eb24ae1917e838a2e20c3c62ef9381e2a1eaccdb6474f60a2db59af98d9533054227af4c404013ea8deb4cfe4d57075ae4890857f8af283ebb4338ddb4ed3f
f746aecb61 Use NumberOfBlocks in rustdoc (Tobin C. Harding)
dc5249aae6 Use new type names instead of deprecated aliases (Tobin C. Harding)
Pull request description:
Recently we changed the names of some locktime types but kept aliases to the original names. To assist with ongoing maintenance lets use the new names already.
~Internal change only.~
Added a patch that does the same in some rustdocs.
ACKs for top commit:
jamillambert:
ACK f746aecb61
apoelstra:
ACK f746aecb61456f1eb97280e1d091434250832e72; successfully ran local tests
Tree-SHA512: f3304fcc62069f72fa6c49b4aee5579e4ef6e81cb466b9c7e79ddd1a04b63f2f4d3f0ffdcb9303c3bee2501beead3fceb9be79cefe35d7615223738291535152
2b07f59545 units: Fix up the api test (Tobin C. Harding)
a6ab5c9fd0 Implement Arbitrary for result types (Tobin C. Harding)
Pull request description:
A lot has changed over the last few months. Fix up the API integration test to match the current state of the crate.
Includes a patch to implement `Arbitrary` for types from the new private `result` module.
ACKs for top commit:
apoelstra:
ACK 2b07f59545de16b66b3bf8ee988757c2d0c14afb; successfully ran local tests
Tree-SHA512: fa9bd5b67ea6217cfb11a985183d2d83ae126678fa9fbe5b540fcec31efc0fbafb3e6010c7e831c84c9161300ad5ccc771f848875fdcfe09e072bb0d2881a104
There is a mutant found in `FeeRate` `to_sat_per_kvb_floor` and `ceil`.
Add to the existing test so that all 6 to_sat floor and ceil functions
are tested.
d9cf7270eb Move `bitcoin/p2p` into `p2p` (rustaceanrob)
Pull request description:
Could use a rebase on #4568
Somehow lost the branch of my original draft so some of the review context is removed, but all comments were addressed in separate PRs.
First commit moves everything required to implement encoding within `p2p`, so we have a reference for functions to add to future moves to `internals`. Second commit does the relocation and third commit removes the `bitcoin/p2p` module.
ACKs for top commit:
apoelstra:
ACK d9cf7270eb457fd660fa505701895ab4756e394d; successfully ran local tests
tcharding:
ACK d9cf7270eb
Tree-SHA512: 31bf960788f45bb60b04dd73793a06828a5540e1e6118376776494bad9330dc8ebcb57749bc84b70a00e4d1d2a5686506e089269833ed99c4f9fa0c3e3b2e5b7
f6dea36e31 units: Make error constructor private (Tobin C. Harding)
Pull request description:
We typically do not want to have public constructors on error types. Currently we do on the `TimeOverflowError` so that we can call it in `primitives` but it turns out we can just use `NumberOf512Seconds` constructors instead.
ACKs for top commit:
apoelstra:
ACK f6dea36e313c59c3dca534aba2b7de459f094e9f; successfully ran local tests
Tree-SHA512: f8d4615f2adb506278f20352c97e2b6698d3f81fe27d5204f215faeb8fe208fc849ad6c82cd40963736e85e669287d2f0f0c2cbc0a0d5858c2677e693c1582ae
Currently we only need the `derive` feature of `serde` in test code.
Observe:
- We do not need the error testing logic because `ParseAmountError` is
already exhaustively tested.
- The rest of the `serde` test logic in `amount` can be done using the
public API so it can be moved to the integration test directory.
Move the unit test code to `tests/` excluding the error testing logic.
Remove the `derive` feature from the `serde` dependency. Add a
`dev-dependency` on `serde` that enables the `derive` feature.
Recently we changed the names of some locktime types but kept aliases to
the original names. To assist with ongoing maintenance lets use the new
names already.
Internal change only.
We typically do not want to have public constructors on error types.
Currently we do on the `TimeOverflowError` so that we can call it in
`primitives` but it turns out we can just use `NumberOf512Seconds`
constructors instead.
7dc66e3476 impl LowerHex, UpperHex, Octal, and Binary for ChildNumber (vicjuma)
Pull request description:
apoelstra Each trait forwards formatting to the inner u32 index. For Hardened variants, a suffix is appended based on whether alternate formatting is used per the discussion.
See discussion: https://github.com/rust-bitcoin/rust-bitcoin/pull/4620#issuecomment-2974023604
ACKs for top commit:
tcharding:
ACK 7dc66e3476
apoelstra:
ACK 7dc66e3476c3ba08eb341a09f3c85a795b005159; successfully ran local tests
Tree-SHA512: 49e4acc82198d3a2c807bf8977413dd260a7081b83e8ad2c2b97d8fcaf85b78a54552098a5fe3020c78fe7b908d90a3bab86be20f330d3de569b5eba69e23348
Moves all of the content from `bitcoin/p2p` into `p2p`.
`TryFrom<Network>` must be implemented for `Network -> Magic` now that
`Network` is a foreign, non-exhaustive type. Ser/de test is updated
accordingly, as well as the `Magic::from_network` constructor, which I
have opted to return an `Option<Self>`. The `TryFrom` implementation
uses a new `UnknownNetworkError(Network)` that mirrors the `Magic ->
Network` error.
The example handshake does not generate a random nonce for the version
message, as there is no `rand` dependency in this crate and the program
only makes a single, user-defined connection.
It appears we can do better than copying and pasting the consensus
encoding macros and functions from `bitcoin` without doing weird
cross-crate macros that require some special knowledge of the crate to
know when they will compile.
4284deed29 DerivationPath: support 'h' in Display output for hardened components (vicjuma)
Pull request description:
DerivationPath now supports a display format using both 'h' a single quote (') to indicate hardened components.
This aligns it with its ChildNumber's output style.
Resolves: #4618
ACKs for top commit:
apoelstra:
ACK 4284deed29114c5e31ef7c29e28e352b860f74e7; successfully ran local tests
tcharding:
ACK 4284deed29
Tree-SHA512: 24e053c22ec94b851935debbab83d15ad9f41ccfca0a7c34a061450989b176295512e8ffb187b2a54c6c6926f82ec7e4a4186ccdba2ec2616a6e0603d90d2a9b
0ff8d82193 Make FeeRate from sat constructors infallible (Tobin C. Harding)
3b0286bd56 Return NumOpResult for FeeRate and Weight (Tobin C. Harding)
15065b78c7 Return NumOpResult when calculating fee on Amount (Tobin C. Harding)
75106e6d82 Remove checked_ prefix from fee functions (Tobin C. Harding)
Pull request description:
This was 14dc950b54 from #4610.
Remove the `checked_` prefix from `fee` functions then make them all return `NumOpResult`.
ACKs for top commit:
apoelstra:
ACK 0ff8d82193ef562c1aedabe98a6283d09f803c0c; successfully ran local tests; nice!
Tree-SHA512: 62f2af6701f2a0e17b9f0a0ee132ca4a9289fe00e22c94f746602ed3c1f3758bb22323b224362cb659432ff5297391f3106ee460e9a8f65a39f904d72bc98aeb
We now have constructors that take an arbitrary size fee
rate (`Amount`). The `from_sat_per_foo` constructors can be made
infallible by taking a `u32` instead of `u64`. This makes the API more
ergonomic but limits the fee rate to just under 42 BTC which is plenty.
Note we just delete the `from_sat_per_vb_u32` function because it is
unreleased, in the past we had `from_sat_per_vb_unchecked` so we could
put that back in if we wanted to be a bit more kind to downstream. Can
be done later, we likely want to go over the public API before release
and add a few things back in that we forgot to deprecate or could not
for some reason during dev.
Fuzz with a new function that consumes a `u32`.
As we did for `Amount` change the fee functions on `FeeRate` and
`Weight` to return `NumOpResult`.
This change does not add that much value but it does not make things
worse and it makes the API more uniform. Also reduces lines of code.