Skip to content

Commit

Permalink
Merge pull request #5 from DLC-link/feat/restore-subnetworks
Browse files Browse the repository at this point in the history
Restore Subnetworks in NetworkMiddleware
  • Loading branch information
Rayerleier authored Dec 4, 2024
2 parents 4bffd76 + 95c1ccc commit 4978ed7
Showing 1 changed file with 26 additions and 8 deletions.
34 changes: 26 additions & 8 deletions src/iBTC_NetworkMiddleware.sol
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
error VaultEpochTooShort();
error VaultGracePeriodNotPassed();

error InvalidSubnetworksCnt();

error TooOldEpoch();
error InvalidEpoch();

Expand All @@ -60,6 +62,7 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
uint48 private constant INSTANT_SLASHER_TYPE = 0;
uint48 private constant VETO_SLASHER_TYPE = 1;

uint256 public subnetworksCnt;
mapping(uint48 => uint256) public totalStakeCache;
mapping(uint48 => bool) public totalStakeCached;
mapping(uint48 => mapping(address => uint256)) public operatorStakeCache;
Expand Down Expand Up @@ -96,6 +99,8 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
VAULT_REGISTRY = _vaultRegistry;
OPERATOR_NET_OPTIN = _operatorNetOptin;
SLASHING_WINDOW = _slashingWindow;

subnetworksCnt = 1;
}

function getEpochStartTs(
Expand Down Expand Up @@ -215,13 +220,22 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
vaults.remove(vault);
}

function setSubnetworksCnt(
uint256 _subnetworksCnt
) external onlyOwner {
if (subnetworksCnt >= _subnetworksCnt) {
revert InvalidSubnetworksCnt();
}

subnetworksCnt = _subnetworksCnt;
}

function getOperatorStake(address operator, uint48 epoch) public view returns (uint256 stake) {
if (totalStakeCached[epoch]) {
return operatorStakeCache[epoch][operator];
}

uint48 epochStartTs = getEpochStartTs(epoch);
bytes32 networkId = NETWORK.subnetwork(0); // Using library function with identifier 0

for (uint256 i; i < vaults.length(); ++i) {
(address vault, uint48 enabledTime, uint48 disabledTime) = vaults.atWithTimes(i);
Expand All @@ -231,7 +245,11 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
continue;
}

stake += IBaseDelegator(IVault(vault).delegator()).stakeAt(networkId, operator, epochStartTs, new bytes(0));
for (uint96 j = 0; j < subnetworksCnt; ++j) {
stake += IBaseDelegator(IVault(vault).delegator()).stakeAt(
NETWORK.subnetwork(j), operator, epochStartTs, new bytes(0)
);
}
}

return stake;
Expand Down Expand Up @@ -287,7 +305,6 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {

function slash(uint48 epoch, address operator, uint256 amount) public onlyOwner updateStakeCache(epoch) {
uint48 epochStartTs = getEpochStartTs(epoch);
bytes32 networkId = NETWORK.subnetwork(0);

if (epochStartTs < Time.timestamp() - SLASHING_WINDOW) {
revert TooOldEpoch();
Expand All @@ -307,11 +324,12 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
if (!_wasActiveAt(enabledTime, disabledTime, epochStartTs)) {
continue;
}

uint256 vaultStake =
IBaseDelegator(IVault(vault).delegator()).stakeAt(networkId, operator, epochStartTs, new bytes(0));

_slashVault(epochStartTs, vault, networkId, operator, (amount * vaultStake) / totalOperatorStake);
for (uint96 j = 0; j < subnetworksCnt; ++j) {
bytes32 subnetwork = NETWORK.subnetwork(j);
uint256 vaultStake =
IBaseDelegator(IVault(vault).delegator()).stakeAt(subnetwork, operator, epochStartTs, new bytes(0));
_slashVault(epochStartTs, vault, subnetwork, operator, (amount * vaultStake) / totalOperatorStake);
}
}
}

Expand Down

0 comments on commit 4978ed7

Please sign in to comment.