# Воспроизведение байт-кода

Здесь лежат исходники трёх контрактов Trufill ровно в том виде, в котором они задеплоены
в тестнетах (адреса — в реестре `ops/chains/chains.json` репозитория шлюза). Файлы побайтово
идентичны `contracts/aggregator/src/` основного репозитория.

## Настройки компиляции

| Параметр | Значение |
|---|---|
| solc | 0.8.28 |
| optimizer | включён, 200 runs |
| evm_version | cancun |
| OpenZeppelin Contracts | v5.7.0 (`@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/`) |
| forge-std | v1.16.2 (нужен только для тестов, в байт-код контрактов не попадает) |

## Проверка

```bash
forge init --no-git check && cd check
mkdir -p src/interfaces lib
cp /путь/к/этому/каталогу/*.sol src/
cp /путь/к/этому/каталогу/interfaces/*.sol src/interfaces/
git clone --depth 1 --branch v5.7.0 https://github.com/OpenZeppelin/openzeppelin-contracts lib/openzeppelin-contracts
printf '[profile.default]\nsolc_version = "0.8.28"\noptimizer = true\noptimizer_runs = 200\nevm_version = "cancun"\n' > foundry.toml
echo '@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/' > remappings.txt
forge build
```

Далее runtime-байт-код из `out/AggregatorRouter.sol/AggregatorRouter.json` сверяется
с `eth_getCode` по адресу из реестра на соответствующей сети. Учтите: `immutable`-зависимости
(FeeSwitch, роутеры) зашиты в runtime-код, поэтому сверять нужно с учётом адресов конкретного
деплоя — либо через `forge verify-bytecode`, либо сравнением после подстановки immutable-полей.
