请求确认交易签名哈希值:指定字段是否为签名哈希?
关于EIP-1559交易哈希与签名哈希的疑问
我有一个以太坊EIP-1559交易对象:
{ hash: '0xb1c360f441555b43c5c4ae25d4c145465dec04f8e7e454905ca46cffa2878358', type: 2, accessList: [], blockHash: '0xcbdbe7c06917401e961f8af020b24c147c2b0202b78474c1612165b5d94b5507', blockNumber: 16629307, transactionIndex: 0, confirmations: 1, from: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', gasPrice: BigNumber { value: "136380605794" }, maxPriorityFeePerGas: BigNumber { value: "1000000000" }, maxFeePerGas: BigNumber { value: "271761211588" }, gasLimit: BigNumber { value: "29025368" }, to: '0x75b0B516B47A27b1819D21B26203Abf314d42CCE', value: BigNumber { value: "0" }, nonce: 399, data: '0xd041723100000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b9060000000000000000000000000000000000000000000000000de0b6b3a7640000df57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656f', r: '0x45fbb085fc47add41a01b41b85c2866daf7417ee79757f50d7c869f8bb74ab9e', s: '0x6ad6776be37df4eb2cd4cfbcbd89b686f0985e9f366d71c0442381924af326d1', v: 1, creates: null, chainId: 31337, wait: [Function (anonymous)] }
请问其中的hash: '0xb1c360f441555b43c5c4ae25d4c145465dec04f8e7e454905ca46cffa2878358'是否为该交易签名的哈希值?我需要准确识别签名对应的哈希值。
答案
这个hash字段不是交易签名直接对应的哈希值,两者是不同的概念:
- 签名对应的哈希:签名交易时,是对无签名的EIP-1559交易体(包含chainId、nonce、maxPriorityFeePerGas、maxFeePerGas、gasLimit、to、value、data、accessList)按照规则编码后,再进行Keccak-256哈希计算得到的结果,这个哈希才是私钥签名的目标。
- 交易对象中的
hash字段:它是对包含r、s、v签名参数的完整已签名交易进行Keccak-256哈希后的结果,是区块链上唯一标识该交易的交易ID,是签名完成后生成的,并非签名时用的哈希。
如果要获取签名对应的哈希,需要从交易对象中提取无签名的核心字段,按照EIP-1559的编码规则(TransactionType || RLP([chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, accessList]))处理后,再计算Keccak-256哈希。
内容的提问来源于stack exchange,提问作者Hacek
相关产品推荐
相关产品推荐

