Bitcoin
Raw Transaction – Error: non-mandatory-script-verify-flag (Script failed operation OP_EQUALVERIFY)
Input transaction: single p2wpkh
Output transactions: single p2wsh and single p2wpkh
The following error means that my public key hashes are different when verified. It’s clear that my public key hashes match! The script code and implementation for generating the watch are as follows:
fn get_p2wpkh_scriptcode(utxo: Utxo) -> Vec<u8>
let mut script = Vec::new();
script.push(0x19); // 25 bytes , script length
script.push(0x76); // OP_DUP
script.push(0xa9); // OP_HASH160
script.push(0x14); // 20 bytes , public key hash length
let pubkey_hash = extract_pubkey_hash(&utxo.script_pubkey); //takes last 20 bytes from the scriptpubkey of type 0x0014<pubkeyhash>
script.extend_from_slice(&pubkey_hash); // (pubkey hash)
//print the pubkey hash
// let pubkey_hash_in_hex = hex::encode(&pubkey_hash);
// println!("pubkey_hash_in_hex: :?", pubkey_hash_in_hex);
script.push(0x88); // OP_EQUALVERIFY
script.push(0xac); // OP_CHECKSIG
script
//OK
fn get_p2wpkh_witness(privkey: &(u8; 32), msg: Vec<u8>) -> Vec<u8>
let signature = sign(privkey, msg);
let pubkey = derive_public_key_from_private(privkey);
let mut witness = Vec::new();
// let pubkey_hashed = hash160(&pubkey);
// let pubkey_hashed_in_hex = hex::encode(&pubkey_hashed);
// println!("pubkey_hashed_in_hex: :?", pubkey_hashed_in_hex);
witness.push(0x02);
let signature_length = signature.len() as u8;
witness.push(signature_length);
witness.extend_from_slice(&signature);
witness.push(0x21);
witness.extend_from_slice(&pubkey);
witness
RAW Signature Transactions
020000000001013ccb46c8366e39d7ff36df4f199813aa8b9dc4bed143a0eb9205cf698ca16298c401000000ffffffff0240420f00000000002200202d67ce38ba266a68f0f7c4668e9d0f5584c6da7c454bcc2368bf9fff10135157a086010000000000160014d765749aa66430b85765bdedee488f5fe3c82a8e02473044022062c000ca2cdfcd39de875d0b6a3f3da7af4e5c1ba07bb26e24cef8974cdc1c820220540f540a43027475fe359cc7ae98eddb6fbd09082ef9602c08669448e393d1e7012102d3428014dd5ccf1927c6dc164e6324e2c0945a9f50b84769592e195ae6a40e8a00000000
What other scenarios can cause this error?