Commit graph

899 commits

Author SHA1 Message Date
James Dorfman
a52fff5abe Merge 695ca641a4 into merged_master (Bitcoin PR bitcoin/bitcoin#24860) 2024-09-09 17:06:48 +00:00
James Dorfman
bcc0b07392 Merge cacbdbaa95 into merged_master (Bitcoin PR bitcoin/bitcoin#25132) 2024-09-06 06:39:01 +00:00
James Dorfman
f9c08c4566 Merge 66e3b16b8b into merged_master (Bitcoin PR bitcoin/bitcoin#25184) 2024-08-13 22:08:12 +00:00
James Dorfman
31df518140 Merge 7b3343f300 into merged_master (Bitcoin PR bitcoin/bitcoin#25108) 2024-08-13 04:20:55 +00:00
James Dorfman
cf81ccbd1f Merge b557a24be9 into merged_master (Bitcoin PR bitcoin/bitcoin#19426) 2024-08-09 16:00:17 +00:00
James Dorfman
d7c7eadebe Merge 30c1c6ed80 into merged_master (Bitcoin PR bitcoin/bitcoin#24979) 2024-08-02 05:29:00 +00:00
James Dorfman
b4321ae5f1 Merge 8103fffe5c into merged_master (Bitcoin PR bitcoin/bitcoin#24906) 2024-08-01 16:36:50 +00:00
James Dorfman
38cf680443 Merge 41720a1f54 into merged_master (Bitcoin PR bitcoin/bitcoin#24786) 2024-07-29 19:42:59 +00:00
James Dorfman
94e058d3b7 Merge d492dc1cda into merged_master (Bitcoin PR bitcoin/bitcoin#24147) 2024-07-08 17:49:09 +00:00
James Dorfman
b3a377c2d0 Merge 0da559e02e into merged_master (Bitcoin PR bitcoin/bitcoin#24661) 2024-07-08 15:17:32 +00:00
James Dorfman
dbbde2d123 Merge df8e57296c into merged_master (Elements PR ElementsProject/elements#1286) 2024-05-24 06:48:04 +00:00
James Dorfman
a0093e2760 Merge d6f225f5c9 into merged_master (Bitcoin PR bitcoin/bitcoin#24462) 2024-01-09 00:06:54 +00:00
Christian Lewe
f4243128ee Script: Move SCRIPT_ERR_COUNT
SCRIPT_ERR_COUNT is a pseudo error that returns the number of errors.
It must always be last in the enum.
2023-11-10 17:04:29 +01:00
Byron Hambly
35e8c6d908 Merge e7db4e245a into merged_master (Bitcoin PR bitcoin/bitcoin#24164) 2023-10-14 19:42:34 +00:00
Byron Hambly
45f83fd396 Merge bada9636d7 into merged_master (Bitcoin PR bitcoin/bitcoin#24043) 2023-10-13 07:53:59 +00:00
Byron Hambly
eef2269720 Merge 72f97289c4 into merged_master (Bitcoin PR bitcoin/bitcoin#24343)
Had to change some hashes in descriptor_tests, presumably because of the
differences between when Elements and Bitcoin when it comes to Taproot.

Please review this carefully and investigate the FIXME
2023-07-02 05:17:22 +00:00
Byron Hambly
e7f3a397f2 Merge 5034b7fa3b into merged_master (Bitcoin PR bitcoin/bitcoin#24217) 2023-06-30 09:16:02 +00:00
Byron Hambly
a992ccaac2 Merge 196b459920 into merged_master (Bitcoin PR bitcoin/bitcoin#23438) 2023-06-29 08:37:35 +00:00
Byron Hambly
23ffcd4fc8 Merge bd482b3ffe into merged_master (Bitcoin PR bitcoin/bitcoin#24105) 2023-06-21 11:44:35 +00:00
Byron Hambly
d3148d2497 Merge a1e04e1079 into merged_master (Bitcoin PR bitcoin/bitcoin#23926) 2023-06-14 16:12:54 +00:00
Byron Hambly
47626b5a64 Merge 623745ca74 into merged_master (Bitcoin PR bitcoin/bitcoin#23912) 2023-06-14 15:44:11 +00:00
James Dorfman
536c7fee81 Merge 50c502f54a into merged_master (Bitcoin PR bitcoin/bitcoin#17034) 2023-06-13 03:51:10 +00:00
James Dorfman
72a90148c8 Merge 8b1de78577 into merged_master (Bitcoin PR bitcoin/bitcoin#23413) 2023-06-01 18:51:42 +00:00
Byron Hambly
00f2e32c8e Merge 47fe7445e7 into merged_master (Bitcoin PR bitcoin/bitcoin#22364)
- some fixmes in this commit, related to invalid schnorr signatures
  which need investigation
2023-05-29 12:58:36 +00:00
Byron Hambly
6a650c1a67 Merge 398fd63356 into merged_master (Bitcoin PR bitcoin/bitcoin#23525) 2023-05-26 13:06:05 +00:00
Byron Hambly
1beaa601b4 Merge 5ccab7187b into merged_master (Bitcoin PR bitcoin/bitcoin#23394)
- commented out some script tests that need to be fixed
 - commented out feature_taproot.py since it needs significant updates
2023-05-26 09:14:20 +00:00
Byron Hambly
498907a233 Merge 816e15ee81 into merged_master (Bitcoin PR bitcoin/bitcoin#22951) 2023-05-09 11:50:39 +00:00
James Dorfman
ff57e1e65f Merge d6492d4ed0 into merged_master (Bitcoin PR bitcoin/bitcoin#22650) 2023-04-27 04:55:34 +00:00
Byron Hambly
b33a4cdb4f elements: fixes for bitcoin/bitcoin#22976 2023-04-24 12:05:24 +00:00
Byron Hambly
eea9829aa6 Merge 825f4a64e6 into merged_master (Bitcoin PR bitcoin/bitcoin#22976) 2023-04-24 11:40:49 +00:00
Byron Hambly
2097ef98ed Merge f4e12fd50c into merged_master (Bitcoin PR bitcoin/bitcoin#22278) 2023-04-20 12:38:44 +00:00
Byron Hambly
8e28696e5b Merge 9a86327512 into merged_master (Bitcoin PR bitcoin/bitcoin#22512) 2023-04-13 10:35:57 +00:00
James Dorfman
ab7a42420a Merge e826b22da2 into merged_master (Bitcoin PR bitcoin/bitcoin#22275) 2023-04-10 19:25:44 +00:00
Byron Hambly
c70b9b1b43 Merge a93e7a4422 into merged_master (Bitcoin PR bitcoin/bitcoin#22748) 2023-04-10 13:22:14 +00:00
Byron Hambly
a20c67310c Merge b1a672d158 into merged_master (Bitcoin PR bitcoin/bitcoin#22337) 2023-04-07 11:57:51 +00:00
James Dorfman
a124f16efc Merge fd557ceb88 into merged_master (Bitcoin PR bitcoin/bitcoin#13533)
Temporarily disable failing tests that use elements-specific interpreter flags
2023-03-24 19:33:46 +00:00
James Dorfman
91eba3427c Merge a3791da0e8 into merged_master (Bitcoin PR bitcoin/bitcoin#22428) 2023-03-21 16:20:59 +00:00
James Dorfman
400c44abcc Merge 9faa4b68db into merged_master (Bitcoin PR #22232) 2023-03-16 04:51:52 +00:00
roconnor-blockstream
707cf20b12
Fix tapscript comment
In elements tapscript is verison 0xc4
2022-08-12 11:56:15 -04:00
fanquake
695ca641a4
Merge bitcoin/bitcoin#24860: Miniscript integration follow-ups
f3a50c9dfe miniscript: rename IsSane and IsSaneSubexpression to prevent misuse (Antoine Poinsot)
c5fe5163dc miniscript: nit: don't return after assert(false) (Antoine Poinsot)
7bbaca9d8d miniscript: explicit the threshold size computation in multi() (Antoine Poinsot)
8323e4249d miniscript: add an OpCode typedef for readability (Antoine Poinsot)
7a549c6c59 miniscript: mark nodes with duplicate keys as insane (Antoine Poinsot)
8c0f8bf7bc fuzz: add a Miniscript target for string representation roundtripping (Antoine Poinsot)
be34d5077b fuzz: rename and improve the Miniscript Script roundtrip target (Antoine Poinsot)
7eb70f0ac0 miniscript: tiny doc fixups (Antoine Poinsot)
5cea85f12c miniscript: split ValidSatisfactions from IsSane (Antoine Poinsot)
a0f064dc14 miniscript: introduce a CheckTimeLocksMix helper (Antoine Poinsot)
ed45ee3882 miniscript: use optional instead of bool/outarg (Antoine Poinsot)
1ab8d89fd1 miniscript: make equality operator non-recursive (Antoine Poinsot)
5922c662c0 scripted-diff: miniscript: rename 'nodetype' variables to 'fragment' (Antoine Poinsot)
c5f65db0f0 miniscript: remove a workaround for a GCC 4.8 bug (Antoine Poinsot)

Pull request description:

  The Miniscript repository and the Miniscript integration PR here have been a moving target for the past months, and some final cleanups were done there that were not included here. I initially intended to add some small followup commits to #24148 but i think there are enough of them to be worth a followup PR on its own.

  Some parts of the code did not change since it was initially written in 2019, and the code could use some modernization. (Use std::optional instead of out args, remove old compiler workarounds).
  We refactored the helpers to be more meaningful, and also did some renaming. A new fuzz target was also added and both were merged in a single file. 2 more will be added in #24149 that will be contained in this file too.

  The only behaviour change in this PR is to rule out Miniscript with duplicate keys from sane Miniscripts. In a P2WSH context, signatures can be rebounded (Miniscript does not use CODESEPARATOR) and it's reasonable to assume that reusing keys across the Script drops the malleability guarantees.
  It was previously assumed such Miniscript would never exist in the first place since a compiler should never create them. We finally agreed that if one were to exist (say, written by hand or from a buggy compiler) it would be very confusing if an imported Miniscript descriptor (after #24148) with duplicate keys was deemed sane (ie, "safe to use") by Bitcoin Core. We now check for duplicate keys in the constructor.

  This is (still) joint work with Pieter Wuille. (Actually he entirely authored the cleanups and code modernization.)

ACKs for top commit:
  sipa:
    utACK f3a50c9dfe (with the caveat that a lot of it is my own code)
  sanket1729:
    code review ACK f3a50c9dfe. Did not review the fuzz tests.

Tree-SHA512: c043325e4936fe25e8ece4266b46119e000c6745f88cea530fed1edf01c80f03ee6f9edc83b6e9d42ca01688d184bad16bfd967c5bb8037744e726993adf3deb
2022-06-04 20:54:20 +01:00
Antoine Poinsot
f3a50c9dfe
miniscript: rename IsSane and IsSaneSubexpression to prevent misuse 2022-05-30 15:16:46 +02:00
Antoine Poinsot
c5fe5163dc
miniscript: nit: don't return after assert(false) 2022-05-30 15:16:45 +02:00
Antoine Poinsot
7bbaca9d8d
miniscript: explicit the threshold size computation in multi() 2022-05-30 15:16:45 +02:00
Antoine Poinsot
8323e4249d
miniscript: add an OpCode typedef for readability
Suggested-by: Vincenzo Palazzo
2022-05-30 15:16:44 +02:00
Antoine Poinsot
7a549c6c59
miniscript: mark nodes with duplicate keys as insane
As stated on the website, duplicate keys make it hard to reason about
malleability as a single signature may unlock multiple paths.

We use a custom KeyCompare function instead of operator< to be explicit
about the requirement.
2022-05-30 15:16:43 +02:00
David Bakin
bd7c5e2f0a Add BIP-341 specified constraints to ComputeTaprootMerkleRoot
BIP 341 specifies constraints on the size of the control block _c_ used
to compute the taproot merkle root.

> The last stack element is called the control block _c_, and must have
> length _33 + 32m_, for a value of m that is an integer between 0 and
> 128, inclusive. Fail if it does not have such a length.

(See BIP-341 "Script Validation Rules" here: https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#script-validation-rules)
2022-05-25 12:51:01 -07:00
Ben Woosley
71a8dbe5da
refactor: Remove defunct attributes.h includes
Since the removal of NODISCARD in 81d5af42f4,
the only attributes def is LIFETIMEBOUND, and it's included in many more
places that it is used.

This removes all includes which do not have an associated use of LIFETIMEBOUND,
and adds it to the following files, due to their use of the same:
* src/validationinterface.h
* src/script/standard.h
2022-05-21 13:54:33 -05:00
fanquake
7aa40f5563
refactor: use C++11 default initializers 2022-05-17 17:18:58 +01:00
MarcoFalke
fac6cfc50f
refactor: Change * to & in MutableTransactionSignatureCreator 2022-05-04 11:49:29 +02:00
Antoine Poinsot
7eb70f0ac0
miniscript: tiny doc fixups
Co-authored-by: Pieter Wuille <pieter.wuille@gmail.com>
2022-04-28 16:44:42 +02:00