I want to generate P2WSH to study it. I read the spec
https://bitcoincore.org/en/segwit_wallet_dev/#creation-of-p2sh-p2wsh-address but I have an error during spend it. (redeemScript does not correspond to witnessScript)
I create a bash script to generate private and public key, and I will report only the part to create redeem script etc.
Witness script
SCRIPT="76a9"$PBLENGTH$PBH"88AC"
printf $SCRIPT > witness_script.txt
> result: 76a9147ee744d9b09a4042c45f5f33d259d12855bd250188AC
Create Script Hash, use sha256 once
ADDR_SHA=`printf $SCRIPT | xxd -r -p | openssl sha256| sed 's/^.* //'`
printf $ADDR_SHA > scripthash.txt
> result: 8f80f8328dac332d68d545b5187c6142467ca541f1b108e152d66c7965573a41
Create redeem script (i.e. 0x0020{32-byte scripthash})
REDEEMSCRIPT="0020"$ADDR_SHA
printf $REDEEMSCRIPT > redeem_script.txt
> result: 00208f80f8328dac332d68d545b5187c6142467ca541f1b108e152d66c7965573a41
Create SCRIPTPUBKEY (OP_HASH160 hash160(redeemScript) OP_EQUAL) where hash160 is Sha256 and ripemd160
ADDR_160=$(printf $(printf $REDEEMSCRIPT | xxd -r -p | openssl sha256| sed 's/^.* //') | xxd -r -p | openssl ripemd160 | sed 's/^.* //')
SCRIPTPUBKEY="A914"$ADDR_160"87"
printf $SCRIPTPUBKEY > scriptPubKey.txt
> result: A9147ed644ee46780f7dc74a191368866a7b0e49cf9d87
Create Address (regtest, prefix is C4)
ADDR=`printf $VERSION_PREFIX_ADDRESS$ADDR_160 | xxd -p -r | base58 -c`
printf $ADDR > address_p2sh-p2wsh.txt
> result: 2N4osp9J5PywDDvSuTqN3vxxiQZ25jQo4fY
Then I create a transaction from this address to anther address. I have 50 bitcoin available.
REDEEMSCRIPT=`cat redeem_script.txt`
SCRIPTPUBKEY=`cat scriptPubKey.txt`
WITNESSCRIPT=`cat witness_script.txt`
TX_DATA=$(bitcoin-cli createrawtransaction '[{"txid":"'$TXID'","vout":'$VOUT'}]' '[{"'$ADDR_DEST'":'$AMOUNT'}]')
TX_SIGNED=$(bitcoin-cli signrawtransactionwithkey $TX_DATA '["'$PK'"]' '[{"txid":"'$TXID'","vout":'$VOUT',"scriptPubKey":"'$SCRIPTPUBKEY'","redeemScript":"'$REDEEMSCRIPT'","witnessScript":"'$WITNESSCRIPT'","amount":"'$TOTAL_UTXO_AMOUNT'"}]' | jq -r '.hex')
At that moment I have this error
redeemScript does not correspond to witnessScript