Commit Graph

2226 Commits

Author SHA1 Message Date
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
Tobin C. Harding d780ea3c48 Use correct path for bip158 in rustdoc
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.
2022-09-07 10:47:20 +10:00
sanket1729 840520042a BIP 34: Check last minimal encoding of encoded heights in coinbase tx
See: https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki
2022-09-06 14:14:44 -07:00
sanket1729 fd3e01d6e3 Fix minimality of reading/writing CScriptNums 2022-09-06 14:01:26 -07:00
Andrew Poelstra 501821404d
Merge rust-bitcoin/rust-bitcoin#1238: CI clean ups
37cd6503f1 ci: Remove TOOLCHAIN env var (Tobin C. Harding)
8eb6c23eaf ci: Remove inner quotes from shell variable (Tobin C. Harding)
58ede47ef1 ci: Use set -ex instead of /bin/sh -ex (Tobin C. Harding)
4c4846f82a Remove double blank line at EOF (Tobin C. Harding)

Pull request description:

  Clean up the CI script. These patches are part of #1225, are beneficial to have before that PR resolves, and are trivial.

ACKs for top commit:
  sanket1729:
    utACK 37cd6503f1
  apoelstra:
    ACK 37cd6503f1

Tree-SHA512: f6b3379c8a1be7a3519461faeed35e35560e4228bddb59ef28ab3fb3ef2679afabfaccfeaffd78adbb66879aed02c092f3d9d1d1eb3193c811067ee75e876732
2022-09-06 13:31:27 +00:00
Andrew Poelstra 2bb3552e4f
Merge rust-bitcoin/rust-bitcoin#1211: Move bip158 module to crate root
01161e66ee Run formmater on bip158 (Tobin C. Harding)
95393aadbc Move bip158 module to crate root (Tobin C. Harding)

Pull request description:

  We are attempting to flatten the `util` module.

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

  Currently `src/util/` is ignored by the formatter so this move requires `bip158` 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 01161e66ee
  sanket1729:
    ACK 01161e66ee

Tree-SHA512: 192279d8d1466aa939ecad1f7beae12c4c7b5067871f6f1297fc80094a4ab736de4c1ed82a0b1d9d8e1cdba15c0342b90722002a9ba02ab1eff901edbd0fb356
2022-09-06 13:19:03 +00:00
Noah Lanson 947dcf5675 Add new type for block version 2022-09-06 13:27:52 +10:00
Tobin C. Harding 37cd6503f1 ci: Remove TOOLCHAIN env var
Cargo already has an env var for controlling the toolchain, we should
use it instead of our current custom `TOOLCHAIn`.

While we are at it fix the missing `$` from variables (found by
`shellcheck`).

Use RUSTUP_TOOLCHAIN to allow control of the toolchain.
2022-09-05 10:48:47 +10:00
Tobin C. Harding 8eb6c23eaf ci: Remove inner quotes from shell variable
shellcheck emits:

 SC2027: The surrounding quotes actually unquote this. Remove or escape them.

Remove inner quotes from shell variable so the feature is correctly printed.
2022-09-05 10:48:47 +10:00
Tobin C. Harding 58ede47ef1 ci: Use set -ex instead of /bin/sh -ex
Setting `-ex` in the shebang makes it a little hard to see since folks
are used to glancing up and looking for `set -ex`. Both styles achieve
the same result, so this does not change the logic of the script.
2022-09-05 10:48:47 +10:00
Tobin C. Harding 4c4846f82a Remove double blank line at EOF
There should only be a single blank line at end of file.
2022-09-05 10:48:47 +10:00
Andrew Poelstra 1d8d04dd59
Merge rust-bitcoin/rust-bitcoin#1235: Correctly handle bicoinconsensus::Error
a013847bd3 Correctly handle bicoinconsensus::Error (Tobin C. Harding)

Pull request description:

  With the latest release of `rust-bitcoinconsensus` the
  `bicoinconsensus::Error` now implements `std::error::Error`.

  Correctly handle `bicoinconsensus::Error` by returning `Some(e)` and
  using `write_err` as is standard across the code base.

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

Tree-SHA512: d9ea4ce0b01277f7c6e2f1a8b877720dba111ecfbb5de7fe5bb35bf659f5c47ee4436f021f9293717000b4cc3ccfc5dc6a893e879aca4db12bb7570be8ccaee0
2022-09-02 14:31:49 +00:00
Tobin C. Harding a013847bd3 Correctly handle bicoinconsensus::Error
With the latest release of `rust-bitcoinconsensus` the
`bicoinconsensus::Error` now implements `std::error::Error`.

Correctly handle `bicoinconsensus::Error` by returning `Some(e)` and
using `write_err` as is standard across the code base.
2022-09-02 13:19:02 +10:00
Andrew Poelstra 556f85d993
Merge rust-bitcoin/rust-bitcoin#1227: Remove some easy todo's
fea908c8af Add private::Sealed trait bound to SerdeAmount (Tobin C. Harding)
08e4b28dd0 Add integer serialization tests (Tobin C. Harding)
a8f9e8ad96 Add serde roundtrip tests (Tobin C. Harding)

Pull request description:

  Remove some easy todos from the code. The three patches are unrelated except each removes a single `TODO`. Patch 1 and 2 are unit tests and trivial to review. Patch 3 requires more thought, it was't clear exactly why it was left as a todo and not done at the time.

  cc JeremyRubin for patch 3 as the original author of that code.

ACKs for top commit:
  apoelstra:
    utACK fea908c8af

Tree-SHA512: 70a041820fe52bc3d70cc110c16acfa86469fd8556793c4204671ddcb7457f336e57b43b0f03cb68d3c6b96217502f29f1628d1acbe7381a9e9d8d21c67759d2
2022-09-01 14:53:06 +00:00
Andrew Poelstra 7efe30c5e8
Merge rust-bitcoin/rust-bitcoin#1196: Add relative lock time type
da95c3a489 Add newtype `relative::LockTime` (Tobin C. Harding)
cbfa8cff4c Improve lock time docs (Tobin C. Harding)
9f7d934f5d Move the locktime module to absolute (Tobin C. Harding)

Pull request description:

  Patches 1 and 2 are preparation. Patch 3 adds a new `relative::LockTime` type.

  Please see https://github.com/rust-bitcoin/rust-miniscript/pull/455 for demo of use of the new API in miniscript.

  ### Some links to help during review
  - https://medium.com/summa-technology/bitcoins-time-locks-27e0c362d7a1
  - https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki
  - https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki

ACKs for top commit:
  apoelstra:
    ACK da95c3a489
  sanket1729:
    ACK da95c3a489. Left a minor nit

Tree-SHA512: 00137161eee354faa803f74dd33dbaaf58ced58cf54d334200be28e10281bb98cb72dff38b3205d1741b8d42100c3b8229e4cfa2155e46bb74b418b612c12dec
2022-09-01 14:51:25 +00:00
Tobin C. Harding fea908c8af Add private::Sealed trait bound to SerdeAmount
As suggested by the todo seal the `SerdeAmount` so users of the library
explicitly cannot implement it.

Its not obvious to me why this wasn't done at the time.

Remove the associated TODO from the code.
2022-09-01 16:53:33 +10:00
Tobin C. Harding 08e4b28dd0 Add integer serialization tests
Add some negative integer unit tests and remove the TODO.

Note, this is not really that necessary because we are going to move to
using the stdlib `to_le_bytes` methods so we don't really need any of
these test except to test that we are calling the correct be/le method.
They do no harm however.
2022-09-01 16:47:50 +10:00
Tobin C. Harding a8f9e8ad96 Add serde roundtrip tests
We have a TODO in the code to add serde roundtrip unit tests, seems
reasonable so do it and remove the TODO.
2022-09-01 16:08:12 +10:00
Andrew Poelstra 75949355a4
Merge rust-bitcoin/rust-bitcoin#1217: Add multithreading for the pmt_tests execution
f924e1451e Enhance pmt_tests execution time (hrouis)

Pull request description:

  An attempt to enhance pmt_tests execution time.
  fixes: https://github.com/rust-bitcoin/rust-bitcoin/issues/1214

  cargo test result :

  > test result: ok. 356 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 5.74s

ACKs for top commit:
  Kixunil:
    ACK f924e1451e
  RCasatta:
    ACK f924e1451e
  tcharding:
    ACK f924e1451e
  apoelstra:
    utACK f924e1451e

Tree-SHA512: d8341778aa7b9e09014d3392962a9bf844fe7870c158d835f667161d6da2e741ba42088c053979fd76154a89996aaa02f8dcb7c1705271d9dff8e10248931459
2022-09-01 00:07:23 +00:00
Andrew Poelstra d37fb99c96
Merge rust-bitcoin/rust-bitcoin#1191: Hex macros cleanup
43827a1e1c Hex macro clean up (Martin Habovstiak)
4dedf7d555 Remove duplicated `#[cfg(test)]` conditions (Martin Habovstiak)

Pull request description:

  Few cleanups of hex macros. Preparation for #1189

ACKs for top commit:
  apoelstra:
    ACK 43827a1e1c
  tcharding:
    ACK 43827a1e1c

Tree-SHA512: ba59b8bd1bc4cbf4914b000918f685edec18f58f9ea4cfbe918dad54b62767d34fdef2d2e4233ebdd66193cb7253c3ebc6f315a23e70a9cdd2316d96a0a9dce4
2022-08-31 23:39:24 +00:00
Andrew Poelstra 24b9b419e5
Merge rust-bitcoin/rust-bitcoin#1219: Revert "Temporarily disable fuzzing"
d25aba8ca0 fuzz: use travis-fuzz.sh in CI (Andrew Poelstra)
407cbca111 fuzz: remove mysteriously-not-necessary quotes from gh action script (Andrew Poelstra)
0a32525862 fuzz: disable features in honggfuzz (Andrew Poelstra)
c7910f4561 Revert "Temporarily disable fuzzing" (Andrew Poelstra)

Pull request description:

  This reverts commit 720ea29865.

  There is a new version of honggfuzz out. Maybe things work now.

ACKs for top commit:
  sanket1729:
    utACK d25aba8ca0
  tcharding:
    ACK d25aba8ca0

Tree-SHA512: d9d5cb89e5bcacfdd84bf293267ee558cffed4454908add9b6c4a172d3d06404564d1bb8c3f59f29a621369b901a9cdf31b8229b299320ac061f378a73bfa80c
2022-08-31 14:56:35 +00:00
hrouis f924e1451e Enhance pmt_tests execution time
pmt_tests with different tx counts were  executed in a single test, not taking advantage of the parallelism provided by unit tests.
A macro was added to define a unit test per transaction count.
2022-08-31 12:49:48 +02:00
Tobin C. Harding da95c3a489 Add newtype `relative::LockTime`
We recently added the `Sequence` type and we explicitly did not include
relative lock time logic.

Add a new module `relative` and new type `LockTime` to represent
relative lock times as defined by BIP 68.
2022-08-31 09:20:15 +10:00
Andrew Poelstra d25aba8ca0 fuzz: use travis-fuzz.sh in CI 2022-08-30 21:51:42 +00:00
Andrew Poelstra 407cbca111
fuzz: remove mysteriously-not-necessary quotes from gh action script 2022-08-30 20:42:28 +00:00
Andrew Poelstra 0a32525862
fuzz: disable features in honggfuzz 2022-08-30 20:42:28 +00:00
Andrew Poelstra c7910f4561
Revert "Temporarily disable fuzzing"
This reverts commit 720ea29865.
2022-08-30 20:42:28 +00:00
Martin Habovstiak 43827a1e1c Hex macro clean up
There were some duplicated hex macros in the `address` module as well as
several macros outputing specific types instead of working with any type
deserializable from hex.

This cleanup moves the macros and deduplicates them, introduces a new
`TestFromHex` trait to generalize parsing hex and rewrites the code to
use hex parsing generally. `hex_script` is still kept because its usage
is very frequent.
2022-08-30 15:04:31 +02:00
Martin Habovstiak 4dedf7d555 Remove duplicated `#[cfg(test)]` conditions
Several macros used in tests had `#[cfg(test)]` condition on each of
them. This deduplicates them by putting them into a separate module and
reexporting (with one condition for module and one for re-export).
2022-08-30 15:04:31 +02:00
Andrew Poelstra 5548696521
Merge rust-bitcoin/rust-bitcoin#1216: consensus::Params should be non_exhaustive
445037fb70 consensus::Params should be non_exhaustive (hrouis)

Pull request description:

  fixes: https://github.com/rust-bitcoin/rust-bitcoin/issues/1213

ACKs for top commit:
  apoelstra:
    ACK 445037fb70
  tcharding:
    ACK 445037fb70
  Kixunil:
    ACK 445037fb70

Tree-SHA512: a68fef69c58790caff7fc76ec780e04cd044d8f0037ecb0b93bcc3c71f9a64b9cfbc66cee51944583a311b122c1a7a25f7f434a45232ba9928b53011180fa1bc
2022-08-29 17:40:33 +00:00
hrouis 445037fb70 consensus::Params should be non_exhaustive 2022-08-26 15:49:27 +02:00
Tobin C. Harding 01161e66ee Run formmater on bip158
Run the formmater on the newly moved `bip158` module. No changes other
than those introduced by `cargo +nightly fmt`.
2022-08-26 08:30:38 +10:00
Tobin C. Harding 95393aadbc Move bip158 module to crate root
We are attempting to flatten the `util` module; move the `bip158` module
to the crate root out of `util`.

Currently `src/util/` is ignored by the formatter so this move causes
the `bip32` module to be formatted.
2022-08-26 08:30:38 +10:00
sanket1729 5e67419b14
Merge rust-bitcoin/rust-bitcoin#1200: Temporarily disable fuzzing in CI
720ea29865 Temporarily disable fuzzing (Tobin C. Harding)

Pull request description:

  Honggfuzz is broken, I have no idea why but no PRs can merge while its broken.

  (I tried a bunch of other things but could not debug this issue.)

ACKs for top commit:
  apoelstra:
    ACK 720ea29865
  sanket1729:
    ACK ACK 720ea29865

Tree-SHA512: f6c10ce38fb20c0d9593a4cc3c6d2a6e7ae8bd4cf1608a96278725ed1268bdb9f732b2616b534be9f219042942818aca6c7d6af87079b6a0533f9f795fabbe27
2022-08-24 16:15:36 -07:00
Andrew Poelstra 5a98e4a5a5
Merge rust-bitcoin/rust-bitcoin#1204: [update] macro to implement Debug from Display and add Display implementation where needed
4c1dc4594d  Implementing a macro to define debug from display and adding  Display trait implementation where needed (hrouis)

Pull request description:

  Related to issue : [1201](https://github.com/rust-bitcoin/rust-bitcoin/issues/1201)

  > Replaced macro **impl_display_from_debug** with **impl_debug_from_display**

  > Added implementation of Display trait where needed.

ACKs for top commit:
  Kixunil:
    ACK 4c1dc4594d
  apoelstra:
    ACK 4c1dc4594d

Tree-SHA512: a240ccd507ac957ed82adf14623d2b77ee7a19458c2617b69f440eba8ebe52d4b45c1328198116ee720aeee418f6390238772eed002f850cc1bfbdc0248b606e
2022-08-24 17:07:13 +00:00
hrouis 4c1dc4594d Implementing a macro to define debug from display and adding Display trait implementation where needed
Display should not be implemented as Debug trait, but the existing macro promotes this figure of use.
The macro has been replaced with implement_debug_from_display and the Display trait has been implemented where needed.
The LowerHex trait has been implemented instead of Display for UintX types.
2022-08-24 14:04:11 +02:00
Tobin C. Harding cbfa8cff4c Improve lock time docs
Bitcoin lock times are easy to get confused, add absolute/relative in
various places to help clarify things.
2022-08-24 15:14:26 +10:00
Tobin C. Harding 9f7d934f5d Move the locktime module to absolute
In preparation for adding a relative lock time type move the `locktime`
module to a new module called `absolute`. Use qualified path for
locktime types (e.g. `absolute::PackedLockTime`) to improve readability.
2022-08-24 15:14:26 +10:00
Tobin C. Harding 720ea29865 Temporarily disable fuzzing
Honggfuzz is broken, I have no idea why but no PRs can merge while its
broken.
2022-08-24 08:34:57 +10:00
sanket1729 042235940f
Merge rust-bitcoin/rust-bitcoin#1172: Re-export blockdata modules
6095a4de9b Use blockdata exports (Tobin C. Harding)
4a119e5624 Re-export blockdata modules (Tobin C. Harding)

Pull request description:

  In an effort to make the library more ergonomic to use re-export modules from `blockdata` at the crate root level. This helps to decouple the internal code layout with the public API.

ACKs for top commit:
  apoelstra:
    ACK 6095a4de9b
  sanket1729:
    ACK 6095a4de9b

Tree-SHA512: d9e0af1fa237bf9ad730c40088fe951dbc97df5ef9407a7038c6dbeb2f7450b93b082a40d76f5c5559731ac530fd9849405afae090de9a565e312ac4951cc0d6
2022-08-19 12:48:46 -07:00