Skip to content

Commit 86bbf12

Browse files
committed
evm: Always allow re-enabling a previously registered transceiver
1 parent e3f27fc commit 86bbf12

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

evm/src/NttManager/TransceiverRegistry.sol

+4-4
Original file line numberDiff line numberDiff line change
@@ -120,13 +120,13 @@ abstract contract TransceiverRegistry {
120120
revert InvalidTransceiverZeroAddress();
121121
}
122122

123-
if (_numTransceivers.registered >= MAX_TRANSCEIVERS) {
124-
revert TooManyTransceivers();
125-
}
126-
127123
if (transceiverInfos[transceiver].registered) {
128124
transceiverInfos[transceiver].enabled = true;
129125
} else {
126+
if (_numTransceivers.registered >= MAX_TRANSCEIVERS) {
127+
revert TooManyTransceivers();
128+
}
129+
130130
transceiverInfos[transceiver] = TransceiverInfo({
131131
registered: true,
132132
enabled: true,

evm/test/NttManager.t.sol

+22
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import "../src/interfaces/INttManager.sol";
99
import "../src/interfaces/IRateLimiter.sol";
1010
import "../src/interfaces/INttManagerEvents.sol";
1111
import "../src/interfaces/IRateLimiterEvents.sol";
12+
import "../src/NttManager/TransceiverRegistry.sol";
1213
import {Utils} from "./libraries/Utils.sol";
1314

1415
import "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol";
@@ -226,6 +227,27 @@ contract TestNttManager is Test, INttManagerEvents, IRateLimiterEvents {
226227
nttManager.setTransceiver(address(0x123));
227228
}
228229

230+
function test_maxOutTransceivers() public {
231+
// Let's register a transceiver and then disable it
232+
DummyTransceiver e = new DummyTransceiver(address(nttManager));
233+
nttManager.setTransceiver(address(e));
234+
nttManager.removeTransceiver(address(e));
235+
236+
// We should be able to register 64 transceivers total
237+
for (uint256 i = 0; i < 63; ++i) {
238+
DummyTransceiver d = new DummyTransceiver(address(nttManager));
239+
nttManager.setTransceiver(address(d));
240+
}
241+
242+
// Registering a new transceiver should fail as we've hit the cap
243+
DummyTransceiver c = new DummyTransceiver(address(nttManager));
244+
vm.expectRevert(TransceiverRegistry.TooManyTransceivers.selector);
245+
nttManager.setTransceiver(address(c));
246+
247+
// We should be able to renable an already registered transceiver at the cap
248+
nttManager.setTransceiver(address(e));
249+
}
250+
229251
// == threshold
230252

231253
function test_cantSetThresholdTooHigh() public {

0 commit comments

Comments
 (0)