Skip to content

Commit

Permalink
minor tests
Browse files Browse the repository at this point in the history
  • Loading branch information
1kresh committed Jul 1, 2024
1 parent 496e2c9 commit 6e2d4d9
Show file tree
Hide file tree
Showing 3 changed files with 386 additions and 25 deletions.
74 changes: 49 additions & 25 deletions test/DelegatorFactory.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,21 @@ import {MetadataService} from "src/contracts/service/MetadataService.sol";
import {NetworkMiddlewareService} from "src/contracts/service/NetworkMiddlewareService.sol";
import {OptInService} from "src/contracts/service/OptInService.sol";

import {IVault} from "src/interfaces/vault/IVault.sol";
import {Vault} from "src/contracts/vault/Vault.sol";
import {NetworkRestakeDelegator} from "src/contracts/delegator/NetworkRestakeDelegator.sol";
import {FullRestakeDelegator} from "src/contracts/delegator/FullRestakeDelegator.sol";
import {Slasher} from "src/contracts/slasher/Slasher.sol";
import {VetoSlasher} from "src/contracts/slasher/VetoSlasher.sol";

import {IVault} from "src/interfaces/vault/IVault.sol";
import {SimpleCollateral} from "./mocks/SimpleCollateral.sol";
import {Token} from "./mocks/Token.sol";
import {VaultConfigurator} from "src/contracts/VaultConfigurator.sol";
import {IVaultConfigurator} from "src/interfaces/IVaultConfigurator.sol";
import {INetworkRestakeDelegator} from "src/interfaces/delegator/INetworkRestakeDelegator.sol";
import {IBaseDelegator} from "src/interfaces/delegator/IBaseDelegator.sol";

import {IEntity} from "src/interfaces/common/IEntity.sol";

import {NetworkRestakeDelegator} from "src/contracts/delegator/NetworkRestakeDelegator.sol";
import {FullRestakeDelegator} from "src/contracts/delegator/FullRestakeDelegator.sol";

contract DelegatorFactoryTest is Test {
contract VaultConfiguratorTest is Test {
address owner;
address alice;
uint256 alicePrivateKey;
Expand All @@ -45,7 +45,6 @@ contract DelegatorFactoryTest is Test {
OptInService operatorVaultOptInService;
OptInService operatorNetworkOptInService;

Vault vault;
SimpleCollateral collateral;
VaultConfigurator vaultConfigurator;

Expand All @@ -70,16 +69,6 @@ contract DelegatorFactoryTest is Test {
address(new Vault(address(delegatorFactory), address(slasherFactory), address(vaultFactory)));
vaultFactory.whitelist(vaultImpl);

Token token = new Token("Token");
collateral = new SimpleCollateral(address(token));

collateral.mint(token.totalSupply());

vaultConfigurator =
new VaultConfigurator(address(vaultFactory), address(delegatorFactory), address(slasherFactory));
}

function test_Create() public {
address networkRestakeDelegatorImpl = address(
new NetworkRestakeDelegator(
address(networkRegistry),
Expand All @@ -102,7 +91,42 @@ contract DelegatorFactoryTest is Test {
);
delegatorFactory.whitelist(fullRestakeDelegatorImpl);

(address vault_, address delegator, address slasher) = vaultConfigurator.create(
address slasherImpl = address(
new Slasher(
address(vaultFactory),
address(networkMiddlewareService),
address(networkVaultOptInService),
address(operatorVaultOptInService),
address(operatorNetworkOptInService),
address(slasherFactory)
)
);
slasherFactory.whitelist(slasherImpl);

address vetoSlasherImpl = address(
new VetoSlasher(
address(vaultFactory),
address(networkMiddlewareService),
address(networkVaultOptInService),
address(operatorVaultOptInService),
address(operatorNetworkOptInService),
address(networkRegistry),
address(slasherFactory)
)
);
slasherFactory.whitelist(vetoSlasherImpl);

Token token = new Token("Token");
collateral = new SimpleCollateral(address(token));

collateral.mint(token.totalSupply());

vaultConfigurator =
new VaultConfigurator(address(vaultFactory), address(delegatorFactory), address(slasherFactory));
}

function test_Create() public {
(address vault_,,) = vaultConfigurator.create(
IVaultConfigurator.InitParams({
version: 1,
owner: alice,
Expand Down Expand Up @@ -132,13 +156,11 @@ contract DelegatorFactoryTest is Test {
})
);

vault = Vault(vault_);

address networkRestakeDelegator = delegatorFactory.create(
0,
true,
abi.encode(
address(vault),
vault_,
abi.encode(
INetworkRestakeDelegator.InitParams({
baseParams: IBaseDelegator.BaseParams({defaultAdminRoleHolder: bob}),
Expand All @@ -148,13 +170,14 @@ contract DelegatorFactoryTest is Test {
)
)
);
assertEq(IEntity(networkRestakeDelegator).FACTORY(), address(delegatorFactory));
assertEq(NetworkRestakeDelegator(networkRestakeDelegator).FACTORY(), address(delegatorFactory));
assertEq(delegatorFactory.isEntity(networkRestakeDelegator), true);

address fullRestakeDelegator = delegatorFactory.create(
1,
true,
abi.encode(
address(vault),
vault_,
abi.encode(
INetworkRestakeDelegator.InitParams({
baseParams: IBaseDelegator.BaseParams({defaultAdminRoleHolder: bob}),
Expand All @@ -164,6 +187,7 @@ contract DelegatorFactoryTest is Test {
)
)
);
assertEq(IEntity(fullRestakeDelegatorImpl).FACTORY(), address(delegatorFactory));
assertEq(FullRestakeDelegator(fullRestakeDelegator).FACTORY(), address(delegatorFactory));
assertEq(delegatorFactory.isEntity(fullRestakeDelegator), true);
}
}
175 changes: 175 additions & 0 deletions test/SlasherFactory.t.sol
Original file line number Diff line number Diff line change
@@ -1 +1,176 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

import {Test, console2} from "forge-std/Test.sol";

import {VaultFactory} from "src/contracts/VaultFactory.sol";
import {DelegatorFactory} from "src/contracts/DelegatorFactory.sol";
import {SlasherFactory} from "src/contracts/SlasherFactory.sol";
import {NetworkRegistry} from "src/contracts/NetworkRegistry.sol";
import {OperatorRegistry} from "src/contracts/OperatorRegistry.sol";
import {MetadataService} from "src/contracts/service/MetadataService.sol";
import {NetworkMiddlewareService} from "src/contracts/service/NetworkMiddlewareService.sol";
import {OptInService} from "src/contracts/service/OptInService.sol";

import {Vault} from "src/contracts/vault/Vault.sol";
import {NetworkRestakeDelegator} from "src/contracts/delegator/NetworkRestakeDelegator.sol";
import {FullRestakeDelegator} from "src/contracts/delegator/FullRestakeDelegator.sol";
import {Slasher} from "src/contracts/slasher/Slasher.sol";
import {VetoSlasher} from "src/contracts/slasher/VetoSlasher.sol";

import {IVault} from "src/interfaces/vault/IVault.sol";
import {SimpleCollateral} from "./mocks/SimpleCollateral.sol";
import {Token} from "./mocks/Token.sol";
import {VaultConfigurator} from "src/contracts/VaultConfigurator.sol";
import {IVaultConfigurator} from "src/interfaces/IVaultConfigurator.sol";
import {INetworkRestakeDelegator} from "src/interfaces/delegator/INetworkRestakeDelegator.sol";
import {IBaseDelegator} from "src/interfaces/delegator/IBaseDelegator.sol";
import {IVetoSlasher} from "src/interfaces/slasher/IVetoSlasher.sol";

contract VaultConfiguratorTest is Test {
address owner;
address alice;
uint256 alicePrivateKey;
address bob;
uint256 bobPrivateKey;

VaultFactory vaultFactory;
DelegatorFactory delegatorFactory;
SlasherFactory slasherFactory;
NetworkRegistry networkRegistry;
OperatorRegistry operatorRegistry;
MetadataService operatorMetadataService;
MetadataService networkMetadataService;
NetworkMiddlewareService networkMiddlewareService;
OptInService networkVaultOptInService;
OptInService operatorVaultOptInService;
OptInService operatorNetworkOptInService;

SimpleCollateral collateral;
VaultConfigurator vaultConfigurator;

function setUp() public {
owner = address(this);
(alice, alicePrivateKey) = makeAddrAndKey("alice");
(bob, bobPrivateKey) = makeAddrAndKey("bob");

vaultFactory = new VaultFactory(owner);
delegatorFactory = new DelegatorFactory(owner);
slasherFactory = new SlasherFactory(owner);
networkRegistry = new NetworkRegistry();
operatorRegistry = new OperatorRegistry();
operatorMetadataService = new MetadataService(address(operatorRegistry));
networkMetadataService = new MetadataService(address(networkRegistry));
networkMiddlewareService = new NetworkMiddlewareService(address(networkRegistry));
networkVaultOptInService = new OptInService(address(networkRegistry), address(vaultFactory));
operatorVaultOptInService = new OptInService(address(operatorRegistry), address(vaultFactory));
operatorNetworkOptInService = new OptInService(address(operatorRegistry), address(networkRegistry));

address vaultImpl =
address(new Vault(address(delegatorFactory), address(slasherFactory), address(vaultFactory)));
vaultFactory.whitelist(vaultImpl);

address networkRestakeDelegatorImpl = address(
new NetworkRestakeDelegator(
address(networkRegistry),
address(vaultFactory),
address(operatorVaultOptInService),
address(operatorNetworkOptInService),
address(delegatorFactory)
)
);
delegatorFactory.whitelist(networkRestakeDelegatorImpl);

address fullRestakeDelegatorImpl = address(
new FullRestakeDelegator(
address(networkRegistry),
address(vaultFactory),
address(operatorVaultOptInService),
address(operatorNetworkOptInService),
address(delegatorFactory)
)
);
delegatorFactory.whitelist(fullRestakeDelegatorImpl);

address slasherImpl = address(
new Slasher(
address(vaultFactory),
address(networkMiddlewareService),
address(networkVaultOptInService),
address(operatorVaultOptInService),
address(operatorNetworkOptInService),
address(slasherFactory)
)
);
slasherFactory.whitelist(slasherImpl);

address vetoSlasherImpl = address(
new VetoSlasher(
address(vaultFactory),
address(networkMiddlewareService),
address(networkVaultOptInService),
address(operatorVaultOptInService),
address(operatorNetworkOptInService),
address(networkRegistry),
address(slasherFactory)
)
);
slasherFactory.whitelist(vetoSlasherImpl);

Token token = new Token("Token");
collateral = new SimpleCollateral(address(token));

collateral.mint(token.totalSupply());

vaultConfigurator =
new VaultConfigurator(address(vaultFactory), address(delegatorFactory), address(slasherFactory));
}

function test_Create() public {
(address vault_,,) = vaultConfigurator.create(
IVaultConfigurator.InitParams({
version: 1,
owner: alice,
vaultParams: IVault.InitParams({
collateral: address(collateral),
delegator: address(0),
slasher: address(0),
burner: address(0xdEaD),
epochDuration: 1,
slasherSetEpochsDelay: 3,
depositWhitelist: false,
defaultAdminRoleHolder: alice,
slasherSetRoleHolder: alice,
depositorWhitelistRoleHolder: alice
}),
delegatorIndex: 0,
delegatorParams: abi.encode(
INetworkRestakeDelegator.InitParams({
baseParams: IBaseDelegator.BaseParams({defaultAdminRoleHolder: alice}),
networkLimitSetRoleHolder: alice,
operatorNetworkSharesSetRoleHolder: alice
})
),
withSlasher: false,
slasherIndex: 0,
slasherParams: ""
})
);

address slasher = slasherFactory.create(0, true, abi.encode(vault_, ""));
assertEq(Slasher(slasher).FACTORY(), address(slasherFactory));
assertEq(slasherFactory.isEntity(slasher), true);

address vetoSlasher = slasherFactory.create(
1,
true,
abi.encode(
vault_,
abi.encode(IVetoSlasher.InitParams({vetoDuration: 0, executeDuration: 1, resolverSetEpochsDelay: 3}))
)
);

assertEq(VetoSlasher(vetoSlasher).FACTORY(), address(slasherFactory));
assertEq(slasherFactory.isEntity(vetoSlasher), true);
}
}
Loading

0 comments on commit 6e2d4d9

Please sign in to comment.