以太坊代币与账户交易
Posted kumata
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以太坊代币与账户交易相关的知识,希望对你有一定的参考价值。
以太的单位
以太币的最小单位是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即可。
代币交易过程
交易(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,随着全网算力的不断变化,每个区块的产生时间会随算力增强而缩短,随算力减弱而延长。
以上是关于以太坊代币与账户交易的主要内容,如果未能解决你的问题,请参考以下文章