staking/script/DeployMigrationStakeManager.s.sol
r4bbit d397466f75 feat(script): add deployment script for new StakeManagers
This is needed to deploy individual new `StakeManager` instances in
both, production environment and testing.

The script can be used as follows:

Within tests, to get a new `StakeManager` instance that has a reference
to an older `StakeManager` instance, run:

```solidity
function setUp() public virtual override {
    super.setUp();
    DeployMigrationStakeManager deployment = new DeployMigrationStakeManager(address(stakeManager), stakeToken);
    newStakeManager = deployment.run();
}
```

Where `address(stakeManager)` is the address of the current
`StakeManager` and `stakeToken` is the address of the stake token.

To deploy a new instance from the CLI using `forge`, one can make use of
the `PREV_STAKE_MANAGER` and `STAKE_TOKEN_ADDRESS` environment variables
like this:

```sh
$ PREV_STAKE_MANAGER=0x123 STAKE_TOKEN_ADDRES=0x456 forge script script/DeployMigrationStakeManager.s.sol
```

The script will revert when `STAKE_TOKEN_ADDRESS` is `address(0)`.

Closes #71
2024-02-29 11:19:18 -03:00

34 lines
1.1 KiB
Solidity

// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.8.19 <=0.9.0;
import { BaseScript } from "./Base.s.sol";
import { StakeManager } from "../contracts/StakeManager.sol";
contract DeployMigrationStakeManager is BaseScript {
error DeployMigrationStakeManager_InvalidStakeTokenAddress();
address public prevStakeManager;
address public stakeToken;
constructor(address _prevStakeManager, address _stakeToken) {
prevStakeManager = _prevStakeManager;
stakeToken = _stakeToken;
}
function run() public returns (StakeManager) {
prevStakeManager = vm.envOr({ name: "PREV_STAKE_MANAGER", defaultValue: prevStakeManager });
stakeToken = vm.envOr({ name: "STAKE_TOKEN_ADDRESS", defaultValue: stakeToken });
if (stakeToken == address(0)) {
revert DeployMigrationStakeManager_InvalidStakeTokenAddress();
}
vm.startBroadcast(broadcaster);
StakeManager stakeManager = new StakeManager(stakeToken, prevStakeManager);
vm.stopBroadcast();
return stakeManager;
}
}