Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

feat(protocol): tolerate invalid BaseFeeConfig on L2 #18338

Merged
merged 148 commits into from
Nov 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
148 commits
Select commit Hold shift + click to select a range
ce76e66
refactor(protocol): remove unused code post Ontake fork (#18072)
dantaik Sep 20, 2024
1f4b014
Merge branch 'main' into ontake_cleanup2
dantaik Sep 22, 2024
671dd42
Merge branch 'main' into ontake_cleanup2
dantaik Sep 26, 2024
1cf87c9
Merge branch 'main' into ontake_cleanup2
dantaik Sep 28, 2024
4b46a8c
Merge branch 'main' into ontake_cleanup2
dantaik Sep 30, 2024
86852f0
Merge branch 'main' into ontake_cleanup2
dantaik Oct 1, 2024
5e50481
Merge branch 'main' into ontake_cleanup2
dantaik Oct 4, 2024
44e5184
fix(protocol): remove "payable" from ProverSet.sol (#18209)
dantaik Oct 4, 2024
1dcc18a
fix comments
dantaik Oct 10, 2024
db376c8
Update ComposeVerifier.sol
dantaik Oct 10, 2024
93241d5
Merge branch 'main' into ontake_cleanup2
dantaik Oct 11, 2024
8e076c1
Merge branch 'main' into ontake_cleanup2
dantaik Oct 11, 2024
c9982e6
refactor(protocol): extract SgxVerifierBase to be reused (#18231)
dantaik Oct 11, 2024
a77d40a
Merge branch 'main' into ontake_cleanup2
dantaik Oct 16, 2024
7fbfe84
feat(protocol): migrate Nethermind's preconf contracts here (#18234)
dantaik Oct 18, 2024
035acb2
docs(protocol): update Hekla deployments (#18257)
davidtaikocha Oct 17, 2024
e8b1454
docs(taiko-client): update readme how to do integration test (#18256)
YoGhurt111 Oct 17, 2024
6f668e5
docs(protocol): update mainnet deployment (#18258)
davidtaikocha Oct 17, 2024
f91c2b5
chore(docs-site): remove banner (#18267)
RogerLamTd Oct 20, 2024
129960a
chore(main): release docs-site 1.12.3 (#18268)
taiko-kitty Oct 20, 2024
438d139
chore(protocol): rename B_PRECONF_REGISTRY to B_PRECONF_TASK_MANAGER …
dantaik Oct 21, 2024
4c9df8c
Merge branch 'main' into ontake_cleanup2
dantaik Oct 22, 2024
90f014b
fix(protocol): update `slotB.lastUnpausedAt` by both general unpause…
dantaik Oct 22, 2024
3f315ed
Merge branch 'main' into ontake_cleanup2
dantaik Oct 23, 2024
f7ee69f
Merge branch 'main' into ontake_cleanup2
dantaik Oct 25, 2024
9c69c2f
Merge branch 'main' into ontake_cleanup2
dantaik Oct 25, 2024
2bb5bd5
Merge branch 'main' into ontake_cleanup2
dantaik Oct 25, 2024
3f0d15a
code simplification
dantaik Oct 25, 2024
31dc47b
refactor(protocol): apply multiple improvements based on feedback fro…
dantaik Oct 25, 2024
adfbff5
Merge branch 'main' into ontake_cleanup2
dantaik Oct 25, 2024
e2b7ce7
chore(protocol): delete `approve` function from GuardianProver (#18310)
dantaik Oct 25, 2024
0c88472
refactor(protocol): set `blk.proposedIn` in genesis block (#18312)
dantaik Oct 27, 2024
6196eaa
refactor(protocol): simplify some protocol code based on OpenZeppelin…
dantaik Oct 26, 2024
b5daab8
merge
dantaik Oct 27, 2024
63ac08b
Update LibProposing.sol
dantaik Oct 27, 2024
18c0b2f
Merge branch 'main' into ontake_cleanup2
dantaik Oct 27, 2024
61aaa4c
fix initializers
dantaik Oct 27, 2024
39dcdff
Update Multicall3.sol
dantaik Oct 27, 2024
4e07014
Merge branch 'fix_initializers2' into ontake_cleanup2
dantaik Oct 27, 2024
3588f3d
chore(protocol): emit state root as 0 in events for non-sync blocks (…
dantaik Oct 28, 2024
54b4b86
Merge branch 'main' into ontake_cleanup2
dantaik Oct 28, 2024
e6ea55b
docs(protocol): improve Natspec comments (#18320) (#18321)
dantaik Oct 28, 2024
1abde15
Update LibProposing.sol
dantaik Oct 28, 2024
818bbd6
Merge branch 'main' into ontake_cleanup2
dantaik Oct 28, 2024
290a9f9
Update LibProposing.sol
dantaik Oct 28, 2024
eb47f88
fix(protocol): check ontake for height in _proposeBlock (#18329)
dantaik Oct 28, 2024
1df854b
Merge branch 'main' into ontake_cleanup2
dantaik Oct 29, 2024
949f60b
fix eip 1559 and add fuzz tests
dantaik Oct 29, 2024
424bfda
Merge branch 'main' into improve-eip-1559
dantaik Oct 29, 2024
f71df9e
Merge branch 'main' into ontake_cleanup2
dantaik Oct 29, 2024
83790c2
Merge branch 'ontake_cleanup2' into improve-eip-1559
dantaik Oct 29, 2024
19564ae
Update TaikoL2.sol
dantaik Oct 29, 2024
576f748
Merge branch 'main' into ontake_cleanup2
dantaik Oct 29, 2024
520d124
Merge branch 'ontake_cleanup2' into improve-eip-1559
dantaik Oct 29, 2024
454d4b6
chore(protocol): use require-statements for readability (#18325)
dantaik Oct 30, 2024
dc29ad2
Merge branch 'main' into ontake_cleanup2
dantaik Oct 30, 2024
5b13b05
Merge branch 'ontake_cleanup2' into improve-eip-1559
dantaik Oct 30, 2024
6b03929
Update LibData.sol
dantaik Oct 30, 2024
3a77c54
Merge branch 'ontake_cleanup2' into improve-eip-1559
dantaik Oct 30, 2024
ede689c
compile
dantaik Oct 30, 2024
71292c2
Update TaikoL2.sol
dantaik Oct 30, 2024
f1961e8
Update TaikoL2.sol
dantaik Oct 30, 2024
b9d3ad0
Update TaikoL2.sol
dantaik Oct 30, 2024
2bebce7
Update TaikoL2.sol
dantaik Oct 30, 2024
4c15789
Update TaikoL2.sol
dantaik Oct 30, 2024
1ff2972
Update TaikoL2.sol
dantaik Oct 30, 2024
05190ad
Update TaikoL2.sol
dantaik Oct 30, 2024
e9b9912
Update TaikoL2.sol
dantaik Oct 30, 2024
4be63e3
Update TaikoL2.sol
dantaik Oct 30, 2024
18e9bea
Update TaikoL2.sol
dantaik Oct 30, 2024
beb1ee3
more
dantaik Oct 30, 2024
93d7f24
feat(protocol): change devnet `ontakeForkHeight` to `0` after cleanup
davidtaikocha Oct 30, 2024
f5cac65
Update TaikoL2.sol
dantaik Oct 30, 2024
689514d
Update TaikoL2.sol
dantaik Oct 30, 2024
a1fe60b
Update TaikoL2.sol
dantaik Oct 30, 2024
9aa8295
Merge branch 'main' into ontake_cleanup2
dantaik Oct 30, 2024
6b453ce
restore maxBlocksToVerifyPerProof
dantaik Oct 30, 2024
502d87d
Update TierProviderBase.sol
dantaik Oct 30, 2024
e98792e
Merge branch 'ontake_cleanup2' into improve-eip-1559
dantaik Oct 30, 2024
2d5f0f1
Update LibEIP1559.sol
dantaik Oct 30, 2024
c8599fa
Update LibEIP1559.sol
dantaik Oct 30, 2024
c075a12
more
dantaik Oct 30, 2024
2da4e46
Update LibEIP1559.t.sol
dantaik Oct 30, 2024
1d83c3b
comments
dantaik Oct 30, 2024
1d57fcc
Merge branch 'ontake_cleanup2' into improve-eip-1559
dantaik Oct 30, 2024
399bd13
forge fmt & update contract layout tables
dantaik Oct 30, 2024
ac3a275
more
dantaik Oct 31, 2024
f4bb20b
fix
dantaik Oct 31, 2024
5e54df4
fix
dantaik Oct 31, 2024
d4f899b
Update gen-layouts.sh
dantaik Oct 31, 2024
6982409
rename
dantaik Oct 31, 2024
9dd5e28
Update TaikoL2.sol
dantaik Oct 31, 2024
607bfb5
rename
dantaik Oct 31, 2024
696c209
Update LibEIP1559.sol
dantaik Oct 31, 2024
8a37385
Update TaikoL2V1.sol
dantaik Oct 31, 2024
44fc91e
Update TaikoL2.sol
dantaik Oct 31, 2024
5b79924
Update TaikoL2.sol
dantaik Oct 31, 2024
dacb5a2
forge fmt & update contract layout tables
dantaik Oct 31, 2024
0c5f50b
Update TaikoL2.sol
dantaik Oct 31, 2024
4263d33
Add more tests taiko l2 (#18355)
dantaik Oct 31, 2024
46e3e76
chore(protocol): update base `ontakeForkHeight` to 0 (#18354)
YoGhurt111 Oct 31, 2024
66ad7f6
Merge branch 'main' into ontake_cleanup2
dantaik Oct 31, 2024
d689566
Merge branch 'main' into ontake_cleanup2
dantaik Nov 1, 2024
ee1596b
Merge branch 'main' into ontake_cleanup2
dantaik Nov 1, 2024
693b234
Update LibEIP1559.sol
dantaik Nov 1, 2024
265f0d2
Merge branch 'ontake_cleanup2' into improve-eip-1559
dantaik Nov 1, 2024
709c9c3
Update LibEIP1559.sol
dantaik Nov 1, 2024
7b36342
Merge branch 'main' into improve-eip-1559
dantaik Nov 3, 2024
4c3bc75
Update EssentialContract.sol
dantaik Nov 3, 2024
6769e2f
rename
dantaik Nov 3, 2024
ee33a72
Revert "rename"
dantaik Nov 3, 2024
4a0581e
Update LibL2Signer.sol
dantaik Nov 3, 2024
0cf5ad8
forge fmt & update contract layout tables
dantaik Nov 3, 2024
7511e11
Merge branch 'main' into improve-eip-1559
dantaik Nov 4, 2024
a4952a1
Update gen-layouts.sh
dantaik Nov 4, 2024
1844c62
Merge branch 'improve-eip-1559' of https://github.com/taikoxyz/taiko-…
dantaik Nov 4, 2024
255058c
Merge branch 'main' into improve-eip-1559
dantaik Nov 4, 2024
febe4fe
forge fmt & update contract layout tables
dantaik Nov 4, 2024
4e416bf
Merge branch 'main' into improve-eip-1559
dantaik Nov 4, 2024
15995b8
Merge branch 'main' into improve-eip-1559
dantaik Nov 4, 2024
9ec0886
Merge branch 'main' into improve-eip-1559
dantaik Nov 4, 2024
2f762f3
Merge branch 'main' into improve-eip-1559
dantaik Nov 4, 2024
8833643
restore some changes
dantaik Nov 5, 2024
f479d1c
Update TaikoL2.sol
dantaik Nov 5, 2024
dfcb3de
Revert "Update TaikoL2.sol"
dantaik Nov 5, 2024
5984dc9
Revert "restore some changes"
dantaik Nov 5, 2024
c2b7ce6
more
dantaik Nov 5, 2024
50f01de
more
dantaik Nov 5, 2024
577b11c
fmt
dantaik Nov 5, 2024
654dd6f
Update LibEIP1559.sol
dantaik Nov 5, 2024
097a2ab
more
dantaik Nov 5, 2024
f8097c3
Update TaikoL2.sol
dantaik Nov 5, 2024
34ab969
more
dantaik Nov 5, 2024
563c64e
Update TaikoL2Deprecated.sol
dantaik Nov 5, 2024
4e9cd08
Merge branch 'main' into improve-eip-1559
dantaik Nov 5, 2024
aca3f94
Update SignalService.sol
dantaik Nov 5, 2024
4081f37
Update EssentialContract.sol
dantaik Nov 5, 2024
f4a1e10
Merge branch 'main' into improve-eip-1559
dantaik Nov 5, 2024
989807f
Update TaikoL2.sol
dantaik Nov 5, 2024
e5600b7
Update TaikoL2Deprecated.sol
dantaik Nov 5, 2024
1846a23
more
dantaik Nov 5, 2024
afcc5fd
Update TaikoL2.sol
dantaik Nov 5, 2024
0c9c5cc
Update TaikoL2.sol
dantaik Nov 5, 2024
0474de1
Merge branch 'main' into improve-eip-1559
dantaik Nov 5, 2024
0d24789
forge fmt & update contract layout tables
dantaik Nov 5, 2024
209bbd7
Merge branch 'main' into improve-eip-1559
dantaik Nov 6, 2024
4a868fa
Update TaikoL2Deprecated.sol
dantaik Nov 6, 2024
736fb95
Merge branch 'improve-eip-1559' of https://github.com/taikoxyz/taiko-…
dantaik Nov 6, 2024
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
79 changes: 53 additions & 26 deletions packages/protocol/contracts/layer2/based/LibEIP1559.sol
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,16 @@ library LibEIP1559 {
/// @notice The maximum allowable input value for the exp() function.
uint128 public constant MAX_EXP_INPUT = 135_305_999_368_893_231_588;

error EIP1559_INVALID_PARAMS();

/// @notice Calculates the base fee and gas excess for EIP-1559
/// @param _gasTarget The target gas usage
/// @param _gasExcess The current gas excess
/// @param _gasIssuance The gas issuance
/// @param _parentGasUsed The gas used by the parent block
/// @param _minGasExcess The minimum gas excess
/// @return basefee_ The calculated base fee
/// @return gasExcess_ The calculated gas excess
function calc1559BaseFee(
uint256 _gasTarget,
uint64 _gasTarget,
uint64 _gasExcess,
uint64 _gasIssuance,
uint32 _parentGasUsed,
Expand All @@ -38,55 +44,76 @@ library LibEIP1559 {
// bonding curve, regardless the actual amount of gas used by this
// block, however, this block's gas used will affect the next
// block's base fee.
basefee_ = basefee(gasExcess_, _gasTarget);
basefee_ = basefee(_gasTarget, gasExcess_);
}

/// @dev Returns the new gas excess that will keep the basefee the same.
/// `_newGasTarget * ln(_newGasTarget / _gasTarget) + _gasExcess * _newGasTarget / _gasTarget`
/// @dev Adjusts the gas excess to maintain the same base fee when the gas target changes.
/// The formula used for adjustment is:
/// `_newGasTarget*ln(_newGasTarget/_gasTarget)+_gasExcess*_newGasTarget/_gasTarget`
/// @param _oldGasTarget The current gas target.
/// @param _newGasTarget The new gas target.
/// @param _oldGasExcess The current gas excess.
/// @return newGasTarget_ The new gas target value.
/// @return newGasExcess_ The new gas excess value.
function adjustExcess(
uint64 _gasExcess,
uint64 _gasTarget,
uint64 _newGasTarget
uint64 _oldGasTarget,
uint64 _newGasTarget,
uint64 _oldGasExcess
)
internal
pure
returns (uint64)
returns (uint64 newGasTarget_, uint64 newGasExcess_)
{
if (_gasTarget == 0) {
return _newGasTarget;
uint256 f = FixedPointMathLib.WAD;

if (_oldGasTarget == 0) {
return (_newGasTarget, _oldGasExcess);
}

uint256 f = FixedPointMathLib.WAD;
uint256 ratio = f * _newGasTarget / _gasTarget;
if (ratio == 0 || ratio > uint256(type(int256).max)) revert EIP1559_INVALID_PARAMS();
if (
_newGasTarget == 0 || _oldGasTarget == _newGasTarget
|| _newGasTarget >= type(uint256).max / f
) {
return (_oldGasTarget, _oldGasExcess);
}

int256 lnRatio = FixedPointMathLib.lnWad(int256(ratio)); // may be negative
uint256 ratio = f * _newGasTarget / _oldGasTarget;
if (ratio == 0 || ratio > uint256(type(int256).max)) {
return (_newGasTarget, _oldGasExcess);
}

int256 lnRatio = FixedPointMathLib.lnWad(int256(ratio)); // may be negative
uint256 newGasExcess;

assembly {
// compute x = (_newGasTarget * lnRatio + _gasExcess * ratio)
let x := add(mul(_newGasTarget, lnRatio), mul(_gasExcess, ratio))
let x := add(mul(_newGasTarget, lnRatio), mul(_oldGasExcess, ratio))

// If x < 0, set newGasExcess to 0, otherwise calculate newGasExcess = x / f
switch slt(x, 0)
case 1 { newGasExcess := 0 }
default { newGasExcess := div(x, f) }
}

return uint64(newGasExcess.min(type(uint64).max));
return (_newGasTarget, newGasExcess.capToUint64());
}

/// @dev exp(_gasExcess / _gasTarget) / _gasTarget
function basefee(uint256 _gasExcess, uint256 _gasTarget) internal pure returns (uint256) {
uint256 fee = ethQty(_gasExcess, _gasTarget) / _gasTarget;
return fee == 0 ? 1 : fee;
}
/// @dev Calculates the base fee using the formula: exp(_gasExcess/_gasTarget)/_gasTarget
/// @param _gasTarget The current gas target.
/// @param _gasExcess The current gas excess.
/// @return The calculated base fee.
function basefee(uint64 _gasTarget, uint64 _gasExcess) internal pure returns (uint256) {
if (_gasTarget == 0) return 1;

/// @dev exp(_gasExcess / _gasTarget)
function ethQty(uint256 _gasExcess, uint256 _gasTarget) internal pure returns (uint256) {
if (_gasTarget == 0) revert EIP1559_INVALID_PARAMS();
return (ethQty(_gasTarget, _gasExcess) / _gasTarget).max(1);
}

/// @dev Calculates the exponential of the ratio of gas excess to gas target.
/// @param _gasTarget The current gas target.
/// @param _gasExcess The current gas excess.
/// @return The calculated exponential value.
function ethQty(uint64 _gasTarget, uint64 _gasExcess) internal pure returns (uint256) {
assert(_gasTarget != 0);
uint256 input = FixedPointMathLib.WAD * _gasExcess / _gasTarget;
if (input > MAX_EXP_INPUT) {
input = MAX_EXP_INPUT;
Expand Down
Loading