Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
28726a33
Unverified
Commit
28726a33
authored
Oct 01, 2024
by
Roberto Bayardo
Committed by
GitHub
Oct 01, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "Holocene extensions to L1Block.sol (#12096)" (#12236)
This reverts commit
5bd72f69
.
parent
a4d81ba5
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
12 additions
and
327 deletions
+12
-327
.gas-snapshot
packages/contracts-bedrock/.gas-snapshot
+3
-3
semver-lock.json
packages/contracts-bedrock/semver-lock.json
+4
-4
L1Block.json
packages/contracts-bedrock/snapshots/abi/L1Block.json
+0
-33
L1BlockInterop.json
packages/contracts-bedrock/snapshots/abi/L1BlockInterop.json
+0
-33
L1Block.json
...es/contracts-bedrock/snapshots/storageLayout/L1Block.json
+0
-14
L1BlockInterop.json
...racts-bedrock/snapshots/storageLayout/L1BlockInterop.json
+1
-15
L1Block.sol
packages/contracts-bedrock/src/L2/L1Block.sol
+2
-61
L1BlockInterop.sol
packages/contracts-bedrock/src/L2/L1BlockInterop.sol
+2
-2
IL1Block.sol
packages/contracts-bedrock/src/L2/interfaces/IL1Block.sol
+0
-3
IL1BlockInterop.sol
...s/contracts-bedrock/src/L2/interfaces/IL1BlockInterop.sol
+0
-3
Encoding.sol
packages/contracts-bedrock/src/libraries/Encoding.sol
+0
-46
L1Block.t.sol
packages/contracts-bedrock/test/L2/L1Block.t.sol
+0
-110
No files found.
packages/contracts-bedrock/.gas-snapshot
View file @
28726a33
GasBenchMark_L1BlockInterop_DepositsComplete:test_depositsComplete_benchmark() (gas: 75
89
)
GasBenchMark_L1BlockInterop_DepositsComplete_Warm:test_depositsComplete_benchmark() (gas: 55
89
)
GasBenchMark_L1BlockInterop_SetValuesInterop:test_setL1BlockValuesInterop_benchmark() (gas: 1756
55
)
GasBenchMark_L1BlockInterop_DepositsComplete:test_depositsComplete_benchmark() (gas: 75
67
)
GasBenchMark_L1BlockInterop_DepositsComplete_Warm:test_depositsComplete_benchmark() (gas: 55
67
)
GasBenchMark_L1BlockInterop_SetValuesInterop:test_setL1BlockValuesInterop_benchmark() (gas: 1756
77
)
GasBenchMark_L1BlockInterop_SetValuesInterop_Warm:test_setL1BlockValuesInterop_benchmark() (gas: 5099)
GasBenchMark_L1Block_SetValuesEcotone:test_setL1BlockValuesEcotone_benchmark() (gas: 158531)
GasBenchMark_L1Block_SetValuesEcotone_Warm:test_setL1BlockValuesEcotone_benchmark() (gas: 7597)
...
...
packages/contracts-bedrock/semver-lock.json
View file @
28726a33
...
...
@@ -80,12 +80,12 @@
"sourceCodeHash"
:
"0x4f21025d4b5c9c74cf7040db6f8e9ce605b82931e3012fee51d3f5d9fbd7b73f"
},
"src/L2/L1Block.sol"
:
{
"initCodeHash"
:
"0x
48d118de2a69fb0fbf6a8da4603025e12da1360da8fb70a5e56342ba64b3ff5
f"
,
"sourceCodeHash"
:
"0x
04d25cbf0c4ea5025b0dd3f79f0a32f6623ddb869cff35649072ab3ad964b310
"
"initCodeHash"
:
"0x
d12353c5bf71c6765cc9292eecf262f216e67f117f4ba6287796a5207dbca00
f"
,
"sourceCodeHash"
:
"0x
fe3a9585d9bfca8428e12759cab68a3114374e5c37371cfe08bb1976a9a5a041
"
},
"src/L2/L1BlockInterop.sol"
:
{
"initCodeHash"
:
"0x7
f87e0b8be9801cb242c469ec7999eb80221f65063aedd4ca4923a5e0fb0e5a
7"
,
"sourceCodeHash"
:
"0x7
22071a9d08dcbeda9cdaadeb2dd679a8bc192563e4a0439f4cd74439fa75581
"
"initCodeHash"
:
"0x7
7b3b2151fe14ea36a640469115a5e4de27f7654a9606a9d0701522c6a4ad88
7"
,
"sourceCodeHash"
:
"0x7
417677643e1df1ae1782513b94c7821097b9529d3f8626c3bcb8b3a9ae0d180
"
},
"src/L2/L1FeeVault.sol"
:
{
"initCodeHash"
:
"0x3bfcd57e25ad54b66c374f63e24e33a6cf107044aa8f5f69ef21202c380b5c5b"
,
...
...
packages/contracts-bedrock/snapshots/abi/L1Block.json
View file @
28726a33
...
...
@@ -77,32 +77,6 @@
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"eip1559Denominator"
,
"outputs"
:
[
{
"internalType"
:
"uint64"
,
"name"
:
""
,
"type"
:
"uint64"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"eip1559Elasticity"
,
"outputs"
:
[
{
"internalType"
:
"uint64"
,
"name"
:
""
,
"type"
:
"uint64"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"gasPayingToken"
,
...
...
@@ -308,13 +282,6 @@
"stateMutability"
:
"nonpayable"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"setL1BlockValuesHolocene"
,
"outputs"
:
[],
"stateMutability"
:
"nonpayable"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"timestamp"
,
...
...
packages/contracts-bedrock/snapshots/abi/L1BlockInterop.json
View file @
28726a33
...
...
@@ -97,32 +97,6 @@
"stateMutability"
:
"nonpayable"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"eip1559Denominator"
,
"outputs"
:
[
{
"internalType"
:
"uint64"
,
"name"
:
""
,
"type"
:
"uint64"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"eip1559Elasticity"
,
"outputs"
:
[
{
"internalType"
:
"uint64"
,
"name"
:
""
,
"type"
:
"uint64"
}
],
"stateMutability"
:
"view"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"gasPayingToken"
,
...
...
@@ -378,13 +352,6 @@
"stateMutability"
:
"nonpayable"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"setL1BlockValuesHolocene"
,
"outputs"
:
[],
"stateMutability"
:
"nonpayable"
,
"type"
:
"function"
},
{
"inputs"
:
[],
"name"
:
"setL1BlockValuesInterop"
,
...
...
packages/contracts-bedrock/snapshots/storageLayout/L1Block.json
View file @
28726a33
...
...
@@ -75,19 +75,5 @@
"offset"
:
0
,
"slot"
:
"7"
,
"type"
:
"uint256"
},
{
"bytes"
:
"8"
,
"label"
:
"eip1559Denominator"
,
"offset"
:
0
,
"slot"
:
"8"
,
"type"
:
"uint64"
},
{
"bytes"
:
"8"
,
"label"
:
"eip1559Elasticity"
,
"offset"
:
8
,
"slot"
:
"8"
,
"type"
:
"uint64"
}
]
\ No newline at end of file
packages/contracts-bedrock/snapshots/storageLayout/L1BlockInterop.json
View file @
28726a33
...
...
@@ -76,25 +76,11 @@
"slot"
:
"7"
,
"type"
:
"uint256"
},
{
"bytes"
:
"8"
,
"label"
:
"eip1559Denominator"
,
"offset"
:
0
,
"slot"
:
"8"
,
"type"
:
"uint64"
},
{
"bytes"
:
"8"
,
"label"
:
"eip1559Elasticity"
,
"offset"
:
8
,
"slot"
:
"8"
,
"type"
:
"uint64"
},
{
"bytes"
:
"64"
,
"label"
:
"dependencySet"
,
"offset"
:
0
,
"slot"
:
"
9
"
,
"slot"
:
"
8
"
,
"type"
:
"struct EnumerableSet.UintSet"
}
]
\ No newline at end of file
packages/contracts-bedrock/src/L2/L1Block.sol
View file @
28726a33
...
...
@@ -57,15 +57,9 @@ contract L1Block is ISemver, IGasToken {
/// @notice The latest L1 blob base fee.
uint256 public blobBaseFee;
/// @notice The eip-1550 base fee change denominator value.
uint64 public eip1559Denominator;
/// @notice The eip-1550 base fee change elasticity value.
uint64 public eip1559Elasticity;
/// @custom:semver 1.5.1-beta.3
/// @custom:semver 1.5.1-beta.2
function version() public pure virtual returns (string memory) {
return "1.5.1-beta.
3
";
return "1.5.1-beta.
2
";
}
/// @notice Returns the gas paying token, its decimals, name and symbol.
...
...
@@ -174,59 +168,6 @@ contract L1Block is ISemver, IGasToken {
}
}
/// @notice Updates the L1 block values for a Holocene upgraded chain.
/// Params are packed and passed in as raw msg.data instead of ABI to reduce calldata size.
/// Params are expected to be in the following order:
/// 1. _baseFeeScalar L1 base fee scalar
/// 2. _blobBaseFeeScalar L1 blob base fee scalar
/// 3. _sequenceNumber Number of L2 blocks since epoch start.
/// 4. _timestamp L1 timestamp.
/// 5. _number L1 blocknumber.
/// 6. _basefee L1 base fee.
/// 7. _blobBaseFee L1 blob base fee.
/// 8. _hash L1 blockhash.
/// 9. _batcherHash Versioned hash to authenticate batcher by.
/// 10. _eip1559Elasticity EIP-1559 elasticity multiplier value.
/// 11. _eip1559Denominator EIP-1559 base fee change denominator value.
function setL1BlockValuesHolocene() public {
_setL1BlockValuesHolocene();
}
/// @notice Updates the L1 block values for a Holocene upgraded chain.
/// Params are packed and passed in as raw msg.data instead of ABI to reduce calldata size.
/// Params are expected to be in the following order:
/// 1. _baseFeeScalar L1 base fee scalar
/// 2. _blobBaseFeeScalar L1 blob base fee scalar
/// 3. _sequenceNumber Number of L2 blocks since epoch start.
/// 4. _timestamp L1 timestamp.
/// 5. _number L1 blocknumber.
/// 6. _basefee L1 base fee.
/// 7. _blobBaseFee L1 blob base fee.
/// 8. _hash L1 blockhash.
/// 9. _batcherHash Versioned hash to authenticate batcher by.
/// 10. _eip1559Elasticity EIP-1559 elasticity multiplier value.
/// 11. _eip1559Denominator EIP-1559 base fee change denominator value.
function _setL1BlockValuesHolocene() internal {
address depositor = DEPOSITOR_ACCOUNT();
assembly {
// Revert if the caller is not the depositor account.
if xor(caller(), depositor) {
mstore(0x00, 0x3cc50b45) // 0x3cc50b45 is the 4-byte selector of "NotDepositor()"
revert(0x1C, 0x04) // returns the stored 4-byte selector from above
}
// sequencenum (uint64), blobBaseFeeScalar (uint32), baseFeeScalar (uint32)
sstore(sequenceNumber.slot, shr(128, calldataload(4)))
// number (uint64) and timestamp (uint64)
sstore(number.slot, shr(128, calldataload(20)))
sstore(basefee.slot, calldataload(36)) // uint256
sstore(blobBaseFee.slot, calldataload(68)) // uint256
sstore(hash.slot, calldataload(100)) // bytes32
sstore(batcherHash.slot, calldataload(132)) // bytes32
// eip1559Denominator (uint64) and eip1559Elasticity (uint64)
sstore(eip1559Denominator.slot, shr(128, calldataload(164))) // uint64
}
}
/// @notice Sets the gas paying token for the L2 system. Can only be called by the special
/// depositor account. This function is not called on every L2 block but instead
/// only called by specially crafted L1 deposit transactions.
...
...
packages/contracts-bedrock/src/L2/L1BlockInterop.sol
View file @
28726a33
...
...
@@ -42,9 +42,9 @@ contract L1BlockInterop is L1Block {
/// keccak256(abi.encode(uint256(keccak256("l1Block.identifier.isDeposit")) - 1)) & ~bytes32(uint256(0xff))
uint256 internal constant IS_DEPOSIT_SLOT = 0x921bd3a089295c6e5540e8fba8195448d253efd6f2e3e495b499b627dc36a300;
/// @custom:semver +interop
-beta.1
/// @custom:semver +interop
function version() public pure override returns (string memory) {
return string.concat(super.version(), "+interop
-beta.1
");
return string.concat(super.version(), "+interop");
}
/// @notice Returns whether the call was triggered from a a deposit or not.
...
...
packages/contracts-bedrock/src/L2/interfaces/IL1Block.sol
View file @
28726a33
...
...
@@ -34,11 +34,8 @@ interface IL1Block {
)
external;
function setL1BlockValuesEcotone() external;
function setL1BlockValuesHolocene() external;
function timestamp() external view returns (uint64);
function version() external pure returns (string memory);
function eip1559Denominator() external view returns (uint64);
function eip1559Elasticity() external view returns (uint64);
function __constructor__() external;
}
packages/contracts-bedrock/src/L2/interfaces/IL1BlockInterop.sol
View file @
28726a33
...
...
@@ -52,12 +52,9 @@ interface IL1BlockInterop {
)
external;
function setL1BlockValuesEcotone() external;
function setL1BlockValuesHolocene() external;
function setL1BlockValuesInterop() external;
function timestamp() external view returns (uint64);
function version() external pure returns (string memory);
function eip1559Denominator() external view returns (uint64);
function eip1559Elasticity() external view returns (uint64);
function __constructor__() external;
}
packages/contracts-bedrock/src/libraries/Encoding.sol
View file @
28726a33
...
...
@@ -213,50 +213,4 @@ library Encoding {
_batcherHash
);
}
/// @notice Returns an appropriately encoded call to L1Block.setL1BlockValuesHolocene
/// @param _baseFeeScalar L1 base fee Scalar
/// @param _blobBaseFeeScalar L1 blob base fee Scalar
/// @param _sequenceNumber Number of L2 blocks since epoch start.
/// @param _timestamp L1 timestamp.
/// @param _number L1 blocknumber.
/// @param _baseFee L1 base fee.
/// @param _blobBaseFee L1 blob base fee.
/// @param _hash L1 blockhash.
/// @param _batcherHash Versioned hash to authenticate batcher by.
/// @param _eip1559Elasticity EIP-1559 elasticity parameter
/// @param _eip1559Denominator EIP-1559 denominator parameter
function encodeSetL1BlockValuesHolocene(
uint32 _baseFeeScalar,
uint32 _blobBaseFeeScalar,
uint64 _sequenceNumber,
uint64 _timestamp,
uint64 _number,
uint256 _baseFee,
uint256 _blobBaseFee,
bytes32 _hash,
bytes32 _batcherHash,
uint64 _eip1559Elasticity,
uint64 _eip1559Denominator
)
internal
pure
returns (bytes memory)
{
bytes4 functionSignature = bytes4(keccak256("setL1BlockValuesHolocene()"));
return abi.encodePacked(
functionSignature,
_baseFeeScalar,
_blobBaseFeeScalar,
_sequenceNumber,
_timestamp,
_number,
_baseFee,
_blobBaseFee,
_hash,
_batcherHash,
_eip1559Elasticity,
_eip1559Denominator
);
}
}
packages/contracts-bedrock/test/L2/L1Block.t.sol
View file @
28726a33
...
...
@@ -165,116 +165,6 @@ contract L1BlockEcotone_Test is L1BlockTest {
}
}
contract L1BlockHolocene_Test is L1BlockTest {
/// @dev Tests that setL1BlockValuesHolocene updates the values appropriately.
function testFuzz_setL1BlockValuesHolocene_succeeds(
uint32 baseFeeScalar,
uint32 blobBaseFeeScalar,
uint64 sequenceNumber,
uint64 timestamp,
uint64 number,
uint256 baseFee,
uint256 blobBaseFee,
bytes32 hash,
bytes32 batcherHash,
uint64 eip1559Elasticity,
uint64 eip1559Denominator
)
external
{
bytes memory functionCallDataPacked = Encoding.encodeSetL1BlockValuesHolocene(
baseFeeScalar,
blobBaseFeeScalar,
sequenceNumber,
timestamp,
number,
baseFee,
blobBaseFee,
hash,
batcherHash,
eip1559Elasticity,
eip1559Denominator
);
vm.prank(depositor);
(bool success,) = address(l1Block).call(functionCallDataPacked);
assertTrue(success, "Function call failed");
assertEq(l1Block.baseFeeScalar(), baseFeeScalar);
assertEq(l1Block.blobBaseFeeScalar(), blobBaseFeeScalar);
assertEq(l1Block.sequenceNumber(), sequenceNumber);
assertEq(l1Block.timestamp(), timestamp);
assertEq(l1Block.number(), number);
assertEq(l1Block.basefee(), baseFee);
assertEq(l1Block.blobBaseFee(), blobBaseFee);
assertEq(l1Block.hash(), hash);
assertEq(l1Block.batcherHash(), batcherHash);
assertEq(l1Block.eip1559Denominator(), eip1559Denominator);
assertEq(l1Block.eip1559Elasticity(), eip1559Elasticity);
// ensure we didn't accidentally pollute the 128 bits of the sequencenum+scalars slot that
// should be empty
bytes32 scalarsSlot = vm.load(address(l1Block), bytes32(uint256(3)));
bytes32 mask128 = hex"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000";
assertEq(0, scalarsSlot & mask128);
// ensure we didn't accidentally pollute the 128 bits of the number & timestamp slot that
// should be empty
bytes32 numberTimestampSlot = vm.load(address(l1Block), bytes32(uint256(0)));
assertEq(0, numberTimestampSlot & mask128);
// ensure we didn't accidentally pollute the 128 bits of the eip-1559 parameters slot that
// should be empty
bytes32 eip1559ParamsSlot = vm.load(address(l1Block), bytes32(uint256(9)));
assertEq(0, eip1559ParamsSlot & mask128);
}
/// @dev Tests that `setL1BlockValuesHolocene` succeeds if sender address is the depositor
function test_setL1BlockValuesHolocene_isDepositor_succeeds() external {
bytes memory functionCallDataPacked = Encoding.encodeSetL1BlockValuesHolocene(
type(uint32).max,
type(uint32).max,
type(uint64).max,
type(uint64).max,
type(uint64).max,
type(uint256).max,
type(uint256).max,
bytes32(type(uint256).max),
bytes32(type(uint256).max),
type(uint64).max,
type(uint64).max
);
vm.prank(depositor);
(bool success,) = address(l1Block).call(functionCallDataPacked);
assertTrue(success, "function call failed");
}
/// @dev Tests that `setL1BlockValuesEcotone` reverts if sender address is not the depositor
function test_setL1BlockValuesHolocene_notDepositor_reverts() external {
bytes memory functionCallDataPacked = Encoding.encodeSetL1BlockValuesHolocene(
type(uint32).max,
type(uint32).max,
type(uint64).max,
type(uint64).max,
type(uint64).max,
type(uint256).max,
type(uint256).max,
bytes32(type(uint256).max),
bytes32(type(uint256).max),
type(uint64).max,
type(uint64).max
);
(bool success, bytes memory data) = address(l1Block).call(functionCallDataPacked);
assertTrue(!success, "function call should have failed");
// make sure return value is the expected function selector for "NotDepositor()"
bytes memory expReturn = hex"3cc50b45";
assertEq(data, expReturn);
}
}
contract L1BlockCustomGasToken_Test is L1BlockTest {
function testFuzz_setGasPayingToken_succeeds(
address _token,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment