rust-bitcoin-unsafe-fast/bitcoin/src
Tobin C. Harding 3ffdc54ca5
Fix off-by-one bug in relative locktime
Define 'is satisfied by' - this is a classic off-by-one problem, if a
relative lock is satisfied does that mean it can go in this block or the
next? Its most useful if it means 'it can go in the next' and this is
how relative height and MTP are used in Core.

Ramifications:

- When checking a time based lock we check against the chain tip MTP,
then when Core verifies a block with the output in it it uses the
previous block (and this is still the chain tip).
- When checking a height base lock we check against chain tip height + 1
because Core checks against height of the block being verified.

Additionally we currently have a false negative in the satisfaction
functions when the `crate` type (height or MTP) is to big to fit in a
u16 - in this case we should return true not false because a value too
big definitely is > the lock value.

One final API paper cut - currently if the caller puts the args in the
wrong order they get a false negative instead of an error.

Fix all this by making the satisfaction functions return errors, update
the docs to explicitly define 'satisfaction'.

For now remove the examples in rustdocs, we can circle back to these
once the dust settles.

API test of Errors:

Some of the errors are being 'API tested' tested in `primitives` but
they should be being done in `units/tests/api.rs` - put all the new
errors in the correct places.
2025-05-12 12:17:31 +10:00
..
address Merge rust-bitcoin/rust-bitcoin#4410: Wrap secp256k1::XOnlyPublicKey to improve error handling 2025-05-07 17:01:31 +00:00
blockdata Fix off-by-one bug in relative locktime 2025-05-12 12:17:31 +10:00
consensus Use a consistent rustdoc heading level of H1 `#` 2025-04-22 13:06:32 +01:00
crypto Merge rust-bitcoin/rust-bitcoin#4410: Wrap secp256k1::XOnlyPublicKey to improve error handling 2025-05-07 17:01:31 +00:00
merkle_tree 2025-04-27 automated rustfmt nightly 2025-04-27 01:36:56 +00:00
network units: rename BlockInterval to BlockHeightInterval 2025-05-06 15:50:43 +00:00
p2p bitcoin: remove torv2 support 2025-05-05 15:27:35 -03:00
psbt Merge rust-bitcoin/rust-bitcoin#4410: Wrap secp256k1::XOnlyPublicKey to improve error handling 2025-05-07 17:01:31 +00:00
taproot Merge rust-bitcoin/rust-bitcoin#4410: Wrap secp256k1::XOnlyPublicKey to improve error handling 2025-05-07 17:01:31 +00:00
bip32.rs Merge rust-bitcoin/rust-bitcoin#4410: Wrap secp256k1::XOnlyPublicKey to improve error handling 2025-05-07 17:01:31 +00:00
bip152.rs chore: Fix the typos in the comments and variables 2025-04-15 18:31:52 +08:00
bip158.rs Merge rust-bitcoin/rust-bitcoin#4250: Introduce and use `test_hex_unwrap` macro in `internals` 2025-04-24 17:19:37 +00:00
consensus_validation.rs Stop using FQP on Amount type 2025-01-24 08:54:24 +11:00
hash_types.rs 2025-03-30 automated rustfmt nightly 2025-03-30 01:27:51 +00:00
internal_macros.rs Update internal_macros.rs 2025-04-24 16:46:01 +03:00
lib.rs Merge rust-bitcoin/rust-bitcoin#4458: locktimes: replace `MtpAndHeight` type with pair of `BlockMtp` and `BlockHeight` 2025-05-07 22:32:16 +00:00
policy.rs Policy: Relax MIN_STANDARD_TX_NONWITNESS_SIZE to 65 2025-02-27 00:20:08 +07:00
pow.rs fix error pow.rs 2025-04-25 10:56:28 +02:00
serde_utils.rs Elide more lifetimes 2024-10-28 15:22:13 +11:00
sign_message.rs update secp256k1 to 0.30.0 2025-03-02 23:31:48 +08:00