NetworkConfig.s.sol

Обзор

Данный файл содержит контракт на языке Solidity под названием NetworkConfig, который предназначен для хранения и предоставления конфигурационных данных для различных блокчейн-сетей (сетей Ethereum и совместимых с ней). Контракт реализует централизованное хранилище настроек для разных сетей, включая параметры администратора, адреса существующих контрактов, объем начального выпуска токенов MANA, идентификатор сети (chainId), URL для подключения к RPC и индикатор тестовой сети.

Этот контракт облегчает управление параметрами развертывания и взаимодействия с разными сетями и упрощает доступ к этим данным для других частей системы.


Описание классов и структур

Контракт NetworkConfig

Наследует от Script из библиотеки forge-std, что указывает на использование в процессе скриптов развертывания и тестирования в рамках Foundry.

Структура Config

Структура содержит конфигурационные параметры для каждой сети:

Поле

Тип

Описание

admin

address

Адрес администратора сети

existingSettlement

address

Адрес существующего контракта Settlement (если есть)

initialManaSupply

uint256

Начальное количество токенов MANA (с учётом decimals)

chainId

uint256

Идентификатор цепочки Ethereum-сети

rpcUrl

string

URL RPC для подключения к данной сети

isTestnet

bool

Флаг, указывающий, является ли сеть тестовой

Переменная configs

mapping(uint256 => Config) public configs;

Отображение из chainId в соответствующую конфигурацию Config. Позволяет быстро получать настройки по идентификатору сети.


Конструктор

В конструкторе предварительно инициализируются конфигурации для пяти сетей:

  1. Ethereum Mainnet (chainId: 1)

    • 1 000 000 MANA

    • RPC Alchemy для mainnet

    • isTestnet = false

  2. Ethereum Sepolia Testnet (chainId: 11155111)

    • 10 000 000 MANA

    • RPC Alchemy для Sepolia

    • isTestnet = true

  3. Arbitrum One (chainId: 42161)

    • 1 000 000 MANA

    • RPC Alchemy для Arbitrum Mainnet

    • isTestnet = false

  4. Arbitrum Sepolia (chainId: 421614)

    • 10 000 000 MANA

    • RPC Alchemy для Arbitrum Sepolia

    • isTestnet = true

  5. Local Anvil (chainId: 31337)

    • 100 000 000 MANA

    • RPC локального сервера

    • Адрес администратора — дефолтный аккаунт Anvil

    • isTestnet = true


Методы

function getConfig(uint256 chainId) external view returns (Config memory)

NetworkConfig networkConfig = NetworkConfig(address);
NetworkConfig.Config memory config = networkConfig.getConfig(1); // Получить конфигурацию для Ethereum Mainnet

function getCurrentConfig() external view returns (Config memory)

NetworkConfig.Config memory currentConfig = networkConfig.getCurrentConfig();

function isTestnet(uint256 chainId) external view returns (bool)

bool testnet = networkConfig.isTestnet(11155111); // true для Sepolia

Важные детали реализации


Взаимодействие с другими частями системы


Диаграмма структуры контракта

classDiagram
    class NetworkConfig {
        +mapping(uint256 => Config) configs
        +constructor()
        +getConfig(chainId uint256) Config
        +getCurrentConfig() Config
        +isTestnet(chainId uint256) bool
    }
    class Config {
        +address admin
        +address existingSettlement
        +uint256 initialManaSupply
        +uint256 chainId
        +string rpcUrl
        +bool isTestnet
    }
    NetworkConfig o-- Config : "configs"

Итог

Контракт NetworkConfig — это удобный инструмент для хранения и предоставления конфигурационных данных по разным Ethereum-сетям, с акцентом на стандартизацию параметров и поддержку тестовых и основных сетей. Его использование упрощает процессы развертывания и интеграции в многоцелевых проектах, где необходимо учитывать разные окружения.