@@ -23,6 +23,11 @@ contract ChainlinkRelayerFactory is IChainlinkRelayerFactory, OwnableUpgradeable
2323 */
2424 address [] public rateFeeds;
2525
26+ /**
27+ * @notice Account that is allowed to deploy relayers.
28+ */
29+ address public relayerDeployer;
30+
2631 /**
2732 * @notice Thrown when trying to deploy a relayer to an address that already has code.
2833 * @param contractAddress Address at which the relayer could not be deployed.
@@ -51,6 +56,17 @@ contract ChainlinkRelayerFactory is IChainlinkRelayerFactory, OwnableUpgradeable
5156 */
5257 error NoRelayerForRateFeedId (address rateFeedId );
5358
59+ /// @notice Thrown when a non-deployer tries to call a deployer-only function.
60+ error NotAllowed ();
61+
62+ /// @notice Modifier to restrict a function to the deployer.
63+ modifier onlyDeployer () {
64+ if (msg .sender != relayerDeployer && msg .sender != owner ()) {
65+ revert NotAllowed ();
66+ }
67+ _;
68+ }
69+
5470 /**
5571 * @notice Constructor for the logic contract.
5672 * @param disable If `true`, disables the initializer.
@@ -69,9 +85,20 @@ contract ChainlinkRelayerFactory is IChainlinkRelayerFactory, OwnableUpgradeable
6985 * @notice Initializes the factory.
7086 * @param _sortedOracles The SortedOracles instance deployed relayers should report to.
7187 */
72- function initialize (address _sortedOracles ) external initializer {
88+ function initialize (address _sortedOracles , address _relayerDeployer ) external initializer {
7389 __Ownable_init ();
7490 sortedOracles = _sortedOracles;
91+ relayerDeployer = _relayerDeployer;
92+ }
93+
94+ /**
95+ * @notice Sets the address of the relayer deployer.
96+ * @param newRelayerDeployer The address of the relayer deployer.
97+ */
98+ function setRelayerDeployer (address newRelayerDeployer ) external onlyOwner {
99+ address oldRelayerDeployer = relayerDeployer;
100+ relayerDeployer = newRelayerDeployer;
101+ emit RelayerDeployerUpdated (newRelayerDeployer, oldRelayerDeployer);
75102 }
76103
77104 /**
@@ -87,7 +114,7 @@ contract ChainlinkRelayerFactory is IChainlinkRelayerFactory, OwnableUpgradeable
87114 address rateFeedId ,
88115 string calldata rateFeedDescription ,
89116 IChainlinkRelayer.ChainlinkAggregator[] calldata aggregators
90- ) public onlyOwner returns (address relayerAddress ) {
117+ ) public onlyDeployer returns (address relayerAddress ) {
91118 if (address (deployedRelayers[rateFeedId]) != address (0 )) {
92119 revert RelayerForFeedExists (rateFeedId);
93120 }
@@ -121,7 +148,7 @@ contract ChainlinkRelayerFactory is IChainlinkRelayerFactory, OwnableUpgradeable
121148 * @notice Removes a relayer from the list of deployed relayers.
122149 * @param rateFeedId The rate feed whose relayer should be removed.
123150 */
124- function removeRelayer (address rateFeedId ) public onlyOwner {
151+ function removeRelayer (address rateFeedId ) public onlyDeployer {
125152 address relayerAddress = address (deployedRelayers[rateFeedId]);
126153
127154 if (relayerAddress == address (0 )) {
@@ -156,7 +183,7 @@ contract ChainlinkRelayerFactory is IChainlinkRelayerFactory, OwnableUpgradeable
156183 address rateFeedId ,
157184 string calldata rateFeedDescription ,
158185 IChainlinkRelayer.ChainlinkAggregator[] calldata aggregators
159- ) external onlyOwner returns (address relayerAddress ) {
186+ ) external onlyDeployer returns (address relayerAddress ) {
160187 removeRelayer (rateFeedId);
161188 return deployRelayer (rateFeedId, rateFeedDescription, aggregators);
162189 }
0 commit comments