mirror of
https://github.com/vacp2p/linea-monorepo.git
synced 2026-01-09 04:08:01 -05:00
feat: add L2YieldMessageService
This commit is contained in:
@@ -19,5 +19,6 @@ additional_compiler_profiles = [ { name = "london", evm_version = "london" } ]
|
||||
# Specify EVM_VERSION restrictions for contract compilation
|
||||
compilation_restrictions = [
|
||||
{ paths = "./**/L2MessageService.sol", evm_version = "london" },
|
||||
{ paths = "./**/L2YieldMessageService.sol", evm_version = "london" },
|
||||
{ paths = "./**/TokenBridge.sol", evm_version = "london" },
|
||||
]
|
||||
]
|
||||
|
||||
56
contracts/src/yield/bridge/L2YieldMessageService.sol
Normal file
56
contracts/src/yield/bridge/L2YieldMessageService.sol
Normal file
@@ -0,0 +1,56 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0
|
||||
pragma solidity ^0.8.30;
|
||||
|
||||
import { L2MessageServiceBase } from "../../messaging/l2/L2MessageServiceBase.sol";
|
||||
|
||||
contract L2YieldMessageService is L2MessageServiceBase {
|
||||
error L2YieldMessageService__InvalidValue();
|
||||
|
||||
/// @custom:oz-upgrades-unsafe-allow constructor
|
||||
constructor() {
|
||||
_disableInitializers();
|
||||
}
|
||||
|
||||
/**
|
||||
* @notice Initializes underlying message service dependencies.
|
||||
* @param _rateLimitPeriod The period to rate limit against.
|
||||
* @param _rateLimitAmount The limit allowed for withdrawing the period.
|
||||
* @param _defaultAdmin The account to be given DEFAULT_ADMIN_ROLE on initialization.
|
||||
* @param _roleAddresses The list of addresses to grant roles to.
|
||||
* @param _pauseTypeRoles The list of pause type roles.
|
||||
* @param _unpauseTypeRoles The list of unpause type roles.
|
||||
*/
|
||||
function initialize(
|
||||
uint256 _rateLimitPeriod,
|
||||
uint256 _rateLimitAmount,
|
||||
address _defaultAdmin,
|
||||
RoleAddress[] calldata _roleAddresses,
|
||||
PauseTypeRole[] calldata _pauseTypeRoles,
|
||||
PauseTypeRole[] calldata _unpauseTypeRoles
|
||||
) external initializer {
|
||||
__L2MessageService_init(
|
||||
_rateLimitPeriod,
|
||||
_rateLimitAmount,
|
||||
_defaultAdmin,
|
||||
_roleAddresses,
|
||||
_pauseTypeRoles,
|
||||
_unpauseTypeRoles
|
||||
);
|
||||
}
|
||||
|
||||
function claimMessage(
|
||||
address _from,
|
||||
address _to,
|
||||
uint256 _fee,
|
||||
uint256 _value,
|
||||
address payable, // _feeRecipient
|
||||
bytes calldata _calldata,
|
||||
uint256 _nonce
|
||||
) public override {
|
||||
if (_value > 0) {
|
||||
revert L2YieldMessageService__InvalidValue();
|
||||
}
|
||||
|
||||
_claimMessage(_from, _to, _fee, _value, _calldata, _nonce);
|
||||
}
|
||||
}
|
||||
@@ -26,9 +26,7 @@ contract L1ETHBridgeTest is Test {
|
||||
yieldManager = ETHYieldManagerMock(payable(bridge.yieldManager()));
|
||||
l2ETHBridge = bridge.l2ETHBridge();
|
||||
}
|
||||
}
|
||||
|
||||
contract BridgeETHTest is L1ETHBridgeTest {
|
||||
function test_RevertsIfYieldManagerIsNotSet() public {
|
||||
vm.prank(deployer);
|
||||
bridge.setYieldManager(address(0));
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0
|
||||
pragma solidity ^0.8.30;
|
||||
|
||||
import { Test } from "forge-std/Test.sol";
|
||||
import { L2MessageService } from "../../../../src/messaging/l2/L2MessageService.sol";
|
||||
import { L2YieldMessageService } from "../../../../src/yield/bridge/L2YieldMessageService.sol";
|
||||
import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
|
||||
import { IPermissionsManager } from "../../../../src/security/access/interfaces/IPermissionsManager.sol";
|
||||
import { IPauseManager } from "../../../../src/security/pausing/interfaces/IPauseManager.sol";
|
||||
|
||||
contract L2YieldMessageServiceTest is Test {
|
||||
L2YieldMessageService yieldMessageService;
|
||||
address defaultAdmin = makeAddr("defaultAdmin");
|
||||
|
||||
function setUp() public {
|
||||
L2YieldMessageService implementation = new L2YieldMessageService();
|
||||
bytes memory initializer = abi.encodeWithSelector(
|
||||
L2MessageService.initialize.selector,
|
||||
86400,
|
||||
100 ether,
|
||||
defaultAdmin,
|
||||
new IPermissionsManager.RoleAddress[](0),
|
||||
new IPauseManager.PauseTypeRole[](0),
|
||||
new IPauseManager.PauseTypeRole[](0)
|
||||
);
|
||||
ERC1967Proxy proxy = new ERC1967Proxy(address(implementation), initializer);
|
||||
yieldMessageService = L2YieldMessageService(address(proxy));
|
||||
}
|
||||
|
||||
function test_RevertWhenValueIsGreaterThanZero() public {
|
||||
vm.expectRevert("L2YieldMessageService__InvalidValue()");
|
||||
yieldMessageService.claimMessage(makeAddr("from"), makeAddr("to"), 0, 1, payable(defaultAdmin), hex"00", 0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user