You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bitcoin Crate签名SegWit交易遇验证错误求助

求助:P2WPKH交易签名后广播报错排查

我正在用Rust编写代码,创建一笔花费P2WPKH地址关联输出的交易,使用标准的bitcoin crate开发,相关代码片段如下:

fn sign_transaction<SignFun>(
    own_public_key: &[u8],
    own_address: &Address,
    own_utxos: &[Utxo],
    mut transaction: Transaction,
    key_name: String,
    derivation_path: Vec<Vec<u8>>,
    signer: SignFun,
) -> Transaction
where
    SignFun: Fn(String, Vec<Vec<u8>>, Vec<u8>) -> Fut,
{

    let txclone = transaction.clone();
    let mut hash_cache = sighash::SighashCache::new(&txclone);
    for (index, input) in transaction.input.iter_mut().enumerate() {
        let value = get_value(input, own_utxos);    // 通过查找对应UTXO获取金额
        let sighash = hash_cache
            .segwit_signature_hash(index, &own_address.script_pubkey(), value, SIG_HASH_TYPE)
            .expect("创建隔离见证签名哈希失败");

        let signature = signer(key_name.clone(), derivation_path.clone(), sighash.to_vec()).await;

        // 将签名转换为DER格式
        let der_signature = sec1_to_der(signature);

        let mut sig_with_hashtype = der_signature;
        sig_with_hashtype.push(SIG_HASH_TYPE.to_u32() as u8);
        let witness_bytes = vec![sig_with_hashtype, own_public_key.to_vec()];
        input.witness = Witness::from_vec(witness_bytes);
    }

    transaction
}

将签名后的交易发送到本地RegTest模式的Bitcoin节点时,收到如下错误:

error code: -26
error message:
non-mandatory-script-verify-flag (Signature must be zero for failed CHECK(MULTI)SIG operation)

我记录了以下关键信息:

  • 公钥:0377f5de845ac601f24e7cbf2e4abcc9e1040cd4ae971ecaa00837b1c74684e15b
  • 地址:bcrt1qh3zle7xs34azdyycg8cpf9wx5nxjpcqyqv4eyc
  • 花费的输入金额:625000000
  • 待签名交易:0100000001ceac446d9350730c2a886220bed7ae154ca3f717897819091d5e72dcd0f0895e0000000000ffffffff0200e1f505000000001600148be949ae15ee4b5da9af0ce2bf8d3f3c43c582da26dc4a1f00000000160014bc45fcf8d08d7a26909841f01495c6a4cd20e00400000000
  • 签名哈希(Sighash):d7e5696f18363b58c84b8d57014d291c9f7ebbac562d219f7e7014b9a5685bbf
  • SEC1签名:c10c09b210914e49f295c07c9f96352e085df9d2c4272292239445d6f89483bc64c9903bebaba4bbf998d217c80375c36b60b212a824b63435e30205b2ed5a6a
  • DER签名:3045022100c10c09b210914e49f295c07c9f96352e085df9d2c4272292239445d6f89483bc022064c9903bebaba4bbf998d217c80375c36b60b212a824b63435e30205b2ed5a6a
  • 带签名哈希类型的DER签名:3045022100c10c09b210914e49f295c07c9f96352e085df9d2c4272292239445d6f89483bc022064c9903bebaba4bbf998d217c80375c36b60b212a824b63435e30205b2ed5a6a01
  • 已签名交易:01000000000101ceac446d9350730c2a886220bed7ae154ca3f717897819091d5e72dcd0f0895e000000000ffffffff0200e1f505000000001600148be949ae15ee4b5da9af0ce2bf8d3f3c43c582da26dc4a1f00000000160014bc45fcf8d08d7a26909841f01495c6a4cd20e00402483045022100c10c09b210914e49f295c07c9f96352e085df9d2c4272292239445d6f89483bc022064c9903bebaba4bbf998d217c80375c36b60b212a824b63435e30205b2ed5a6a01210377f5de845ac601f24e7cbf2e4abcc9e1040cd4ae971ecaa00837b1c74684e15b00000000

注:同一ECDSA签名器用于传统(P2PKH)交易的代码可正常运行,因此签名器本身无问题。

恳请帮忙排查问题所在!


内容的提问来源于stack exchange,提问作者THLO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:01:55