Commit Graph

3615 Commits

Author SHA1 Message Date
Tobin C. Harding 2001f44e46 Try to fix up sighash export mess
Recently we moved a few types from `transaction` to `sighash`, while
doing so I erroneously annotated code with the `deprecated` attribute
hoping it would give downstream users a gentle upgrade experience. It
turns out `deprecated` only works on functions.

During that same work, we re-exported from the crate root a bunch of
types from the `sighash` module that probably should not have been
re-exported. We are currently trying to create a nice clean API surface,
in an effort to move in the right direction we should remove the
re-exports and just re-export the `sighash` module.

Try to clean up the sighash export mess by doing:

- Remove the re-exports from the `transaction` module
- Remove crate level re-exports of `sighash` module types
- Re-export `sighash` module

Note, this patch is a breaking API change, justified by the fact that
there is no good way to gently lead downstream when moving types since
types cannot be deprecated with the `deprecated` attribute.
2022-09-19 16:46:02 +10:00
Tobin C. Harding e24c91e9ca sign_message: Run cargo fmt
We just renamed and moved the `util::misc` module to
`crate::sign_message`, doing so prevents `rustfmt` from ignoring it.

run `cargo +nighly fmt`.
2022-09-19 16:44:05 +10:00
Tobin C. Harding 041d6a8097 Move and deprecate script_find_and_remove
Done as part of flattening the `util` module.

We have a function in `util::misc` that operates on scripts, it is an
implementation of `FindAndDelete` from Bitcoin Core and is primarily
useful for supporting `CODESEPARATOR`, which we do not support.

Move the public `script_find_and_remove` function out of `util/misc.rs` and into
`util/mod.rs`, delete the testing and deprecate the function.
2022-09-19 16:44:04 +10:00
Andrew Poelstra aeacbe763d
Merge rust-bitcoin/rust-bitcoin#1286: Make `ChainHash::using_genesis_block` constant
92ef41b663 Make `ChainHash::using_genesis_block` constant (Jeffrey Czyz)

Pull request description:

  ChainHash::using_genesis_block can't be `const` if it uses a `match` expression prior to Rust 1.46. Use an array mapping to work around this limitation.

  Follow-up suggested in [#1283](https://github.com/rust-bitcoin/rust-bitcoin/pull/1283#issuecomment-1249418809).

ACKs for top commit:
  apoelstra:
    ACK 92ef41b663
  Kixunil:
    ACK 92ef41b663

Tree-SHA512: 71f95877c8e5335012ad0339e1f8691e3b33344fa02ecc24c3d4d728232cb7b0de62aec20eb1855b23eeccfbc2eeab920b21ee2243d95c6c89fa8ad5bc846975
2022-09-16 22:21:08 +00:00
Jeffrey Czyz 92ef41b663
Make `ChainHash::using_genesis_block` constant
ChainHash::using_genesis_block can't be `const` if it uses a `match`
expression prior to Rust 1.46. Use an array mapping to work around this
limitation.
2022-09-16 13:49:50 -05:00
Andrew Poelstra ccf9c3a172
Merge rust-bitcoin/rust-bitcoin#1285: Implement From for hash types
96dfcdf3b7 Implement From for hash types (Noah)

Pull request description:

  Reopening #1280 on the right branch + implemented `From` for references of types that were done in #1280.

ACKs for top commit:
  Kixunil:
    ACK 96dfcdf3b7
  apoelstra:
    ACK 96dfcdf3b7

Tree-SHA512: ad762032390f060b87cdd24033a5fc13a4c5297c55d7091ed89c5ca240be2f57998c0be084f40f9b04833920756b93a3ca4576a2ef944872354d1b3607734228
2022-09-16 18:05:09 +00:00
Andrew Poelstra 51df1c4024
Merge rust-bitcoin/rust-bitcoin#1282: Remove code deprecated last release
7a1aa2098a Remove code deprecated last release (Tobin C. Harding)

Pull request description:

  We give one release cycle for deprecating old code so as to make the upgrade path easier for downstream users.

  Remove code deprecated during the last release (v0.29.0).

  (Check out my diff stats - all red ;)

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

Tree-SHA512: d4b9c65d0d8a0aac31cf94d826e8a6084d4f5427a26da2ad5a3973c7f5931fa10695214dc602261e9079e1c06c6dc3f5b5dcdb8d20b5c39eaadd9a33d23746dd
2022-09-16 17:36:22 +00:00
Andrew Poelstra ba642daf54
Merge rust-bitcoin/rust-bitcoin#1283: Add constants to `ChainHash` for each `Network`
b1d85160ba Add constants to `ChainHash` for each `Network` (Jeffrey Czyz)

Pull request description:

  `ChainHash::using_genesis_block` can't be made `const` because it uses a `match` expression, which is only valid in Rust 1.46. Add individual constants as a workaround so that `ChainHash` can be used in `const` contexts.

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

Tree-SHA512: 808628e633be7db8fd3676edebefc998bba55c2434028b46873cff82fa5440b4f940904a2cb4cced23e1cabf7680234a434f823e89a13c73e52c81fd50ec312f
2022-09-16 13:22:19 +00:00
Noah 96dfcdf3b7 Implement From for hash types 2022-09-16 22:29:05 +10:00
Duncan Dean 1a89d5230c
examples: Add taproot-psbt workflow example
This example shows how to use the PSBT API for taproot transactions.
We have a simple BIP86-style spend and an example of an inheritance
timelock that can be spent either by the beneficiary via the script
path after a timelock, or via the key path by the benefactor so that
they can refresh the timelock at any time.
2022-09-16 09:00:27 +02:00
Tobin Harding b79c178ea8 Add fuzz test for PrefilledTransaction
Add a simple deserialization fuzz test for `PrefilledTransaction`.
2022-09-16 13:02:24 +10:00
Jeffrey Czyz b1d85160ba
Add constants to `ChainHash` for each `Network`
`ChainHash::using_genesis_block` can't be made `const` because it uses a
`match` expression, which is only valid in Rust 1.46. Add individual
constants as a workaround so that `ChainHash` can be used in `const`
contexts.
2022-09-15 20:03:57 -05:00
Tobin C. Harding 7a1aa2098a Remove code deprecated last release
We give one release cycle for deprecating old code so as to make the
upgrade path easier for downstream users.

Remove code deprecated during the last release (v0.29.0).
2022-09-16 08:08:53 +10:00
Andrew Poelstra 5e83c602fd
Merge rust-bitcoin/rust-bitcoin#1276: Fix deprecated v0.28.0
3f275f7f2b Remove code deprecated in v0.28.0 (Tobin C. Harding)
c4eb218cd0 schnorr:: Remove incorrect deprecated (Tobin C. Harding)

Pull request description:

  We have a bunch of things deprecated since v0.28.0, I believe we agreed to deprecate for two release cycles so this stuff can all be deleted now.

  - Patch one does the `schnorr` module; the deprecated attribute usage is just plain wrong (see https://github.com/rust-bitcoin/rust-bitcoin/discussions/1275). Also, in an attempt to make the API more ergonomic, patch one adds re-exports of secp types.

  - Patch 2 deletes all other code deprecated since v0.28.0

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

Tree-SHA512: 501d792c48830d28c9ad04335a56d75cf31e0bd8dc1f4e184d7d6906dbf2468369d809954709014ee5ec32ac330b56008d4be14d5f3cc89226032e642556e945
2022-09-15 13:38:01 +00:00
Andrew Poelstra f41ec20ee4
Merge rust-bitcoin/rust-bitcoin#1273: Redesign `hex::BufEncoder` to accept owned arrays
1bf885550e Redesign `hex::BufEncoder` to accept owned arrays (Martin Habovstiak)

Pull request description:

  Not being able to create an owned `BufEncoder` prevented returning it from functions which need to allocate the buffer on stack. Such is the case in WIP serde via consensus serialzation.

  This change refactors `OutBytes` to be unsized, adds an `AsOutBytes` trait and uses that one instead of `Into` to perform the conversion.

  Closes #1270

  This is meant as potentially mergeable demonstration. Interestingly, it was easier than I expected.

ACKs for top commit:
  tcharding:
    Except for the question about the `out_bytes` module, ACK 1bf885550e
  apoelstra:
    ACK 1bf885550e

Tree-SHA512: 39bc48e54ae0e66b988ba5ad6ea7ecbe03e5f4c71792df0f8e2b03aa2e97e2c0fac1cb03e84ecac12ec6f13649554b57e1000710c34c638d17d9bb575d0ac0a1
2022-09-15 13:17:36 +00:00
Tobin C. Harding 3f275f7f2b Remove code deprecated in v0.28.0
I believe we said we'd keep deprecated code around for two release
cycles so this code can  all be deleted now.
2022-09-15 13:29:02 +10:00
Tobin C. Harding c4eb218cd0 schnorr:: Remove incorrect deprecated
Currently we attempt to have deprecated key types in the `schnorr`
module. The `deprecated` attribute does not work on types, only on
functions.

Remove the broken deprecation logic and re-export key types instead of
using type alias', this allows a bunch of qualified paths to be
simplified also.

Add `pub use` re-exports of all secp256k1 types that are part of the
public API of the `schnorr` module. This makes the module more ergonomic
to use.
2022-09-15 12:34:51 +10:00
Andrew Poelstra 836063dbad
Merge rust-bitcoin/rust-bitcoin#1269: Hex fixups
6b96050d1f Document `cfg` (Martin Habovstiak)
6fc4860813 Activate `rust_v_1_46` when on high-enough rustc (Martin Habovstiak)

Pull request description:

  This fixes minor mistakes that I made in previous PR.

ACKs for top commit:
  apoelstra:
    ACK 6b96050d1f
  tcharding:
    tACK 6b96050d1f

Tree-SHA512: a926d1b642058538c3a61760593c387a9316050d7468c3eefd18c7a6c1109e736032ac49704b16f418dc0649fe110d48e188cb6b267f002ac60803f0f5a9fedb
2022-09-14 23:56:03 +00:00
Tobin C. Harding d5492b8a25 Add absolute::LockTime::is_implied_by method
When filtering it is necessary to check two lock times against each
other, we currently provide a patter for doing so in the docs but we can
do better.

It was observed that satisfaction of a lock time 'implies' satisfaction
of another lock time if the lock times are the same unit and one locks
value is less than the others - this is exactly the code pattern we
suggest for filtering.

Add a method on `absolute::LockTime` for checking a lock against another
lock, add rustdoc comment explaining the methods function in filtering
prospective lock time values (how we use it in `rust-miniscript`).
2022-09-15 09:21:13 +10:00
Martin Habovstiak 1bf885550e Redesign `hex::BufEncoder` to accept owned arrays
Not being able to create an owned `BufEncoder` prevented returning it
from functions which need to allocate the buffer on stack. Such is the
case in WIP serde via consensus serialzation.

This change refactors `OutBytes` to be unsized, adds an `AsOutBytes`
trait and uses that one instead of `Into` to perform the conversion.
2022-09-14 19:41:58 +02:00
Andrew Poelstra 779668879d
Merge rust-bitcoin/rust-bitcoin#1125: Update docs on rustfmt
b7eea6cb26 Update docs on rustfmt (Tobin C. Harding)

Pull request description:

  We have introduced `rustfmt` but forgot to update the docs section about
  it. Since a large portion of the codebase is currently ignored by our
  `rustfmt` configuration, point out that `rusntfmt` is work in progress.

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

Tree-SHA512: c3a01e38e9787f7554847c657de8d2aeb512f237f68e97973ffa04e92decd282126abf16edb369c13dbeb9eed3587e20dbfb3ab77e06551a006a7aa2c70a71ad
2022-09-14 13:34:49 +00:00
Andrew Poelstra 3b59b3b266
Merge rust-bitcoin/rust-bitcoin#1267: Fix serde versions
4d54b161e7 Fix serde versions (Martin Habovstiak)

Pull request description:

  `Cargo.toml` claimed that this crate works with very old versions of `serde` which wasn't the case. This commit changes the versions to minimal known-to-work values.

  Adding `trivial` tag because the text change is trivial even though figuring it out wasn't. :)
  If you manually decrease any of the versions by 1 (in both `Cargo.toml` and `Cargo.lock`) the build should fail.

ACKs for top commit:
  apoelstra:
    ACK 4d54b161e7
  tcharding:
    utACK 4d54b161e7

Tree-SHA512: 81ff3e9612aae4f3279d4dcb76ef4942d5047e7ddff84741e0ca269ee69a7631d062f6b5e6e43094e5d5f3e0b8799ddc224b716f630c9f0161185ed81fa0e96a
2022-09-14 12:50:16 +00:00
Martin Habovstiak 6b96050d1f Document `cfg`
This adds previously-forgotten documentation of items only available on
`alloc` feature.
2022-09-14 09:06:25 +02:00
Martin Habovstiak 6fc4860813 Activate `rust_v_1_46` when on high-enough rustc
This adds a build script that automatically activates the cfg if the
version is sufficient. We don't make API changes here, just improve
debugging by enabling `track_caller`.
2022-09-14 08:55:02 +02:00
Andrew Poelstra 720af690fc
Merge rust-bitcoin/rust-bitcoin#1268: Implement basic support for fast hex encoding
040b14ef1a Implement basic support for fast hex encoding (Martin Habovstiak)

Pull request description:

  There's a `hex` module in `bitcoin_hashes` which is a bit out of place and not very fast - it passes each *digit* through dynamic dispatch not only adding overhead but also not allowing `String` to make better allocations.

  This change adds basic support for hex encoding using a stack-allocated buffer which minimizes the overhead of dynamic dispatch. It also provides a new `DisplayHex` trait designed to replace `ToHex` found in `bitcoin_hashes`.

ACKs for top commit:
  apoelstra:
    ACK 040b14ef1a
  tcharding:
    ACK 040b14ef1a

Tree-SHA512: ffb2f46d5e0aa97c73a14067bdde92b7577651de1daee89fcb38b6e464b78a6ce40d39ac6bd573a9eec7274aa4e112ebc537604dca2c0d38da7d647cb548482a
2022-09-14 01:37:34 +00:00
Tobin C. Harding 98cbdb5a5c Increment lock value
Currently in one of the rustdoc examples showing lock satisfaction we
use two locks with the same value, this obfuscates which lock is doing
the satisfying and which lock is being satisfied.

Increment the value in one of the locks so it is obvious which lock is
which.
2022-09-14 10:24:22 +10:00
Martin Habovstiak 040b14ef1a Implement basic support for fast hex encoding
There's a `hex` module in `bitcoin_hashes` which is a bit out of place
and not very fast - it passes each *digit* through dynamic dispatch not
only adding overhead but also not allowing `String` to make better
allocations.

This change adds basic support for hex encoding using a stack-allocated
buffer which minimizes the overhead of dynamic dispatch. It also
provides a new `DisplayHex` trait designed to replace `ToHex` found in
`bitcoin_hashes`.
2022-09-13 22:17:31 +02:00
Martin Habovstiak 4d54b161e7 Fix serde versions
`Cargo.toml` claimed that this crate works with very old versions of
`serde` which wasn't the case. This commit changes the versions to
minimal known-to-work values.
2022-09-13 16:19:07 +02:00
Andrew Poelstra 4e85cd0065
Merge rust-bitcoin/rust-bitcoin#1239: Introduce `bitcoin-internals` crate
834bbf461f Introduce bitcoin-internals crate (Tobin C. Harding)
12c5fb042e Refactor import statements (Tobin C. Harding)
022730bd8d Add a workspace to the top level directory. (Tobin C. Harding)
a59e0544ec Remove trailing whitespace (Tobin C. Harding)

Pull request description:

  Add a new crate `bitcoin-internals` to be used for internal code needed by multiple soon-to-be-created crates. Add the `write_err` macro to `bitcoin-internals`, nothing else.

  ### Notes

  This PR uses a `path` dependency which means `rust-bitcoin` cannot be released in its current state, will need to be changed once we release the `bitcoin-internals` crate on `crates.io`.

  Please note also the testing strategy imposed by this PR - each new crate to have its own `contrib/test.sh` run from the top level `test.sh`.

  Please excuse the mid-series import statement refactor, I had a moment of weakness and got uncontrollably triggered by the messy imports in one file, I managed to keep myself together on the others :)

ACKs for top commit:
  apoelstra:
    ACK 834bbf461f
  Kixunil:
    ACK 834bbf461f

Tree-SHA512: 327cced077b6d8bf6b4407a930ff8c0a6a8488256453cab168fc0d172ebb03976f8e64ff26a9b178f856c2ffa4342b5ef1a2c6eabcadf9bfa3cf787157a1d1ec
2022-09-13 13:24:27 +00:00
Tobin C. Harding 834bbf461f Introduce bitcoin-internals crate
Add a new crate `bitcoin-internals` to be used for internal code needed
by multiple soon-to-be-created crates.

Add the `write_err` macro to `bitcoin-internals`, nothing else.

This patch uses a `path` dependency which means `rust-bitcoin` cannot be
released in its current state, will need to be changed once we release
the `bitcoin-internals` crate on `crates.io`.
2022-09-13 08:59:57 +10:00
Tobin C. Harding 12c5fb042e Refactor import statements
Refactor import statements to adhere to core/other/crate with white
space between groups.

Refactor only, no logic changes.
2022-09-13 08:44:57 +10:00
Tobin C. Harding 022730bd8d Add a workspace to the top level directory.
Create a directory `bitcoin` and move into it the following as is with
no code changes:

- src
- Cargo.toml
- contrib
- test_data
- examples

Then do:

- Add a workspace to the repository root directory.
- Add the newly created `bitcoin` crate to the workspace.
- Exclude `fuzz` and `embedded` crates from the workspace.
- Add a contrib/test.sh script that runs contrib/test.sh in each
  sub-crate
- Fix the bitcoin/contrib/test.sh script
2022-09-13 08:44:57 +10:00
Tobin C. Harding a59e0544ec Remove trailing whitespace
Whitespace only, no other changes.
2022-09-13 08:44:57 +10:00
Andrew Poelstra 29bbe4042f
Merge rust-bitcoin/rust-bitcoin#1183: Use `Borrow` trait bound for bip158 `Iterator::Item`
d8116de56a Use Borrow trait bound for bip158 Iterator::Item (Tobin C. Harding)

Pull request description:

  Currently the generic iterators in `bip158` return items of type slice reference. We can make the code cleaner (no explicit lifetimes) and more general if the generic iterator argument iterates over `Borrow<[u8]>`

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

Tree-SHA512: ce8111130d70a8c6f8d97f2c3f6c07bffd534461fdb599185129fc3cc4fc6c209e3187444082e47b7b55e4ec71fd8652fb2b86d2037573b99560ffd094175dc1
2022-09-12 20:47:29 +00:00
Andrew Poelstra 0f5a585cb9
Merge rust-bitcoin/rust-bitcoin#1255: Add a comment to delineate test_macros re-export
a9d1e08833 Add a comment to delineate test_macros re-export (Tobin C. Harding)

Pull request description:

  The formatter removes an empty line that is clearly better to have. Add a rustdoc comment to at least delineate the line a bit.

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

Tree-SHA512: 0d962200a9d359825f3db50c2fcf3cf254f4f2ae55148d4a6524062bad8536160ae5f17256d4a86d746e66e5892e969b8efc14372f046ab7b4ce2950ce4bd25b
2022-09-12 20:38:20 +00:00
Tobin C. Harding d8116de56a Use Borrow trait bound for bip158 Iterator::Item
Currently the generic iterators in `bip158` return items of type slice
reference. We can make the code cleaner (no explicit lifetimes) and more
general if the generic iterator argument iterates over `Borrow<[u8]>`.

Note, includes adding `Borrow` to `crate::prelude`.
2022-09-12 14:22:10 +10:00
Tobin C. Harding a9d1e08833 Add a comment to delineate test_macros re-export
The formatter removes an empty line that is clearly better to have. Add
a rustdoc comment to at least delineate the line a bit.
2022-09-12 09:04:27 +10:00
sanket1729 3cbab2870c
Merge rust-bitcoin/rust-bitcoin#1250: Simplify `PublicKey` serialization code
b9a512330a Simplify `PublicKey` serialization code (Martin Habovstiak)

Pull request description:

  There were a bunch of `if self.serialized` expressions repeated in the code. This change simplifies it by putting the `if` in a function that calls a closure with a slice containing the serialized bytes.

ACKs for top commit:
  apoelstra:
    ACK b9a512330a
  sanket1729:
    utACK b9a512330a. I don't have strong preferences on naming. `serialize_and_call` sounds better because so far I have only seen `with_*` used with constructors.
  tcharding:
    ACK b9a512330a

Tree-SHA512: 5d90a73f87fa36bd45a5765542ec24994d601d32ad6529fff5d5140ded2b86eb40e00bfba4955e94d2c468983e3e7683ca5f8ece7a205d9b9944334a19b06015
2022-09-11 15:34:57 -07:00
Andrew Poelstra 4b662f8c57
Merge rust-bitcoin/rust-bitcoin#1248: implement `From<PublicKey>` for `PubkeyHash`
81f81caa04 implement `From<PublicKey>` for `PubkeyHash` (Noah Lanson)

Pull request description:

  Part of #1245.

  Do we also want a method on `PubkeyHash` or is the `From` impl sufficient?

ACKs for top commit:
  tcharding:
    ACK 81f81caa04
  Kixunil:
    ACK 81f81caa04
  sanket1729:
    ACK 81f81caa04
  apoelstra:
    ACK 81f81caa04

Tree-SHA512: 760ea2991de60fd72d0aae18d375024f001f331d8a57b1e6e39b5933efa3a5af379effecb89cde0defb960b25c997b417fc126248589953655fb83db8b8dd608
2022-09-09 21:02:40 +00:00
Noah Lanson 81f81caa04 implement `From<PublicKey>` for `PubkeyHash` 2022-09-09 11:02:05 +10:00
Andrew Poelstra 816d24e385
Merge rust-bitcoin/rust-bitcoin#1136: Impl std error using macro
86218ad240 Use macro to implement `std::erorr::Error` (Martin Habovstiak)

Pull request description:

  There was a bunch of manual implemntations that can be converted to
  macro call. This commit replaces them except for enums because those are
  currently not supported by the macro and we want to protect against
  forgetting to handle newly added variants.

  Depends on #1129 and is **not** urgent for the next release.

ACKs for top commit:
  apoelstra:
    ACK 86218ad240
  tcharding:
    ACK 86218ad240

Tree-SHA512: a4ca91e023d66b5ad9408004b201cfe4cea85efb5a6e7f2241367934a954659c9196561295a491d2b2ed15c1a69c0ffb17a297d710cec4ce1d0f1ec8c12492e6
2022-09-09 00:32:56 +00:00
Andrew Poelstra 3ebf3d57b4
Merge rust-bitcoin/rust-bitcoin#1252: Remove unused consensus encoding error variants
57c4283220 Remove unused consensus encoding error variants (Martin Habovstiak)

Pull request description:

  The error variants `UnexpectedNetworkMagic` and `UnknownNetworkMagic` were not only duplicated but also completely unused. This removes both of them.

ACKs for top commit:
  tcharding:
    ACK 57c4283220
  apoelstra:
    ACK 57c4283220

Tree-SHA512: 3e686f54dee038500712e6960aeb3a633d95a6302f782b9b756a8a32f6b9eff805a7b63f2190c57ed806d6dfd7585b2f335bd8d5c5bfbe2c1b27e4761fd96625
2022-09-09 00:24:33 +00:00
Andrew Poelstra 7056490de2
Merge rust-bitcoin/rust-bitcoin#1249: Run cargo fmt
0e425acad3 Run cargo fmt (Tobin C. Harding)

Pull request description:

  A few trivial formatting errors have snuck into the codebase.

  Run `cargo +nightly fmt`

  FTR we have an open PR to run formatter in CI: https://github.com/rust-bitcoin/rust-bitcoin/pull/1111

ACKs for top commit:
  Kixunil:
    ACK 0e425acad3
  apoelstra:
    ACK 0e425acad3

Tree-SHA512: b42ba57fab25baf6ed7cfb3c207389df09d192840c591178fb3f43f1f0ff3e9381e1416c976fa4da8104dd3c18a32f54338ed98b997a31aba5c37a1b6c261210
2022-09-09 00:17:29 +00:00
Andrew Poelstra 94a4c51c10
Merge rust-bitcoin/rust-bitcoin#1244: BIP 34: Check last minimal encoding accoriding of heights
840520042a BIP 34: Check last minimal encoding of encoded heights in coinbase tx (sanket1729)
fd3e01d6e3 Fix minimality of reading/writing CScriptNums (sanket1729)

Pull request description:

  See: https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki

  The BIP was updated with commit: 08844fd6ef

  Found while reviewing #1240

  Also cleanly deals with negative heights as errors.

ACKs for top commit:
  apoelstra:
    ACK 840520042a
  tcharding:
    ACK 840520042a

Tree-SHA512: 85eb1fbb428fb600f864390c3ac2e8e62efc1fc4b03b842e384ddb4ed9273c66d2274d0de219f1c7a6bad7b02bd8723f8f257c864577614df674b44bfc02010a
2022-09-08 23:23:02 +00:00
Martin Habovstiak 86218ad240 Use macro to implement `std::erorr::Error`
There was a bunch of manual implemntations that can be converted to
macro call. This commit replaces them except for enums because those are
currently not supported by the macro and we want to protect against
forgetting to handle newly added variants.
2022-09-08 21:36:49 +02:00
Martin Habovstiak 57c4283220 Remove unused consensus encoding error variants
The error variants `UnexpectedNetworkMagic` and `UnknownNetworkMagic`
were not only duplicated but also completely unused. This removes both
of them.
2022-09-08 16:58:46 +02:00
Martin Habovstiak b9a512330a Simplify `PublicKey` serialization code
There were a bunch of `if self.serialized` expressions repeated in the
code. This change simplifies it by putting the `if` in a function that
calls a closure with a slice containing the serialized bytes.
2022-09-08 10:04:20 +02:00
Tobin C. Harding 0e425acad3 Run cargo fmt
A few trivial formatting errors have snuck into the codebase.

Run `cargo +nightly fmt`
2022-09-08 15:48:21 +10:00
Andrew Poelstra ed9012c25c
Merge rust-bitcoin/rust-bitcoin#1240: Add new type for block version
947dcf5675 Add new type for block version (Noah Lanson)

Pull request description:

  Added new type `BlockVersion` for block header version field with inspiration from [Kixunil 's comment on #1215.](https://github.com/rust-bitcoin/rust-bitcoin/issues/1215#issue-1352273532)

  I previously knew very little about the upgrading process so it was fun learning about it in writing this PR, however that also means it's probably not perfect yet, especially around BIP-9 signalling (fingers crossed it's all correct).

  API for the type is kept simple but happy to change it up to add more functionality.

ACKs for top commit:
  sanket1729:
    ACK 947dcf5675.
  apoelstra:
    ACK 947dcf5675

Tree-SHA512: 1ce9720d50f0ab50e08308e56bdc047567b64dbe446dcdcd9db2f14f5c9d4603a7b9d58a5fa38b769581789fdbc4e1ef6083be32b9b59cef59714e07b2f8be5f
2022-09-07 13:24:38 +00:00
Andrew Poelstra f048cd9132
Merge rust-bitcoin/rust-bitcoin#1246: Use correct path for bip158 in rustdoc
d780ea3c48 Use correct path for bip158 in rustdoc (Tobin C. Harding)

Pull request description:

  Recently we moved the `bip158` module but I missed one of the import statements in rustdoc - if only I could work out how to lint rustdocs.

ACKs for top commit:
  apoelstra:
    ACK d780ea3c48
  sanket1729:
    ACK d780ea3c48

Tree-SHA512: 2fcb7f1ad8883d17370b37786be34597ae6ab0a858d4636db831d80e779888307bc99cf247449ae285e43719cf955ea3bb9ebb3f045aafe644c815c5f5e21724
2022-09-07 13:21:03 +00:00