-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSatelliteConnectionRegistryModule.sol
40 lines (34 loc) · 2.31 KB
/
SatelliteConnectionRegistryModule.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.27;
import {ISatellite} from "src/interfaces/ISatellite.sol";
import {ISatelliteConnectionRegistryModule} from "src/interfaces/modules/ISatelliteConnectionRegistryModule.sol";
import {ILibSatellite} from "src/interfaces/ILibSatellite.sol";
import {LibSatellite} from "src/libraries/LibSatellite.sol";
import {AccessController} from "src/libraries/AccessController.sol";
/// @notice Satellite Connection Registry is responsible for storing information about chains to which message can be sent and from which message can be received
contract SatelliteConnectionRegistryModule is ISatelliteConnectionRegistryModule, AccessController {
/// @inheritdoc ISatelliteConnectionRegistryModule
function registerSatelliteConnection(uint256 chainId, uint256 satellite, address inbox, address senderSatelliteAlias, bytes4 sendMessageSelector) external onlyOwner {
require(satellite != 0, "SatelliteConnectionRegistry: invalid satellite");
ISatellite.SatelliteStorage storage s = LibSatellite.satelliteStorage();
require(s.satelliteConnectionRegistry[chainId].satelliteAddress == 0, "SatelliteConnectionRegistry: satellite already registered");
s.satelliteConnectionRegistry[chainId] = ILibSatellite.SatelliteConnection(satellite, inbox, sendMessageSelector);
if (senderSatelliteAlias != address(0)) {
require(!s.senderSatellites[senderSatelliteAlias], "SatelliteConnectionRegistry: crossDomainCounterpart already registered");
s.senderSatellites[senderSatelliteAlias] = true;
}
}
/// @inheritdoc ISatelliteConnectionRegistryModule
function removeSatelliteConnection(uint256 chainId, address crossDomainCounterpart) external onlyOwner {
ISatellite.SatelliteStorage storage s = LibSatellite.satelliteStorage();
delete s.satelliteConnectionRegistry[chainId];
if (crossDomainCounterpart != address(0)) {
delete s.senderSatellites[crossDomainCounterpart];
}
}
/// @inheritdoc ISatelliteConnectionRegistryModule
function getSatelliteConnection(uint256 chainId) external view returns (ILibSatellite.SatelliteConnection memory) {
ISatellite.SatelliteStorage storage s = LibSatellite.satelliteStorage();
return s.satelliteConnectionRegistry[chainId];
}
}