raw transaction – ERROR : non-mandatory-script-verify-flag (Script failed an OP_EQUALVERIFY operation)

[ad_1]

Input transaction : single p2wpkh

output transaction : single p2wsh and single p2wpkh

The following error signifies that my pubkey hash is different on checking , it is clear that my pubkey hashes match! Here are the implementations for scriptcode and witness generation

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 signed transaction

020000000001013ccb46c8366e39d7ff36df4f199813aa8b9dc4bed143a0eb9205cf698ca16298c401000000ffffffff0240420f00000000002200202d67ce38ba266a68f0f7c4668e9d0f5584c6da7c454bcc2368bf9fff10135157a086010000000000160014d765749aa66430b85765bdedee488f5fe3c82a8e02473044022062c000ca2cdfcd39de875d0b6a3f3da7af4e5c1ba07bb26e24cef8974cdc1c820220540f540a43027475fe359cc7ae98eddb6fbd09082ef9602c08669448e393d1e7012102d3428014dd5ccf1927c6dc164e6324e2c0945a9f50b84769592e195ae6a40e8a00000000

What are the other scenarios that might throw this error ?

[ad_2]

Source link

Leave a Comment