以太坊的交易是通过旷工从矿池中挖矿完成的,而挖矿是❓通俗讲就是将矿池中提交的交易按照价格高低进行筛选打包成块的过程
为何有gas
说到gas就需要整理一个概念---什么是gas?
首先gas是个度量单位:我们生活中有衡量长短的单位-米,时间单位分钟小时和天以及年以及汽车损耗的汽油的度量单位升……有了这些作为铺垫我们就好理解以太坊中的gas啦。
在交易过程中对于大家来书同样一个比特币或者ether折换成人民币在同一时刻应该是相同的,对于同一个交易大家挖矿时消耗的计算力是相同的。那么怎么将每一份计算力划分出来等价于一份以太坊的资源消耗呢?对了划分度量---gas。这个gas犹如我们的金钱中的圆角分的数量是个资源对应出来的个体---买衣服花了200块钱这个那么换算成就是我买衣服花了200个ether(当然了这个衣服太贵啦…)
GasPrice
gasPrice是整个网络公认动态调整的一个代表一个gas购买力的数据。还原到现实世界的一个例子就是:有车的朋友都会关注汽油价格的波动,一个100升的油箱在汽油是2¥/V的时候你加满需要200块钱,还原至以太坊就是我执行这个预算需要消耗100的算力每个算力需要2gas,那么每个gas的价格就是50啦。当然了这100个算力是燃烧人民币换来的,假设折合1000块钱吧此时我们的gasprice就是对应人民币就是500 ¥/gas。再假如1gas就是一个以太币的话,那么1以太币的价格就是500大洋啦
好了,上面的是我们倒着推出来的,现实是这些都是系统内设动态变化的,说白了就是单价,使用是根据数量*单价计算总价用的
阻塞交易
区块链之所以包含链是因为它是把交易矿池中的交易通过旷工根据算力计算打包成块,然后再将这些块按照序号排列起来。这就出现两个问题
1 从矿池中取交易打包
2将打包数据编号
对于矿池中的交易数据需要旷工挖矿而旷工肯定是挑挑拣拣的啦---要么容易单位算力打包的多,要么总价贵,总之就是我要挑单位收益高的来。当然了系统也是这么设定的要不然大家都不钱系统怎么运行啊。
既然有挑挑拣拣就会出现有些没有利润的交易一直没有苦力愿意干从而一直呆在矿池无法被打包进而也就无法完成交易啦
再来说说打包过程,一个块中可以打包多个交易目前根据算法算出大概是每个块能打包224个交易,假如你的正好是某个快的打包的第一个交易那么你需要等待后续的223个也被打包了才有可能被整个链条承认…
处理交易阻塞
假如我们模拟一笔交易,费用很低那么他会持续的呆在矿池中
代码语言:javascript复制Type: Pending transaction
From: 0xED96dD3Be847b387217EF9DE5B20D8392A6cdf40
To: 0xa34C6BCAe6F46ac6470443CCea67d937f6060c7E
Nonce: 1
Gas limit: 21000
Gas price: 1 GWei
Value: 0.005 Ether
上文说到我们的交易提交后有可能价格低无法被打包,那么怎么处理呢?两种办法:修改价格重新提交,取消交易
1 取消交易
以太坊没有从交易池中移除交易的机制,但可以用不同的信息覆盖交易,例如用0值转移回发送方,这具有类似的效果。但这仍然是一个交易,仍然需要被开采。重新提交上述交易来达到取消交易的结果,如下所示:
代码语言:javascript复制Type: Pending transaction
From: 0xED96dD3Be847b387217EF9DE5B20D8392A6cdf40
To: 0xED96dD3Be847b387217EF9DE5B20D8392A6cdf40
Nonce: 1
Gas limit: 21000
Gas price: 60 GWei
Value: 0
注意,“To”地址改成了“From”地址,“Value”改成了0。
2 修改价格
我们把价格提高
代码语言:javascript复制Type: Pending transaction
From: 0xED96dD3Be847b387217EF9DE5B20D8392A6cdf40
To: 0xa34C6BCAe6F46ac6470443CCea67d937f6060c7E
Nonce: 1
Gas limit: 21000
Gas price: 10 GWei
Value: 0.005 Ether
注意 “From” 地址和 “Nonce” 值在两个交易中是相同的。这两个值可以用来唯一确定一个交易,允许交易覆盖。而且 gas 价格发生了相应的变化。