-
Notifications
You must be signed in to change notification settings - Fork 3
Gas
Gas = GasPrice * GasLimit
flags | config | desc |
---|---|---|
--miner.gastarget | Eth.Miner.GasFloor | Target gas floor for mined blocks (default: 8000000) |
--miner.gaslimit | Eth.Miner.GasCeil | Target gas ceiling for mined blocks (default: 8000000) |
--miner.gasprice | Eth.Miner.GasPrice | Minimum gas price for mining a transaction (default: 1000000000) |
--txpool.nolocals | Eth.TxPool.NoLocals | Disables price exemptions for locally submitted transactions |
--txpool.pricelimit | Eth.TxPool.PriceLimit | Minimum gas price limit to enforce for acceptance into the pool (default: 1) |
--txpool.pricebump | Eth.TxPool.PriceBump | Price bump percentage to replace an already existing transaction (default: 10) |
--gpo.blocks | Eth.GPO.Blocks | Number of recent blocks to check for gas prices (default: 20) |
--gpo.percentile | Eth.GPO.Percentile | Suggested gas price is the given percentile of a set of recent transaction gas prices (default: 60) |
NULL | Eth.GPO.Default | Default GasPrice (default: nil, use Eth.Miner.GasPrice) |
-
接口eth_gasPrice获取GasPrice时,主要通过gpo(Gas Price Oracle)提供,GPO会获取最近 Eth.GPO.Blocks 个块的GasPrice,按照 Eth.GPO.Percentile 获取百分比作为GasPrice。coinbase发送的任意费用的交易不参与计算(coinbase发送的0手续费交易不记录,但是其它地址发送0手续费交易会被记录并计算);
-
GPO有个默认值,默认值为 Eth.GPO.Default, 如果这个字段没有设置,则使用 Eth.Miner.GasPrice 的值(包括只读节点和记账节点);
-
每个block都有一个此高度的 SuggestGasPrice (基于最近 Eth.GPO.Blocks 个块的计算而得),最新block的GasPrice为LatestPrice;
-
当一个block的GasPrice为0(这个块没有交易或者只有coinbase的交易),则使用 LatesPrice 的值;
-
记账节点打包交易时通过 Eth.Miner.GasPrice 设置最小值,低于此值不会被打入块中;
-
TxPool有一个加入TxPool的最小值,即 Eth.TxPool.PriceLimit,少于此值的tx不会被加入到TxPool;
-
TxPool来源有两个,一个是其它节点广播的(Remote),另一个是通过本节点RPC URL提交的(Locals),默认 Locals 交易不受 Eth.TxPool.PriceLimit 限制;
-
如果字段 Eth.TxPool.NoLocals 为 true, 则 Locals 交易需要受 Eth.TxPool.PriceLimit 最小值限制,即通过RPC URL提交到该节点的交易的GasPrice小于 Eth.TxPool.PriceLimit 会被立即拒绝;
-
如果一个节点时记账节点,则 Eth.TxPool.PriceLimit 会被更改为 Eth.Miner.GasPrice;
-
相同nonce的交易替换时,GasPrice需要增加一个百分比,Eth.TxPool.PriceBump
- Eth.Miner.GasFloor 和 Eth.Miner.GasCeil 分别为打一个块GasLimit的下限和上限;
- Block.GasLimit和Tx.GasLimit可以理解为两个步骤:
- 第一步骤是确定 block.GasLimit的值,这个值是在 [Eth.Miner.GasFloor,Eth.Miner.GasCeil] 之间;
- 第二步骤是把txs放入block,这时候会判断txs的GasLimit之和不能大于 block.GasLimit。
- Block.GasLimit是基于前一个块的GasLimit及GasUsed进行调节,尽量使block.GasLimit稳定在 这个区间。拥堵就增加GasLimit,空快就减少GasLimit。
NewChain所需配置如下:
[Eth.Miner]
GasFloor = 100000000
GasCeil = 100000000
GasPrice = 500000000000000
[Eth.TxPool]
NoLocals = true
PriceLimit = 500000000000000
PriceBump = 10
[Eth.GPO]
Blocks = 20
Percentile = 60