Skip to content

Commit

Permalink
still progressing
Browse files Browse the repository at this point in the history
  • Loading branch information
Rayerleier committed Nov 26, 2024
1 parent 720d396 commit 8321b10
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 71 deletions.
1 change: 0 additions & 1 deletion lib/openzeppelin-contracts
Submodule openzeppelin-contracts deleted from 2f0bc5
72 changes: 54 additions & 18 deletions src/iBTC_NetworkMiddleware.sol
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
EnumerableMap.AddressToUintMap private operators;
EnumerableMap.AddressToUintMap private vaults;

modifier updateStakeCache(uint48 epoch) {
modifier updateStakeCache(
uint48 epoch
) {
if (!totalStakeCached[epoch]) {
calcAndCacheStakes(epoch);
}
Expand Down Expand Up @@ -96,28 +98,40 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
SLASHING_WINDOW = _slashingWindow;
}

function getEpochStartTs(uint48 epoch) public view returns (uint48 timestamp) {
function getEpochStartTs(
uint48 epoch
) public view returns (uint48 timestamp) {
return START_TIME + epoch * EPOCH_DURATION;
}

function getEpochAtTs(uint48 timestamp) public view returns (uint48 epoch) {
function getEpochAtTs(
uint48 timestamp
) public view returns (uint48 epoch) {
return (timestamp - START_TIME) / EPOCH_DURATION;
}

function isOperatorRegistered(address operator) public view returns (bool) {
function isOperatorRegistered(
address operator
) public view returns (bool) {
return operators.contains(operator);
}

function getOperatorInfo(address operator) public view returns (uint48, uint48) {
function getOperatorInfo(
address operator
) public view returns (uint48, uint48) {
(uint48 enabledTime, uint48 disabledTime) = operators.getTimes(operator);
return (enabledTime, disabledTime);
}

function isVaultRegistered(address vault) public view returns (bool) {
function isVaultRegistered(
address vault
) public view returns (bool) {
return vaults.contains(vault);
}

function getVaultInfo(address vault) public view returns (uint48, uint48) {
function getVaultInfo(
address vault
) public view returns (uint48, uint48) {
(uint48 enabledTime, uint48 disabledTime) = vaults.getTimes(vault);
return (enabledTime, disabledTime);
}
Expand Down Expand Up @@ -153,15 +167,21 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
updateKey(operator, key);
}

function pauseOperator(address operator) external onlyOwner {
function pauseOperator(
address operator
) external onlyOwner {
operators.disable(operator);
}

function unpauseOperator(address operator) external onlyOwner {
function unpauseOperator(
address operator
) external onlyOwner {
operators.enable(operator);
}

function unregisterOperator(address operator) external onlyOwner {
function unregisterOperator(
address operator
) external onlyOwner {
(, uint48 disabledTime) = operators.getTimes(operator);

if (disabledTime == 0 || disabledTime + SLASHING_WINDOW > Time.timestamp()) {
Expand All @@ -171,7 +191,9 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
operators.remove(operator);
}

function registerVault(address vault) external onlyOwner {
function registerVault(
address vault
) external onlyOwner {
if (vaults.contains(vault)) {
revert VaultAlreadyRegistred();
}
Expand All @@ -195,15 +217,21 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
vaults.enable(vault);
}

function pauseVault(address vault) external onlyOwner {
function pauseVault(
address vault
) external onlyOwner {
vaults.disable(vault);
}

function unpauseVault(address vault) external onlyOwner {
function unpauseVault(
address vault
) external onlyOwner {
vaults.enable(vault);
}

function unregisterVault(address vault) external onlyOwner {
function unregisterVault(
address vault
) external onlyOwner {
(, uint48 disabledTime) = vaults.getTimes(vault);

if (disabledTime == 0 || disabledTime + SLASHING_WINDOW > Time.timestamp()) {
Expand Down Expand Up @@ -235,14 +263,18 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
return stake;
}

function getTotalStake(uint48 epoch) public view returns (uint256) {
function getTotalStake(
uint48 epoch
) public view returns (uint256) {
if (totalStakeCached[epoch]) {
return totalStakeCache[epoch];
}
return _calcTotalStake(epoch);
}

function getValidatorSet(uint48 epoch) public view returns (ValidatorData[] memory validatorsData) {
function getValidatorSet(
uint48 epoch
) public view returns (ValidatorData[] memory validatorsData) {
uint48 epochStartTs = getEpochStartTs(epoch);

validatorsData = new ValidatorData[](operators.length());
Expand Down Expand Up @@ -309,7 +341,9 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
}
}

function calcAndCacheStakes(uint48 epoch) public returns (uint256 totalStake) {
function calcAndCacheStakes(
uint48 epoch
) public returns (uint256 totalStake) {
uint48 epochStartTs = getEpochStartTs(epoch);

// for epoch older than SLASHING_WINDOW total stake can be invalidated (use cache)
Expand Down Expand Up @@ -339,7 +373,9 @@ contract NetworkMiddleware is SimpleKeyRegistry32, Ownable {
totalStakeCache[epoch] = totalStake;
}

function _calcTotalStake(uint48 epoch) private view returns (uint256 totalStake) {
function _calcTotalStake(
uint48 epoch
) private view returns (uint256 totalStake) {
uint48 epochStartTs = getEpochStartTs(epoch);

// for epoch older than SLASHING_WINDOW total stake can be invalidated (use cache)
Expand Down
32 changes: 24 additions & 8 deletions src/iBTC_Vault.sol
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ contract iBTC_Vault is VaultStorage, MigratableEntity, AccessControlUpgradeable,
/**
* @inheritdoc IVault
*/
function activeBalanceOf(address account) public view returns (uint256) {
function activeBalanceOf(
address account
) public view returns (uint256) {
return ERC4626Math.previewRedeem(activeSharesOf(account), activeStake(), activeShares());
}

Expand All @@ -77,7 +79,9 @@ contract iBTC_Vault is VaultStorage, MigratableEntity, AccessControlUpgradeable,
/**
* @inheritdoc IVault
*/
function slashableBalanceOf(address account) external view returns (uint256) {
function slashableBalanceOf(
address account
) external view returns (uint256) {
uint256 epoch = currentEpoch();
return activeBalanceOf(account) + withdrawalsOf(epoch, account) + withdrawalsOf(epoch + 1, account);
}
Expand Down Expand Up @@ -262,7 +266,9 @@ contract iBTC_Vault is VaultStorage, MigratableEntity, AccessControlUpgradeable,
/**
* @inheritdoc IVault
*/
function setDepositWhitelist(bool status) external nonReentrant onlyRole(DEPOSIT_WHITELIST_SET_ROLE) {
function setDepositWhitelist(
bool status
) external nonReentrant onlyRole(DEPOSIT_WHITELIST_SET_ROLE) {
if (depositWhitelist == status) {
revert AlreadySet();
}
Expand Down Expand Up @@ -295,7 +301,9 @@ contract iBTC_Vault is VaultStorage, MigratableEntity, AccessControlUpgradeable,
/**
* @inheritdoc IVault
*/
function setIsDepositLimit(bool status) external nonReentrant onlyRole(IS_DEPOSIT_LIMIT_SET_ROLE) {
function setIsDepositLimit(
bool status
) external nonReentrant onlyRole(IS_DEPOSIT_LIMIT_SET_ROLE) {
if (isDepositLimit == status) {
revert AlreadySet();
}
Expand All @@ -308,7 +316,9 @@ contract iBTC_Vault is VaultStorage, MigratableEntity, AccessControlUpgradeable,
/**
* @inheritdoc IVault
*/
function setDepositLimit(uint256 limit) external nonReentrant onlyRole(DEPOSIT_LIMIT_SET_ROLE) {
function setDepositLimit(
uint256 limit
) external nonReentrant onlyRole(DEPOSIT_LIMIT_SET_ROLE) {
if (depositLimit == limit) {
revert AlreadySet();
}
Expand All @@ -318,7 +328,9 @@ contract iBTC_Vault is VaultStorage, MigratableEntity, AccessControlUpgradeable,
emit SetDepositLimit(limit);
}

function setDelegator(address delegator_) external nonReentrant {
function setDelegator(
address delegator_
) external nonReentrant {
if (isDelegatorInitialized) {
revert DelegatorAlreadyInitialized();
}
Expand All @@ -338,7 +350,9 @@ contract iBTC_Vault is VaultStorage, MigratableEntity, AccessControlUpgradeable,
emit SetDelegator(delegator_);
}

function setSlasher(address slasher_) external nonReentrant {
function setSlasher(
address slasher_
) external nonReentrant {
if (isSlasherInitialized) {
revert SlasherAlreadyInitialized();
}
Expand Down Expand Up @@ -382,7 +396,9 @@ contract iBTC_Vault is VaultStorage, MigratableEntity, AccessControlUpgradeable,
emit Withdraw(msg.sender, claimer, withdrawnAssets, burnedShares, mintedShares);
}

function _claim(uint256 epoch) internal returns (uint256 amount) {
function _claim(
uint256 epoch
) internal returns (uint256 amount) {
if (epoch >= currentEpoch()) {
revert InvalidEpoch();
}
Expand Down
4 changes: 3 additions & 1 deletion src/iBTC_VaultConfigurator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ contract VaultConfigurator is IVaultConfigurator {
/**
* @inheritdoc IVaultConfigurator
*/
function create(InitParams memory params) public returns (address vault, address delegator, address slasher) {
function create(
InitParams memory params
) public returns (address vault, address delegator, address slasher) {
vault = VaultFactory(VAULT_FACTORY).create(params.version, params.owner, params.vaultParams);

delegator =
Expand Down
Loading

0 comments on commit 8321b10

Please sign in to comment.