Commit Graph

2532 Commits

Author SHA1 Message Date
Tobin C. Harding cb9893c4a9 Add Target and Difficulty types
Currently we use the `Uint256` type to represent two proof of work
integers, namely target and difficulty (work).

It would be nice to not have a public integer type that is not fully
implemented (i.e., does not implement arithmetic etc as do integer types
in stdlib). Instead of implementing all the stdlib functions we can
instead add two new wrapper types, since these are not general purpose
integers they do not need to implement anything we do not need to use.

- Add a `pow` module.
- Put a modified version of `Uint256` to `pow`.
- Add two new wrapper types `Target` and `Difficulty`.
- Only implement methods that we use on each type.

Note this patch does not remove the original `Uint256`, that will be
done as a separate patch.
2022-09-28 04:16:59 +10:00
Andrew Poelstra 7228d1fc14
Merge rust-bitcoin/rust-bitcoin#1299: Fix clippy warnings
f5412e2aa2 Fix clippy warnings (Tobin C. Harding)

Pull request description:

  Clippy recently upgraded and a few two new warnings types popped up in our codebase, fix them both in a single patch so CI passes for all commits.

  1. Remove unneeded explicit borrow
  2. Use `if let Some` instead of pattern match

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

Tree-SHA512: 1faeb6173061e28a1acfe1a37a669982abbd832b327448e31648c447a7d043841edf30349700ff9da9dd330cfa6d497d188534daab825069e4489653e25987ca
2022-09-26 19:18:25 +00:00
Tobin C. Harding f5412e2aa2 Fix clippy warnings
Clippy recently upgraded and a few two new warnings types popped up in
our codebase, fix them both in a single patch so CI passes for all
commits.

1. Remove unneeded explicit borrow
2. Use `if let Some` instead of pattern match
2022-09-26 17:00:12 +10:00
Andrew Poelstra 3b05c7ffef
Merge rust-bitcoin/rust-bitcoin#1259: Move/re-name the `util::misc` module
e24c91e9ca sign_message: Run cargo fmt (Tobin C. Harding)
041d6a8097 Move and deprecate script_find_and_remove (Tobin C. Harding)

Pull request description:

  Done as part of [flattening util](https://github.com/rust-bitcoin/rust-bitcoin/issues/639).

  Move some code out of `misc` then re-name the module to `signature` and move it to the crate root.

  - Patch 1: Move a single public function, needs review that destination module is ok. I did consider re-naming the function to remove `script_` prefix but decided to leave it as is.
  - Patch 2: Re-names `misc` -> `signature` and puts it in the crate root
  - Patch 3: Runs the formatter on `signature` module

  All changes include deprecated re-exports.

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

Tree-SHA512: 37efc69595cbacd75c27f8fa6edd6bc168c04f1cdd230b49ab97f8a07e5b25ea87c00de017b315987bfe84d1b652a2c301c8f0132e4da988af1d15b687b47333
2022-09-24 13:05:33 +00:00
Andrew Poelstra 6101d8d31a
Merge rust-bitcoin/rust-bitcoin#1277: Try to fix up sighash export mess
2001f44e46 Try to fix up sighash export mess (Tobin C. Harding)

Pull request description:

  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.

ACKs for top commit:
  apoelstra:
    ACK 2001f44e46
  Kixunil:
    ACK 2001f44e46

Tree-SHA512: 42a08bc15bacd4cf7c3fec002ddb29afe5b1be3c4eb74fbd8c63a9333c0d45cbc8493027532f5db6a3930d49b1e83048826371e0ed7d4ac3dc611e5885540bce
2022-09-24 13:04:42 +00:00
Andrew Poelstra b1869803bf
Merge rust-bitcoin/rust-bitcoin#1208: Move bip32 module to crate root
8bed2ddffe Run formmater on bip32 (Tobin C. Harding)
34113c9558 Move bip32 module to crate root (Tobin C. Harding)

Pull request description:

  We are attempting to flatten the `util` module.

  Move the `bip32` module to the crate root out of `util`.

  Currently `src/util/` is ignored by the formatter so this move requires `bip32` module to be formatted. Formatting is done as a separate patch so reviewers can run `cargo +nightly fmt` and compare the diffs if so desired.

ACKs for top commit:
  apoelstra:
    ACK 8bed2ddffe
  Kixunil:
    ACK 8bed2ddffe

Tree-SHA512: dadea31be0459fd10e71927bd21dc44b59428f695a6df7093052ca7257b6590d5dd5b1343a89869ac9f4d7805dbca7558b475048ea9387c36265f14246cc6852
2022-09-21 16:46:05 +00:00
Andrew Poelstra 241216dee8
Merge rust-bitcoin/rust-bitcoin#1290: internals: Run formatter
ee19a1633d internals: Run formatter (Tobin C. Harding)

Pull request description:

  Add one `rustfmt::skip` statement and run `cargo +nightly fmt`.

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

Tree-SHA512: 524ff2cda383c95a086f4b2e9da443bf0202fc21f71024e6230d64ad57098ab304402dd12c9e4d831b3ef5c153f45e916ae4c928107ac9a847fba65354365a98
2022-09-20 17:21:01 +00:00
Andrew Poelstra a0899eb8e4
Merge rust-bitcoin/rust-bitcoin#1258: Add API method `absolute::LockTime::is_satisfied_by_lock`
8aa94bd0b2 Improve docs on is_implied_by (Tobin C. Harding)
b8721bf244 Add method relative::LockTime::is_implied_by (Tobin C. Harding)
d5492b8a25 Add absolute::LockTime::is_implied_by method (Tobin C. Harding)
98cbdb5a5c Increment lock value (Tobin C. Harding)

Pull request description:

  Patch 1 is a docs improvement.

  Patch 2 commit log:

  When implementing the absolute lock time API we decided on _not_
  supporting checking lock satisfaction with another lock, instead we
  provided a pattern in the docs for doing so. Fast forward a months and
  I, the primary author, then forgot to use the correct pattern when using
  the API in `rust-miniscript` - this is a sure sign that the API is too
  hard to use. In this time we worked on the relative lock API and came up
  with a `is_satisfied_by_lock` method - this is identical to the required
  use case in the absolute lock time module.

  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`).

ACKs for top commit:
  Kixunil:
    ACK 8aa94bd0b2
  apoelstra:
    ACK 8aa94bd0b2

Tree-SHA512: 5c7efa1727a846248783c9e6044bf8b0a7550d298ca1b5d3274ef325cf82efa33392ad14ef7e3e9aa91423ba56e8a3e7f4a38a966be38f673dccefd46465ad51
2022-09-20 17:19:49 +00:00
Andrew Poelstra b309f41076
Merge rust-bitcoin/rust-bitcoin#1291: Remove `user_enum` macro
f429c22599 Remove user_enum macro (Tobin C. Harding)
ad29084582 Add Network serde roundtrip test (Tobin C. Harding)

Pull request description:

  Remove the `user_enum` macro because it is only used once and is unnecessarily complicated.

  Patch 1: Add a preparatory unit test to make sure patch 2 maintains the current serde logic.
  Patch 2: Simplify `Network` by removing `user_enum`

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

Tree-SHA512: 770ee0aa82be711ed11bdfda338de8d13071743cdc8d7e3e1252a6759dfdfa2be6ff1d8cd286acef75dc5a5d73a6bc5f565b02cb20d4b549e0714cef5d7c1973
2022-09-20 14:48:37 +00:00
Andrew Poelstra 433952d53a
Merge rust-bitcoin/rust-bitcoin#1279: Add fuzz test for PrefilledTransaction
b79c178ea8 Add fuzz test for PrefilledTransaction (Tobin Harding)

Pull request description:

  Add a simple deserialization fuzz test for `PrefilledTransaction`.

  Fixes: #460 (I think, I'm not sure if any of the other types need fuzzing?)

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

Tree-SHA512: 3e5cbda6b17c36f414bce05b562b5648d82433b185853e6c8aa33ec491b58e527626eb09caca2a988120329efd92dfd3aaad60ef99746d6ac41555160efeb9d6
2022-09-20 14:07:05 +00:00
Tobin C. Harding f429c22599 Remove user_enum macro
The `user_enum` macro is only used a single time. The macro includes
custom serde logic which can be trivially derived instead.

Remove the `user_enum` macro and just implement `Network` the old
fashioned way. Doing so simplifies the code.
2022-09-20 16:53:38 +10:00
Tobin C. Harding ad29084582 Add Network serde roundtrip test
In preparation for patching the `Network` serde impls; add a roundtrip
test for `serde` (de)serializing  the `Network` type.
2022-09-20 15:29:55 +10:00
Tobin C. Harding ee19a1633d internals: Run formatter
Add one `rustfmt::skip` statement and run `cargo +nightly fmt`.
2022-09-20 14:24:47 +10:00
Tobin C. Harding 8bed2ddffe Run formmater on bip32
Run the formmater on the newly moved `bip32` module. No changes other
than those introduced by `cargo +nightly fmt`.
2022-09-20 14:22:01 +10:00
Tobin C. Harding 34113c9558 Move bip32 module to crate root
We are attempting to flatten the `util` module; move the `bip32` module
to the crate root out of `util`.
Currently `src/util/` is ignored by the formatter, this patch does not
do formatting, will be done later.
2022-09-20 14:21:11 +10:00
Tobin C. Harding 8aa94bd0b2 Improve docs on is_implied_by
The lock time methods are a source of endless confusion; make an attempt
at improving further the documentation on the two `is_implied_by`
methods (one on absolute lock time and one on relative).
2022-09-20 08:41:12 +10:00
Tobin C. Harding b8721bf244 Add method relative::LockTime::is_implied_by
As we just did for `absolute::LockTime` add a method `is_implied_by` and
deprecate `is_satisfied_by_lock`.

Reasoning: it is odd to think of a lock satisfying another lock but it
is clear to see that satisfaction of one lock can imply satisfaction of
another.
2022-09-20 08:40:35 +10:00
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