ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

以太坊上交易id和交易签名的计算

2022-06-07 18:04:23  阅读:293  来源: 互联网

标签:EIP155Signer hash 以太 id chainId 签名 哈希 交易


参考:https://zhuanlan.zhihu.com/p/267651205

一:用于签名的哈希值的计算:在使用私钥计算一笔交易的签名内容时,先要对交易结构的相关数据以及链id(chainId)进行哈希,然后再使用私钥对哈希结果进行签名得到签名结果(签名结果包含R, S, V3个字段)。该哈希值不会被写入区块链里

 

 

传入交易对象Transaction、签名器Signer、以及私钥ecdsa.PrivateKey

首先调用签名器的Hash方法对交易对象tx进行hash(其实这里和生成交易id的过程是一样的只不过,如果使用的是EIP155Signer签名器会包含有ChainID,正常以太坊上的交易id的生成过程中没有这个ChainID)

Signer这个签名接口的具体实现是3种签名器:FrontierSigner是签名器最早实现的版本,HomesteadSigner是后来实现的版本,EIP155Signer则是最新的版本,并在签名的哈希值计算中引入了chainId来防止跨链实施攻击。

在EIP155Signer版本签名器中,节点需要对客户端发送过来的签名结果中的V值进行校验,校验V值中包含的chainId是否和本节点的chainId相比较,如果不一致,则认为该笔交易不是本条链上的交易,从而判断该交易非法。对于使用EIP155Signer版本签名器,签名结果中的V值的计算方法是:V=chainId*2+35

EIP155Signer.Hash()方法我们后面看

sig, err := crypto.Sign(h[:], prv)

需要注意的是,即使是对于同一个哈希值h,每次使用同一个私钥prv对哈希值h进行签名得到的R, S这2个字段不一定会相同。

 

二:交易hash生成

交易hash的生成和签名器的Hash方法对交易对象tx进行hash的过程类似,我们先看下EIP155Signer.Hash()方法

 

 

 实际上就是将Transaction的基础输入数据取出来再加上chainid一起传入rlpHash进行rlp编码后hash

基础输入数据包括:

AccountNonce(发起者的Nonce),

Price(gasPrice),

GasLimit,Recipient(接收者),

Amount(转账金额),

Payload(智能合约相关的内容,如果是普通转账交易,该字段为空)

 

 

 再看下以太坊上交易hash的计算

 

 

 可以看到直接使用的是rlpHash(Transaction)

Transaction的结构体为

 

 data的结构体为

 

 因为hash字段使用了rlp:"-",表示rlp编码解码时忽略该字段。hash ,size 和from这3个atomic.Value类型的字段也是不包括的 )进行处理,处理过程是先对整个交易数据进行RLP编码,再运用Keccak256哈希算法获得交易哈希

所以最后除了AccountNonce,Price,GasLimit,Recipient,Amount,Payload还多了签名的V、R、S三个值

 

所以一笔交易在签名之后生成了V、R、S,就算还没被打包,他的交易hash也是可以计算出来的了。

而由于V、R、S每次签名都不一样,所以不同的2笔交易计算出来的交易哈希相同的可能性基本为0

 

标签:EIP155Signer,hash,以太,id,chainId,签名,哈希,交易
来源: https://www.cnblogs.com/jinqi520/p/16352798.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有