Skip to content

Commit

Permalink
feat: change min ONO requirement
Browse files Browse the repository at this point in the history
  • Loading branch information
blockgroot committed Oct 17, 2024
1 parent a9ad465 commit a39e5f4
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 24 deletions.
5 changes: 4 additions & 1 deletion contracts/StaderOracle.sol
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ contract StaderOracle is IStaderOracle, AccessControlUpgradeable, PausableUpgrad
uint256 public constant MAX_ER_UPDATE_FREQUENCY = 7200 * 7; // 7 days
uint256 public constant ER_CHANGE_MAX_BPS = 10_000;
uint256 public override erChangeLimit;
uint256 public constant MIN_TRUSTED_NODES = 5;
uint256 public constant MIN_TRUSTED_NODES = 3;
uint256 public override trustedNodeChangeCoolingPeriod;

/// @inheritdoc IStaderOracle
Expand Down Expand Up @@ -119,6 +119,9 @@ contract StaderOracle is IStaderOracle, AccessControlUpgradeable, PausableUpgrad
if (block.number < lastTrustedNodeCountChangeBlock + trustedNodeChangeCoolingPeriod) {
revert CooldownNotComplete();
}
if (trustedNodesCount == MIN_TRUSTED_NODES) {
revert InsufficientTrustedNodes();
}
lastTrustedNodeCountChangeBlock = block.number;

isTrustedNode[_nodeAddress] = false;
Expand Down
51 changes: 28 additions & 23 deletions test/foundry_tests/StaderOracle.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ contract StaderOracleTest is Test {
}

function test_add_remove_trustedNode() public {
// Tests for adding nodes
address trustedNode = vm.addr(123);
assertEq(staderOracle.trustedNodesCount(), 0);
assertFalse(staderOracle.isTrustedNode(trustedNode));
Expand All @@ -139,16 +140,6 @@ contract StaderOracleTest is Test {
assertEq(staderOracle.trustedNodesCount(), 1);
assertTrue(staderOracle.isTrustedNode(trustedNode));

vm.expectRevert(IStaderOracle.NodeNotTrusted.selector);
vm.prank(staderManager);
staderOracle.removeTrustedNode(vm.addr(567));

vm.prank(staderManager);
staderOracle.removeTrustedNode(trustedNode);

assertEq(staderOracle.trustedNodesCount(), 0);
assertFalse(staderOracle.isTrustedNode(trustedNode));

// lets update trustedNode cooling period
vm.expectRevert(UtilLib.CallerNotManager.selector);
staderOracle.updateTrustedNodeChangeCoolingPeriod(100);
Expand All @@ -157,22 +148,36 @@ contract StaderOracleTest is Test {
staderOracle.updateTrustedNodeChangeCoolingPeriod(100);

vm.expectRevert(IStaderOracle.CooldownNotComplete.selector);
staderOracle.addTrustedNode(vm.addr(78));
staderOracle.addTrustedNode(vm.addr(77));

// wait for 100 blocks
// wait for 100 blocks each time to add node
vm.roll(block.number + 100);
staderOracle.addTrustedNode(vm.addr(77));
vm.roll(block.number + 100);
staderOracle.addTrustedNode(vm.addr(78));
assertEq(staderOracle.trustedNodesCount(), 1);
vm.roll(block.number + 100);
staderOracle.addTrustedNode(vm.addr(79));
assertEq(staderOracle.trustedNodesCount(), 4);
assertTrue(staderOracle.isTrustedNode(vm.addr(77)));
assertTrue(staderOracle.isTrustedNode(vm.addr(78)));
assertTrue(staderOracle.isTrustedNode(vm.addr(79)));

// Tests for removing nodes
vm.expectRevert(IStaderOracle.NodeNotTrusted.selector);
staderOracle.removeTrustedNode(vm.addr(567));

vm.expectRevert(IStaderOracle.CooldownNotComplete.selector);
staderOracle.removeTrustedNode(vm.addr(78));
staderOracle.removeTrustedNode(vm.addr(77));

// wait for 100 blocks
vm.roll(block.number + 100);
staderOracle.removeTrustedNode(vm.addr(77));
assertEq(staderOracle.trustedNodesCount(), 3);
assertFalse(staderOracle.isTrustedNode(vm.addr(77)));

vm.roll(block.number + 100);
vm.expectRevert(IStaderOracle.InsufficientTrustedNodes.selector);
staderOracle.removeTrustedNode(vm.addr(78));
assertEq(staderOracle.trustedNodesCount(), 0);
assertFalse(staderOracle.isTrustedNode(vm.addr(78)));
vm.stopPrank();
}

Expand All @@ -189,7 +194,7 @@ contract StaderOracleTest is Test {
vm.expectRevert(IStaderOracle.InsufficientTrustedNodes.selector);
staderOracle.submitSDPrice(sdPriceData);

assertEq(staderOracle.MIN_TRUSTED_NODES(), 5);
assertEq(staderOracle.MIN_TRUSTED_NODES(), 3);
address trustedNode2 = vm.addr(702);
address trustedNode3 = vm.addr(703);
address trustedNode4 = vm.addr(704);
Expand Down Expand Up @@ -330,7 +335,7 @@ contract StaderOracleTest is Test {
function test_submitSDPrice_manipulation_not_possible_by_minority_malicious_oracles() public {
SDPriceData memory sdPriceData = SDPriceData({ reportingBlockNumber: 1212, sdPriceInETH: 1 });

assertEq(staderOracle.MIN_TRUSTED_NODES(), 5);
assertEq(staderOracle.MIN_TRUSTED_NODES(), 3);
address trustedNode1 = vm.addr(701);
address trustedNode2 = vm.addr(702);
address trustedNode3 = vm.addr(703);
Expand Down Expand Up @@ -800,7 +805,7 @@ contract StaderOracleTest is Test {
totalETHXSupply: 100
});

assertEq(staderOracle.MIN_TRUSTED_NODES(), 5);
assertEq(staderOracle.MIN_TRUSTED_NODES(), 3);
address trustedNode1 = vm.addr(701);
address trustedNode2 = vm.addr(702);
address trustedNode3 = vm.addr(703);
Expand Down Expand Up @@ -1007,7 +1012,7 @@ contract StaderOracleTest is Test {
sortedInvalidSignaturePubkeys: invalidSignaturePubkeys
});

assertEq(staderOracle.MIN_TRUSTED_NODES(), 5);
assertEq(staderOracle.MIN_TRUSTED_NODES(), 3);
address trustedNode1 = vm.addr(701);
address trustedNode2 = vm.addr(702);
address trustedNode3 = vm.addr(703);
Expand Down Expand Up @@ -1082,7 +1087,7 @@ contract StaderOracleTest is Test {
sortedPubkeys: sortedPubkeys
});

assertEq(staderOracle.MIN_TRUSTED_NODES(), 5);
assertEq(staderOracle.MIN_TRUSTED_NODES(), 3);
address trustedNode1 = vm.addr(701);
address trustedNode2 = vm.addr(702);
address trustedNode3 = vm.addr(703);
Expand Down Expand Up @@ -1162,7 +1167,7 @@ contract StaderOracleTest is Test {
sortedPubkeys: sortedPubkeys
});

assertEq(staderOracle.MIN_TRUSTED_NODES(), 5);
assertEq(staderOracle.MIN_TRUSTED_NODES(), 3);
address trustedNode1 = vm.addr(701);
address trustedNode2 = vm.addr(702);
address trustedNode3 = vm.addr(703);
Expand Down Expand Up @@ -1232,7 +1237,7 @@ contract StaderOracleTest is Test {
slashedValidatorsCount: 4
});

assertEq(staderOracle.MIN_TRUSTED_NODES(), 5);
assertEq(staderOracle.MIN_TRUSTED_NODES(), 3);
address trustedNode1 = vm.addr(701);
address trustedNode2 = vm.addr(702);
address trustedNode3 = vm.addr(703);
Expand Down

0 comments on commit a39e5f4

Please sign in to comment.