Skip to content

Commit

Permalink
fixed: vault and network mixed up in NetworkMiddleware.sol
Browse files Browse the repository at this point in the history
  • Loading branch information
Rayerleier committed Dec 2, 2024
1 parent 39b6fd0 commit ab39bad
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 104 deletions.
62 changes: 31 additions & 31 deletions script/Setup.sol
Original file line number Diff line number Diff line change
@@ -1,38 +1,38 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.25;
// // SPDX-License-Identifier: UNLICENSED
// pragma solidity 0.8.25;

import {Script} from "forge-std/Script.sol";
import {NetworkMiddleware} from "src/iBTC_NetworkMiddleware.sol";
// import {Script} from "forge-std/Script.sol";
// import {NetworkMiddleware} from "src/iBTC_NetworkMiddleware.sol";

contract Setup is Script {
function run(
address network,
address owner,
uint48 epochDuration,
address[] memory vaults,
address[] memory operators,
bytes32[] memory keys,
address operatorRegistry,
address vaultRegistry,
address operatorNetworkOptIn
) external {
require(operators.length == keys.length, "inconsistent length");
vm.startBroadcast();
// contract Setup is Script {
// function run(
// address network,
// address owner,
// uint48 epochDuration,
// address[] memory vaults,
// address[] memory operators,
// bytes32[] memory keys,
// address operatorRegistry,
// address vaultRegistry,
// address operatorNetworkOptIn
// ) external {
// require(operators.length == keys.length, "inconsistent length");
// vm.startBroadcast();

uint48 minSlashingWindow = epochDuration; // we dont use this
// uint48 minSlashingWindow = epochDuration; // we dont use this

NetworkMiddleware middleware = new NetworkMiddleware(
network, operatorRegistry, vaultRegistry, operatorNetworkOptIn, owner, epochDuration, minSlashingWindow
);
// NetworkMiddleware middleware = new NetworkMiddleware(
// network, operatorRegistry, vaultRegistry, operatorNetworkOptIn, owner, epochDuration, minSlashingWindow
// );

for (uint256 i = 0; i < vaults.length; ++i) {
middleware.registerVault(vaults[i]);
}
// for (uint256 i = 0; i < vaults.length; ++i) {
// middleware.registerVault(vaults[i]);
// }

for (uint256 i = 0; i < operators.length; ++i) {
middleware.registerOperator(operators[i], keys[i]);
}
// for (uint256 i = 0; i < operators.length; ++i) {
// middleware.registerOperator(operators[i], keys[i]);
// }

vm.stopBroadcast();
}
}
// vm.stopBroadcast();
// }
// }
112 changes: 56 additions & 56 deletions script/SetupNetworkMiddleware.sol
Original file line number Diff line number Diff line change
@@ -1,56 +1,56 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.25;

import {Script} from "forge-std/Script.sol";
import {NetworkMiddleware} from "src/iBTC_NetworkMiddleware.sol";

contract SetupNetworkMiddleware is Script {
// Using anvil's default addresses
address constant NETWORK = 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266; // first address
address constant OWNER = 0x70997970C51812dc3A010C7d01b50e0d17dc79C8; // second address
uint48 constant EPOCH_DURATION = 7 days;
uint48 constant SLASHING_WINDOW = 8 days;

// Registry addresses (Sepolia)
address constant OPERATOR_REGISTRY = 0x6F75a4ffF97326A00e52662d82EA4FdE86a2C548;
address constant NETWORK_REGISTRY = 0x7d03b7343BF8d5cEC7C0C27ecE084a20113D15C9;
address constant NETWORK_OPTIN = 0x58973d16FFA900D11fC22e5e2B6840d9f7e13401;

// Initial operators and their keys (if any)
address[] operators;
bytes32[] keys;

// Initial vaults (if any)
address[] vaults;

function setUp() public {
// Add any initial operators and their keys
// operators.push(address(0));
// keys.push(bytes32(0));

// Add any initial vaults
// vaults.push(address(0));
}

function run() external {
require(operators.length == keys.length, "inconsistent length");
require(NETWORK != address(0), "set network address");
require(OWNER != address(0), "set owner address");

vm.startBroadcast();

NetworkMiddleware middleware = new NetworkMiddleware(
NETWORK, OPERATOR_REGISTRY, NETWORK_REGISTRY, NETWORK_OPTIN, OWNER, EPOCH_DURATION, SLASHING_WINDOW
);

for (uint256 i = 0; i < vaults.length; ++i) {
middleware.registerVault(vaults[i]);
}

for (uint256 i = 0; i < operators.length; ++i) {
middleware.registerOperator(operators[i], keys[i]);
}

vm.stopBroadcast();
}
}
// // SPDX-License-Identifier: UNLICENSED
// pragma solidity 0.8.25;

// import {Script} from "forge-std/Script.sol";
// import {NetworkMiddleware} from "src/iBTC_NetworkMiddleware.sol";

// contract SetupNetworkMiddleware is Script {
// // Using anvil's default addresses
// address constant NETWORK = 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266; // first address
// address constant OWNER = 0x70997970C51812dc3A010C7d01b50e0d17dc79C8; // second address
// uint48 constant EPOCH_DURATION = 7 days;
// uint48 constant SLASHING_WINDOW = 8 days;

// // Registry addresses (Sepolia)
// address constant OPERATOR_REGISTRY = 0x6F75a4ffF97326A00e52662d82EA4FdE86a2C548;
// address constant NETWORK_REGISTRY = 0x7d03b7343BF8d5cEC7C0C27ecE084a20113D15C9;
// address constant NETWORK_OPTIN = 0x58973d16FFA900D11fC22e5e2B6840d9f7e13401;

// // Initial operators and their keys (if any)
// address[] operators;
// bytes32[] keys;

// // Initial vaults (if any)
// address[] vaults;

// function setUp() public {
// // Add any initial operators and their keys
// // operators.push(address(0));
// // keys.push(bytes32(0));

// // Add any initial vaults
// // vaults.push(address(0));
// }

// function run() external {
// require(operators.length == keys.length, "inconsistent length");
// require(NETWORK != address(0), "set network address");
// require(OWNER != address(0), "set owner address");

// vm.startBroadcast();

// NetworkMiddleware middleware = new NetworkMiddleware(
// NETWORK, OPERATOR_REGISTRY, NETWORK_REGISTRY, NETWORK_OPTIN, OWNER, EPOCH_DURATION, SLASHING_WINDOW
// );

// for (uint256 i = 0; i < vaults.length; ++i) {
// middleware.registerVault(vaults[i]);
// }

// for (uint256 i = 0; i < operators.length; ++i) {
// middleware.registerOperator(operators[i], keys[i]);
// }

// vm.stopBroadcast();
// }
// }
10 changes: 8 additions & 2 deletions src/iBTC_NetworkMiddleware.sol
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
error OperatorNotRegistred();
error OperarorGracePeriodNotPassed();
error OperatorAlreadyRegistred();
error OperatorNotEnoughStaked();

error VaultAlreadyRegistred();
error VaultEpochTooShort();
Expand All @@ -50,8 +51,10 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {

address public immutable NETWORK;
address public immutable OPERATOR_REGISTRY;
address public immutable NETWORK_REGISTRY;
address public immutable VAULT_REGISTRY;
address public immutable OPERATOR_NET_OPTIN;
address public immutable OPERATOR_VAULT_OPTIN;
address public immutable OWNER;
uint48 public immutable EPOCH_DURATION;
uint48 public immutable SLASHING_WINDOW;
Expand All @@ -62,7 +65,7 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {

mapping(uint48 => uint256) public totalStakeCache;
mapping(uint48 => bool) public totalStakeCached;
mapping(uint48 => mapping(address => uint256)) public operatorStakeCache;
mapping(uint48 epoch => mapping(address operator => uint256 amounts)) public operatorStakeCache;
EnumerableMap.AddressToUintMap private operators;
EnumerableMap.AddressToUintMap private vaults;

Expand All @@ -78,8 +81,10 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
constructor(
address _network,
address _operatorRegistry,
address _networkRegistry,
address _vaultRegistry,
address _operatorNetOptin,
address _operatorVaultOptin,
address _owner,
uint48 _epochDuration,
uint48 _slashingWindow
Expand All @@ -93,6 +98,7 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
NETWORK = _network;
OWNER = _owner;
OPERATOR_REGISTRY = _operatorRegistry;
NETWORK_REGISTRY = _networkRegistry;
VAULT_REGISTRY = _vaultRegistry;
OPERATOR_NET_OPTIN = _operatorNetOptin;
SLASHING_WINDOW = _slashingWindow;
Expand Down Expand Up @@ -154,7 +160,6 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
}

updateKey(operator, key);

operators.add(operator);
operators.enable(operator);
}
Expand Down Expand Up @@ -191,6 +196,7 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
operators.remove(operator);
}

// NOTICE: WHY we need to register Vautl? should it be network?
function registerVault(
address vault
) external onlyOwner {
Expand Down
47 changes: 32 additions & 15 deletions test/iBTC_NetworkMiddleware.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,13 @@ contract iBTC_NetworkMiddlewareTest is Test {
address constant VAULT_FACTORY = 0x407A039D94948484D356eFB765b3c74382A050B4;
address constant DELEGATOR_FACTORY = 0x890CA3f95E0f40a79885B7400926544B2214B03f;
address constant SLASHER_FACTORY = 0xbf34bf75bb779c383267736c53a4ae86ac7bB299;
address constant OPERATOR_NET_OPTIN = 0x58973d16FFA900D11fC22e5e2B6840d9f7e13401;
address constant NEWTORK_OPTIN_SERVICE = 0x58973d16FFA900D11fC22e5e2B6840d9f7e13401;
address constant VAULT_OPTIN_SERVICE = 0x95CC0a052ae33941877c9619835A233D21D57351;
uint256 constant MAX_WITHDRAW_AMOUNT = 1e9;
uint256 constant MIN_WITHDRAW_AMOUNT = 1e4;

address constant NETWORK = 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266;
address constant OWNER = 0x70997970C51812dc3A010C7d01b50e0d17dc79C8;
address constant NETWORK = 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266; // first address network should be a multisig contract
address constant OWNER = 0x70997970C51812dc3A010C7d01b50e0d17dc79C8; // second address
uint48 constant EPOCH_DURATION = 7 days;
// uint48 constant NETWORK_EPOCH = 5 days;
uint48 constant SLASHING_WINDOW = 7 days;
Expand All @@ -45,6 +46,8 @@ contract iBTC_NetworkMiddlewareTest is Test {

address[] vaults;

OptInService network_optIn_service;
OptInService vault_optIn_service;
NetworkMiddleware public iBTC_middleware;
BurnerRouter public burner;
VaultConfigurator public vaultConfigurator;
Expand Down Expand Up @@ -131,27 +134,33 @@ contract iBTC_NetworkMiddlewareTest is Test {
}
vm.stopPrank();

vm.prank(vault_);
NetworkRegistry(NETWORK_REGISTRY).registerNetwork();
// vm.prank(NETWORK);
network_optIn_service = OptInService(NEWTORK_OPTIN_SERVICE);
vault_optIn_service = OptInService(VAULT_OPTIN_SERVICE);
//NOTICE
// vm.prank(vault_);
// NetworkRegistry(NETWORK_REGISTRY).registerNetwork();
vm.prank(NETWORK);
NetworkRegistry(NETWORK_REGISTRY).registerNetwork();

vaults.push(vault_);
vm.startPrank(OWNER);
iBTC_middleware = new NetworkMiddleware(
vault_, OPERATOR_REGISTRY, NETWORK_REGISTRY, OPERATOR_NET_OPTIN, OWNER, EPOCH_DURATION, SLASHING_WINDOW
NETWORK,
OPERATOR_REGISTRY,
NETWORK_REGISTRY,
VAULT_FACTORY,
NEWTORK_OPTIN_SERVICE,
VAULT_OPTIN_SERVICE,
OWNER,
EPOCH_DURATION,
SLASHING_WINDOW
);
for (uint256 i = 0; i < vaults.length; ++i) {
iBTC_middleware.registerVault(vaults[i]);
}

for (uint256 i = 0; i < operators.length; ++i) {
iBTC_middleware.registerOperator(operators[i], keys[i]);
}
vm.stopPrank();
console.log("Vault: ", vault_);
console.log("Delegator: ", delegator_);
console.log("Slasher: ", slasher_);
assertEq(IVault(vault_).slasher(), slasher_);

vm.startPrank(address(iBTC_middleware));
NetworkRegistry(NETWORK_REGISTRY).registerNetwork();
Expand All @@ -164,7 +173,7 @@ contract iBTC_NetworkMiddlewareTest is Test {
bytes32 key = keccak256(abi.encodePacked("operator_key"));
vm.startPrank(operator);
OperatorRegistry(OPERATOR_REGISTRY).registerOperator();
OptInService(OPERATOR_NET_OPTIN).optIn(vaults[0]);
network_optIn_service.optIn(NETWORK);
vm.stopPrank();
vm.startPrank(OWNER);
iBTC_middleware.registerOperator(operator, key);
Expand Down Expand Up @@ -197,7 +206,6 @@ contract iBTC_NetworkMiddlewareTest is Test {
function testRegisterVault() public {
vm.startPrank(OWNER);

vm.expectRevert();
iBTC_middleware.registerVault(vaults[0]);

bool isVaultRegistered = iBTC_middleware.isVaultRegistered(vaults[0]);
Expand All @@ -207,6 +215,7 @@ contract iBTC_NetworkMiddlewareTest is Test {
}

function testPauseAndUnpauseVault() public {
testRegisterVault();
vm.startPrank(OWNER);

iBTC_middleware.pauseVault(vaults[0]);
Expand All @@ -233,6 +242,7 @@ contract iBTC_NetworkMiddlewareTest is Test {
uint48 epoch = iBTC_middleware.getCurrentEpoch();

vm.startPrank(address(iBTC_middleware));
// NOTE figure out how to stake some into it.
iBTC_middleware.calcAndCacheStakes(epoch);
vm.stopPrank();

Expand All @@ -248,4 +258,11 @@ contract iBTC_NetworkMiddlewareTest is Test {

vm.stopPrank();
}

function testOptInVault() public {
testRegisterOperator();
address operator = address(0x1234);
vm.prank(operator);
vault_optIn_service.optIn(vaults[0]);
}
}

0 comments on commit ab39bad

Please sign in to comment.