Commit graph

154 commits

Author SHA1 Message Date
Tom Trevethan
47b759f1ed Merge 33adc7521c into merged_master (Bitcoin PR bitcoin/bitcoin#30765) 2026-03-26 22:41:05 +00:00
ikripaka
2f02b6235c
Merge 99b06b7f1d into merged_master (Bitcoin PR bitcoin/bitcoin#29369) 2026-03-20 10:12:51 +00:00
ivanlele
cd6ec40d0f
Merge 2aff9a36c3 into merged_master (Bitcoin PR bitcoin/bitcoin#30352) 2026-03-11 09:41:57 +00:00
ikripaka
f810342eeb
Merge 01dc38bd01 into merged_master (Bitcoin PR bitcoin/bitcoin#30406) 2026-03-06 10:20:12 +00:00
Byron Hambly
f0aca27969
Merge cb8844e2b9 into merged_master (Bitcoin PR bitcoin/bitcoin#28728) 2025-11-05 15:10:53 +02:00
Byron Hambly
ac6e63d23a
lint: fix lint-includes 2025-08-08 12:49:19 +02:00
Byron Hambly
236ccf7924 Merge 8e0d9796da into merged_master (Bitcoin PR bitcoin/bitcoin#25284) 2025-07-18 15:00:47 +02:00
Byron Hambly
6c55760a2d Merge 7ef2d4ee4d into merged_master (Bitcoin PR bitcoin/bitcoin#28244) 2025-07-04 17:24:18 +02:00
Byron Hambly
833eaacade
ci: use 24.04 instead of lunar for tidy and fuzz ci 2025-04-29 13:49:55 +02:00
Byron Hambly
0b1508bf01
ci: fix lint issues 2025-04-17 11:06:32 +02:00
Tom Trevethan
c222787622 Merge b7702bd546 into merged_master (Bitcoin PR bitcoin/bitcoin#25943) 2025-04-08 20:00:25 +00:00
Byron Hambly
b4405ba453 Merge e9262ea32a into merged_master (Bitcoin PR bitcoin/bitcoin#26750) 2025-03-31 16:37:52 +02:00
Byron Hambly
50a5a78d8d Merge 5215c80edc into merged_master (Bitcoin PR bitcoin/bitcoin#25709) 2024-10-24 13:06:05 +02:00
Lőrinc
cac846c2fb Allow CScript's operator<< to accept spans, not just vectors
Extracted existing serialization to append size & data in separate private methods to clarify that it does more than just a simple data insertion.

* the C style casts were changed to static_cast
* `unsigned char` and `uint8_t` were changed to value_type for forward compatibility
* `data + sizeof(data)` was changed to `std::cend`
* data insertion (in AppendData) relies on pointer arithmetic now to enable both `std::span<const value_type>` and `std::span<const std::byte>` operators
* use uint32_t for data size instead of size_t
* used span instead of raw pointers in the new methods

Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
Co-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com>
2024-09-11 17:41:27 +02:00
Ava Chow
99b06b7f1d
Merge bitcoin/bitcoin#29369: refactor: Allow CScript construction from any std::input_iterator
fa7b9b99a2 refactor: Require std::input_iterator for all InputIterator in prevector (MarcoFalke)
d444441900 refactor: Allow CScript construction from any std::input_iterator (MarcoFalke)

Pull request description:

  Currently only (pre)vector iterators and raw pointers are accepted. However, this makes it harder to construct from input iterators provided by other classes, such as `std::span`.

  Fix that.

ACKs for top commit:
  delta1:
    reACK fa7b9b9
  achow101:
    ACK fa7b9b99a2
  hodlinator:
    ACK fa7b9b99a2
  ryanofsky:
    Code review ACK fa7b9b99a2

Tree-SHA512: 2760861f8bce42fb27dc0825e61621cb157f1ac3619a0834df38eb8319b6dcf9de43d90397a4c160f43340880c1553df638848e9057a27c792214331243ef4a5
2024-08-27 14:09:56 -04:00
Greg Sanders
455fca86cf policy: Add OP_1 <0x4e73> as a standard output type
These outputs are called anchors, and allow
key-less anchor spends which are vsize-minimized
versus keyed anchors which require larger outputs
when creating and inputs when spending.
2024-07-30 14:06:58 -04:00
MarcoFalke
d444441900
refactor: Allow CScript construction from any std::input_iterator
Also, remove the value_type alias, which is not needed when element_type
is present.
2024-07-12 11:18:54 +02:00
James Dorfman
94e058d3b7 Merge d492dc1cda into merged_master (Bitcoin PR bitcoin/bitcoin#24147) 2024-07-08 17:49:09 +00:00
MarcoFalke
3333bae9b2
tidy: modernize-use-equals-default 2024-07-08 11:12:01 +02:00
MarcoFalke
fa5ccc4137
iwyu: Export prevector.h from script.h
This should cut some include bloat and seems fine to do, because
prevector exists primarily to represent scripts.

Also, add missing includes to script.h and addresstype.h
2023-10-25 11:55:50 +02:00
Byron Hambly
45f83fd396 Merge bada9636d7 into merged_master (Bitcoin PR bitcoin/bitcoin#24043) 2023-10-13 07:53:59 +00:00
MarcoFalke
aaaa3fa947
Replace READWRITEAS macro with AsBase wrapping function
Co-authored-by: Pieter Wuille <pieter@wuille.net>
2023-08-28 17:48:15 +02:00
Andrew Chow
86ea8bed54 Move CScriptID to script.{h/cpp}
CScriptID should be next to CScript just as CKeyID is next to CPubKey
2023-08-14 17:38:27 -04:00
Byron Hambly
e7f3a397f2 Merge 5034b7fa3b into merged_master (Bitcoin PR bitcoin/bitcoin#24217) 2023-06-30 09:16:02 +00:00
Byron Hambly
47626b5a64 Merge 623745ca74 into merged_master (Bitcoin PR bitcoin/bitcoin#23912) 2023-06-14 15:44:11 +00:00
Byron Hambly
2097ef98ed Merge f4e12fd50c into merged_master (Bitcoin PR bitcoin/bitcoin#22278) 2023-04-20 12:38:44 +00:00
Hennadii Stepanov
306ccd4927
scripted-diff: Bump copyright headers
-BEGIN VERIFY SCRIPT-
./contrib/devtools/copyright_header.py update ./
-END VERIFY SCRIPT-

Commits of previous years:
- 2021: f47dda2c58
- 2020: fa0074e2d8
- 2019: aaaaad6ac9
2022-12-24 23:49:50 +00:00
Antoine Poinsot
00897d0677
script: actually trigger the optimization in BuildScript
The counter is an optimization over calling `ret.empty()`. It was
suggested that the compiler would realize `cnt` is only `0` on the first
iteration, and not actually emit the check and conditional.

This optimization was actually not triggered at all, since we
incremented `cnt` at the beginning of the first iteration. Fix it by
incrementing at the end instead.

This was reported by Github user "Janus".
2022-07-26 13:02:48 +02:00
Antoine Poinsot
4fe29368c0
script: expose getter for CScriptNum, add a BuildScript helper
Some prep work for Miniscript. BuildScript is an efficient way to build
Scripts in a generic manner (by concatenating OPs, data, and other
Scripts).

Co-Authored-By: Pieter Wuille <pieter@wuille.net>
2022-03-17 14:09:07 +01:00
Antoine Poinsot
f4e289f384
script: move CheckMinimalPush from interpreter to script.h
It is used by Miniscript.
2022-03-17 14:09:06 +01:00
Andrew Chow
bada9636d7
Merge bitcoin/bitcoin#24043: Add (sorted)multi_a descriptor for k-of-n multisig inside tr
4828d53ecc Add (sorted)multi_a descriptors to doc/descriptors.md (Pieter Wuille)
b5f33ac1f8 Simplify wallet_taproot.py functional test (Pieter Wuille)
eb0667ea96 Add tests for (sorted)multi_a derivation/signing (Pieter Wuille)
c17c6aa08d Add signing support for (sorted)multi_a scripts (Pieter Wuille)
3eed6fca57 Add multi_a descriptor inference (Pieter Wuille)
79728c4a3d Add (sorted)multi_a descriptor and script derivation (Pieter Wuille)
25e95f9ff8 Merge/generalize IsValidMultisigKeyCount/GetMultisigKeyCount (Pieter Wuille)

Pull request description:

  This adds a new `multi_a(k,key_1,key_2,...,key_n)` (and corresponding `sortedmulti_a`) descriptor for k-of-n policies inside `tr()`. Semantically it is very similar to the existing `multi()` descriptor, but with the following changes:
  * The corresponding script is `<key1> OP_CHECKSIG <key2> OP_CHECKSIGADD <key3> OP_CHECKSIGADD ... <key_n> OP_CHECKSIGADD <k> OP_NUMEQUAL`, rather than the traditional `OP_CHECKMULTISIG`-based script, making it usable inside the `tr()` descriptor.
  * The keys can optionally be specified in x-only notation.
  * Both the number of keys and the threshold can be as high as 999; this is the limit due to the consensus stacksize=1000 limit

  I expect that this functionality will later be replaced with a miniscript-based implementation, but I don't think it's necessary to wait for that.

  Limitations:
  * The wallet code will for not estimate witness size incorrectly for script path spends, which may result in a (dramatic) fee underpayment with large multi_a scripts.
  * The multi_a script construction is (slightly) suboptimal for n-of-n (where a `<key1> OP_CHECKSIGVERIFY ... <key_n-1> OP_CHECKSIGVERIFY <key_n> OP_CHECKSIG` would be better). Such a construction is not included here.

ACKs for top commit:
  achow101:
    ACK 4828d53ecc
  gruve-p:
    ACK https://github.com/bitcoin/bitcoin/pull/24043/commits/4828d53eccd52a67631c64cef0ba7df90dff138d
  sanket1729:
    code review ACK 4828d53ecc
  darosior:
    Code review ACK 4828d53ecc

Tree-SHA512: 5dcd434b79585f0ff830f7d501d27df5e346f5749f47a3109ec309ebf2cbbad0e1da541eec654026d911ab67fd7cf7793fab0f765628d68d81b96ef2a4d234ce
2022-03-04 07:28:23 -05:00
MarcoFalke
fadc54b79b
Fix unsigned integer overflow in tapscript validation weight calculation 2022-01-31 16:39:40 +01:00
Pieter Wuille
79728c4a3d Add (sorted)multi_a descriptor and script derivation 2022-01-12 11:09:41 -05:00
Hennadii Stepanov
f47dda2c58
scripted-diff: Bump copyright headers
-BEGIN VERIFY SCRIPT-
./contrib/devtools/copyright_header.py update ./
-END VERIFY SCRIPT-

Commits of previous years:
* 2020: fa0074e2d8
* 2019: aaaaad6ac9
2021-12-30 19:36:57 +02:00
MarcoFalke
fa5c896724
Add LIFETIMEBOUND to CScript where needed 2021-09-03 13:42:03 +02:00
sanket1729
7193636d09 Add crypto opcodes 2021-08-27 19:24:06 +00:00
sanket1729
4b9032209a Implement arithmetic opcodes 2021-08-26 20:28:01 +00:00
sanket1729
9346a8495e Implement transaction introspection opcodes 2021-08-26 20:28:01 +00:00
sanket1729
2df8e99813 Implement Streaming SHA256 opcodes
Co-authored-by: roconnor-blockstream  <roconnor@blockstream.com>
2021-08-26 20:28:01 +00:00
Andrew Poelstra
e765fc93ea Merge 3caee16946 into merged_master (Bitcoin PR #19953)
Taproot :D
2020-12-01 02:54:57 +00:00
Andrew Poelstra
11afdcc66a Merge 9ccaee1d5e into merged_master (Bitcoin PR #19004) 2020-11-26 01:08:51 +00:00
Andrew Poelstra
f89b990b78 Merge 448bdff263 into merged_master (Bitcoin PR #18317) 2020-11-26 01:08:46 +00:00
Andrew Poelstra
9ea76b54aa Merge 68ef9523d1 into merged_master (Bitcoin PR #18413) 2020-11-26 01:08:36 +00:00
Andrew Poelstra
ba95deb36c Merge 19032c750c into merged_master (Bitcoin PR #18612) 2020-11-26 01:08:27 +00:00
Andrew Poelstra
fd37b7c5d6 Merge 54f812d9d2 into merged_master (Bitcoin PR #18673) 2020-11-26 01:08:23 +00:00
Andrew Poelstra
8df275dcb1 Merge 903be99ee6 into merged_master (Bitcoin PR #18621) 2020-11-26 01:08:19 +00:00
Andrew Poelstra
009bc2fdfb Merge 99813a9745 into merged_master (Bitcoin PR #17829) 2020-11-14 16:52:02 +00:00
Andrew Poelstra
75e090ffc0 Merge 4daadce36c into merged_master (Bitcoin PR #17162) 2020-11-09 21:20:41 +00:00
Andrew Poelstra
9cc26a716a Merge 5b2fe5563b into merged_master (Elements PR #642)
FIXME: we disable standardness checks for the non-PAK node in the PAK tests.
This is because of a bug in Elements which causes non-PAK nodes to reject
pegouts for standardness reasons. Need to fix it after the rebase.
2020-11-09 21:20:21 +00:00
Andrew Poelstra
69dd3ef807 Merge c799976c86 into merged_master (Bitcoin PR #16128) 2020-11-09 03:58:20 +00:00