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

如何提前获取以太坊正确的Transaction Hash?

如何提前计算正确的以太坊交易哈希

当然可以在交易被挖矿前提前算出正确的交易哈希!你的问题出在调用ethereumjs-tx的hash()方法时没有指定包含签名字段,导致计算的是未签名交易的哈希,和区块链返回的完整交易哈希不一致。

问题根源

ethereumjs-tx v1.x版本的hash()方法默认参数是includeSignature = false,这时候它只会对未签名的交易字段(也就是你传入的txOpts里的to、nonce、gasPrice等)做Keccak256哈希。但区块链返回的交易哈希是对完整的已签名交易(包含签名后的v、r、s字段)计算的哈希,所以两者结果自然不一样。

解决方法

你有两种方式可以得到正确的交易哈希:

  1. 调用hash()时传入true参数
    明确告诉方法要包含签名字段来计算哈希:

    var tx = new ethereumjs.Tx(txOpts);
    tx.sign(Buffer.from("c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3", "hex"));
    // 传入true参数,计算包含签名的完整交易哈希
    var correctHash = tx.hash(true).toString('hex');
    
  2. 直接对序列化后的原始交易计算哈希
    因为你已经得到了序列化后的原始交易rawTx,可以直接用ethereumjs-util的keccak256方法计算它的哈希:

    const { keccak256 } = require('ethereumjs-util');
    var rawTxBuffer = Buffer.from(rawTx, 'hex');
    var correctHash = keccak256(rawTxBuffer).toString('hex');
    

验证结果

用你提供的rawTx值计算,得到的哈希就是73d419e3a9a63aab7ee4f3be43c0df0175f4395615945d395c827bffb3bbfecc,和Ganache返回的交易哈希完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:14:26