Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion op-bindings/bindings/optimismportal.go

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion op-bindings/bindings/optimismportal_more.go

Large diffs are not rendered by default.

58 changes: 29 additions & 29 deletions packages/contracts-bedrock/.gas-snapshot
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
AddressAliasHelper_Test:test_fuzz_roundtrip(address) (runs: 256, μ: 466, ~: 466)
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_0() (gas: 261333)
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_1() (gas: 75493)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 348072)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 112250)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 348094)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 112225)
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_0() (gas: 265117)
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_1() (gas: 269367)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 352028)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 356176)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 352050)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 356151)
GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 40569)
GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 68671)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 74964)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 35777)
CrossDomainOwnableThroughPortal_Test:test_depositTransaction_crossDomainOwner() (gas: 61850)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 78748)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 81043)
CrossDomainOwnableThroughPortal_Test:test_depositTransaction_crossDomainOwner() (gas: 65148)
CrossDomainOwnable_Test:test_onlyOwner() (gas: 34945)
CrossDomainOwnable_Test:test_revertOnlyOwner() (gas: 10619)
CrossDomainOwnable2_Test:test_onlyOwner() (gas: 75664)
Expand Down Expand Up @@ -61,15 +61,15 @@ L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageToSystemContract() (gas:
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageV0Fails() (gas: 33272)
L1CrossDomainMessenger_Test:test_L1MessengerRelayShouldRevertIfPaused() (gas: 60526)
L1CrossDomainMessenger_Test:test_L1MessengerReplayMessageWithValue() (gas: 38193)
L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 299481)
L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1490366)
L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 303265)
L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1495182)
L1CrossDomainMessenger_Test:test_L1MessengerUnpause() (gas: 41003)
L1CrossDomainMessenger_Test:test_L1MessengerXDomainSenderReverts() (gas: 24283)
L1CrossDomainMessenger_Test:test_L1MessengerxDomainMessageSenderResets() (gas: 81947)
L1StandardBridge_Test:test_depositERC20() (gas: 573393)
L1StandardBridge_Test:test_depositERC20To() (gas: 575512)
L1StandardBridge_Test:test_depositETH() (gas: 367613)
L1StandardBridge_Test:test_depositETHTo() (gas: 324750)
L1StandardBridge_Test:test_depositERC20() (gas: 577349)
L1StandardBridge_Test:test_depositERC20To() (gas: 579468)
L1StandardBridge_Test:test_depositETH() (gas: 371397)
L1StandardBridge_Test:test_depositETHTo() (gas: 328534)
L1StandardBridge_Test:test_finalizeBridgeETH_incorrectValueReverts() (gas: 34246)
L1StandardBridge_Test:test_finalizeBridgeETH_sendToMessengerReverts() (gas: 34325)
L1StandardBridge_Test:test_finalizeBridgeETH_sendToSelfReverts() (gas: 34284)
Expand All @@ -80,7 +80,7 @@ L1StandardBridge_Test:test_onlyEOADepositERC20() (gas: 22420)
L1StandardBridge_Test:test_onlyEOADepositETH() (gas: 40793)
L1StandardBridge_Test:test_onlyL2BridgeFinalizeERC20Withdrawal() (gas: 31579)
L1StandardBridge_Test:test_onlyPortalFinalizeERC20Withdrawal() (gas: 31188)
L1StandardBridge_Test:test_receive() (gas: 514254)
L1StandardBridge_Test:test_receive() (gas: 518210)
L2CrossDomainMessenger_Test:testCannot_L2MessengerPause() (gas: 10860)
L2CrossDomainMessenger_Test:test_L1MessengerRelayMessageRevertsOnReentrancy() (gas: 167641)
L2CrossDomainMessenger_Test:test_L2MessengerMessageVersion() (gas: 8411)
Expand Down Expand Up @@ -159,7 +159,7 @@ OptimismPortalUpgradeable_Test:test_cannotInitImpl() (gas: 10813)
OptimismPortalUpgradeable_Test:test_cannotInitProxy() (gas: 15789)
OptimismPortalUpgradeable_Test:test_initValuesOnProxy() (gas: 15967)
OptimismPortalUpgradeable_Test:test_upgrading() (gas: 180632)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_differential(address,address,uint256,uint256,bytes) (runs: 256, μ: 258364, ~: 259036)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_differential(address,address,uint256,uint256,bytes) (runs: 256, μ: 258549, ~: 259036)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_revertsOnInsufficientGas() (gas: 158312)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_revertsOnInvalidOutputRootProof() (gas: 81265)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_revertsOnRecentWithdrawal() (gas: 50525)
Expand All @@ -171,15 +171,15 @@ OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_succee
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails() (gas: 289474)
OptimismPortal_Test:test_OptimismPortalConstructor() (gas: 17341)
OptimismPortal_Test:test_OptimismPortalContractCreationReverts() (gas: 14199)
OptimismPortal_Test:test_OptimismPortalReceiveEth() (gas: 127534)
OptimismPortal_Test:test_depositTransaction_NoValueContract() (gas: 76668)
OptimismPortal_Test:test_depositTransaction_NoValueEOA() (gas: 76969)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract() (gas: 76650)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA() (gas: 76994)
OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation() (gas: 83694)
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation() (gas: 75881)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract() (gas: 83333)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA() (gas: 83993)
OptimismPortal_Test:test_OptimismPortalReceiveEth() (gas: 131318)
OptimismPortal_Test:test_depositTransaction_NoValueContract() (gas: 80452)
OptimismPortal_Test:test_depositTransaction_NoValueEOA() (gas: 80925)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract() (gas: 80434)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA() (gas: 80778)
OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation() (gas: 87478)
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation() (gas: 79665)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract() (gas: 87117)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA() (gas: 87949)
OptimismPortal_Test:test_isBlockFinalized() (gas: 113744)
OptimismPortal_Test:test_simple_isBlockFinalized() (gas: 24130)
Proxy_Test:test_clashingFunctionSignatures() (gas: 101427)
Expand Down Expand Up @@ -291,13 +291,13 @@ RLPWriter_Test:test_writeUint_smallint3() (gas: 7324)
RLPWriter_Test:test_writeUint_smallint4() (gas: 7303)
RLPWriter_Test:test_writeUint_zero() (gas: 7771)
ResourceMetering_Test:test_initialResourceParams() (gas: 8964)
ResourceMetering_Test:test_updateNoGasDelta() (gas: 2008191)
ResourceMetering_Test:test_updateNoGasDelta() (gas: 2011975)
ResourceMetering_Test:test_updateOneEmptyBlock() (gas: 18171)
ResourceMetering_Test:test_updateParamsNoChange() (gas: 13956)
ResourceMetering_Test:test_updateTenEmptyBlocks() (gas: 20571)
ResourceMetering_Test:test_updateTwoEmptyBlocks() (gas: 20594)
ResourceMetering_Test:test_useMaxSucceeds() (gas: 8017134)
ResourceMetering_Test:test_useMoreThanMaxReverts() (gas: 16058)
ResourceMetering_Test:test_useMaxSucceeds() (gas: 8020918)
ResourceMetering_Test:test_useMoreThanMaxReverts() (gas: 8014412)
SafeCall_Test:test_safeCall(address,address,uint256,uint64,bytes) (runs: 256, μ: 43632, ~: 45833)
Semver_Test:test_behindProxy() (gas: 506906)
Semver_Test:test_version() (gas: 9487)
Expand Down
36 changes: 18 additions & 18 deletions packages/contracts-bedrock/contracts/L1/ResourceMetering.sol
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,24 @@ abstract contract ResourceMetering is Initializable {
// Run the underlying function.
_;

// Determine the amount of ETH to be paid.
uint256 resourceCost = _amount * params.prevBaseFee;

// We currently charge for this ETH amount as an L1 gas burn, so we convert the ETH amount
// into gas by dividing by the L1 base fee. We assume a minimum base fee of 1 gwei to avoid
// division by zero for L1s that don't support 1559 or to avoid excessive gas burns during
// periods of extremely low L1 demand. One-day average gas fee hasn't dipped below 1 gwei
// during any 1 day period in the last 5 years, so should be fine.
uint256 gasCost = resourceCost / Math.max(block.basefee, 1000000000);

// Give the user a refund based on the amount of gas they used to do all of the work up to
// this point. Since we're at the end of the modifier, this should be pretty accurate. Acts
// effectively like a dynamic stipend (with a minimum value).
uint256 usedGas = initialGas - gasleft();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now the blockDiff > 0 code doesn't count toward the usedGas for the burn anymore, the burn should be after that

if (gasCost > usedGas) {
Burn.gas(gasCost - usedGas);
}

// Update block number and base fee if necessary.
uint256 blockDiff = block.number - params.prevBlockNum;
if (blockDiff > 0) {
Expand Down Expand Up @@ -133,24 +151,6 @@ abstract contract ResourceMetering is Initializable {
int256(uint256(params.prevBoughtGas)) <= MAX_RESOURCE_LIMIT,
"ResourceMetering: cannot buy more gas than available gas limit"
);

// Determine the amount of ETH to be paid.
uint256 resourceCost = _amount * params.prevBaseFee;

// We currently charge for this ETH amount as an L1 gas burn, so we convert the ETH amount
// into gas by dividing by the L1 base fee. We assume a minimum base fee of 1 gwei to avoid
// division by zero for L1s that don't support 1559 or to avoid excessive gas burns during
// periods of extremely low L1 demand. One-day average gas fee hasn't dipped below 1 gwei
// during any 1 day period in the last 5 years, so should be fine.
uint256 gasCost = resourceCost / Math.max(block.basefee, 1000000000);

// Give the user a refund based on the amount of gas they used to do all of the work up to
// this point. Since we're at the end of the modifier, this should be pretty accurate. Acts
// effectively like a dynamic stipend (with a minimum value).
uint256 usedGas = initialGas - gasleft();
if (gasCost > usedGas) {
Burn.gas(gasCost - usedGas);
}
}

/**
Expand Down