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?

Related Articles

Back to top button