diff --git a/packages/protocol/contracts/L1/TaikoL1.sol b/packages/protocol/contracts/L1/TaikoL1.sol index 52948f129a..3fedb0fbaf 100644 --- a/packages/protocol/contracts/L1/TaikoL1.sol +++ b/packages/protocol/contracts/L1/TaikoL1.sol @@ -37,11 +37,6 @@ contract TaikoL1 is EssentialContract, ITaikoL1, TaikoEvents { emit StateVariablesUpdated(state.slotB); } - modifier onlyPermittedProposer() { - LibProposing.checkProposerPermission(this); - _; - } - /// @notice Initializes the contract. /// @param _owner The owner of this contract. msg.sender will be used if this value is zero. /// @param _rollupAddressManager The address of the {AddressManager} contract. @@ -76,7 +71,7 @@ contract TaikoL1 is EssentialContract, ITaikoL1, TaikoEvents { ) external payable - onlyPermittedProposer + onlyFromOptionalNamed(LibStrings.B_BLOCK_PROPOSER) whenNotPaused nonReentrant emitEventForClient @@ -97,7 +92,7 @@ contract TaikoL1 is EssentialContract, ITaikoL1, TaikoEvents { bytes calldata _txList ) external - onlyPermittedProposer + onlyFromOptionalNamed(LibStrings.B_BLOCK_PROPOSER) whenNotPaused nonReentrant emitEventForClient @@ -112,7 +107,7 @@ contract TaikoL1 is EssentialContract, ITaikoL1, TaikoEvents { bytes[] calldata _txListArr ) external - onlyPermittedProposer + onlyFromOptionalNamed(LibStrings.B_BLOCK_PROPOSER) whenNotPaused nonReentrant emitEventForClient diff --git a/packages/protocol/contracts/L1/access/IProposerAccess.sol b/packages/protocol/contracts/L1/access/IProposerAccess.sol deleted file mode 100644 index dc23e5f8b3..0000000000 --- a/packages/protocol/contracts/L1/access/IProposerAccess.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.24; - -/// @title IProposerAccess -/// @dev An interface to check if a proposer is eligible to propose blocks in a specific Ethereum -/// block. -/// @custom:security-contact security@taiko.xyz -interface IProposerAccess { - /// @notice Checks if a proposer can propose block in the current Ethereum block. - /// @param _proposer The proposer. - /// @return true if the proposer can propose blocks, false otherwise. - function isProposerEligible(address _proposer) external view returns (bool); -} diff --git a/packages/protocol/contracts/L1/libs/LibProposing.sol b/packages/protocol/contracts/L1/libs/LibProposing.sol index 71ef4a3feb..b9b7802077 100644 --- a/packages/protocol/contracts/L1/libs/LibProposing.sol +++ b/packages/protocol/contracts/L1/libs/LibProposing.sol @@ -3,7 +3,6 @@ pragma solidity 0.8.24; import "../../libs/LibAddress.sol"; import "../../libs/LibNetwork.sol"; -import "../access/IProposerAccess.sol"; import "./LibBonds.sol"; import "./LibData.sol"; import "./LibUtils.sol"; @@ -260,15 +259,6 @@ library LibProposing { } } - function checkProposerPermission(IAddressResolver _resolver) internal view { - address proposerAccess = _resolver.resolve(LibStrings.B_PROPOSER_ACCESS, true); - if (proposerAccess == address(0)) return; - - if (!IProposerAccess(proposerAccess).isProposerEligible(msg.sender)) { - revert L1_INVALID_PROPOSER(); - } - } - function _encodeBaseFeeConfig( TaikoData.BaseFeeConfig memory _baseFeeConfig ) diff --git a/packages/protocol/contracts/common/AddressResolver.sol b/packages/protocol/contracts/common/AddressResolver.sol index eaad49760a..1f2d96eb93 100644 --- a/packages/protocol/contracts/common/AddressResolver.sol +++ b/packages/protocol/contracts/common/AddressResolver.sol @@ -26,6 +26,15 @@ abstract contract AddressResolver is IAddressResolver, Initializable { _; } + /// @dev Modifier that ensures the caller is the resolved address of a given + /// name, if the name is set. + /// @param _name The name to check against. + modifier onlyFromOptionalNamed(bytes32 _name) { + address addr = resolve(_name, true); + if (addr != address(0) && msg.sender != addr) revert RESOLVER_DENIED(); + _; + } + /// @dev Modifier that ensures the caller is a resolved address to either _name1 or _name2 /// name. /// @param _name1 The first name to check against. diff --git a/packages/protocol/contracts/common/LibStrings.sol b/packages/protocol/contracts/common/LibStrings.sol index 43a4ad6697..c6cd9576a6 100644 --- a/packages/protocol/contracts/common/LibStrings.sol +++ b/packages/protocol/contracts/common/LibStrings.sol @@ -5,6 +5,7 @@ pragma solidity 0.8.24; /// @custom:security-contact security@taiko.xyz library LibStrings { bytes32 internal constant B_AUTOMATA_DCAP_ATTESTATION = bytes32("automata_dcap_attestation"); + bytes32 internal constant B_BLOCK_PROPOSER = bytes32("block_proposer"); bytes32 internal constant B_BRIDGE = bytes32("bridge"); bytes32 internal constant B_BRIDGE_WATCHDOG = bytes32("bridge_watchdog"); bytes32 internal constant B_BRIDGED_ERC1155 = bytes32("bridged_erc1155"); @@ -14,7 +15,6 @@ library LibStrings { bytes32 internal constant B_ERC1155_VAULT = bytes32("erc1155_vault"); bytes32 internal constant B_ERC20_VAULT = bytes32("erc20_vault"); bytes32 internal constant B_ERC721_VAULT = bytes32("erc721_vault"); - bytes32 internal constant B_PROPOSER_ACCESS = bytes32("proposer_access"); bytes32 internal constant B_PROVER_ASSIGNMENT = bytes32("PROVER_ASSIGNMENT"); bytes32 internal constant B_PROVER_SET = bytes32("prover_set"); bytes32 internal constant B_QUOTA_MANAGER = bytes32("quota_manager"); diff --git a/packages/protocol/contracts/mainnet/LibRollupAddressCache.sol b/packages/protocol/contracts/mainnet/LibRollupAddressCache.sol index e15b21692c..98e4a27b9d 100644 --- a/packages/protocol/contracts/mainnet/LibRollupAddressCache.sol +++ b/packages/protocol/contracts/mainnet/LibRollupAddressCache.sol @@ -43,7 +43,7 @@ library LibRollupAddressCache { if (_name == LibStrings.B_AUTOMATA_DCAP_ATTESTATION) { return (true, 0x8d7C954960a36a7596d7eA4945dDf891967ca8A3); } - if (_name == LibStrings.B_PROPOSER_ACCESS) { + if (_name == LibStrings.B_BLOCK_PROPOSER) { return (true, address(0)); } if (_name == LibStrings.B_CHAIN_WATCHDOG) {