11// SPDX-License-Identifier: BUSL-1.1
22pragma solidity ^ 0.8.0 ;
33
4- import {Script, console2 as console} from "forge-std/Script.sol " ;
4+ import {Script} from "forge-std/Script.sol " ;
5+ import {console2 as console} from "forge-std/console2.sol " ;
6+ import {stdJson} from "forge-std/StdJson.sol " ;
57
68import {UpgradeableBurnMintTokenPool} from "./../src/v0.8/ccip/pools/GHO/UpgradeableBurnMintTokenPool.sol " ;
79import {ITransparentProxyFactory} from "solidity-utils/contracts/transparent-proxy/interfaces/ITransparentProxyFactory.sol " ;
@@ -11,26 +13,32 @@ interface IProxyAdmin {
1113 function UPGRADE_INTERFACE_VERSION () external view returns (string memory );
1214}
1315
16+ struct Config {
17+ IERC20Metadata GHO_TOKEN;
18+ address OWNER;
19+ ITransparentProxyFactory PROXY_FACTORY;
20+ address RMN_PROXY;
21+ address ROUTER;
22+ }
23+
1424contract DeployUpgradableBurnMintTokenPool is Script {
25+ using stdJson for string ;
26+
1527 function run () external {
16- IERC20Metadata GHO_TOKEN = IERC20Metadata (vm.promptAddress ("GHO_TOKEN " ));
17- uint8 TOKEN_DECIMALS = _validateTokenAndFetchDecimals (GHO_TOKEN);
18- ITransparentProxyFactory PROXY_FACTORY = ITransparentProxyFactory (vm.promptAddress ("TRANSPARENT_PROXY_FACTORY " ));
19- address OWNER = vm.promptAddress ("OWNER " );
20- address ROUTER = vm.promptAddress ("ROUTER " );
21- address RMN_PROXY = vm.promptAddress ("RMN_PROXY " );
28+ Config memory config = this .parseConfig ();
29+ uint8 TOKEN_DECIMALS = _validateTokenAndFetchDecimals (config.GHO_TOKEN);
2230
2331 address [] memory ALLOW_LIST = new address [](0 );
2432 bool ALLOW_LIST_ENABLED = false ;
2533
2634 vm.startBroadcast ();
2735 address tokenPool = address (
28- new UpgradeableBurnMintTokenPool (address (GHO_TOKEN), TOKEN_DECIMALS, RMN_PROXY, ALLOW_LIST_ENABLED)
36+ new UpgradeableBurnMintTokenPool (address (config. GHO_TOKEN), TOKEN_DECIMALS, config. RMN_PROXY, ALLOW_LIST_ENABLED)
2937 );
30- address tokenPoolProxy = PROXY_FACTORY.create (
38+ address tokenPoolProxy = config. PROXY_FACTORY.create (
3139 tokenPool,
32- OWNER,
33- abi.encodeCall (UpgradeableBurnMintTokenPool.initialize, (OWNER, ALLOW_LIST, ROUTER))
40+ config. OWNER,
41+ abi.encodeCall (UpgradeableBurnMintTokenPool.initialize, (config. OWNER, ALLOW_LIST, config. ROUTER))
3442 );
3543 vm.stopBroadcast ();
3644
@@ -40,8 +48,13 @@ contract DeployUpgradableBurnMintTokenPool is Script {
4048 _validateProxyAdminVersion (tokenPoolProxy);
4149 }
4250
51+ function parseConfig () external view returns (Config memory ) {
52+ string memory config = vm.readFile (string .concat (vm.projectRoot (), "/script/config.json " ));
53+ return abi.decode (vm.parseJson (config, string .concat (". " , vm.toString (block .chainid ))), (Config));
54+ }
55+
4356 function _validateTokenAndFetchDecimals (IERC20Metadata token ) internal view returns (uint8 ) {
44- require (_cmp (token.name (), "GHO " ), "InvalidToken " );
57+ require (_cmp (token.name (), "Gho Token " ), "InvalidToken " );
4558 require (_cmp (token.symbol (), "GHO " ), "InvalidToken " );
4659 return token.decimals ();
4760 }
0 commit comments