|
| 1 | +//SPDX-License-Identifier: MIT |
| 2 | +pragma solidity ^0.8.24; |
| 3 | + |
| 4 | +import {Script} from "forge-std/Script.sol"; |
| 5 | +import {IRebaseToken} from "../src/interface/IRebaseToken.sol"; |
| 6 | +import {RebaseToken} from "../src/RebaseToken.sol"; |
| 7 | +import {RebaseTokenPool} from "../src/RebaseTokenPool.sol"; |
| 8 | +import {Vault} from "../src/Vault.sol"; |
| 9 | +import {CCIPLocalSimulatorFork, Register} from "@chainlink/local/src/ccip/CCIPLocalSimulatorFork.sol"; |
| 10 | +import {IERC20} from "@ccip/contracts/src/v0.8/vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol"; |
| 11 | +import {RegistryModuleOwnerCustom} from "ccip/contracts/src/v0.8/ccip/tokenAdminRegistry/RegistryModuleOwnerCustom.sol"; |
| 12 | +import {TokenAdminRegistry} from "@ccip/contracts/src/v0.8/ccip/tokenAdminRegistry/TokenAdminRegistry.sol"; |
| 13 | + |
| 14 | +contract TokenAndPoolDeployer is Script { |
| 15 | + function run() public returns (RebaseToken token, RebaseTokenPool pool) { |
| 16 | + CCIPLocalSimulatorFork ccipLocalSimulatorFork = new CCIPLocalSimulatorFork(); |
| 17 | + Register.NetworkDetails memory networkDetails = ccipLocalSimulatorFork |
| 18 | + .getNetworkDetails(block.chainid); |
| 19 | + vm.startBroadcast(); |
| 20 | + token = new RebaseToken(); |
| 21 | + pool = new RebaseTokenPool( |
| 22 | + IERC20(address(token)), |
| 23 | + new address[](0), |
| 24 | + networkDetails.rmnProxyAddress, |
| 25 | + networkDetails.routerAddress |
| 26 | + ); |
| 27 | + token.grantMintAndBurnRole(address(pool)); |
| 28 | + RegistryModuleOwnerCustom( |
| 29 | + networkDetails.registryModuleOwnerCustomAddress |
| 30 | + ).registerAdminViaOwner(address(token)); |
| 31 | + TokenAdminRegistry(networkDetails.tokenAdminRegistryAddress) |
| 32 | + .acceptAdminRole(address(token)); |
| 33 | + TokenAdminRegistry(networkDetails.tokenAdminRegistryAddress).setPool( |
| 34 | + address(token), |
| 35 | + address(pool) |
| 36 | + ); |
| 37 | + vm.stopBroadcast(); |
| 38 | + } |
| 39 | +} |
| 40 | + |
| 41 | +contract VaultDeployer is Script { |
| 42 | + function run(address _rebaseToken) public returns (Vault vault) { |
| 43 | + vm.startBroadcast(); |
| 44 | + vault = new Vault(IRebaseToken(_rebaseToken)); |
| 45 | + IRebaseToken(_rebaseToken).grantMintAndBurnRole(address(vault)); |
| 46 | + vm.stopBroadcast(); |
| 47 | + } |
| 48 | +} |
0 commit comments