Altcoins Talks - Cryptocurrency Forum

Local => 中文 (Chinese) => 媒体 => Topic started by: billy.ryoko on September 03, 2018, 10:17:36 AM

Title: 以太坊探究:ETH交易部分分析
Post by: billy.ryoko on September 03, 2018, 10:17:36 AM
交易结构定义在 core/types/transaction.go 中:



这个 atomic 是 go 语言的一个包 sync/atomic,用来实现原子操作。在这个结构体中, data 为数据字段,其余三个为缓存。下面是计算hash的函数:



计算哈希前,首先会从缓存 tx.hash 中获取,如果取到,则直接返回值。没有,则使用rlpHash 计算:



hash 的计算方式为:先将交易的 tx.data 进行 rlpEncode 编码(定义在:core/types/transaction.go 中)



然后再进行算法为 Keccak256 的哈希计算。即:txhash=Keccak256(rlpEncode(tx.data))

Transaction 中,data 为 txdata 类型的,定义于同文件中,里面详细规定了交易的具体字段:



这些字段的详细解释如下:

AccountNonce:此交易的发送者已发送过的交易数(可防止重放攻击)
Price:此交易的 gas price
GasLimit:本交易允许消耗的最大 gas 数量
Recipient:交易的接收者地址,如果这个字段为 nil 的话,则这个交易为“合约创建”类型交易
Amount:交易转移的以太币数量,单位是 wei
Payload:交易可以携带的数据,在不同类型的交易中有不同的含义
V R S:交易的签名数据
我们会发现,交易中没有包含发送者地址这条数据,这是因为这个地址已包含在签名信息中,后面我们会分析到相关代码,另外,以太坊节点还会提供 JSON RPC 服务,供外部调用来传输数据。传输的数据格式为 json,因此,本文件中,还定义了交易的 json 类型数据结构,以及相关的转换函数。

http://m.8btc.com/yitaifang-eth