Commit Graph

1518 Commits

Author SHA1 Message Date
Tobin C. Harding b6c5fc3622 Remove MAX_SEQUENCE const
This is follow up work to the recent addition of the `Sequence` type. We
do not need to keep a public integer const for `MAX_SEQUENCE` because we
offer the `Sequenc::MAX` associated type.

Use the all-bits-set u64 directly in the associated type `Sequence::MAX`.
2022-08-05 13:53:37 +10:00
Tobin C. Harding 5cef2f1a8f Remove stutter for error variants
Error variants should not end with the same identifier as the enum,
i.e., they should not stutter.

Found by clippy after setting:

  avoid-breaking-exported-api = false
2022-08-02 08:55:00 +10:00
Tobin C. Harding 08c4a2204a Allow wrong_self_convention for non-Copy type
Clippy gives a warning about `wrong_self_convention` because we consume
self in a method called `is_*`. We have to consume self because the
object has a generic `E` (error type) that does not implement `Copy`.
2022-08-02 08:54:54 +10:00
Tobin C. Harding 0786d92a5c Take self by value
Turns out by default clippy does not lint certain parts of the public
API. Specifically, by setting

  avoid-breaking-exported-api = false

we can get clippy to lint the public API for various things including
`wrong_self_convention`.

Clippy emits:

 warning: methods with the following characteristics: (`to_*` and `self`
 type is `Copy`) usually take `self` by value

As suggested, take `self` by value for methods named `to_*`.
2022-08-02 08:54:53 +10:00
Andrew Poelstra ef5014f3e8
Merge rust-bitcoin/rust-bitcoin#1144: Remove deprecated `StreamReader`
0c9c14128b Remove deprecated `StreamReader` (Martin Habovstiak)

Pull request description:

  `StreamReader` was deprecated for a while, yet we needlessly maintain it
  and it eats our testing time. This change removes it completely.

  Closes #1123

ACKs for top commit:
  tcharding:
    ACK 0c9c14128b (with the function rename).
  sanket1729:
    utACK 0c9c14128b.
  apoelstra:
    ACK 0c9c14128b

Tree-SHA512: 3f10c48081f92c02bc5a9f3187df1d9279451a79eb2776b10b3e4c4dc5370a9816b3eb5f04b6e1ede61dfe13c1844d606ba00b00a2bfc6a56aefda900cd9ccc2
2022-08-01 19:20:19 +00:00
sanket1729 bb4396266a
Merge rust-bitcoin/rust-bitcoin#1151: Update finalize API
870ad59a5e Rename is_finalized to is_finalizable (sanket1729)
aaadd25ddc Add breaking test that allowed incomplete builders to be created (sanket1729)
0b88051318 Update TaprootBuilder::finalize (sanket1729)
5813ec7ac0 Return EmptyTree instead of OverCompleteTree when there are no scripts to add (sanket1729)

Pull request description:

  Found while reviewing https://github.com/rust-bitcoin/rust-miniscript/pull/450/ . There is also a BUG fix in the second commit that would have let users spendinfo from incomplete trees.

  The bug was introduced in #936 which I am responsible for ACKing

ACKs for top commit:
  apoelstra:
    ACK 870ad59a5e
  Kixunil:
    ACK 870ad59a5e
  tcharding:
    ACK 870ad59a5e

Tree-SHA512: 61442bd95df6912865cbecdc207f330b241e7fbb88b5e915243b2b48a756bea9eb29cb28d8c8249647a0a2ac514df4737bddab695f63075bd55284be5be228ff
2022-08-01 00:51:35 -07:00
Martin Habovstiak 0c9c14128b Remove deprecated `StreamReader`
`StreamReader` was deprecated for a while, yet we needlessly maintain it
and it eats our testing time. This change removes it completely.

Closes #1123
2022-07-30 14:59:42 +02:00
sanket1729 870ad59a5e Rename is_finalized to is_finalizable
I really liked the is_complete naming, but that was changed earlier in b0f3992db1
Was also suggested by Andrew https://github.com/rust-bitcoin/rust-bitcoin/pull/929#discussion_r850631207
2022-07-29 13:04:37 -07:00
sanket1729 aaadd25ddc Add breaking test that allowed incomplete builders to be created 2022-07-29 13:04:37 -07:00
sanket1729 0b88051318 Update TaprootBuilder::finalize
This commit does two things:
1) BUG FIX: We should have checked that the length of the branch is 1
before computing the spend_info on it. This was introduced in #936, but
slipped past my review :(
2) Update the return type to return the consumed `self` value. This
function can only error when there the tree building is not complete.
Returning TaprootBuilderError causes issues in downstream projects that
need to deal with error cases which cannot happen in this function
2022-07-29 13:04:37 -07:00
Andrew Poelstra f54fe69c8d
Merge rust-bitcoin/rust-bitcoin#1137: Impl string conversion traits for `CommandString`
405be52f5c Impl string conversion traits for `CommandString` (Martin Habovstiak)

Pull request description:

  After MSRV bump `try_from` usually refers to `TryFrom` method but
  `CommandString` used inherent one making it confusing and non-idiomatic.

  This implements `FromStr` and `TryFrom<{stringly type}>` for
  `CommandString` and deprecates the inherent method in favor of those.
  To keep the code using `&'static str` efficient it provides
  `try_from_static` inherent method that only converts from
  `&'static str`.

  Closes #1135

ACKs for top commit:
  sanket1729:
    utACK 405be52f5c
  tcharding:
    ACK 405be52f5c

Tree-SHA512: 754fc960a4bc5c096cccf47b85a620e33fcf863f3c57ea113eae91cd34006168113dd1efc47231e79e6e237e2fc412890cc9e8a72d4cfc633bfebbecdc4610e6
2022-07-29 14:03:00 +00:00
Andrew Poelstra 0b02e43da9
Merge rust-bitcoin/rust-bitcoin#1146: Remove needless allocation from BIP-158 encoding
1003ca08e1 Remove needless allocation from BIP-158 encoding (Martin Habovstiak)

Pull request description:

  The BIP-158 finalize code was serializing value to `Vec` only to
  serialize it to writer right away. Thus the intermediary `Vec` was not
  needed.

  Even more, the code used `write` which, while correct in case of `Vec`,
  could trigger code analysis tools or reviewers.

ACKs for top commit:
  tcharding:
    ACK 1003ca08e1
  sanket1729:
    ACK 1003ca08e1
  apoelstra:
    ACK 1003ca08e1

Tree-SHA512: 01e198726f45ef1b0e4bbe80154674d9db12350281e682531259d1d6467881bc7503cfed30d3837813437c3081a35ba7893c3ae4490d07daf20f1b75dbc62d52
2022-07-29 13:29:34 +00:00
sanket1729 5813ec7ac0 Return EmptyTree instead of OverCompleteTree when there are no scripts
to add
2022-07-28 17:19:10 -07:00
Martin Habovstiak 1003ca08e1 Remove needless allocation from BIP-158 encoding
The BIP-158 finalize code was serializing value to `Vec` only to
serialize it to writer right away. Thus the intermediary `Vec` was not
needed.

Even more, the code used `write` which, while correct in case of `Vec`,
could trigger code analysis tools or reviewers.
2022-07-28 23:02:06 +02:00
Martin Habovstiak 405be52f5c Impl string conversion traits for `CommandString`
After MSRV bump `try_from` usually refers to `TryFrom` method but
`CommandString` used inherent one making it confusing and non-idiomatic.

This implements `FromStr` and `TryFrom<{stringly type}>` for
`CommandString` and deprecates the inherent method in favor of those.
To keep the code using `&'static str` efficient it provides
`try_from_static` inherent method that only converts from
`&'static str`.

Closes #1135
2022-07-28 15:24:49 +02:00
Martin Habovstiak 071a1c02b7 Implement string parsing for `Sequence`
`Sequence` didn't have `FromStr` nor `TryFrom<{stringly type}>`
implemented by accident. This moves a macro for implementing them from
`locktime` module to the `parse` module, renames it for clarity and uses
it to implement parsing for `Sequence`.
2022-07-27 20:46:37 +02:00
Martin Habovstiak c39bc3909d Extend `ParseIntError` to carry more context
When debugging parsing errors it's very useful to know some context:
what the input was and what integer type was parsed. `ParseIntError`
from `core` doesn't contain this information.

In this commit a custom `ParseIntError` type is crated that carries the
one from `core` as well as additional information. Its `Display`
implementation displays this additional information as a well-formed
English sentence to aid users with understanding the problem. A helper
function parses any integer type from common string types returning the
new `ParseIntError` type on error.

To clean up the error code a bit some new macros are added and used.
New modules are added to organize the types, functions and macros.

Closes #1113
2022-07-27 18:51:53 +02:00
Tobin C. Harding 0ed78e543b Add lock time types
Add a `LockTime` type to hold the nLockTime `u32` value. Use it in
`Transaction` for `lock_time` instead of a `u32`. Make it public so this
new type can be used by rust-miniscript and other downstream projects.

Add a `PackedLockTime` type that wraps a raw `u32` and derives `Ord`,
this type is for wrapping a consensus lock time value for nesting in
types that would like to derive `Ord`.
2022-07-27 08:39:19 +10:00
Tobin C. Harding 1390ee12ec Add a max scriptnum constant
Integers within Script can have a maximum value of 2^31 (i.e., they are
signed) but we (miniscript) often uses unsigned ints, to facilitate
checking the unsigned type is the correct size to fit in a signed int
add a const `MAX_SCRIPTNUM_VALUE`.
2022-07-27 08:36:14 +10:00
Andrew Poelstra 92b6211696
Merge rust-bitcoin/rust-bitcoin#1079: Run clippy from the test script
74f3a5aeda Run clippy from the test script (Tobin C. Harding)
aa8109a791 Use struct field short form (Tobin C. Harding)
d1a05401f4 Remove redundant calls to clone (Tobin C. Harding)
196492554d Use assert instead of assert_eq (Tobin C. Harding)
3173ef9dbb Remove unnecessary explicit reference (Tobin C. Harding)

Pull request description:

  Currently we run clippy in CI using a github action. The invocation has a couple of shortcomings

  1. it does not lint the tests (this requires `--all-targets`)
  2. it does not lint the examples

  I could not find a way to lint the examples without explicitly linting each example by name.

  **This PR does the following:**

  - Fix clippy issues (patch 1-4)
  - Move the clippy control to `test.sh`
  - Add an env var `DO_LINT` to control it
  - Remove the separate CI job
  - Run the linter during the `Test` job using the stable toolchain.
  - Run clippy with ` --all-features` AND `--all-targets` (only recently made possible).
  - Run each example explicitly

  Thanks to dunxen for noticing all the errors in my psbt example on review and prompting me to work out why clippy was not running :)

ACKs for top commit:
  apoelstra:
    ACK 74f3a5aeda
  Kixunil:
    ACK 74f3a5aeda

Tree-SHA512: 56dc6262144f4caa5efa6fdc46aeecf7bddc050ef134a639b31a34d4c5e01abcdeda18a00f4ded443866bbdfc982b4e5b67b0089639e0c253e207f0b54777f57
2022-07-26 14:04:36 +00:00
Tobin C. Harding aa8109a791 Use struct field short form
Clippy emits two warnings of form:

  warning: redundant field names in struct initialization

Remove the redundant field names and use struct short initialization
form.
2022-07-26 08:48:09 +10:00
Tobin C. Harding d1a05401f4 Remove redundant calls to clone
Clippy emits various warnings of form:

  warning: redundant clone

As suggested, remove the redundant calls to `clone`.
2022-07-26 08:47:53 +10:00
Tobin C. Harding 196492554d Use assert instead of assert_eq
Clippy emits:

  warning: used `assert_eq!` with a literal bool

As suggested, use `assert` instead of `assert_eq`.
2022-07-26 08:47:45 +10:00
Tobin C. Harding 3173ef9dbb Remove unnecessary explicit reference
Clippy emits various warnings of type:

  warning: this expression creates a reference which is immediately
  dereferenced by the compiler

As suggested, remove the unnecessary explicit reference.
2022-07-26 08:46:59 +10:00
Andrew Poelstra 5b707069e5
Merge rust-bitcoin/rust-bitcoin#1088: Add BIP152 (Compact Blocks) structures
ee29910911 BIP152: Test net msg ser/der and diff encoding (0xb10c)
cd1aaaf344 BIP152: Add Compact Block unit test based on Elements (Steven Roose)
d4d92a838e BIP152: Add Compact Blocks network messages (Steven Roose)
f2fcdc86e6 BIP152: Add basic Compact Block structures (Steven Roose)
a9a39c4b08 blockdata: Derive PartialOrd, Ord and Hash for BlockHeader (Steven Roose)

Pull request description:

  > Adds the basic structures for BIP152 and a method to create a compact block from a full block.

  This is a rebase of #249 by stevenroose (see https://github.com/rust-bitcoin/rust-bitcoin/pull/249#issuecomment-1170562141) with a milestone for 29.0. I've added deserialization and serialization tests for the network messages and fixed an off-by-one bug in the deserialization of the differentially encoded varints in the `getblocktxn` message (see https://github.com/rust-bitcoin/rust-bitcoin/pull/249#discussion_r914989521).

  Closes #249.

ACKs for top commit:
  tcharding:
    ACK ee29910911
  apoelstra:
    ACK ee29910911

Tree-SHA512: 462a91576281f5a2ffdc2610769ea93970b60dac75a150c827966c48daec7cf93f526f9f202e7ba1dbb1410b49148579880260a3c3df298b98330c0d891a4cca
2022-07-25 17:35:09 +00:00
Andrew Poelstra cf8c5819c2
Merge rust-bitcoin/rust-bitcoin#1120: Use `u16::to_be_bytes`
3c2869465b Use to_be_bytes (Tobin C. Harding)

Pull request description:

  Now that MSRV is > 1.32 we can use `u16::to_be_bytes` to ensure network byte order when encoding the port number of a `AddrV2Message`.

  Remove the TODO and use `to_be_bytes` as suggested.

ACKs for top commit:
  Kixunil:
    ACK 3c2869465b
  apoelstra:
    ACK 3c2869465b

Tree-SHA512: b5dd9b0f43257f84defb9e9ecf9d02469f1959669367c5ad02cfb43003b780cf07ea344579b52a75c424fd85f8fa02dee3713b967c9b3a33eec6b7aa914763cd
2022-07-25 15:26:10 +00:00
Andrew Poelstra 7953764d78
Merge rust-bitcoin/rust-bitcoin#1122: Add docs re Rust 1.51.1
7f498ee2a2 Add docs re Rust 1.51.1 (Tobin C. Harding)

Pull request description:

  After auditing the code base for 'msrv' the only remaining mention (excl. md files) is on `unsigned_abs`.

  Add docs to save the next guy looking up what version of Rust introduced `unsigned_abs`. (I also added an item to the [msrv tracking issue](https://github.com/rust-bitcoin/rust-bitcoin/issues/1060).)

ACKs for top commit:
  Kixunil:
    ACK 7f498ee2a2
  apoelstra:
    ACK 7f498ee2a2

Tree-SHA512: 9b4bdca09d3f7ac1c0584f4eb5207983a064cfe81ed26952d00396b2e0019ef40eee192b7f09d36c68b8c4e1f8de9cac2d1f3ee0946626bae089b46fe38704ab
2022-07-25 13:41:33 +00:00
Tobin C. Harding 3c2869465b Use to_be_bytes
Now that MSRV is > 1.32 we can use `u16::to_be_bytes` to ensure network
byte order when encoding the port number of a `AddrV2Message`.

Remove the TODO and use `to_be_bytes` as suggested.
2022-07-25 13:40:04 +10:00
Andrew Poelstra 9f0ff6f0a4
Merge rust-bitcoin/rust-bitcoin#1121: Use `u8::try_from`
517059e148 Use u8::try_from (Tobin C. Harding)

Pull request description:

  Currently we use a cast to get the `u8` depth, as suggested by the TODO in the code we can now use `TryFrom` since we bumped the MSRV.

  Use `u8::try_from.expect("")` since depth (node count) is guarded by `TAPROOT_CONTROL_MAX_NODE_COUNT`.

ACKs for top commit:
  Kixunil:
    ACK 517059e148
  apoelstra:
    ACK 517059e148

Tree-SHA512: 98e58617247a05025ec13ad3d00a464cb2351c98c6d871be43b252d3982e291b7187e25780e7fe367f5a3a64fa20f3b328876a8901af4da09e675f50727a26cf
2022-07-24 22:30:02 +00:00
0xb10c ee29910911
BIP152: Test net msg ser/der and diff encoding
This adds tests for serialization of BIP152 network messages and
tests specifically for the differential encoding of the transaction
indicies of 'getblocktx'. Previously, this code contained an
off-by-one error.
2022-07-24 13:21:14 +02:00
Steven Roose cd1aaaf344
BIP152: Add Compact Block unit test based on Elements 2022-07-24 13:21:12 +02:00
Steven Roose d4d92a838e
BIP152: Add Compact Blocks network messages 2022-07-24 13:21:11 +02:00
Steven Roose f2fcdc86e6
BIP152: Add basic Compact Block structures 2022-07-24 13:21:08 +02:00
Steven Roose a9a39c4b08
blockdata: Derive PartialOrd, Ord and Hash for BlockHeader 2022-07-24 10:32:53 +02:00
Tobin C. Harding 517059e148 Use u8::try_from
Currently we use a cast to get the `u8` depth, as suggested by the TODO
in the code we can now use `TryFrom` since we bumped the MSRV.

Use `u8::try_from.expect("")` since, assuming the code comment is
correct, the depth is guaranteed to be less that 127.
2022-07-24 06:41:30 +10:00
Tobin C. Harding 7f498ee2a2 Add docs re Rust 1.51.1 2022-07-24 05:53:41 +10:00
Andrew Poelstra 0469838648
Merge rust-bitcoin/rust-bitcoin#1119: Use `listener.accept()`
b1faf63e82 Use listener.accept() (Tobin C. Harding)

Pull request description:

  During test network simulation we only accept a single connection, we can simplify the code by using `accept`.

  Done as a follow up to review suggestion:

  https://github.com/rust-bitcoin/rust-bitcoin/pull/1042#discussion_r898013799

ACKs for top commit:
  Kixunil:
    ACK b1faf63e82
  apoelstra:
    ACK b1faf63e82

Tree-SHA512: b2ead15d3108db3e01d9faab5e3521403dad6a0f4c3cf505f88fefd020110c520a89b9406484c10b04c9a34073c8abc465941577b17b5a193b54502c23b14c61
2022-07-22 20:35:41 +00:00
Tobin C. Harding b1faf63e82 Use listener.accept()
During test network simulation we only accept a single connection, we
can simplify the code by using `accept`.

Done as a follow up to review suggestion:

https://github.com/rust-bitcoin/rust-bitcoin/pull/1042#discussion_r898013799
2022-07-22 13:29:05 +10:00
Arturo Marquez aeede12604
Infallible conversions: `Hash` -> `Message`
Replace all instances of
`secp256k1::Message::from_slice(_).expect(_)` with
`secp256k1::Message::from(_)`.

Also adds an implementation of ThirtyTwoByteHash for
TapSighashHash.

Solves https://github.com/rust-bitcoin/rust-bitcoin/issues/824
2022-07-21 11:26:53 -05:00
Tobin C. Harding 21a1cc791c Use pub(crate) for macros instead of macro_use
For internal macros used only in this crate we do not need to use
`macro_use` and pollute the top level namespace now that we have edition
2018. We can add a `pub(crate) use` statement to each and then path
imports work for the macros like normal types.
2022-07-20 11:25:54 +10:00
Tobin C. Harding 23ee0930c7 Remove extern crate
Now we have edition 2018 we do not need to use `macro_use` or `extern
crate`; `pub use` works with macros. Notable exceptions are `alloc` and
`test`. Also leave the serde rename because touching it opens a can of
worms.
2022-07-20 11:25:54 +10:00
Tobin C. Harding da8b1b5439 Remove unused extern crate test
Recently we removed the "unstable" feature, I missed the duplicate
`extern crate test` when doing so :(

Since we no longer have the "unstable" feature this line of code is
never compiled in.

Remove the unused ``extern crate test`, we have the correct line further
up the file `#[cfg(bench)] extern crate test;`.
2022-07-20 11:24:33 +10:00
Tobin C. Harding 01a8cc6848 Remove extern crate bitcoin_hashes
Now we have edition 2018 we do not need to use `macro_use` or `extern
crate`; `pub use` works with macros.

Remove the extern crate statement and replace it with a pub use
statement. Requires fixing up various imports statements and also
requires importing `sha256t_hash_newtype` macro directly instead of
using a qualified path to it.
2022-07-20 11:23:59 +10:00
Tobin C. Harding ee9a3ec6a1 Enable formatter for "src"
Remove the ignore for the "src" directory, this enables the formatter
for all source files in the `src/` directory.
2022-07-19 13:43:12 +10:00
Tobin C. Harding 743b197124 Add use for Unexpected
In preparation for running the formatter on `src/` and a function local
use statement for `$crate::serde:🇩🇪:Unexpected`, this shortens the
line of code that uses this type preventing the formatter for later
munging that line.
2022-07-19 13:43:12 +10:00
Tobin C. Harding fd217e72c3 Use f instead of formatter
The local variable `formatter` can be shortened to `f` with no loss of
clarity since it is so common.

Done in preparation for running `rustfmt` on `src`.
2022-07-19 13:43:12 +10:00
Tobin C. Harding 7b50a96ade Do not format prelude module
In preparation for running the formatter on all source files at the root
of the crate; skip formatting `prelude` module because we use
unconventional import statements so they to save writing a million
compiler attributes.
2022-07-19 13:43:12 +10:00
Tobin C. Harding 01471f7e65 Shield hash_newtypes from rustfmt
In preparation for running the formatter on root level modules and a
submodule that holds all the macro calls in `hash_types` so we can
configure rustfmt to skip formatting them.
2022-07-19 13:43:12 +10:00
Tobin C. Harding 65d19d9044 Refactor compile_error message
In preparation for enabling rustfmt on `lib.rs` refactor the
`compile_error` call so that the formatter does not touch it.
2022-07-19 13:43:12 +10:00
Andrew Poelstra 0c22359618
Merge rust-bitcoin/rust-bitcoin#1001: Remove leading colons
73bc2bb058 Remove leading colons from ::core::cmp::Ordering (Tobin C. Harding)
bffe0e840d Remove _most_ leading double colons (Tobin C. Harding)

Pull request description:

  Leading double colons are a relic of edition 2015. Attempt to remove _all_ leading double colons (assuming I didn't miss any).

  - Patch 1 is done mechanically so it can be repeated by reviewers, just search-and-replace ' ::' with '::' (note the leading space).
  - Patch 2 does a single other instance of leading `::`

ACKs for top commit:
  apoelstra:
    ACK 73bc2bb058
  sanket1729:
    utACK 73bc2bb058.

Tree-SHA512: 8f7aafdda1aed5b69dcc83f544e65085dfec6590765839f0a6f259b99872805d1f00602fd9deac05c80a5cac3bc222d454dde0117dff4484e5cd34ea930fdfa1
2022-07-19 01:39:04 +00:00