mirror of
https://github.com/status-im/nimbus-eth1.git
synced 2025-02-23 09:18:29 +00:00
unify eip1559TxNormalization
result.gasPrice = baseFee + min(result.maxPriorityFee, result.maxFee - baseFee) cannot be simplified into result.gasPrice = min(result.maxPriorityFee + baseFee, result.maxFee) the expression is not commutative
This commit is contained in:
parent
64c2227c7c
commit
fdbabf0b80
@ -13,6 +13,7 @@ import
|
|||||||
../../db/accounts_cache,
|
../../db/accounts_cache,
|
||||||
../../forks,
|
../../forks,
|
||||||
../../transaction/call_evm,
|
../../transaction/call_evm,
|
||||||
|
../../transaction,
|
||||||
../../vm_state,
|
../../vm_state,
|
||||||
../../vm_types,
|
../../vm_types,
|
||||||
../validate,
|
../validate,
|
||||||
@ -27,12 +28,6 @@ import
|
|||||||
# Private functions
|
# Private functions
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
proc eip1559TxNormalization(tx: Transaction): Transaction =
|
|
||||||
result = tx
|
|
||||||
if tx.txType < TxEip1559:
|
|
||||||
result.maxPriorityFee = tx.gasPrice
|
|
||||||
result.maxFee = tx.gasPrice
|
|
||||||
|
|
||||||
proc eip1559BaseFee(header: BlockHeader; fork: Fork): UInt256 =
|
proc eip1559BaseFee(header: BlockHeader; fork: Fork): UInt256 =
|
||||||
## Actually, `baseFee` should be 0 for pre-London headers already. But this
|
## Actually, `baseFee` should be 0 for pre-London headers already. But this
|
||||||
## function just plays safe. In particular, the `test_general_state_json.nim`
|
## function just plays safe. In particular, the `test_general_state_json.nim`
|
||||||
@ -54,18 +49,13 @@ proc processTransactionImpl(
|
|||||||
#trace "Sender", sender
|
#trace "Sender", sender
|
||||||
#trace "txHash", rlpHash = ty.rlpHash
|
#trace "txHash", rlpHash = ty.rlpHash
|
||||||
|
|
||||||
var
|
|
||||||
tx = eip1559TxNormalization(tx)
|
|
||||||
let
|
let
|
||||||
roDB = vmState.readOnlyStateDB
|
roDB = vmState.readOnlyStateDB
|
||||||
baseFee256 = header.eip1559BaseFee(fork)
|
baseFee256 = header.eip1559BaseFee(fork)
|
||||||
baseFee = baseFee256.truncate(int64)
|
baseFee = baseFee256.truncate(GasInt)
|
||||||
|
tx = eip1559TxNormalization(tx, baseFee, fork)
|
||||||
priorityFee = min(tx.maxPriorityFee, tx.maxFee - baseFee)
|
priorityFee = min(tx.maxPriorityFee, tx.maxFee - baseFee)
|
||||||
miner = vmState.coinbase()
|
miner = vmState.coinbase()
|
||||||
if FkLondon <= fork:
|
|
||||||
# The signer pays both the priority fee and the base fee. So tx.gasPrice
|
|
||||||
# now is the effective gasPrice which also effects the `stateRoot` value.
|
|
||||||
tx.gasPrice = priorityFee + baseFee
|
|
||||||
|
|
||||||
# Return failure unless explicitely set `ok()`
|
# Return failure unless explicitely set `ok()`
|
||||||
result = err()
|
result = err()
|
||||||
|
@ -153,3 +153,15 @@ proc signTransaction*(tx: Transaction, privateKey: PrivateKey, chainId: ChainId,
|
|||||||
|
|
||||||
result.R = Uint256.fromBytesBE(sig[0..31])
|
result.R = Uint256.fromBytesBE(sig[0..31])
|
||||||
result.S = Uint256.fromBytesBE(sig[32..63])
|
result.S = Uint256.fromBytesBE(sig[32..63])
|
||||||
|
|
||||||
|
func eip1559TxNormalization*(tx: Transaction;
|
||||||
|
baseFee: GasInt; fork: Fork): Transaction =
|
||||||
|
## This function adjusts a legacy transaction to EIP-1559 standard. This
|
||||||
|
## is needed particularly when using the `validateTransaction()` utility
|
||||||
|
## with legacy transactions.
|
||||||
|
result = tx
|
||||||
|
if tx.txType < TxEip1559:
|
||||||
|
result.maxPriorityFee = tx.gasPrice
|
||||||
|
result.maxFee = tx.gasPrice
|
||||||
|
if FkLondon <= fork:
|
||||||
|
result.gasPrice = baseFee + min(result.maxPriorityFee, result.maxFee - baseFee)
|
||||||
|
@ -173,22 +173,6 @@ proc txPostLondonAcceptableTipAndFees(xp: TxPoolRef; item: TxItemRef): bool =
|
|||||||
return false
|
return false
|
||||||
true
|
true
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
# Public helper function, needed here and in the packer
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
func eip1559TxNormalization*(tx: Transaction;
|
|
||||||
baseFee: GasPrice; fork: Fork): Transaction =
|
|
||||||
## This function adjusts a legacy transaction to EIP-1559 standard. This
|
|
||||||
## is needed particularly when using the `validateTransaction()` utility
|
|
||||||
## with legacy transactions.
|
|
||||||
result = tx
|
|
||||||
if tx.txType < TxEip1559:
|
|
||||||
result.maxPriorityFee = tx.gasPrice
|
|
||||||
result.maxFee = tx.gasPrice
|
|
||||||
if FkLondon <= fork:
|
|
||||||
result.gasPrice = min(result.maxPriorityFee + baseFee.int64, result.maxFee)
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# Public functionss
|
# Public functionss
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
@ -248,7 +232,7 @@ proc classifyValidatePacked*(xp: TxPoolRef;
|
|||||||
xp.chain.limits.maxLimit
|
xp.chain.limits.maxLimit
|
||||||
else:
|
else:
|
||||||
xp.chain.limits.trgLimit
|
xp.chain.limits.trgLimit
|
||||||
tx = item.tx.eip1559TxNormalization(xp.chain.baseFee, fork)
|
tx = item.tx.eip1559TxNormalization(xp.chain.baseFee.GasInt, fork)
|
||||||
|
|
||||||
roDB.validateTransaction(tx, item.sender, gasLimit, baseFee, fork)
|
roDB.validateTransaction(tx, item.sender, gasLimit, baseFee, fork)
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ import
|
|||||||
../../../forks,
|
../../../forks,
|
||||||
../../../p2p/[dao, executor, validate],
|
../../../p2p/[dao, executor, validate],
|
||||||
../../../transaction/call_evm,
|
../../../transaction/call_evm,
|
||||||
|
../../../transaction,
|
||||||
../../../vm_state,
|
../../../vm_state,
|
||||||
../../../vm_types,
|
../../../vm_types,
|
||||||
../tx_chain,
|
../tx_chain,
|
||||||
@ -84,7 +85,7 @@ proc runTx(pst: TxPackerStateRef; item: TxItemRef): GasInt
|
|||||||
let
|
let
|
||||||
fork = pst.xp.chain.nextFork
|
fork = pst.xp.chain.nextFork
|
||||||
baseFee = pst.xp.chain.baseFee
|
baseFee = pst.xp.chain.baseFee
|
||||||
tx = item.tx.eip1559TxNormalization(baseFee, fork)
|
tx = item.tx.eip1559TxNormalization(baseFee.GasInt, fork)
|
||||||
|
|
||||||
safeExecutor "tx_packer.runTx":
|
safeExecutor "tx_packer.runTx":
|
||||||
# Execute transaction, may return a wildcard `Exception`
|
# Execute transaction, may return a wildcard `Exception`
|
||||||
|
Loading…
x
Reference in New Issue
Block a user