mirror of
https://github.com/bitcoin/bips.git
synced 2026-11-09 19:47:16 +00:00
Merge pull request #2310 from zjubiology/master
BIP375: check SegWit versions in non-witness UTXOs
This commit is contained in:
3 files changed
+23
-7
No files matched your search
@@ -326,6 +326,9 @@ Use the provided [[bip-0375/test_runner.py|test runner]] to validate each test v
|
|||||||
| segwit version greater than 1 in transaction inputs with sp output
|
| segwit version greater than 1 in transaction inputs with sp output
|
||||||
|-
|
|-
|
||||||
| Input Eligibility
|
| Input Eligibility
|
||||||
|
| segwit version greater than 1 supplied via PSBT_IN_NON_WITNESS_UTXO with sp output
|
||||||
|
|-
|
||||||
|
| Input Eligibility
|
||||||
| non-SIGHASH_ALL signature on input with sp output
|
| non-SIGHASH_ALL signature on input with sp output
|
||||||
|-
|
|-
|
||||||
| Output Scripts
|
| Output Scripts
|
||||||
|
|||||||
@@ -389,6 +389,22 @@
|
|||||||
"input_eligibility"
|
"input_eligibility"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"description": "input eligibility: segwit version greater than 1 supplied via PSBT_IN_NON_WITNESS_UTXO with sp output",
|
||||||
|
"psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiDJcwwbkl87iv+6mh+VHww4gI7IlcsXC2fRZkcbayYwlgEPBAAAAAAiAgLIF7t1Ia/DXqlvO/snDm61Dd/6VWBie5Yf7ADymWUIv0cwRAIgcvN4hS+4Q3JgcvJQdvDndWDtTC4EcWbuamJsdb/bOdYCICEqrl8JV040H1iG9f/zL1cW6rkDCkpTeeYBa2pNQtwkAQEDBAEAAAAiBgLIF7t1Ia/DXqlvO/snDm61Dd/6VWBie5Yf7ADymWUIvwgAAACAAAAAAAEQBP7///8iHQJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaCED7KT/Ebco4uD2DOYiKUOm/1W52V9ie/mpnQhLyHLVClsiHgJ6SH/Bn7dph3uHQtbqGBGPPE5yseqMbeYCp61KQdvgaECKE7OYVUX3K9bolxSuuQmz41SoQqm7i1bNDt7SHfihmVmLMSKKSeC9fpXOEFP3xbKKy1Q6aHB2AOPOiYIu4yAhAQBSAgAAAAH0whLVrtHn9v9jPyzgnGR8V77dkwMU2Y3ndQPVjpQLMwAAAAAA/////wGghgEAAAAAABZSFCKactNKZFvTSWu79Qu7gckGP0+UAAAAAAABAwgYcwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA",
|
||||||
|
"supplementary": {
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"input_index": 0,
|
||||||
|
"prevout_txid": "c9730c1b925f3b8affba9a1f951f0c38808ec895cb170b67d166471b6b263096",
|
||||||
|
"prevout_index": 0,
|
||||||
|
"prevout_scriptpubkey": "5214229a72d34a645bd3496bbbf50bbb81c9063f4f94",
|
||||||
|
"amount": 100000,
|
||||||
|
"non_witness_utxo": "0200000001f4c212d5aed1e7f6ff633f2ce09c647c57bedd930314d98de77503d58e940b330000000000ffffffff01a086010000000000165214229a72d34a645bd3496bbbf50bbb81c9063f4f9400000000"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"description": "input eligibility: non-SIGHASH_ALL signature on input with sp output",
|
"description": "input eligibility: non-SIGHASH_ALL signature on input with sp output",
|
||||||
"psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIHLzeIUvuENyYHLyUHbw53Vg7UwuBHFm7mpibHW/2znWAiAhKq5fCVdONB9YhvX/8y9XFuq5AwpKU3nmAWtqTULcJAEBAwQCAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA",
|
"psbt": "cHNidP8B+wQCAAAAAQIEAgAAAAEEAQEBBQEBAQYBAAABDiAYpxdmOwurFLEqGncTI/8eQHndUy5d0T4o6hCBxwCYSgEPBAAAAAABAR+ghgEAAAAAABYAFCKactNKZFvTSWu79Qu7gckGP0+UIgICyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL9HMEQCIHLzeIUvuENyYHLyUHbw53Vg7UwuBHFm7mpibHW/2znWAiAhKq5fCVdONB9YhvX/8y9XFuq5AwpKU3nmAWtqTULcJAEBAwQCAAAAIgYCyBe7dSGvw16pbzv7Jw5utQ3f+lVgYnuWH+wA8pllCL8IAAAAgAAAAAABEAT+////Ih0Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GghA+yk/xG3KOLg9gzmIilDpv9VudlfYnv5qZ0IS8hy1QpbIh4Cekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GhAihOzmFVF9yvW6JcUrrkJs+NUqEKpu4tWzQ7e0h34oZlZizEiikngvX6VzhBT98WyistUOmhwdgDjzomCLuMgIQABAwgYcwEAAAAAAAEEIlEgMm31D+Cge3rLcgcL6ztjLrmtFbppXMHlqmqgB7YUb9gBCUICekh/wZ+3aYd7h0LW6hgRjzxOcrHqjG3mAqetSkHb4GgDYeGx6d5eQssgB/fKVLng1X7ROTj61W0/GeV1E6j84DkA",
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ from deps.bitcoin_test.psbt import (
|
|||||||
PSBT_IN_OUTPUT_INDEX,
|
PSBT_IN_OUTPUT_INDEX,
|
||||||
PSBT_IN_PREVIOUS_TXID,
|
PSBT_IN_PREVIOUS_TXID,
|
||||||
PSBT_IN_SIGHASH_TYPE,
|
PSBT_IN_SIGHASH_TYPE,
|
||||||
PSBT_IN_WITNESS_UTXO,
|
|
||||||
PSBT_OUT_SCRIPT,
|
PSBT_OUT_SCRIPT,
|
||||||
)
|
)
|
||||||
from deps.dleq import dleq_verify_proof
|
from deps.dleq import dleq_verify_proof
|
||||||
@@ -24,9 +23,9 @@ from secp256k1lab.secp256k1 import GE
|
|||||||
|
|
||||||
from .bip352_crypto import compute_silent_payment_output_script
|
from .bip352_crypto import compute_silent_payment_output_script
|
||||||
from .inputs import (
|
from .inputs import (
|
||||||
|
_script_pubkey_from_psbt_input,
|
||||||
collect_input_ecdh_and_pubkey,
|
collect_input_ecdh_and_pubkey,
|
||||||
is_input_eligible,
|
is_input_eligible,
|
||||||
parse_witness_utxo,
|
|
||||||
pubkey_from_eligible_input,
|
pubkey_from_eligible_input,
|
||||||
)
|
)
|
||||||
from .psbt_bip375 import (
|
from .psbt_bip375 import (
|
||||||
@@ -284,11 +283,9 @@ def validate_input_eligibility(psbt: PSBT) -> Tuple[bool, str]:
|
|||||||
|
|
||||||
# Check segwit version restrictions
|
# Check segwit version restrictions
|
||||||
for i, input_map in enumerate(psbt.i):
|
for i, input_map in enumerate(psbt.i):
|
||||||
if PSBT_IN_WITNESS_UTXO in input_map:
|
script = _script_pubkey_from_psbt_input(input_map)
|
||||||
witness_utxo = input_map[PSBT_IN_WITNESS_UTXO]
|
if script is not None and is_segwit_v2_or_later(script):
|
||||||
script = parse_witness_utxo(witness_utxo)
|
return False, f"Input {i} uses segwit version > 1 with silent payments"
|
||||||
if is_segwit_v2_or_later(script):
|
|
||||||
return False, f"Input {i} uses segwit version > 1 with silent payments"
|
|
||||||
|
|
||||||
# Check SIGHASH_ALL requirement - PSBT_IN_SIGHASH_TYPE is optional, but if set it must be SIGHASH_ALL when SP outputs are present
|
# Check SIGHASH_ALL requirement - PSBT_IN_SIGHASH_TYPE is optional, but if set it must be SIGHASH_ALL when SP outputs are present
|
||||||
for i, input_map in enumerate(psbt.i):
|
for i, input_map in enumerate(psbt.i):
|
||||||
|
|||||||
Reference in new issue
Block a user