Skip to content
Vie edited this page Sep 18, 2020 · 1 revision

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)

GasPrice

  1. 接口eth_gasPrice获取GasPrice时,主要通过gpo(Gas Price Oracle)提供,GPO会获取最近 Eth.GPO.Blocks 个块的GasPrice,按照 Eth.GPO.Percentile 获取百分比作为GasPrice。coinbase发送的任意费用的交易不参与计算(coinbase发送的0手续费交易不记录,但是其它地址发送0手续费交易会被记录并计算);

  2. GPO有个默认值,默认值为 Eth.GPO.Default, 如果这个字段没有设置,则使用 Eth.Miner.GasPrice 的值(包括只读节点和记账节点);

  3. 每个block都有一个此高度的 SuggestGasPrice (基于最近 Eth.GPO.Blocks 个块的计算而得),最新block的GasPrice为LatestPrice;

  4. 当一个block的GasPrice为0(这个块没有交易或者只有coinbase的交易),则使用 LatesPrice 的值;

  5. 记账节点打包交易时通过 Eth.Miner.GasPrice 设置最小值,低于此值不会被打入块中;

  6. TxPool有一个加入TxPool的最小值,即 Eth.TxPool.PriceLimit,少于此值的tx不会被加入到TxPool;

  7. TxPool来源有两个,一个是其它节点广播的(Remote),另一个是通过本节点RPC URL提交的(Locals),默认 Locals 交易不受 Eth.TxPool.PriceLimit 限制;

  8. 如果字段 Eth.TxPool.NoLocals 为 true, 则 Locals 交易需要受 Eth.TxPool.PriceLimit 最小值限制,即通过RPC URL提交到该节点的交易的GasPrice小于 Eth.TxPool.PriceLimit 会被立即拒绝;

  9. 如果一个节点时记账节点,则 Eth.TxPool.PriceLimit 会被更改为 Eth.Miner.GasPrice;

  10. 相同nonce的交易替换时,GasPrice需要增加一个百分比,Eth.TxPool.PriceBump

GasLimit

  1. Eth.Miner.GasFloor 和 Eth.Miner.GasCeil 分别为打一个块GasLimit的下限和上限;
  2. Block.GasLimit和Tx.GasLimit可以理解为两个步骤:
  • 第一步骤是确定 block.GasLimit的值,这个值是在 [Eth.Miner.GasFloor,Eth.Miner.GasCeil] 之间;
  • 第二步骤是把txs放入block,这时候会判断txs的GasLimit之和不能大于 block.GasLimit。
  1. 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
Clone this wiki locally