• Mark Tyneway's avatar
    l2geth: sequencer fee buffer · c612a903
    Mark Tyneway authored
    The fees are currently calculated as a sum of the L1 fee and the L2 fee
    where the L1 fee is the approximate cost of the batch submission of the
    transaction (L1 gas price * L1 gas used) and the L2 fee is the
    approximate cost of the execution on L2 taking into account congestion
    (L2 gas price * L2 gas limit).
    
    When either the L1 or L2 gas price is volatile, it can result in the
    quote that the user receives from `eth_estimateGas` to be rejected
    as the fee that the Sequencer is expecting has gone up.
    
    This PR adds logic to set a buffer in either direction of the current
    price that will allow the sequencer to still accept transactions within.
    
    Two new config options are added:
    
    - `--rollup.feethresholddown` or `ROLLUP_FEE_THRESHOLD_DOWN`
    - `--rollup.feethresholdup` or `ROLLUP_FEE_THRESHOLD_UP`
    
    Note that these config options are only useful for when running
    in Sequencer mode, they are not useful for replicas/verifiers.
    This is because the Sequencer is the only write node in the network.
    
    These config options are interpreted as floating point numbers and are
    multiplied against the current fee that the sequencer is expecting.
    To allow for a downward buffer of 10% and an upward buffer of 100%,
    use the options:
    
    - `ROLLUP_FEE_THRESHOLD_DOWN=0.9`
    - `ROLLUP_FEE_THRESHOLD_UP=2`
    
    This will allow for slight fee volatility downwards and prevent users
    from excessively overpaying on fees accidentally.
    
    This is a UX and profit tradeoff for the sequencer and can be exploited
    by bots. If bots are consistently taking advantage of this, the max
    threshold down will have to be calibrated to what the normal fee is
    today.
    
    Both config options are sanity checked in the `SyncService` constructor
    and will result in errors if they are bad. The threshold down must
    be less than 1 and the threshold up must be greater than 1.
    c612a903
Name
Last commit
Last update
..
accounts Loading commit data...
build Loading commit data...
cmd Loading commit data...
common Loading commit data...
consensus Loading commit data...
console Loading commit data...
contracts/checkpointoracle Loading commit data...
core Loading commit data...
crypto Loading commit data...
diffdb Loading commit data...
docs/audits Loading commit data...
eth Loading commit data...
ethclient Loading commit data...
ethdb Loading commit data...
ethstats Loading commit data...
event Loading commit data...
graphql Loading commit data...
internal Loading commit data...
les Loading commit data...
light Loading commit data...
log Loading commit data...
metrics Loading commit data...
miner Loading commit data...
mobile Loading commit data...
node Loading commit data...
p2p Loading commit data...
params Loading commit data...
rlp Loading commit data...
rollup Loading commit data...
rpc Loading commit data...
scripts Loading commit data...
signer Loading commit data...
swarm Loading commit data...
tests Loading commit data...
trie Loading commit data...
whisper Loading commit data...
.golangci.yml Loading commit data...
.mailmap Loading commit data...
AUTHORS Loading commit data...
CHANGELOG.md Loading commit data...
COPYING Loading commit data...
COPYING.LESSER Loading commit data...
Makefile Loading commit data...
README.md Loading commit data...
fuzzbuzz.yaml Loading commit data...
go.mod Loading commit data...
go.sum Loading commit data...
interfaces.go Loading commit data...
package.json Loading commit data...