Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/audit fixes #20

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 35 additions & 14 deletions src/iBTC_NetworkMiddleware.sol
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,11 @@ contract NetworkMiddleware is Initializable, SimpleKeyRegistry32, OwnableUpgrade
error NotVault();

error OperatorNotOptedIn();
error OperatorNotRegistred();
error OperarorGracePeriodNotPassed();
error OperatorAlreadyRegistred();
error OperatorNotRegistered();
error OperatorGracePeriodNotPassed();
error OperatorAlreadyRegistered();

error VaultAlreadyRegistred();
error VaultAlreadyRegistered();
error VaultEpochTooShort();
error VaultGracePeriodNotPassed();

Expand Down Expand Up @@ -99,15 +99,26 @@ contract NetworkMiddleware is Initializable, SimpleKeyRegistry32, OwnableUpgrade
////////////////////////////////////////////////////////////////
// EVENTS //
////////////////////////////////////////////////////////////////
event OperatorRegistered(address indexed operator, bytes32 key, uint256 timestamp);
event OperatorKeyUpdated(address indexed operator, bytes32 key, uint256 timestamp);
event OperatorPaused(address indexed operator, uint256 timestamp);
event OperatorUnpaused(address indexed operator, uint256 timestamp);
event OperatorUnregistered(address indexed operator, uint256 timestamp);
event VaultRegistered(address indexed vault, uint256 timestamp);
event VaultPaused(address indexed vault, uint256 timestamp);
event VaultUnpaused(address indexed vault, uint256 timestamp);
event VaultUnregistered(address indexed vault, uint256 timestamp);
event SubnetworksCntSet(uint256 subnetworksCnt, uint256 timestamp);
event RewardTokenSet(address rewardToken, uint256 timestamp);
event StakerRewardsSet(address stakerRewards, uint256 timestamp);
event OperatorRewardsSet(address operatorRewards, uint256 timestamp);
event StakerRewardsDistributed(uint48 indexed epoch, uint256 rewardAmount, uint256 totalStake, uint256 timestamp);
event OperatorRewardsDistributed(uint48 indexed epoch, uint256 rewardAmount, uint256 timestamp);
event RewardTokenSet(address rewardToken);
event StakerRewardsSet(address stakerRewards);
event OperatorRewardsSet(address operatorRewards);

////////////////////////////////////////////////////////////////
// MODIFIERS //
////////////////////////////////////////////////////////////////

modifier updateStakeCache(
uint48 epoch
) {
Expand Down Expand Up @@ -236,7 +247,7 @@ contract NetworkMiddleware is Initializable, SimpleKeyRegistry32, OwnableUpgrade
////////////////////////////////////////////////////////////////
function registerOperator(address operator, bytes32 key) external onlyOwner {
if (operators.contains(operator)) {
revert OperatorAlreadyRegistred();
revert OperatorAlreadyRegistered();
}

if (!IRegistry(OPERATOR_REGISTRY).isEntity(operator)) {
Expand All @@ -250,26 +261,30 @@ contract NetworkMiddleware is Initializable, SimpleKeyRegistry32, OwnableUpgrade
updateKey(operator, key);
operators.add(operator);
operators.enable(operator);
emit OperatorRegistered(operator, key, Time.timestamp());
}

function updateOperatorKey(address operator, bytes32 key) external onlyOwner {
if (!operators.contains(operator)) {
revert OperatorNotRegistred();
revert OperatorNotRegistered();
}

updateKey(operator, key);
emit OperatorKeyUpdated(operator, key, Time.timestamp());
}

function pauseOperator(
address operator
) external onlyOwner {
operators.disable(operator);
emit OperatorPaused(operator, Time.timestamp());
}

function unpauseOperator(
address operator
) external onlyOwner {
operators.enable(operator);
emit OperatorUnpaused(operator, Time.timestamp());
}

function unregisterOperator(
Expand All @@ -278,17 +293,18 @@ contract NetworkMiddleware is Initializable, SimpleKeyRegistry32, OwnableUpgrade
(, uint48 disabledTime) = operators.getTimes(operator);

if (disabledTime == 0 || disabledTime + SLASHING_WINDOW > Time.timestamp()) {
revert OperarorGracePeriodNotPassed();
revert OperatorGracePeriodNotPassed();
}

operators.remove(operator);
emit OperatorUnregistered(operator, Time.timestamp());
}

function registerVault(
address vault
) external onlyOwner {
if (vaults.contains(vault)) {
revert VaultAlreadyRegistred();
revert VaultAlreadyRegistered();
}

if (!IRegistry(VAULT_REGISTRY).isEntity(vault)) {
Expand All @@ -308,18 +324,21 @@ contract NetworkMiddleware is Initializable, SimpleKeyRegistry32, OwnableUpgrade

vaults.add(vault);
vaults.enable(vault);
emit VaultRegistered(vault, Time.timestamp());
}

function pauseVault(
address vault
) external onlyOwner {
vaults.disable(vault);
emit VaultPaused(vault, Time.timestamp());
}

function unpauseVault(
address vault
) external onlyOwner {
vaults.enable(vault);
emit VaultUnpaused(vault, Time.timestamp());
}

function unregisterVault(
Expand All @@ -332,6 +351,7 @@ contract NetworkMiddleware is Initializable, SimpleKeyRegistry32, OwnableUpgrade
}

vaults.remove(vault);
emit VaultUnregistered(vault, Time.timestamp());
}

function setSubnetworksCnt(
Expand All @@ -342,27 +362,28 @@ contract NetworkMiddleware is Initializable, SimpleKeyRegistry32, OwnableUpgrade
}

subnetworksCnt = _subnetworksCnt;
emit SubnetworksCntSet(_subnetworksCnt, Time.timestamp());
}

function setRewardToken(
address _rewardToken
) external onlyOwner {
REWARD_TOKEN = _rewardToken;
emit RewardTokenSet(_rewardToken);
emit RewardTokenSet(_rewardToken, Time.timestamp());
}

function setStakerRewards(
address _stakerRewards
) external onlyOwner {
STAKER_REWARDS = _stakerRewards;
emit StakerRewardsSet(_stakerRewards);
emit StakerRewardsSet(_stakerRewards, Time.timestamp());
}

function setOperatorRewards(
address _operatorRewards
) external onlyOwner {
OPERATOR_REWARDS = _operatorRewards;
emit OperatorRewardsSet(_operatorRewards);
emit OperatorRewardsSet(_operatorRewards, Time.timestamp());
}

////////////////////////////////////////////////////////////////
Expand Down
Loading