以太坊代币与帐户交易

以太的单位

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

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

咱们通常记住wei , Gwei=109wei,Ether = 1018wei便可。json

代币交易过程

交易(Transaction)的过程原理

1.交易发起缓存

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

 

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

 

Transaction 实例结构区块链

txdata             // txdata字段spa

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

Hash             // 缓存数据:交易Hashblog

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,随着全网算力的不断变化,每一个区块的产生时间会随算力加强而缩短,随算力减弱而延长。