Commit Graph

6552 Commits

Author SHA1 Message Date
Daniel Roberts 9aa235c24d BREAKING: Change Psbt serde implementations
Replace derived Psbt serde implementation with one that conforms to
BIP-174. In human readable serde contexts, serialize to the base64
encoded format, and in binary serde contexts, serialize to the raw
binary format.

The previous derived serde implementation cannot be used in a backward or
forward compatible way in binary formats like bincode, which means that
every field added to the Psbt struct would break serde de/serialization
into binary formats. Instead, this one-time breaking change will fix the
issue going forward.

Downstream users with persisted data in the old serde format should continue
using 0.32.x to create migrations to the new format.
2025-05-22 16:41:05 -05:00
Daniel Roberts d7e9a84339 Fix Psbt preimage keys in serde test
The preimage values in the serde Psbt don't actually correspond to the
hash keys they should in the serde test. This doesn't cause an error
currently because the derived serde implementation doesn't enforce their
validity during deserialization, but it will when the serde
implementation is modified to use the BIP-174 format.
2025-05-22 16:40:23 -05:00
Daniel Roberts 62026c1e2d Don't use PSBT_GLOBAL_XPUB as an unknown key in Psbt serde test
The previous test used global key id 1 which is not unknown, it's PSBT_GLOBAL_XPUB.
That's an inconsistent state for a Psbt to be in, and will cause a
deserialization error when the Psbt serde implementation is modified to
use the BIP-174 format.
2025-05-22 16:38:57 -05:00
Fallengirl cd610464ec
fix dead link CONTRIBUTING.md 2025-05-22 19:57:15 +02:00
frankomosh 0a0e23fedf style: use Self:: instead of type aliases in error impls
Use  instead of 'use FooError as E' when pattern matching
on the same type in Display/Error trait implementations.
2025-05-22 20:28:33 +03:00
Tobin C. Harding c63f80baec
Remove impl From<u64> for FeeRate
This function leaks the inner unit of `FeeRate`. We want to change the
unit, best to break downstream so they notice.
2025-05-22 10:55:41 +10:00
Tobin C. Harding 395252c6d9
Fix FeeRate::checked_add/sub
Currently the `checked_add` and `checked_sub` functions use a `u64` for
the right hand side. This leaks the inner unit because the RHS value is
implicitly in the same unit.

Make the functions have `FeeRate` on the RHS.
2025-05-22 10:54:10 +10:00
Tobin C. Harding 1fef5a3dc5
units: re-order ceil/floor functions
We have 4 functions, 2 ceil, 2 floor but they are ordered ceil, floor,
floor, ceil - this causes my head to twitch when I read it.

The logic in the floor versions is easier so put them first, this is
uniform with `fee_rate/mod.rs`.

Code move only.
2025-05-22 10:50:34 +10:00
Tobin C. Harding 7e67737393
Use / to divide fee by weight
Looks like this code was written before we added support for dividing
`Amount` by `Weight`.

Refactor, no logic change.
2025-05-22 10:48:08 +10:00
Tobin C. Harding a1ce2d1ac8
Use _u32 in FeeRate constructor instead of _unchecked
When constructing an `Amount` it was observed recently that a `u32` is
often big enough. For the same reason we can use a `u32` to construct a
fee rate instead of overflowing.

Use `_u32`in the constructor and remove the panic.
2025-05-22 10:47:34 +10:00
Erick Cestari 3c920d1acb
fix(p2p): Remove `SocketAddr::V6` <> `AddrV2::Cjdns` conversions 2025-05-21 16:49:27 -03:00
Erick Cestari 2c236ae24f
fuzz: Add p2p address round-trip fuzzing test 2025-05-21 16:49:27 -03:00
Erick Cestari 7ad89df392
test(p2p): add tests for `AddrV2` <> `IpAddr` conversions 2025-05-21 16:49:27 -03:00
Erick Cestari e8a9a89e25
feat(p2p): add `AddrV2` <> `IpAddr` conversions 2025-05-21 16:49:20 -03:00
merge-script 855299ab7e
Merge rust-bitcoin/rust-bitcoin#4532: units: Kill mutants found in weekly mutation testing
b538a10956 Add deprecated functions to mutants exclude list (Jamil Lambert, PhD)
fd0a756344 Add tests to relative locktime (Jamil Lambert, PhD)
24cc059a78 Add tests to result (Jamil Lambert, PhD)
c1d2f0386d Add tests to block (Jamil Lambert, PhD)

Pull request description:

  Weekly mutation testing found new mutants.

  Add tests to kill the valid mutants.

  Add deprecated functions to the exclude list so they are not mutated.

  Closes #4488, Closes #4528

ACKs for top commit:
  apoelstra:
    ACK b538a1095652f535aeb15f6e3bbc44969db1ea88; successfully ran local tests
  tcharding:
    ACK b538a10956

Tree-SHA512: 8393ded6c073b2580fbb0fde9a8ce702a3d1e8c581c035870c2ba6a12d718cee577e345c9d92d0761552765248a6fb5ae9bbacbc88cac75e7153516de46de4ca
2025-05-21 15:23:44 +00:00
merge-script c21d445e62
Merge rust-bitcoin/rust-bitcoin#4533: chore: delete unused `.actrc`
a5e4eb3120 chore: remove unused `.actrc` (Luis Schwab)

Pull request description:

  Closes #4531.

  Removes the useless and unused `.actrc` file.

ACKs for top commit:
  yancyribbens:
    cr ACK a5e4eb3120
  apoelstra:
    ACK a5e4eb3120d8a972a9c87e0b95c565d01c5e9ac0; successfully ran local tests

Tree-SHA512: bc47aad7a110682d65fe975a6b6fa188fce834ba4e38d507bd5f2e370838123d665d7177a921aa261a47440309f4d2480e1667b4b6a753a0ceb4273829777270
2025-05-21 02:17:42 +00:00
Luis Schwab a5e4eb3120
chore: remove unused `.actrc` 2025-05-20 19:01:30 -03:00
Jamil Lambert, PhD b538a10956
Add deprecated functions to mutants exclude list
New mutants found in deprecated functions in the weekly mutation
testing.

Add the deprecated functions to the exclude list so they are not
mutated.
2025-05-20 16:07:03 +01:00
Jamil Lambert, PhD fd0a756344
Add tests to relative locktime
New mutants found in weekly mutation testing.

Add tests to kill them.
2025-05-20 16:05:47 +01:00
Jamil Lambert, PhD 24cc059a78
Add tests to result
New mutants found in weekly mutation testing.

Add tests to kill them.
2025-05-20 16:04:59 +01:00
Jamil Lambert, PhD c1d2f0386d
Add tests to block
New mutants found in weekly mutation testing.

Add tests to kill them.
2025-05-20 16:04:23 +01:00
merge-script fa52a31ace
Merge rust-bitcoin/rust-bitcoin#4527: Automated nightly rustfmt (2025-05-18)
d9ec934251 2025-05-18 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 d9ec934251
  apoelstra:
    ACK d9ec93425102a014fc495d0918f40ff0f3629e2b; successfully ran local tests

Tree-SHA512: 9f1914af1375443e421ab5309ef8af0f64aa0b3dd03a4cde15b8315d1453f43f35533ae31a7295a83599e7e5ce081149c97f63bbab21e371d60b9401baecc941
2025-05-20 14:43:01 +00:00
merge-script 9310942888
Merge rust-bitcoin/rust-bitcoin#4529: psbt: replace the fee rate magic numbers with named constants in tests
ade7ea5fcf psbt: replace the fee rate magic numbers with named constants in tests (frankomosh)

Pull request description:

  Replace a hardcoded fee rate numbers in PSBT high-fee checks test with named constants.

  Close #4378

ACKs for top commit:
  tcharding:
    ACK ade7ea5fcf
  apoelstra:
    ACK ade7ea5fcfc1d00a7cb3c35b4022a4543a7efe1d; successfully ran local tests

Tree-SHA512: fa02217940ae32f00164c762c82ecb6bd28da58e5ad44165124a7ad44367d7d0f752e7ab189b991edb2460c449bbd0a83df16a47b082f6755bd9e9d38e398cd8
2025-05-19 17:48:54 +00:00
merge-script cc66dde4f4
Merge rust-bitcoin/rust-bitcoin#4518: Release tracking for chacha20-poly1305 v0.1.2
ea0a31876f release: prep chacha20-poly1305 crate for 0.1.2 (Nick Johnson)

Pull request description:

  Getting out this big bug fix for performance: https://github.com/rust-bitcoin/rust-bitcoin/pull/4083

ACKs for top commit:
  tcharding:
    ACK ea0a31876f
  apoelstra:
    ACK ea0a31876f7111d865d30ba0448801f4049aa42a; successfully ran local tests

Tree-SHA512: b6667cc3dd3c5ef1498bbcc7907e620c32b62333b1b2cc4b5afb041e41d362d3731bb72f4cbfe6fc7801fd4523d98c54d9497aa51efc0281acbfb418dbd8e3cf
2025-05-19 16:50:54 +00:00
merge-script 0160ac59ce
Merge rust-bitcoin/rust-bitcoin#4512: Remove Display/FromStr for FeeRate
29b12bec6b Remove Display/FromStr for FeeRate (Tobin C. Harding)

Pull request description:

  Parsing and displaying strings is a PITA. `FeeRate` is likely not that heavily used at the moment and users can always just call `to_sat_per_kwu()` to format it.

  So we can get the `units-1.0-alpha.0` release out the door just remove the `Display` and `FromStr` impls for now. They can be added back in later when we have time to get #4339 in.

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

Tree-SHA512: ffb49ab5d4f98be603eb1ca2f2e9d28ff7eaae66607eb9d2d5fef1f98ba2ac284a0007a86c3cae88f06e5b44f1e3e3ecb2014323b82ad4007e8ec59d6d04759b
2025-05-19 14:06:53 +00:00
frankomosh ade7ea5fcf psbt: replace the fee rate magic numbers with named constants in tests
Replace a hardcoded fee rate numbers in PSBT high-fee checks test with named
constants.

Close #4378
2025-05-18 22:04:41 +03:00
Fmt Bot d9ec934251 2025-05-18 automated rustfmt nightly 2025-05-18 01:40:39 +00:00
merge-script e541221950
Merge rust-bitcoin/rust-bitcoin#4521: feat(p2p): add `AddrV2` <> `SocketAddr` conversions
a1d4bc31e5 test(p2p): add tests for `AddrV2` <> `SocketAddr` conversions (Luis Schwab)
64387f566e feat(p2p): add `AddrV2` <> `SocketAddr` conversions (Luis Schwab)

Pull request description:

  Closes #4436.

  Note: I made the `AddrV2::Cjdns` to `SocketAddr` conversion throw the `CjdnsNotRecommended` error. Do we want this behavior or just assume the user knows what he is doing? cc Kixunil

  ### Changelog
  - Implement `From<SocketAddr> for AddrV2`.
  - Implement `TryFrom<AddrV2> for SocketAddr`.
  - Implement `AddrV2ConversionError` enum and it's `fmt::Display`.
  - Tests for these conversions.

ACKs for top commit:
  apoelstra:
    ACK a1d4bc31e5c7cfe0227db64aec8671efcc0c6677; successfully ran local tests
  tcharding:
    ACK a1d4bc31e5

Tree-SHA512: c11f3053428d2c8ca971bbc6bc4ad4619260fe95cba055586f4889d7397733f7d286dcafa111234a6be4a739fd56cdd7e64dbf71b106a71d2483794ca7018105
2025-05-17 18:23:56 +00:00
merge-script a095580fbb
Merge rust-bitcoin/rust-bitcoin#4523: Automated daily update to rustc (to nightly-2025-05-16)
0cd224deba Automated update to Github CI to rustc nightly-2025-05-16 (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 0cd224deba

Tree-SHA512: a9e1b4bccddfe1dfb02e4f664668594800605882b773435b79d17b952df7cb77babada76a25153712ad386ab11ecd21e7c1f465869412ca69920b72fab8394b5
2025-05-17 14:52:30 +00:00
merge-script 8985c9e5c4
Merge rust-bitcoin/rust-bitcoin#4522: fix(taproot): raname `from_key_and_tweak` to `from_key_and_merkle_root`
d74eede260 fix(taproot): raname `from_key_and_tweak` to `from_key_and_merkle_root` (Luis Schwab)

Pull request description:

  Closes #4236.

  ### Changelog
  - Rename `TapTweakHash::from_key_and_tweak` to `TapTweakHash::from_key_and_merkle_root`. The naming was just wrong, since a TapTweak takes in a public key and a Merkle root to produce a tweak.

ACKs for top commit:
  apoelstra:
    ACK d74eede26064a40d70c7aeb3335b9a4a28eb6bd9; successfully ran local tests
  tcharding:
    ACK d74eede260

Tree-SHA512: 03fdb73758f965290c083165b23a0345325e475f159aa76ff141a9aa3251960041366ddf195b74cada7b289d4493190cf9b17130736002d48b6fac68941012fb
2025-05-17 11:54:47 +00:00
Update Nightly Rustc Bot 0cd224deba Automated update to Github CI to rustc nightly-2025-05-16 2025-05-17 01:53:56 +00:00
merge-script 27caa6bb21
Merge rust-bitcoin/rust-bitcoin#4517: Automated weekly update to rustc stable (to 1.87.0)
86089691bf Automated update to Github CI to rustc stable-1.87.0 (Update Stable Rustc Bot)

Pull request description:

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

ACKs for top commit:
  tcharding:
    ACK 86089691bf

Tree-SHA512: 9ef62016ed9224f8cb34ba0071274c00440de1991ba570e97fda4b698a2696882332ffef407a18ed081afe2012e3a7ba3629c4f8b492a2c5f4b186f974d998bc
2025-05-17 01:52:17 +00:00
Luis Schwab d74eede260
fix(taproot): raname `from_key_and_tweak` to `from_key_and_merkle_root` 2025-05-16 19:51:59 -03:00
Tobin C. Harding 29b12bec6b
Remove Display/FromStr for FeeRate
Parsing and displaying strings is a PITA. `FeeRate` is likely not that
heavily used at the moment and users can always just call
`to_sat_per_kwu()` to format it.

So we can get the `units-1.0-alpha.0` release out the door just remove
the `Display` and `FromStr` impls for now. They can be added back in
later when we have time to get #4339 in.
2025-05-17 08:20:17 +10:00
merge-script 532345bd11
Merge rust-bitcoin/rust-bitcoin#4508: units: Make block-related types have private inner fields
9a9b41008f units: Make block-related types have private inner fields (Tobin C. Harding)

Pull request description:

  We recently added a bunch of types in the `block` module that are wrappers around `u32`. When we did we slapped `pub` on the inner fields.

  Lets be more mindful and make the inner fields private. Note all these types have `to_u32`, `from_u32` and `From` in both directions.

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

Tree-SHA512: d4719bef57944000142ec110d4701486b4a7e5c5b24426379ed596ad83555ca1f75191fe618cc62f12b78b9d7a1ac5d18eff96bc407c9688b1210529c25329b3
2025-05-16 19:54:28 +00:00
merge-script e619364f5c
Merge rust-bitcoin/rust-bitcoin#4503: Fix up script to/from hex
2c0f388108 Fix up script to/from hex (Tobin C. Harding)

Pull request description:

  We (I) have recently done to PRs patching the way we handle converting scripts to and from hex.

  In doing these I made a mess of the deprecation because after both PRs were in I had managed to change the return type and the behaviour of the deprecated function.

  On top of that the docs were either outright wrong or not that clear.

  Props to Kix for doing post merge review and finding my mistakes.

  Close #4498

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

Tree-SHA512: 8bd8590c07efdbfcf113bfcb4b96dc01992c4f215a11e4a1b1f907c8ae9fa47d83c29298bd9b2afc2628b12eb51afd023a48f241a456a0e02a37854b41f6654b
2025-05-16 19:14:34 +00:00
Nick Johnson ea0a31876f
release: prep chacha20-poly1305 crate for 0.1.2 2025-05-15 19:40:15 -07:00
Update Stable Rustc Bot 86089691bf Automated update to Github CI to rustc stable-1.87.0 2025-05-16 01:04:31 +00:00
Luis Schwab a1d4bc31e5
test(p2p): add tests for `AddrV2` <> `SocketAddr` conversions 2025-05-15 21:42:54 +00:00
Luis Schwab 64387f566e
feat(p2p): add `AddrV2` <> `SocketAddr` conversions 2025-05-15 21:21:21 +00:00
merge-script ef5e3256df
Merge rust-bitcoin/rust-bitcoin#4509: fix: add author to the chacha20_poly1305 crate
b17452b77a fix: add authors to the chacha20_poly1305 crate (Nick Johnson)

Pull request description:

  Closes #4501

ACKs for top commit:
  rustaceanrob:
    ACK b17452b77a
  tcharding:
    ACK b17452b77a
  apoelstra:
    ACK b17452b77a2034074d97673450b61f7d9f9b6039; successfully ran local tests

Tree-SHA512: 7c47affbcfc1cfa8a7591076d8b74e15e936af9251ba0d375ce0701175f9966e86b56fed5202945df96b7294d431d3b02dc3c7fc2749c96ac96afa3888f2039f
2025-05-15 18:16:54 +00:00
merge-script 35a49993c8
Merge rust-bitcoin/rust-bitcoin#4083: Improve chacha20 cipher performance
1ca55ac77d chacha20_poly1305: inline simd functions (Nick Johnson)
30920c4d84 chacha20_poly1305: drop mutable requirement (Nick Johnson)
415945cd2b chacha20_poly1305: avoid duplicate block work (Nick Johnson)
33dc1b95fa chacha20_poly1305: swap tuple for array (Nick Johnson)
dadd1d7224 chacha20_poly1305: remove alignment (Nick Johnson)
36d45bf360 chacha20_poly1305: remove mod operator (Nick Johnson)

Pull request description:

  Inspired by JeremiahR's new benchmark on the chacha20 module, I dug in and found a few tweaks (and a larger refactor) which help a lot with performance.

  The tweaks are broken down by commit. One of the relatively fruitful ones (5% increase) was refactoring the U32x4's rotation methods to use hardcoded matches instead of the mod operator. Others saw more modest performance gains.

  The big change though was to *not* calculate two blocks for each keystream call (oops). I refactored the logic to handle the offset state (which is technically not required for BIP324, but as seen here, can be confusing to not have) and now we always calculate just the required amount of a keystream. This about doubles the performance.

  For the curious, the SIMD performance isn't very impressive at this point, just a modest increase. But I have some hope that the experimental core library U32x4 will bring a nice bump (it is implemented with some unsafe hacking) and be an easy refactor.

ACKs for top commit:
  apoelstra:
    ACK 1ca55ac77db698f3816d8b7ed4051ddb5a579a29; successfully ran local tests
  tcharding:
    ACK 1ca55ac77d

Tree-SHA512: 8db1c6144d172775164859ffd0d97021f90d9123d06b5cccde21800aec4dcea75a5753d547933288ae233caf82e92849f894fb7019537d188baf10fbf7019684
2025-05-15 12:47:00 +00:00
Nick Johnson b17452b77a
fix: add authors to the chacha20_poly1305 crate 2025-05-14 20:51:34 -07:00
Tobin C. Harding 9a9b41008f
units: Make block-related types have private inner fields
We recently added a bunch of types in the `block` module that are
wrappers around `u32`. When we did we slapped `pub` on the inner fields.

Lets be more mindful and make the inner fields private. Note all these
types have `to_u32`, `from_u32` and `From` in both directions.
2025-05-15 12:58:15 +10:00
merge-script 11ceadb242
Merge rust-bitcoin/rust-bitcoin#4504: CI: Manually remove trailing whitespace
64844131de CI: Manually remove trailing whitespace (Tobin C. Harding)

Pull request description:

  `rustfmt` bad robot, remove trailing whitespace already.

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

Tree-SHA512: d131fdbfdb049223d4f89c31b7138ba4fd9a32b469d4631e5efec9ec5405564ceec4ed5fb6253ca4eb99505e2b78c78717115ad57f3c648e837d4a4853b5f023
2025-05-14 21:30:36 +00:00
merge-script 1b709eb460
Merge rust-bitcoin/rust-bitcoin#4506: units: Manually implement serde traits
e2d03fef72 units: Manually implement serde traits (Tobin C. Harding)

Pull request description:

  For types that have private inner fields we would like to manually implement `serde` traits instead of deriving them.

  This hardens the crate against making future mistakes if we want to change the inner fields.

  Do so for:

  - `Weight`
  - `BlockTime`
  - `NumberOfBlocks`
  - `NumberOf512seconds`

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

Tree-SHA512: 6d3cc4106e44e08d59f8da6f8f3285923408ed05d1c0b2f6f2d83a22718744a38bf67381177856b5713810a5f5318d929daa2d12447c722628e0576fcd075e3d
2025-05-14 16:13:10 +00:00
merge-script 5533d3ee79
Merge rust-bitcoin/rust-bitcoin#4505: units: `serde` cleanup
980365097d Fix expecting string for amount types (Tobin C. Harding)
3658865a18 Fix expecting string for fee_rate (Tobin C. Harding)
d6940497fd Simplify fee_rate serde deserialize opt (Tobin C. Harding)
87d6f1718c Make serde attribute usage more terse (Tobin C. Harding)

Pull request description:

  Clean up the `serde` stuff for `FeeRate` and `Amount`. This is all pretty trivial.

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

Tree-SHA512: 70d3b5245f69c87b03ed2259bb6eefc93d075c6246f1fae3e4cc14934f41bbcf6cb6d69b3a3986b3b382bb00f3457a2f7be91e8b805823db4f802a086f2f27e4
2025-05-14 15:27:25 +00:00
Tobin C. Harding e2d03fef72
units: Manually implement serde traits
For types that have private inner fields we would like to manually
implement `serde` traits instead of deriving them.

This hardens the crate against making future mistakes if we want to
change the inner fields.

Do so for:

- `Weight`
- `BlockTime`
- `NumberOfBlocks`
- `NumberOf512seconds`
2025-05-14 14:31:39 +10:00
Tobin C. Harding 980365097d
Fix expecting string for amount types
According to the `serde` docs:

> This is used in error messages. The message should complete the
> sentence “This Visitor expects to receive …”, for example the message
> could be “an integer between 0 and 64”. The message should not be
> capitalized and should not end with a period.

Use a lower case character to start the string.
2025-05-14 12:31:16 +10:00
Tobin C. Harding 3658865a18
Fix expecting string for fee_rate
According to the `serde` docs:

> This is used in error messages. The message should complete the
> sentence “This Visitor expects to receive …”, for example the message
> could be “an integer between 0 and 64”. The message should not be
> capitalized and should not end with a period.

However we have the `expecting` str using the converted type not the
thing the visitor expects.

Use `u64` instead of `FeeRate` since that is what is being parsed. Note
that in `amount` we got it _almost_ correct, subsequent patch will fix
the case.
2025-05-14 12:30:37 +10:00