bitcoin-core / btcdeb

Bitcoin Script Debugger
MIT License
523 stars 128 forks source link

p2tr script path: invalid script (witness stack last element) #154

Open panicfarm opened 1 month ago

panicfarm commented 1 month ago

I created and successfully mined a regtest network transaction that spent two p2tr script-path outputs. The scripts where 1 of 2 multisigs:

DESCRIPTOR_VOUT0="tr($UNSPENDABLE_BIP341,multi_a(1,0327adc7f1cde671f02a01e39b33754d480a42670f95f951d9fb72f84aee5d7878,021856595019d8211e061b91911357cee2b9e683aa023a2744245fb05b7893a812))"
DESCRIPTOR_VOUT1="tr($UNSPENDABLE_BIP341,multi_a(1,028d8b9b2d93fd38c31005b05bc1c60e95cf5068a665360516685ce65d66819b86,021856595019d8211e061b91911357cee2b9e683aa023a2744245fb05b7893a812))"

The transaction was accepted by the regtest network bitcoin-core 0.25 and successfully mined. Trying to verify it with btcdeb, I got invalid script (witness stack last element) error:

$btcdeb -s 0 --tx=020000000001027eed70a2a6f3fd1ed05972f7cc0aa245033d4e538c5d4928e027e292f262e3ff0000000000fdffffff7eed70a2a6f3fd1ed05972f7cc0aa245033d4e538c5d4928e027e292f262e3ff0100000000fdffffff0100e1f5050000000022512093f6840b7dd8f6abc80d9675b7e28b929519316b5c6be39695f149a085f5b661040040f409bf08c40e63732327150b2581cde3afdfb7e9038f8d47c92a5cfd6c5fd9fc7179695e4db11a4a86dbb113deac1a57e8b113a96e2b3736ff959709cd4bdef7462027adc7f1cde671f02a01e39b33754d480a42670f95f951d9fb72f84aee5d7878ac201856595019d8211e061b91911357cee2b9e683aa023a2744245fb05b7893a812ba519c21c050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0040040b5769e66e31556e49441fb2a9a39db7c3a20d5782670b43c7d6cf248d7ba87c50ebd9aa65815693f72b83cbc34e80ed4edb3a7ca06e32db6b2384166b0934a7c46208d8b9b2d93fd38c31005b05bc1c60e95cf5068a665360516685ce65d66819b86ac201856595019d8211e061b91911357cee2b9e683aa023a2744245fb05b7893a812ba519c21c050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac000000000 --txin=02000000000103f8b9481805180ead77b0bb773b3b41e045f7288d937633d291928141faf967eb00000000910047304402203ddd89c6e9a680f2922bfcc197f34fb17e2ef601d74a43f6d30767aa52e5ac3d02203994e8f2e6c46de0a87be87c6636f367dec2bc35e1386d574143d39e351bba3a01475121024fddf183fad49c01d1d281f94e9d79ad286f6498347faf4b33bf5ad6bac1d1582103295d76c56065ee78e5a14174da0759f8bbbea5a4017bb38a2aa6842ac0cb56a252aefdfffffff8b9481805180ead77b0bb773b3b41e045f7288d937633d291928141faf967eb0100000000fdffffff3b85bc34f079df21cb1e4467235d9d07d3a5db23297e88f39ec162c624a8ebe60000000000fdffffff0300e1f505000000002251209e08466dc0201e1a4cf77640210dbfd986d99669b7d5b17e664d9f855e5c702c00e1f5050000000022512058da1e1524d3ccde9024fbc3ff89a47c470e0ea7ac54b8859229f32308f18d0800a3e111000000001976a914dba4f00c333269440e726c2138c098089cecf65488ac00030047304402205eebdfa5ca1a8afc86a3ece97e3cbcc7218dc1ded6067dbbcccd1ff94ecc62d50220673f189a048125bb7f0896659320cbfecc0f6b9487839752eade8d03233a1435016951210327adc7f1cde671f02a01e39b33754d480a42670f95f951d9fb72f84aee5d78782102eeb99fe49aa809e22a1fe636f6b4b03199bd69b227d91fc2bb5d9c2188e3eabc21021856595019d8211e061b91911357cee2b9e683aa023a2744245fb05b7893a81253ae0400473044022053622215fbb232eb89e37f2ed78f08f1ec12a764a513261763d505ab9cf4df1702201a6ce9c780c43b1a82913bd4e2817b264da2c9f9bfeaa16c7a42c00d3f878f6b0147304402201d1a484921b85886bc9f5e412ae6c8ea306747f8e4994c8f39a627e1db688b0d02203d9b188e2a90f6f2982025671702b72ce92ade4cdc62e175e502f62f8e346f720147522102eeb99fe49aa809e22a1fe636f6b4b03199bd69b227d91fc2bb5d9c2188e3eabc210351dc2689f37c6eb017e5815cb49e6de435f69c6df1910e817a370880b224a13d52ae00000000
btcdeb 5.0.24 -- type `btcdeb -h` for start up options
LOG: signing segwit taproot
notice: btcdeb has gotten quieter; use --verbose if necessary (this message is temporary)
input tx index = 0; tx input vout = 0; value = 100000000
got witness stack of size 4
34 bytes (v0=P2WSH, v1=taproot/tapscript)
Taproot commitment:
- control  = c050929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0
- program  = 9e08466dc0201e1a4cf77640210dbfd986d99669b7d5b17e664d9f855e5c702c
- script   = 2027adc7f1cde671f02a01e39b33754d480a42670f95f951d9fb72f84aee5d7878ac201856595019d8211e061b91911357cee2b9e683aa023a2744245fb05b7893a812ba519c
- path len = 0
- p        = 50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0
- q        = 9e08466dc0201e1a4cf77640210dbfd986d99669b7d5b17e664d9f855e5c702c
- k        = 8ce7142d2b807fd784ca36efa908ebb2cce6a5b1a7145d8331242f054665a5ee          (tap leaf hash)
  (TapLeaf(0xc0 || 2027adc7f1cde671f02a01e39b33754d480a42670f95f951d9fb72f84aee5d7878ac201856595019d8211e061b91911357cee2b9e683aa023a2744245fb05b7893a812ba519c))
invalid script (witness stack last element)

I tried to decode the tapscript with bitcoin-cli, and noticed that it was labeled "nonstandard" and that the keys that I put in the descriptors lost their parity prefixes and became x-only keys:

$ bitcoin-cli -regtest decodescript 2027adc7f1cde671f02a01e39b33754d480a42670f95f951d9fb72f84aee5d7878ac201856595019d8211e061b91911357cee2b9e683aa023a2744245fb05b7893a812ba519c
{
  "asm": "27adc7f1cde671f02a01e39b33754d480a42670f95f951d9fb72f84aee5d7878 OP_CHECKSIG 1856595019d8211e061b91911357cee2b9e683aa023a2744245fb05b7893a812 OP_CHECKSIGADD 1 OP_NUMEQUAL",
  "desc": "raw(2027adc7f1cde671f02a01e39b33754d480a42670f95f951d9fb72f84aee5d7878ac201856595019d8211e061b91911357cee2b9e683aa023a2744245fb05b7893a812ba519c)#jhjz42cq",
  "type": "nonstandard"
}

What is the reason for this invalid script (witness stack last element) error, while the transaction was accepted by the core v0.25 and mined successfully?

kallewoof commented 1 month ago

This may be due to btcdeb not being updated to latest core base. I plan to do this but work keeps getting in my way. Plan to get to this ASAP but will take a couple weeks.