Spaces:
Building
Building
| // SPDX-License-Identifier: MIT OR Apache-2.0 | |
| pragma solidity ^0.8.13; | |
| import {console} from "./console.sol"; | |
| import {StdConfig} from "./StdConfig.sol"; | |
| import {CommonBase} from "./Base.sol"; | |
| /// @notice Boilerplate to streamline the setup of multi-chain environments. | |
| abstract contract Config is CommonBase { | |
| // -- STORAGE (CONFIG + CHAINS + FORKS) ------------------------------------ | |
| /// @dev Contract instance holding the data from the TOML config file. | |
| StdConfig internal config; | |
| /// @dev Array of chain IDs for which forks have been created. | |
| uint256[] internal chainIds; | |
| /// @dev A mapping from a chain ID to its initialized fork ID. | |
| mapping(uint256 => uint256) internal forkOf; | |
| // -- HELPER FUNCTIONS ----------------------------------------------------- | |
| /// @notice Loads configuration from a file. | |
| /// | |
| /// @dev This function instantiates a `Config` contract, caching all its config variables. | |
| /// | |
| /// @param filePath: the path to the TOML configuration file. | |
| /// @param writeToFile: whether updates are written back to the TOML file. | |
| function _loadConfig(string memory filePath, bool writeToFile) internal { | |
| console.log("----------"); | |
| console.log(string.concat("Loading config from '", filePath, "'")); | |
| config = new StdConfig(filePath, writeToFile); | |
| vm.makePersistent(address(config)); | |
| console.log("Config successfully loaded"); | |
| console.log("----------"); | |
| } | |
| /// @notice Loads configuration from a file and creates forks for each specified chain. | |
| /// | |
| /// @dev This function instantiates a `Config` contract, caching all its config variables, | |
| /// reads the configured chain ids, and iterates through them to create a fork for each one. | |
| /// It also creates a map `forkOf[chainId] -> forkId` to easily switch between forks. | |
| /// | |
| /// @param filePath: the path to the TOML configuration file. | |
| /// @param writeToFile: whether updates are written back to the TOML file. | |
| function _loadConfigAndForks(string memory filePath, bool writeToFile) internal { | |
| _loadConfig(filePath, writeToFile); | |
| console.log("Setting up forks for the configured chains..."); | |
| uint256[] memory chains = config.getChainIds(); | |
| for (uint256 i = 0; i < chains.length; i++) { | |
| uint256 chainId = chains[i]; | |
| uint256 forkId = vm.createFork(config.getRpcUrl(chainId)); | |
| forkOf[chainId] = forkId; | |
| chainIds.push(chainId); | |
| } | |
| console.log("Forks successfully created"); | |
| console.log("----------"); | |
| } | |
| } | |