Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1643 commits
Select commit Hold shift + click to select a range
16cc484
p2p: Remove `Magic::from_params` method
rustaceanrob Jan 16, 2026
7e9df7a
p2p: Switch to network crate
rustaceanrob Jan 16, 2026
825cdf2
primitives: Remove BlockTime decoder from root export
mpbagot Jan 16, 2026
56d4bca
Merge rust-bitcoin/rust-bitcoin#5417: optimize(block): avoid cloning …
apoelstra Jan 15, 2026
df534c7
Merge rust-bitcoin/rust-bitcoin#5402: primitives: reject transaction …
apoelstra Jan 16, 2026
47cabbf
Merge rust-bitcoin/rust-bitcoin#5492: Fix unreachable error bug durin…
apoelstra Jan 17, 2026
a6c3d82
consensus_encoding: Add flush_to_* functions
mpbagot Jan 17, 2026
8973524
primitives: reject txs with output sum > MAX_MONEY
jrakibi Dec 19, 2025
7568254
primitives: test individual output value > MAX_MONEY
jrakibi Dec 19, 2025
9bf1522
consensus_encoding: implement batched allocation for WitnessDecoder
jrakibi Nov 15, 2025
4d2fee8
2026-01-18 automated rustfmt nightly
Jan 18, 2026
2f842a4
Add *_with_max difficulty functions to Target
mpbagot Jan 12, 2026
3ef1b4c
Introduce wrapper type for secp256k1::Keypair
mpbagot Nov 27, 2025
06e79b1
Merge rust-bitcoin/rust-bitcoin#5441: benches: Add benchmark to test …
apoelstra Jan 19, 2026
f0ed5c6
Include Core link in U256::inverse()
mpbagot Nov 26, 2025
5b637bd
Unify docstrings for Target::MAX_ATTAINABLE_* consts
mpbagot Jan 19, 2026
dd52896
Split Network functionality into extension trait
mpbagot Jan 16, 2026
349ca99
bitcoin: Replace Network types
mpbagot Jan 16, 2026
7f73089
Test MAX_ATTAINABLE_* constant values against Core values
mpbagot Jan 19, 2026
745d395
Merge rust-bitcoin/rust-bitcoin#5517: units: Correctly group deps
apoelstra Jan 19, 2026
ba22182
Merge rust-bitcoin/rust-bitcoin#5528: bitcoin: Depend on `bitcoin-net…
apoelstra Jan 19, 2026
61f2c84
Merge rust-bitcoin/rust-bitcoin#5509: Fix typos and rustdocs repo wid…
apoelstra Jan 19, 2026
0bb519b
units: Extend test coverage for NumOpResult
mpbagot Jan 1, 2026
d2c4193
Merge rust-bitcoin/rust-bitcoin#5488: primitives: Fix header hex test…
apoelstra Jan 20, 2026
f47c2ea
Merge rust-bitcoin/rust-bitcoin#5476: p2p: Implement `encoding` trait…
apoelstra Jan 20, 2026
fca5653
p2p: Implement `encoding` traits for `BloomFlags`
rustaceanrob Jan 4, 2026
89bfc05
p2p: Implement `encoding` traits for `FilterLoad`
rustaceanrob Jan 4, 2026
e45c2c5
Merge rust-bitcoin/rust-bitcoin#5527: primitives: Remove BlockTime de…
apoelstra Jan 20, 2026
10c68ed
p2p: add v1 header decoder
yancyribbens Jan 5, 2026
f0df6c5
Merge rust-bitcoin/rust-bitcoin#5464: p2p: Implement `encoding` trait…
apoelstra Jan 20, 2026
9209abd
Adjust error re-export doc inlining
mpbagot Jan 21, 2026
73809ff
Merge rust-bitcoin/rust-bitcoin#5501: pow: Fix U256::overflowing_mul
apoelstra Jan 21, 2026
c86d039
Merge rust-bitcoin/rust-bitcoin#5474: p2p: Remove BIP-152 indirection
apoelstra Jan 21, 2026
35378f4
Merge rust-bitcoin/rust-bitcoin#5495: p2p: Implement `encoding` trait…
apoelstra Jan 21, 2026
dff524d
Merge rust-bitcoin/rust-bitcoin#5465: p2p: Implement `encoding` trait…
apoelstra Jan 21, 2026
940602f
bip152: Add an `Offset` wrapper type
rustaceanrob Jan 13, 2026
b34d882
p2p: Implement `encoding` traits for `BlockTransactionsRequest`
rustaceanrob Jan 13, 2026
8c23078
p2p: Implement `encoding` traits for `RejectReason`
rustaceanrob Jan 9, 2026
73b1442
p2p: Implement `encoding` traits for `Reject`
rustaceanrob Jan 9, 2026
baaab03
add aarch64 cross testing (needed for ARM SHA acceleration)
jrakibi Jan 22, 2026
4d2036b
Merge rust-bitcoin/rust-bitcoin#5514: hashes: remove unused bench files
apoelstra Jan 22, 2026
1f18e9c
Merge rust-bitcoin/rust-bitcoin#5490: p2p: Implement `encoding` trait…
apoelstra Jan 22, 2026
7766f03
Improve test coverage for block_hash
jamillambert Jan 19, 2026
70f441f
Make test dummy txid hex a const
jamillambert Jan 19, 2026
329c2ac
Improve test coverage in hash_types
jamillambert Jan 19, 2026
5fb07d0
Improve test coverage for TxMerkleNode
jamillambert Jan 19, 2026
0dbce2b
Improve test coverage for WitnessMerkleNode
jamillambert Jan 19, 2026
a5f7e5d
Merge rust-bitcoin/rust-bitcoin#5466: p2p: Implement `encoding` trait…
apoelstra Jan 22, 2026
cbc6097
Merge rust-bitcoin/rust-bitcoin#5494: p2p: Implement `encoding` trait…
apoelstra Jan 22, 2026
99146b0
Merge rust-bitcoin/rust-bitcoin#5535: Automated nightly rustfmt (2026…
apoelstra Jan 22, 2026
76864db
units: Extend test coverage of amount types
mpbagot Jan 20, 2026
8476d6f
p2p: Implement `encoding` traits for `GetBlocks/HeadersMessage`
rustaceanrob Jan 3, 2026
67edafb
Merge rust-bitcoin/rust-bitcoin#5491: p2p: add v1 header decoder
apoelstra Jan 23, 2026
fd1e0c9
Merge rust-bitcoin/rust-bitcoin#5445: Add ExactSizeEncoder for known-…
apoelstra Jan 23, 2026
5849571
hashes: Allow too many args
tcharding Jan 18, 2026
791476f
clippy: modify config file
tcharding Jan 18, 2026
b997f14
p2p: Allow too many args
tcharding Jan 18, 2026
7810f3a
CI: Use the new cargo rbmt tool
tcharding Dec 11, 2025
b78a880
units: Add tests for encodable/decodable types
mpbagot Jan 20, 2026
133cf32
units: Remove old encoding test cases
mpbagot Jan 20, 2026
9e1c951
Merge rust-bitcoin/rust-bitcoin#5515: p2p: Switch to network crate
apoelstra Jan 23, 2026
a80f9fd
Merge rust-bitcoin/rust-bitcoin#5497: Filter diff to include only rus…
apoelstra Jan 24, 2026
eded1ce
Merge rust-bitcoin/rust-bitcoin#5395: primitives: Improve test covera…
apoelstra Jan 24, 2026
02c01d3
Merge rust-bitcoin/rust-bitcoin#5298: consensus_encoding: implement b…
apoelstra Jan 24, 2026
cc8d726
Merge rust-bitcoin/rust-bitcoin#5512: Extend from_hex and from_unpref…
apoelstra Jan 24, 2026
4b2cdaa
2026-01-25 automated rustfmt nightly
Jan 25, 2026
4bdf301
Merge rust-bitcoin/rust-bitcoin#5443: primitives: reject txs with out…
apoelstra Jan 25, 2026
15a947b
primitives: reject transactions with 0 outputs
jrakibi Jan 2, 2026
32fefd7
primitives: fix tests that created txs with no outputs
jrakibi Jan 2, 2026
bb303db
Merge rust-bitcoin/rust-bitcoin#5565: Automated nightly rustfmt (2026…
apoelstra Jan 25, 2026
771743c
Merge rust-bitcoin/rust-bitcoin#5534: consensus_encoding: Add `flush_…
apoelstra Jan 25, 2026
cbef76c
Merge rust-bitcoin/rust-bitcoin#5552: Adjust error re-export doc inli…
apoelstra Jan 26, 2026
899846c
Improve test coverage of CompactTarget
jamillambert Jan 22, 2026
8d233ff
Improve test coverage of ParsePrimitiveError
jamillambert Jan 22, 2026
e949872
Merge rust-bitcoin/rust-bitcoin#5537: Include Core link in U256::inve…
apoelstra Jan 26, 2026
ede1858
Merge rust-bitcoin/rust-bitcoin#5470: primitives: reject transactions…
apoelstra Jan 26, 2026
9e1b090
hashes: include midstate and buffer in MidstateError
jrakibi Jan 26, 2026
3ef054f
hashes: add test for MidstateError
jrakibi Jan 26, 2026
6460b98
Merge rust-bitcoin/rust-bitcoin#5538: Adjust docs and verify correctn…
apoelstra Jan 26, 2026
b3c569e
Add FromStr functionality to U256
mpbagot Jan 19, 2026
273d31d
Introduce FromStr for Target and Work
mpbagot Jan 19, 2026
b85c5ae
p2p: Implement `encoding` traits for `InventoryPayload`
rustaceanrob Jan 3, 2026
1b9c5c0
Update API files
jrakibi Jan 27, 2026
48e04c7
primitives: use saturating add in WitnessDecoder
jrakibi Jan 27, 2026
2c828ec
Merge rust-bitcoin/rust-bitcoin#5341: Introduce wrapper type for secp…
apoelstra Jan 26, 2026
ec0bd4c
Merge rust-bitcoin/rust-bitcoin#5526: Add `*_with_max` difficulty fun…
apoelstra Jan 27, 2026
f4ea9e0
Merge rust-bitcoin/rust-bitcoin#5478: p2p: Implement `encoding` trait…
apoelstra Jan 27, 2026
6269ecd
Merge rust-bitcoin/rust-bitcoin#5569: primitives: use saturating add …
apoelstra Jan 28, 2026
3ebcd5a
Merge rust-bitcoin/rust-bitcoin#5493: hashes: add SHA256 ARM hardware…
apoelstra Jan 28, 2026
664718d
Unify decoder error names to DecoderError
mpbagot Jan 29, 2026
7ca52a3
Merge rust-bitcoin/rust-bitcoin#5558: primitives: Improve test covera…
apoelstra Jan 29, 2026
6cfc2d2
Merge rust-bitcoin/rust-bitcoin#5468: units: Extend test coverage
apoelstra Jan 29, 2026
48efa42
Merge rust-bitcoin/rust-bitcoin#5508: p2p: Implement `encoding` trait…
apoelstra Jan 29, 2026
0af8ae8
Automated update to Github CI to rustc stable-1.93.0
Jan 30, 2026
834e832
Improve test coverage of witness
jamillambert Jan 29, 2026
f408b24
Split out error test into its own test
jamillambert Jan 29, 2026
5a834e2
Add test of error display and source
jamillambert Jan 29, 2026
cd3dd2a
Merge rust-bitcoin/rust-bitcoin#5559: primitives: Improve test covera…
apoelstra Jan 29, 2026
3268994
Merge rust-bitcoin/rust-bitcoin#5541: primitives: Improve test covera…
apoelstra Jan 30, 2026
36d9872
Improve test coverage of ScriptBuf
jamillambert Jan 29, 2026
24b8515
Add test of error display and source
jamillambert Jan 29, 2026
164a9a5
Fix bug in `Psbt::spend_utxo` when missing output
shinghim Jan 10, 2026
0cf917e
Merge rust-bitcoin/rust-bitcoin#5498: p2p: Implement `encoding` trait…
apoelstra Jan 30, 2026
b302ac0
Automated update to Github CI to cargo-semver-checks version-0.46.0
Jan 31, 2026
e41dea0
hashes: Introduce MuHash wrapper type
mpbagot Jan 30, 2026
21253c8
hashes: Update API files
mpbagot Jan 30, 2026
a955924
Merge rust-bitcoin/rust-bitcoin#5473: p2p: Implement `encoding` trait…
apoelstra Jan 30, 2026
38a8846
p2p: Implement `Encodable` for `AddrV2`
rustaceanrob Jan 12, 2026
9f62796
test(p2p): Update serialize for `AddrV2`
rustaceanrob Jan 30, 2026
3601fa8
p2p: Implement `Decodable` for `AddrV2`
rustaceanrob Jan 26, 2026
1d58767
test(p2p): Update deserialize for `AddrV2`
rustaceanrob Jan 30, 2026
dcd414e
Merge rust-bitcoin/rust-bitcoin#5545: units: Extend test coverage of …
apoelstra Jan 31, 2026
1681e7b
2026-02-01 automated rustfmt nightly
Feb 1, 2026
6e5c108
Add Kani proof for VarInt round-trip
Alkamal01 Jan 28, 2026
de31caf
Merge rust-bitcoin/rust-bitcoin#5579: verification(kani): add formal …
apoelstra Feb 1, 2026
6b53490
primitives: Add fmt traits for simple wrapper types
mpbagot Jan 31, 2026
acd27d9
Merge rust-bitcoin/rust-bitcoin#5563: Automated weekly update to carg…
apoelstra Feb 2, 2026
6032004
hashes: Convert debug_hex to take u8 iterator
mpbagot Feb 2, 2026
0216aa0
hashes: Fix reverse hashes for no-hex debug
mpbagot Feb 2, 2026
8857a06
Remove pub access to CompressedPublicKey inner
mpbagot Jan 21, 2026
b4e109d
Rename into_inner on XOnlyPublicKey
mpbagot Jan 21, 2026
fd574bc
Remove all direct access to key types
mpbagot Jan 21, 2026
7668df2
Introduce from_secp constructor for Keypair
mpbagot Jan 28, 2026
4ad6e1b
Encapsulate key wrapper types
mpbagot Jan 21, 2026
693fd38
Merge rust-bitcoin/rust-bitcoin#5600: Automated nightly rustfmt (2026…
apoelstra Feb 2, 2026
9681655
Merge rust-bitcoin/rust-bitcoin#5546: units: Extend test coverage for…
apoelstra Feb 2, 2026
a3cd362
Merge rust-bitcoin/rust-bitcoin#5560: Automated weekly update to rust…
apoelstra Feb 2, 2026
46d514d
Move Transaction encoder inner type to alias
mpbagot Jan 22, 2026
d49f587
Enforce lifetime in encoder_newtype
mpbagot Jan 22, 2026
b224873
Unify encoder lifetimes to 'e
mpbagot Jan 29, 2026
804882f
Update API files
mpbagot Jan 27, 2026
26c4429
Add note about Target maximum values
mpbagot Feb 3, 2026
73ee530
refactor: remove From<UnexpectedEof> impls for decoder errors
Abeeujah Feb 2, 2026
504ed28
Merge rust-bitcoin/rust-bitcoin#5556: Introduce lifetimes to all publ…
apoelstra Feb 3, 2026
b646761
Merge rust-bitcoin/rust-bitcoin#5602: hashes: Fix reverse hashes for …
apoelstra Feb 3, 2026
3535bfa
primitives: Fix hash debug reversal for no-hex
mpbagot Feb 2, 2026
294e343
primitives: Use hashes format implementations
mpbagot Feb 2, 2026
d14ba02
Merge rust-bitcoin/rust-bitcoin#5549: Use cargo-rbmt for test, docs, …
apoelstra Feb 3, 2026
76b5004
consensus_encoding: add ArrayRefEncoder
nyonson Jan 27, 2026
6ad8028
primitives: switch BlockHash to array ref encoding
nyonson Jan 27, 2026
ec1c199
api: update api for ArrayRefEncoder
nyonson Jan 28, 2026
9cfc3f0
psbt: Add bounds check for non-witness UTXO output index
erickcestari Feb 4, 2026
0df1825
dev: implement standard traits for ChaCha20-Poly1305 data types
Abeeujah Feb 2, 2026
d4e6456
tests: verify all max attainable target constants against explicit hex
Alkamal01 Feb 5, 2026
5b71374
hashes: Test hmac incremental input
liamaharon Feb 6, 2026
e251673
Fix justfile with cargo-rbmt
mpbagot Feb 5, 2026
a0c6307
Merge rust-bitcoin/rust-bitcoin#5585: Unify decoder error names to De…
apoelstra Feb 4, 2026
671dc81
Merge rust-bitcoin/rust-bitcoin#5539: Add FromStr to `Target` and `Work`
apoelstra Feb 6, 2026
3c90133
Merge rust-bitcoin/rust-bitcoin#5472: p2p: Implement `encoding` trait…
apoelstra Feb 7, 2026
64697b1
Move `MerkleBlock` to `p2p`
rustaceanrob Jan 4, 2026
1a15728
hashes: Fix sha3_256 incremental hashing
liamaharon Feb 2, 2026
077c6bb
api: Update sha3_256 hashing api
liamaharon Feb 6, 2026
fe3e26f
Update dep-tree in docs
mpbagot Feb 9, 2026
6522927
Fix PSBT key deserialisation byte size
mpbagot Feb 6, 2026
07409b2
Replace EncoderN implementations with macro
mpbagot Feb 9, 2026
6bec9c1
Replace DecoderNError implementations with macro
mpbagot Feb 9, 2026
42d9d43
Update API files
mpbagot Feb 9, 2026
cbda447
units: Use lazy && operator
tcharding Feb 10, 2026
5d2d116
Add next target calculation
mpbagot Jan 20, 2026
18345c7
Merge rust-bitcoin/rust-bitcoin#5567: hashes: include midstate and bu…
apoelstra Feb 8, 2026
ed19c45
p2p: Re-export hash types
mpbagot Feb 10, 2026
d7664e0
Merge rust-bitcoin/rust-bitcoin#5479: Move `MerkleBlock` to `p2p`
apoelstra Feb 10, 2026
1743aa7
p2p: Implement `encoding` traits for `PartialMerkleTree`
rustaceanrob Jan 15, 2026
885bf39
p2p: Implement `encoding` traits for `MerkleBlock`
rustaceanrob Jan 15, 2026
95d530f
test(p2p): Migrate merkle block deser tests to `encoding`
rustaceanrob Feb 11, 2026
86bed20
Merge rust-bitcoin/rust-bitcoin#5505: p2p: Implement `encoding` trait…
apoelstra Feb 11, 2026
9ad3bbd
Merge rust-bitcoin/rust-bitcoin#5642: units: Use lazy && operator
apoelstra Feb 11, 2026
a5c78f2
Merge rust-bitcoin/rust-bitcoin#5544: Add next target calculation
apoelstra Feb 11, 2026
ed6fcfd
Merge rust-bitcoin/rust-bitcoin#5588: primitives: Improve test covera…
apoelstra Feb 12, 2026
77b104e
Merge rust-bitcoin/rust-bitcoin#5500: Fix bug in `Psbt::spend_utxo` w…
apoelstra Feb 12, 2026
30c52ce
Merge rust-bitcoin/rust-bitcoin#5551: bitcoin: Encapsulate key wrappe…
apoelstra Feb 12, 2026
5074a7d
hashes: Add cpufeatures for no_std SIMD detection
jrakibi Jan 31, 2026
9e5136d
Change hex re-export in bitcoin to stable hex
mpbagot Feb 10, 2026
cdc4298
Merge rust-bitcoin/rust-bitcoin#5587: primitives: Improve test covera…
apoelstra Feb 13, 2026
d7c62d9
Merge rust-bitcoin/rust-bitcoin#5603: primitives: Use hashes format i…
apoelstra Feb 13, 2026
b75a263
primitives: Add hash type name to Debug output
mpbagot Feb 3, 2026
17322bf
hashes: Add hash type name to Debug output
mpbagot Feb 3, 2026
9fedc40
addresses,bip158,crypto: migrate lint settings
nyonson Jan 30, 2026
639212b
chacha20poly1305: migrate to workspace lint
nyonson Jan 30, 2026
0c41ebf
base58: upgrade to workspace lint
nyonson Jan 31, 2026
8781aab
io: upgrade to workspace lint
nyonson Jan 31, 2026
bd3b45b
Merge rust-bitcoin/rust-bitcoin#5606: remove From<UnexpectedEof> impl…
apoelstra Feb 13, 2026
15288ed
Merge rust-bitcoin/rust-bitcoin#5609: Add note about Target maximum v…
apoelstra Feb 13, 2026
7031c52
Automated update to Github CI to rustc nightly-2026-02-13
Feb 14, 2026
c897020
Merge rust-bitcoin/rust-bitcoin#5597: primitives: Add fmt traits for …
apoelstra Feb 14, 2026
9ae638d
primitives: Implement Arbitrary for CompactTarget
mpbagot Jan 15, 2026
d9e10ef
Move CompactTarget from primitives to units
mpbagot Jan 15, 2026
aeb108e
Move hex parsing functions on CompactTarget to units
mpbagot Jan 9, 2026
9bbdb86
Update API files
mpbagot Jan 15, 2026
c9e0d6d
Merge rust-bitcoin/rust-bitcoin#5594: hashes: Introduce MuHash wrappe…
apoelstra Feb 14, 2026
4b4053c
refactor(fuzz): remove custom fuzz_utils module
erickcestari Feb 14, 2026
85f1a4b
Merge rust-bitcoin/rust-bitcoin#5578: test(pow): verify MAX_ATTAINABL…
apoelstra Feb 14, 2026
0a92d08
2026-02-15 automated rustfmt nightly
Feb 15, 2026
e6969ec
Merge rust-bitcoin/rust-bitcoin#5633: Update dep-tree in docs
apoelstra Feb 14, 2026
9a78efc
bitcoin: Grab 0.32.8 changelog
tcharding Feb 16, 2026
de9ad4b
Merge rust-bitcoin/rust-bitcoin#5670: Automated nightly rustfmt (2026…
apoelstra Feb 15, 2026
583c168
Introduce as_inner on XOnlyPublicKey
mpbagot Jan 30, 2026
731cbac
Replace serde derive with call-through impl
mpbagot Jan 30, 2026
dcd361c
Introduce parity field on XOnlyPublicKey
mpbagot Jan 30, 2026
34744da
Change new constructor to from_secp
mpbagot Jan 30, 2026
b23e551
Return parity from serialize in XOnlyPublicKey
mpbagot Jan 30, 2026
7d11f9b
Return only XOnlyPublicKey from from_keypair
mpbagot Jan 30, 2026
5724d3e
Remove parity argument and rename public_key
mpbagot Jan 30, 2026
7370bd7
Remove parity argument and return on add_tweak and tweak_add_check
mpbagot Jan 30, 2026
943a786
Change pow_target_spacing to u32
mpbagot Feb 10, 2026
8353c09
p2p: Rename `Raw` prefix to `V1`
rustaceanrob Feb 13, 2026
23ff6ad
Merge rust-bitcoin/rust-bitcoin#5599: Upgrade more packages to worksp…
apoelstra Feb 16, 2026
50e41de
Merge rust-bitcoin/rust-bitcoin#5668: Automated daily update to rustc…
apoelstra Feb 16, 2026
29c62f6
Merge rust-bitcoin/rust-bitcoin#5640: Change hex re-export in bitcoin…
apoelstra Feb 16, 2026
6a14987
Merge rust-bitcoin/rust-bitcoin#5043: Add hash wrapper types to `Debu…
apoelstra Feb 16, 2026
be83540
update renamed clippy lints
congerrr Feb 17, 2026
3632229
Merge rust-bitcoin/rust-bitcoin#5511: Move and improve CompactTarget
apoelstra Feb 17, 2026
9c166f5
units: Add fmt traits for simple wrapper types
mpbagot Jan 27, 2026
06dbf32
units: Update API files
mpbagot Jan 27, 2026
a7a8c3b
Merge rust-bitcoin/rust-bitcoin#5617: psbt: Add bounds check for non-…
apoelstra Feb 17, 2026
7a9b246
Merge rust-bitcoin/rust-bitcoin#5572: Add array ref encoder
apoelstra Feb 17, 2026
c423b93
hashes: simplify trait bounds
congerrr Feb 17, 2026
f271169
Merge rust-bitcoin/rust-bitcoin#5618: Fix justfile with cargo-rbmt
apoelstra Feb 18, 2026
0604e09
Clean up accidentally checked in files
nyonson Feb 18, 2026
1447cc6
Merge rust-bitcoin/rust-bitcoin#5510: units: Add fmt traits for simpl…
apoelstra Feb 18, 2026
ac26892
Merge rust-bitcoin/rust-bitcoin#5624: hashes: Test hmac incremental i…
apoelstra Feb 19, 2026
663ff10
Merge rust-bitcoin/rust-bitcoin#5682: hashes: simplify trait bounds
apoelstra Feb 19, 2026
6c0d837
Merge rust-bitcoin/rust-bitcoin#5593: Add parity to XOnlyPublicKey an…
apoelstra Feb 19, 2026
2f74f3e
Introduce from_secp constructors for PublicKey and PrivateKey
mpbagot Feb 4, 2026
9506d45
Remove public access to inner field of PublicKey and PrivateKey
mpbagot Feb 4, 2026
41d946f
Remove public access to all fields of PublicKey and PrivateKey
mpbagot Feb 4, 2026
118b898
Encapsulate PublicKey and PrivateKey
mpbagot Feb 4, 2026
8ce1f34
Merge rust-bitcoin/rust-bitcoin#5699: Clean up accidentally checked i…
apoelstra Feb 20, 2026
3ea5757
consensus_encoding: remove redundant trait bounds
nyonson Feb 20, 2026
4415470
Merge rust-bitcoin/rust-bitcoin#5683: update renamed clippy lints
apoelstra Feb 20, 2026
c9cdde0
Update api
nyonson Feb 21, 2026
98c7148
Merge rust-bitcoin/rust-bitcoin#5614: Encapsulate the PublicKey and P…
apoelstra Feb 21, 2026
7d26c73
Merge rust-bitcoin/rust-bitcoin#5674: bitcoin: Grab 0.32.8 changelog
apoelstra Feb 21, 2026
1f0e688
Merge rust-bitcoin/rust-bitcoin#5643: p2p: Re-export hash types
apoelstra Feb 21, 2026
f811c72
Merge rust-bitcoin/rust-bitcoin#5625: Fix PSBT key deserialisation by…
apoelstra Feb 22, 2026
418685a
Re-release without rc suffix
tcharding Jan 6, 2026
482a0f6
Merge rust-bitcoin/rust-bitcoin#5487: Re-release without rc suffix
apoelstra Feb 23, 2026
0276325
consensus_encoding: add track_caller to panic-able sites
nyonson Feb 20, 2026
3e99a92
Merge rust-bitcoin/rust-bitcoin#5604: hashes: Fix incremental hashing…
apoelstra Feb 23, 2026
8f3006e
Merge rust-bitcoin/rust-bitcoin#5713: consensus_encoding: add track_c…
apoelstra Feb 24, 2026
9bd374d
Merge rust-bitcoin/rust-bitcoin#5520: p2p: Implement `encoding` trait…
apoelstra Feb 24, 2026
fffd058
Merge rust-bitcoin/rust-bitcoin#5635: Add macros to define `EncoderN`…
apoelstra Feb 24, 2026
cdc27ae
Merge rust-bitcoin/rust-bitcoin#5605: Add Copy, Ord, and Hash traits …
apoelstra Feb 25, 2026
650b43e
Merge rust-bitcoin/rust-bitcoin#5669: refactor(fuzz): remove custom f…
apoelstra Feb 25, 2026
735f4f9
Merge rust-bitcoin/rust-bitcoin#5667: p2p: Rename `Raw` prefix to `V1`
apoelstra Feb 25, 2026
7e3c3fa
Merge rust-bitcoin/rust-bitcoin#5716: consensus_encoding: remove redu…
apoelstra Feb 26, 2026
da7cb2a
Merge rust-bitcoin/rust-bitcoin#5656: Change `Params::pow_target_spac…
apoelstra Feb 26, 2026
8ffc88e
Merge rust-bitcoin/rust-bitcoin#5598: hashes: Add `cpufeatures` for n…
apoelstra Feb 26, 2026
e4702ef
Initial CPUNet support
Nov 20, 2024
2a967ff
Use CPUNet-modified bech32 library (#3)
mcelrath Aug 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
69 changes: 49 additions & 20 deletions .cargo/mutants.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
additional_cargo_args = ["--all-features"]
examine_globs = ["units/src/**/*.rs", "primitives/src/**/*.rs"]
examine_globs = ["consensus_encoding/src/**/*.rs", "units/src/**/*.rs", "primitives/src/**/*.rs"]
exclude_globs = [
"units/src/amount/verification.rs" # kani tests
]
Expand All @@ -9,30 +9,59 @@ exclude_re = [
"impl fmt::Debug",
".*Error",
"deserialize", # Skip serde mutation tests
"serde_details::<impl de::Visitor<'_>", # Skip serde mutation tests
"Iterator", # Mutating operations in an iterator can result in an infinite loop
"match arm", "match guard", # New addition in cargo-mutants 25.0.1 deletes match arms and replaces match guards even in excluded functions
"<impl .*Decodable for .*>::decoder", # Mutant replacing Default::default() is equivalent to returning new()
"<impl .*Decoder for .*>::read_limit", # Function is for optimization and does not need to be tested.


# ----------------------------------Crate-specific exclusions----------------------------------
# Units
# units
# src/amount/mod.rs
"parse_signed_to_satoshi", # Can't kill all mutants since there is no denomination smaller than Satoshi
"fmt_satoshi_in", # Related to formatting/display
"dec_width", # Replacing num /= 10 with num %=10 in a loop causes a timeout due to infinite loop
"units/.* parse_signed_to_satoshi", # Can't kill all mutants since there is no denomination smaller than Satoshi
"units/.* fmt_satoshi_in", # Related to formatting/display
"units/.* dec_width", # Replacing num /= 10 with num %=10 in a loop causes a timeout due to infinite loop
# src/locktime/relative.rs
"Time::to_consensus_u32", # Mutant from replacing | with ^, this returns the same value since the XOR is taken against the u16 with an all-zero bitmask
"FeeRate::fee_vb", # Deprecated
"FeeRate::fee_wu", # Deprecated
"SignedAmount::checked_abs", # Deprecated
"NumberOfBlocks::value", # Deprecated
"NumberOf512Seconds::to_consensus_u32", # Deprecated
"units/.* LockTime::to_consensus_u32", # Mutant from replacing | with ^, this returns the same value since the XOR is taken against the u16 with an all-zero bitmask
"units/.* CompactTarget::to_hex", # Deprecated
"units/.* FeeRate::fee_vb", # Deprecated
"units/.* FeeRate::fee_wu", # Deprecated
"units/.* SignedAmount::checked_abs", # Deprecated
"units/.* NumberOfBlocks::to_consensus_u32", # Deprecated
"units/.* NumberOfBlocks::value", # Deprecated
"units/.* NumberOf512Seconds::to_consensus_u32", # Deprecated
"units/.* NumberOf512Seconds::value", # Deprecated
"units/.* MedianTimePast::to_consensus_u32", # Deprecated
"units/.* Height::to_consensus_u32", # Deprecated
"units/.* Sequence::to_hex", # Deprecated
"units/.* Sequence::from_512_second_intervals", # Mutant from replacing | with ^, this returns the same value since the XOR is taken against the u16 with an all-zero bitmask

# primitives
"Sequence::from_512_second_intervals", # Mutant from replacing | with ^, this returns the same value since the XOR is taken against the u16 with an all-zero bitmask
"Opcode::classify", # Not possible to kill all mutants without individually checking every opcode classification
"Block<Checked>::cached_witness_root", # Skip getters
"Block<Checked>::transactions", # Skip getters
"Script::to_bytes", # Deprecated
"decode_cursor", # Mutating operations in decode_cursor can result in an infinite loop
"fmt_debug", # Mutants from formatting/display changes
"fmt_debug_pretty", # Mutants from formatting/display changes
"primitives/.* Opcode::classify", # Not possible to kill all mutants without individually checking every opcode classification
"primitives/.* Block<Checked>::cached_witness_root", # Skip getters
"primitives/.* Block<Checked>::transactions", # Skip getters
"primitives/.* Script::to_bytes", # Deprecated
"primitives/.* decode_cursor", # Mutating operations in decode_cursor can result in an infinite loop
"primitives/.* fmt_debug", # Mutants from formatting/display changes
"primitives/.* fmt_debug_pretty", # Mutants from formatting/display changes
"primitives/.* Script::to_hex", # Deprecated
"primitives/.* Script<T>::to_hex", # Deprecated
"primitives/.* ScriptBuf::to_hex", # Deprecated
"primitives/.* ScriptBuf<T>::to_hex", # Deprecated
"primitives/.* <impl Encoder for .*Encoder<'_>>::current_chunk", # Replacing the return with Some(vec![]) causes an infinite loop.
"primitives/.* <impl Encoder for .*Encoder<'_>>::advance", # Replacing the return with true causes an infinite loop.
"primitives/.* <impl Decoder for WitnessDecoder>::push_bytes", # Replacing == with != causes an infinite loop
"primitives/.* WitnessDecoder::resize_if_needed", # Replacing *= with += still resizes the buffer making the mutant untestable.
"primitives/.* WitnessDecoder::reserve_batch", # Mutations cause an infinite loop
"primitives/.* replace \\+ with \\* in MerkleNode::calculate_root", # Replacing + with * causes an infinite loop
"primitives/.* replace == with != in MerkleNode::calculate_root", # Replacing == with != isn't caught unless alloc is disabled.

# consensus_encoding - most of these are for mutations in the logic used to determine when to stop encoding or decoding.
"consensus_encoding/.* <impl Decoder for ArrayDecoder<N>>::push_bytes", # Mutations cause an infinite loop
"consensus_encoding/.* <impl Decoder for .*>::end", # Mutations cause an infinite loop
"consensus_encoding/.* encode_to_vec", # Mutations cause an infinite loop
"consensus_encoding/.* encode_to_writer", # Mutations cause an infinite loop
"consensus_encoding/.* decode_from_slice", # Mutations cause an infinite loop
"consensus_encoding/.* decode_from_read", # Mutations cause an infinite loop
"consensus_encoding/.* <impl Decoder for .*>::push_bytes", # Mutations cause an infinite loop
]
36 changes: 36 additions & 0 deletions .github/actions/prepare/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: 'Prepare Rust Environment'
description: 'Setup Rust toolchain and install RBMT'
inputs:
toolchain:
description: 'Rust toolchain to use (nightly reads from nightly-version file)'
required: false
default: 'stable'
components:
description: 'Rust components to install (e.g., clippy, rustfmt)'
required: false
default: ''
runs:
using: "composite"
steps:
- name: "Determine toolchain"
id: toolchain
shell: bash
run: |
if [ "${INPUTS_TOOLCHAIN}" = "nightly" ]; then
TOOLCHAIN="$(cat nightly-version)"
else
TOOLCHAIN="${INPUTS_TOOLCHAIN}"
fi
echo "version=$TOOLCHAIN" >> $GITHUB_OUTPUT
env:
INPUTS_TOOLCHAIN: ${{ inputs.toolchain }}

- name: "Setup requested toolchain"
uses: actions-rust-lang/setup-rust-toolchain@1780873c7b576612439a134613cc4cc74ce5538c # v1.15.2
with:
toolchain: stable,${{ steps.toolchain.outputs.version }}
components: ${{ inputs.components }}

- name: "Install RBMT"
shell: bash
run: cargo +stable install --git https://github.com/rust-bitcoin/rust-bitcoin-maintainer-tools.git --rev "$(cat rbmt-version)" cargo-rbmt --locked
4 changes: 4 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,7 @@ updates:
schedule:
# Check for updates to GitHub Actions every week
interval: "weekly"
# Defines a cooldown period for dependency updates,
# allowing updates to be delayed for a configurable number of days.
cooldown:
default-days: 60
14 changes: 10 additions & 4 deletions .github/workflows/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,13 @@ Run from rust.yml unless stated otherwise. Unfortunately we are now exceeding th
14. `ASAN`
15. `WASM`
16. `Kani`
17. `Coveralls` - run by `coveralls.yml`
18. `release` - run by `release.yml`
19. `labeler` - run by `manage-pr.yml`
20. `Shellcheck` - run by `shellcheck.yml`
17. `API`
18. `Policy` - enforce repository coding policy.
19. `Re-exports`
20. `DiffMutants`
21. `release` - run by `release.yml`
22. `labeler` - run by `manage-pr.yml`
23. `Shellcheck` - run by `shellcheck.yml`

If any change touches the `.github/` directory then the `zizmor`, run by `zizmor.yml`, will be
triggered for that PR.
2 changes: 1 addition & 1 deletion .github/workflows/cargo-semver-checks-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.41.0
0.46.0
24 changes: 0 additions & 24 deletions .github/workflows/coveralls.yml

This file was deleted.

48 changes: 35 additions & 13 deletions .github/workflows/cron-daily-fuzz.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,51 +7,69 @@ on:
# - 6am CET
# - 4pm AEDT
- cron: '00 05 * * *'
permissions: {}

jobs:
fuzz:
if: ${{ !github.event.act }}
runs-on: ubuntu-24.04
permissions:
contents: read
strategy:
fail-fast: false
matrix:
# We only get 20 jobs at a time, we probably don't want to go
# over that limit with fuzzing because of the hour run time.
fuzz_target: [
bitcoin_deserialize_address,
bitcoin_arbitrary_block,
bitcoin_arbitrary_script,
bitcoin_arbitrary_transaction,
bitcoin_arbitrary_witness,
bitcoin_deserialize_block,
bitcoin_deserialize_prefilled_transaction,
bitcoin_deserialize_psbt,
bitcoin_deserialize_script,
bitcoin_deserialize_transaction,
bitcoin_deserialize_witness,
bitcoin_deser_net_msg,
bitcoin_outpoint_string,
bitcoin_p2p_address_roundtrip,
bitcoin_parse_address,
bitcoin_parse_outpoint,
bitcoin_script_bytes_to_asm_fmt,
consensus_encoding_decode_array,
consensus_encoding_decode_byte_vec,
consensus_encoding_decode_compact_size,
consensus_encoding_decode_decoder2,
hashes_json,
hashes_ripemd160,
hashes_sha1,
hashes_sha256,
hashes_sha512_256,
hashes_sha512,
units_deserialize_amount,
hashes_sha512_256,
p2p_arbitrary_addrv2,
p2p_deserialize_addrv2,
p2p_deserialize_raw_net_msg,
units_arbitrary_weight,
units_parse_amount,
units_parse_int,
units_standard_checks,
]
steps:
- name: Install test dependencies
run: sudo apt-get update -y && sudo apt-get install -y binutils-dev libunwind8-dev libcurl4-openssl-dev libelf-dev libdw-dev cmake gcc libiberty-dev
- uses: actions/checkout@v4
- uses: actions/cache@v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0

id: cache-fuzz
with:
path: |
~/.cargo/bin
fuzz/target
target
key: cache-${{ matrix.target }}-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }}
- uses: dtolnay/rust-toolchain@stable
- uses: dtolnay/rust-toolchain@5d458579430fc14a04a08a1e7d3694f545e91ce6 # stable
with:
toolchain: '1.65.0'
toolchain: '1.74.0'
- name: fuzz
run: |
if [[ "${{ matrix.fuzz_target }}" =~ ^bitcoin ]]; then
Expand All @@ -60,7 +78,7 @@ jobs:
echo "Using RUSTFLAGS $RUSTFLAGS"
cd fuzz && ./fuzz.sh "${{ matrix.fuzz_target }}"
- run: echo "${{ matrix.fuzz_target }}" >executed_${{ matrix.fuzz_target }}
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
with:
name: executed_${{ matrix.fuzz_target }}
path: executed_${{ matrix.fuzz_target }}
Expand All @@ -69,9 +87,13 @@ jobs:
if: ${{ !github.event.act }}
needs: fuzz
runs-on: ubuntu-24.04
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
- name: Display structure of downloaded files
run: ls -R
- run: find executed_* -type f -exec cat {} + | sort > executed
Expand Down
9 changes: 7 additions & 2 deletions .github/workflows/cron-daily-kani.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,17 @@ name: Kani CI
on:
schedule:
- cron: '59 23 * * *' # midnight every day.
permissions: {}
jobs:
run-kani:
runs-on: ubuntu-24.04
permissions:
contents: read
steps:
- name: 'Checkout your code.'
uses: actions/checkout@v4
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false

- name: 'Run Kani on your code.'
uses: model-checking/kani-github-action@v1.1
uses: model-checking/kani-github-action@f838096619a707b0f6b2118cf435eaccfa33e51f # v1.1
18 changes: 13 additions & 5 deletions .github/workflows/cron-weekly-cargo-mutants.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,22 @@ on:
schedule:
- cron: "0 0 * * 0" # runs weekly on Sunday at 00:00
workflow_dispatch: # allows manual triggering
permissions: {}
jobs:
cargo-mutants:
runs-on: ubuntu-24.04
permissions:
contents: read
issues: write
steps:
- uses: actions/checkout@v4
- uses: taiki-e/install-action@v2
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- uses: taiki-e/install-action@81ee1d48d9194cdcab880cbdc7d36e87d39874cb # v2.62.45
with:
tool: cargo-mutants
- run: cargo mutants --in-place --no-shuffle
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
if: always()
with:
name: mutants.out
Expand All @@ -22,13 +28,15 @@ jobs:
run: |
if [ -s mutants.out/missed.txt ]; then
echo "New missed mutants found"
MUTANTS_VERSION=$(cargo mutants --version)
gh issue create \
--title "New Mutants Found" \
--body "$(cat <<EOF
Displaying up to the first 10 mutants:

\`\`\`
$(head -n 10 mutants.out/missed.txt)

\`\`\`
Running cargo mutants version: ${MUTANTS_VERSION}
For the complete list, please check the [mutants.out artifact](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}).
EOF
)"
Expand Down
15 changes: 11 additions & 4 deletions .github/workflows/cron-weekly-rustfmt.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,33 @@ on:
schedule:
- cron: "0 0 * * 0" # runs weekly on Sunday at 00:00
workflow_dispatch: # allows manual triggering
permissions: {}
jobs:
format:
name: Nightly rustfmt
runs-on: ubuntu-24.04
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- uses: dtolnay/rust-toolchain@55d80eb3c5a4228eec5390a083c092095115c6f1 # nightly
with:
components: rustfmt
- name: Run Nightly rustfmt
# Run the formatter and manually remove trailing whitespace.
run: cargo +nightly fmt && find . -type f -name '*.rs' -exec sed -i 's/ $//' {} \;
run: cargo +nightly fmt && git ls-files -- '*.rs' -z | xargs sed -E -i'' -e 's/[[:space:]]+$//'
- name: Get the current date
run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
with:
author: Fmt Bot <bot@example.com>
title: Automated nightly rustfmt (${{ env.date }})
body: |
Automated nightly `rustfmt` changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action
commit-message: ${{ env.date }} automated rustfmt nightly
labels: rustfmt

Loading
Loading