Skip to content

Commit deea58a

Browse files
committed
simplified submit,trigger, service manager
1 parent 0c86a17 commit deea58a

File tree

3 files changed

+82
-28
lines changed

3 files changed

+82
-28
lines changed

src/LayerServiceManager.sol

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {ILayerServiceManager} from "./interfaces/ILayerServiceManager.sol";
5+
import {ECDSAServiceManagerBase} from "@eigenlayer/middleware/src/unaudited/ECDSAServiceManagerBase.sol";
6+
import {ECDSAStakeRegistry} from "@eigenlayer/middleware/src/unaudited/ECDSAStakeRegistry.sol";
7+
import {IERC1271Upgradeable} from "@openzeppelin-upgrades/contracts/interfaces/IERC1271Upgradeable.sol";
8+
import {ECDSAUpgradeable} from "@openzeppelin-upgrades/contracts/utils/cryptography/ECDSAUpgradeable.sol";
9+
10+
/**
11+
* @title LayerServiceManager
12+
* @notice contract that validates signatures using the ECDSAStakeRegistry.
13+
* typically this contract is called from some "ILayerServiceHandler" (a vanilla implementation of ILayerService/ILayerServiceMulti)
14+
*/
15+
contract LayerServiceManager is ECDSAServiceManagerBase,ILayerServiceManager {
16+
17+
// ------------------------------------------------------------------------
18+
// Constructor
19+
// ------------------------------------------------------------------------
20+
constructor(
21+
address _avsDirectory,
22+
address _stakeRegistry,
23+
address _rewardsCoordinator,
24+
address _delegationManager
25+
)
26+
ECDSAServiceManagerBase(
27+
_avsDirectory,
28+
_stakeRegistry,
29+
_rewardsCoordinator,
30+
_delegationManager
31+
)
32+
{
33+
}
34+
35+
// ------------------------------------------------------------------------
36+
// Functions
37+
// ------------------------------------------------------------------------
38+
39+
/**
40+
* @notice Validate signed data via ECDSAStakeRegistry.
41+
*/
42+
function validate(bytes calldata data, bytes calldata signature) external view
43+
{
44+
bytes32 message = keccak256(data);
45+
bytes32 ethSignedMessageHash = ECDSAUpgradeable.toEthSignedMessageHash(message);
46+
bytes4 magicValue = IERC1271Upgradeable.isValidSignature.selector;
47+
48+
// If the registry returns the magicValue, signature is considered valid
49+
if( magicValue !=
50+
ECDSAStakeRegistry(stakeRegistry).isValidSignature(
51+
ethSignedMessageHash,
52+
signature
53+
)
54+
) {
55+
revert ILayerServiceManager.InvalidSignature();
56+
}
57+
}
58+
}

src/WavsSubmit.sol

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,25 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.0;
33

4-
import {IWavsService} from "./interfaces/IWAVSServiceHandler.sol";
4+
import {ILayerServiceHandler} from "./interfaces/ILayerServiceHandler.sol";
5+
import {ILayerServiceManager} from "./interfaces/ILayerServiceManager.sol";
56
import {ISimpleTrigger} from "./interfaces/ISimpleTrigger.sol";
67
import {ISimpleSubmit} from "./interfaces/ISimpleSubmit.sol";
78

8-
contract WavsSubmit is IWavsService {
9-
address private owner;
10-
address private serviceManager;
9+
contract SimpleSubmit is ILayerServiceHandler {
10+
ILayerServiceManager private _serviceManager;
1111

1212
mapping(ISimpleTrigger.TriggerId => bool) validTriggers;
1313
mapping(ISimpleTrigger.TriggerId => bytes) datas;
1414
mapping(ISimpleTrigger.TriggerId => bytes) signatures;
1515

16-
constructor() {
17-
owner = msg.sender;
16+
constructor(ILayerServiceManager serviceManager) {
17+
_serviceManager = serviceManager;
1818
}
1919

20-
modifier onlyOwner() {
21-
require(msg.sender == owner, "Only the owner can call this function.");
22-
_;
23-
}
24-
25-
modifier onlyServiceManager() {
26-
require(msg.sender == serviceManager, "Only the service manager can call this function.");
27-
_;
28-
}
29-
30-
function setServiceManager(address newServiceManager) external onlyOwner {
31-
serviceManager = newServiceManager;
32-
}
33-
34-
function getServiceManager() public view returns (address) {
35-
return serviceManager;
36-
}
20+
function handleSignedData(bytes calldata data, bytes calldata signature) external {
21+
_serviceManager.validate(data, signature);
3722

38-
function handleSignedData(bytes calldata data, bytes calldata signature) external onlyServiceManager {
3923
ISimpleSubmit.DataWithId memory dataWithId = abi.decode(data, (ISimpleSubmit.DataWithId));
4024

4125
signatures[dataWithId.triggerId] = signature;

src/WavsTrigger.sol

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// SPDX-License-Identifier: MIT
12
pragma solidity ^0.8.0;
23

34
import {ISimpleTrigger} from "./interfaces/ISimpleTrigger.sol";
@@ -33,7 +34,10 @@ contract SimpleTrigger {
3334
ISimpleTrigger.TriggerId triggerId = nextTriggerId;
3435

3536
// Create the trigger
36-
Trigger memory trigger = Trigger({creator: msg.sender, data: data});
37+
Trigger memory trigger = Trigger({
38+
creator: msg.sender,
39+
data: data
40+
});
3741

3842
// update storages
3943
triggersById[triggerId] = trigger;
@@ -43,8 +47,11 @@ contract SimpleTrigger {
4347
// emit the id directly in an event
4448

4549
// now be layer-compatible
46-
ISimpleTrigger.TriggerInfo memory triggerInfo =
47-
ISimpleTrigger.TriggerInfo({triggerId: triggerId, creator: trigger.creator, data: trigger.data});
50+
ISimpleTrigger.TriggerInfo memory triggerInfo = ISimpleTrigger.TriggerInfo({
51+
triggerId: triggerId,
52+
creator: trigger.creator,
53+
data: trigger.data
54+
});
4855

4956
emit NewTrigger(abi.encode(triggerInfo));
5057
}
@@ -56,6 +63,11 @@ contract SimpleTrigger {
5663
function getTrigger(ISimpleTrigger.TriggerId triggerId) public view returns (ISimpleTrigger.TriggerInfo memory) {
5764
Trigger storage trigger = triggersById[triggerId];
5865

59-
return ISimpleTrigger.TriggerInfo({triggerId: triggerId, creator: trigger.creator, data: trigger.data});
66+
return ISimpleTrigger.TriggerInfo({
67+
triggerId: triggerId,
68+
creator: trigger.creator,
69+
data: trigger.data
70+
});
6071
}
72+
6173
}

0 commit comments

Comments
 (0)