Skip to content

Commit ce59dec

Browse files
committed
Created a token and Pool Deployer Script alongside a Pool Configuration Script
1 parent 5fd02e9 commit ce59dec

File tree

3 files changed

+92
-0
lines changed

3 files changed

+92
-0
lines changed

script/Configure.s.sol

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
//SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.24;
3+
4+
import {Script} from "forge-std/Script.sol";
5+
import {TokenPool} from "@ccip/contracts/src/v0.8/ccip/pools/TokenPool.sol";
6+
import {RateLimiter} from "@ccip/contracts/src/v0.8/ccip/libraries/RateLimiter.sol";
7+
8+
contract ConfigurePool is Script {
9+
function run(
10+
address localPool,
11+
uint64 remoteChainSelector,
12+
address remotePool,
13+
address remoteToken,
14+
bool outboundRateLimiterIsEnabled,
15+
uint128 outboundRateLimiterCapacity,
16+
uint128 outboundRateLimiterRate,
17+
bool inboundRateLimiterIsEnabled,
18+
uint128 inboundRateLimiterCapacity,
19+
uint128 inboundRateLimiterRate
20+
) public {
21+
vm.startBroadcast();
22+
TokenPool.ChainUpdate[]
23+
memory chainsToAdd = new TokenPool.ChainUpdate[](1);
24+
chainsToAdd[0] = TokenPool.ChainUpdate({
25+
remoteChainSelector: remoteChainSelector,
26+
allowed: true,
27+
remotePoolAddress: abi.encode(remotePool),
28+
remoteTokenAddress: abi.encode(remoteToken),
29+
outboundRateLimiterConfig: RateLimiter.Config({
30+
isEnabled: outboundRateLimiterIsEnabled,
31+
capacity: outboundRateLimiterCapacity,
32+
rate: outboundRateLimiterRate
33+
}),
34+
inboundRateLimiterConfig: RateLimiter.Config({
35+
isEnabled: inboundRateLimiterIsEnabled,
36+
capacity: inboundRateLimiterCapacity,
37+
rate: inboundRateLimiterRate
38+
})
39+
});
40+
TokenPool(localPool).applyChainUpdates(chainsToAdd);
41+
}
42+
}

script/Deployer.s.sol

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
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+
}

src/interface/IRebaseToken.sol

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ interface IRebaseToken {
1515
function getUserInterestRate(address _user) external view returns (uint256);
1616

1717
function getInterestRate() external view returns (uint256);
18+
19+
function grantMintAndBurnRole(address _account) external;
1820
}

0 commit comments

Comments
 (0)