以太坊代币与账户交易

avatar
avatar
admin
1568
文章
4
评论
2020年5月12日16:11:35 评论 313 1424字阅读4分44秒

以太的单位

以太币的最小单位是Wei。Wei是一个非常小的单位,1Ether= 1018 Wei,和无限可分也差不了多少了。除了基本单位Wei,为了使用方便还有其他的单位,他们的关系如下:

  •  Kwei = 103  Wei
  •  Mwei = 106  Wei
  •  Gwei = 10 Wei
  •  Microether = 1012  Wei
  •  Milliether = 1015  Wei
  •  Ether / SCC = 1018 Wei

我们一般记住wei , Gwei=109wei,Ether = 1018wei即可。

代币交易过程

以太坊代币与账户交易

交易(Transaction)的过程原理

1.交易发起

指定目标地址和交易金额,以及需要的gas price/gas limit等信息,构建一笔交易并生成Transaction实例。创建的交易json字段定义:

以太坊代币与账户交易

 

根据这个json字段可生成一个Transaction实例:

 

Transaction 实例结构

txdata             // txdata字段

From            // 缓存数据:发送方地址

Hash             // 缓存数据:交易Hash

Size             // 缓存数据:交易的大小

其中txdata这个数据结构我们需要用来进行数字签名:

以太坊代币与账户交易

 

2.交易签名

使用账户私钥对交易进行签名。

当前代币所有者先通过Keccak-256算法计算交易数据的hash值,然后结合账户的私钥,通过ECDSA-secp256k1,也就是椭圆曲线数字签名算法生成签名数据(RSV)并将这个签名附加在transaction实例的末尾,制作成交易单。

 以太坊代币与账户交易

我们发现,txdata只有接收方的地址(Recipient)而没有发送方的地址,R,S,V的作用就是我们可以使用ECDSA推导获得from:

以太坊代币与账户交易

经过以上交易实例的构造,我们就可以将实例提交到交易池txpool了。

 

3.提交交易

签名后的交易会先提交到本地SCC链节点,本地节点先对交易签名进行验证后,把transaction实例的这笔交易加入到交易缓冲池txpool中。提交交易的目标是先把交易放入交易池的队列queue中记录在案,然后再从queue中选一部分放入pending中进行处理。如果发现txpool满了,则依据price中的排序,剔除低油价的交易。

 

4.节点确认

一个或者多个节点对txpool中的交易的信息验证确认。

生成的交易需要被区块链网络中的矿工节点打包到区块,才能写入到区块链中。矿工会有一个待处理的交易列表,其中的交易是按交易的gasPrice进行排序的,交易的gasPrice越高,处理的优先级就越高。如果交易的gasPrice过低,有可能一直得不到矿工的处理,从而被忽略。

矿工节点选择好要打包的交易之后,就开始了PoW(Proof of Work)挖矿过程,最先发现新的区块的矿工能够将交易打包至区块,并且获取到相应的奖励。节点会确认这个区块所包含的交易是否有效,确认没被重复花费且具有效数位签章后,接受该区块,此时区块才正式接上区块链,无法再窜改资料。

 

5.广播交易

把交易信息广播给其他结点。

新的区块已经产生,所有的节点都需要对区块进行同步,你的交易会随着区块的同步被同步至所有节点上。所有节点一旦接受该区块后,先前没算完的区块会失效,各节点会重新建立一个区块。每个区块的出块时间大约在10s,随着全网算力的不断变化,每个区块的产生时间会随算力增强而缩短,随算力减弱而延长。

匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: