Skip to content

Commit

Permalink
Merge pull request #707 from ava-labs/acp-99-reference-impl-multi-con…
Browse files Browse the repository at this point in the history
…tract

Refactor validator manager into multiple contracts
  • Loading branch information
cam-schultz authored Feb 6, 2025
2 parents 3f69b1c + 41b2f32 commit 48fe488
Show file tree
Hide file tree
Showing 29 changed files with 2,684 additions and 4,768 deletions.
541 changes: 541 additions & 0 deletions abi-bindings/go/OwnableUpgradeable/OwnableUpgradeable.go

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions contracts/validator-manager/ACP99Manager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ abstract contract ACP99Manager {
* Emits a {CompletedValidatorRemoval} on success.
*
* @param messageIndex The index of the RegisterL1ValidatorMessage.
* @return validationID The ID of the validator that was removed.
*/
function completeValidatorRemoval(uint32 messageIndex)
public
Expand Down
22 changes: 9 additions & 13 deletions contracts/validator-manager/ERC20TokenStakingManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@

pragma solidity 0.8.25;

import {PoSValidatorManager} from "./PoSValidatorManager.sol";
import {PoSValidatorManagerSettings} from "./interfaces/IPoSValidatorManager.sol";
import {StakingManager} from "./StakingManager.sol";
import {StakingManagerSettings} from "./interfaces/IStakingManager.sol";
import {IERC20TokenStakingManager, PChainOwner} from "./interfaces/IERC20TokenStakingManager.sol";
import {IERC20Mintable} from "./interfaces/IERC20Mintable.sol";
import {ICMInitializable} from "@utilities/ICMInitializable.sol";
Expand All @@ -20,11 +20,7 @@ import {SafeERC20} from "@openzeppelin/[email protected]/token/ERC20/utils/SafeERC
*
* @custom:security-contact https://github.com/ava-labs/icm-contracts/blob/main/SECURITY.md
*/
contract ERC20TokenStakingManager is
Initializable,
PoSValidatorManager,
IERC20TokenStakingManager
{
contract ERC20TokenStakingManager is Initializable, StakingManager, IERC20TokenStakingManager {
using SafeERC20 for IERC20Mintable;
using SafeERC20TransferFrom for IERC20Mintable;

Expand Down Expand Up @@ -67,18 +63,18 @@ contract ERC20TokenStakingManager is
* @param token The ERC20 token to be staked
*/
function initialize(
PoSValidatorManagerSettings calldata settings,
StakingManagerSettings calldata settings,
IERC20Mintable token
) external reinitializer(2) {
__ERC20TokenStakingManager_init(settings, token);
}

// solhint-disable-next-line func-name-mixedcase
function __ERC20TokenStakingManager_init(
PoSValidatorManagerSettings calldata settings,
StakingManagerSettings calldata settings,
IERC20Mintable token
) internal onlyInitializing {
__POS_Validator_Manager_init(settings);
__StakingManager_init(settings);
__ERC20TokenStakingManager_init_unchained(token);
}

Expand Down Expand Up @@ -137,23 +133,23 @@ contract ERC20TokenStakingManager is
}

/**
* @notice See {PoSValidatorManager-_lock}
* @notice See {StakingManager-_lock}
* Note: Must be guarded with reentrancy guard for safe transfer from.
*/
function _lock(uint256 value) internal virtual override returns (uint256) {
return _getERC20StakingManagerStorage()._token.safeTransferFrom(value);
}

/**
* @notice See {PoSValidatorManager-_unlock}
* @notice See {StakingManager-_unlock}
* Note: Must be guarded with reentrancy guard for safe transfer.
*/
function _unlock(address to, uint256 value) internal virtual override {
_getERC20StakingManagerStorage()._token.safeTransfer(to, value);
}

/**
* @notice See {PoSValidatorManager-_reward}
* @notice See {StakingManager-_reward}
*/
function _reward(address account, uint256 amount) internal virtual override {
ERC20TokenStakingManagerStorage storage $ = _getERC20StakingManagerStorage();
Expand Down
22 changes: 9 additions & 13 deletions contracts/validator-manager/NativeTokenStakingManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@

pragma solidity 0.8.25;

import {PoSValidatorManager} from "./PoSValidatorManager.sol";
import {PoSValidatorManagerSettings} from "./interfaces/IPoSValidatorManager.sol";
import {StakingManager} from "./StakingManager.sol";
import {StakingManagerSettings} from "./interfaces/IStakingManager.sol";
import {
INativeTokenStakingManager, PChainOwner
} from "./interfaces/INativeTokenStakingManager.sol";
Expand All @@ -22,11 +22,7 @@ import {Initializable} from
*
* @custom:security-contact https://github.com/ava-labs/icm-contracts/blob/main/SECURITY.md
*/
contract NativeTokenStakingManager is
Initializable,
PoSValidatorManager,
INativeTokenStakingManager
{
contract NativeTokenStakingManager is Initializable, StakingManager, INativeTokenStakingManager {
using Address for address payable;

INativeMinter public constant NATIVE_MINTER =
Expand All @@ -44,16 +40,16 @@ contract NativeTokenStakingManager is
* @param settings Initial settings for the PoS validator manager
*/
// solhint-disable ordering
function initialize(PoSValidatorManagerSettings calldata settings) external reinitializer(2) {
function initialize(StakingManagerSettings calldata settings) external reinitializer(2) {
__NativeTokenStakingManager_init(settings);
}

// solhint-disable-next-line func-name-mixedcase
function __NativeTokenStakingManager_init(PoSValidatorManagerSettings calldata settings)
function __NativeTokenStakingManager_init(StakingManagerSettings calldata settings)
internal
onlyInitializing
{
__POS_Validator_Manager_init(settings);
__StakingManager_init(settings);
}

// solhint-disable-next-line func-name-mixedcase, no-empty-blocks
Expand Down Expand Up @@ -96,21 +92,21 @@ contract NativeTokenStakingManager is
}

/**
* @notice See {PoSValidatorManager-_lock}
* @notice See {StakingManager-_lock}
*/
function _lock(uint256 value) internal virtual override returns (uint256) {
return value;
}

/**
* @notice See {PoSValidatorManager-_unlock}
* @notice See {StakingManager-_unlock}
*/
function _unlock(address to, uint256 value) internal virtual override {
payable(to).sendValue(value);
}

/**
* @notice See {PoSValidatorManager-_reward}
* @notice See {StakingManager-_reward}
*/
function _reward(address account, uint256 amount) internal virtual override {
NATIVE_MINTER.mintNativeCoin(account, amount);
Expand Down
88 changes: 0 additions & 88 deletions contracts/validator-manager/PoAValidatorManager.sol

This file was deleted.

Loading

0 comments on commit 48fe488

Please sign in to comment.