From e787493e02238735b3bb4ff1690f7a02004cbd0c Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Fri, 5 Apr 2024 14:42:58 +0800 Subject: [PATCH] fix(protocol): check blob capability in LibProposing using LibNetwork.isDencunSupported (#16657) --- packages/protocol/contracts/L1/libs/LibProposing.sol | 3 ++- packages/protocol/contracts/bridge/Bridge.sol | 2 +- packages/protocol/contracts/libs/LibNetwork.sol | 9 +++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/protocol/contracts/L1/libs/LibProposing.sol b/packages/protocol/contracts/L1/libs/LibProposing.sol index bde191128ce..a8879bbc3f7 100644 --- a/packages/protocol/contracts/L1/libs/LibProposing.sol +++ b/packages/protocol/contracts/L1/libs/LibProposing.sol @@ -5,6 +5,7 @@ import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../../common/IAddressResolver.sol"; import "../../libs/LibAddress.sol"; +import "../../libs/LibNetwork.sol"; import "../hooks/IHook.sol"; import "../tiers/ITierProvider.sol"; @@ -122,7 +123,7 @@ library LibProposing { // Update certain meta fields if (meta_.blobUsed) { - if (block.chainid != 1) revert L1_BLOB_NOT_AVAILABLE(); + if (!LibNetwork.isDencunSupported(block.chainid)) revert L1_BLOB_NOT_AVAILABLE(); // Always use the first blob in this transaction. If the // proposeBlock functions are called more than once in the same diff --git a/packages/protocol/contracts/bridge/Bridge.sol b/packages/protocol/contracts/bridge/Bridge.sol index 25a18d2a712..1b28f3a4c74 100644 --- a/packages/protocol/contracts/bridge/Bridge.sol +++ b/packages/protocol/contracts/bridge/Bridge.sol @@ -486,7 +486,7 @@ contract Bridge is EssentialContract, IBridge { // For Taiko mainnet and public testnets // 384 seconds = 6.4 minutes = one ethereum epoch return (1 hours, 384 seconds); - } else if (LibNetwork.isTaikoDevnet(block.chainid)) { + } else if (LibNetwork.isTaikoDevnetL1(block.chainid)) { return (5 minutes, 384 seconds); } else { // This is a Taiko L2 chain where no deleys are applied. diff --git a/packages/protocol/contracts/libs/LibNetwork.sol b/packages/protocol/contracts/libs/LibNetwork.sol index d4d55cafa25..24d7076252f 100644 --- a/packages/protocol/contracts/libs/LibNetwork.sol +++ b/packages/protocol/contracts/libs/LibNetwork.sol @@ -28,10 +28,11 @@ library LibNetwork { return _chainId == LibNetwork.MAINNET || isEthereumTestnet(_chainId); } - /// @dev Checks if the chain ID represents an internal Taiko devnet. + /// @dev Checks if the chain ID represents an internal Taiko devnet's base layer. /// @param _chainId The chain ID. - /// @return true if the chain ID represents an internal Taiko devnet, false otherwise. - function isTaikoDevnet(uint256 _chainId) internal pure returns (bool) { + /// @return true if the chain ID represents an internal Taiko devnet's base layer, false + /// otherwise. + function isTaikoDevnetL1(uint256 _chainId) internal pure returns (bool) { return _chainId >= 32_300 && _chainId <= 32_400; } @@ -41,6 +42,6 @@ library LibNetwork { /// @return true if the chain supports Dencun hardfork, false otherwise. function isDencunSupported(uint256 _chainId) internal pure returns (bool) { return _chainId == LibNetwork.MAINNET || _chainId == LibNetwork.HOLESKY - || _chainId == LibNetwork.SEPOLIA; + || _chainId == LibNetwork.SEPOLIA || isTaikoDevnetL1(_chainId); } }