// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import {Script, console} from "forge-std/Script.sol"; import {Vault} from "../../../contracts/vault/Vault.sol"; import {VaultFactory} from "../../../contracts/vault/VaultFactory.sol"; import {DepositToken} from "../../../contracts/vault/tokens/DepositToken.sol"; import {DebtToken} from "../../../contracts/vault/tokens/DebtToken.sol"; import {Ledger} from "../../../contracts/vault/Ledger.sol"; import {RegulatedEntityRegistry} from "../../../contracts/vault/RegulatedEntityRegistry.sol"; /// @notice Deploy VaultFactory on 651940 after core system addresses are live. contract DeployVaultFactory651940 is Script { function run() external { uint256 pk = vm.envUint("PRIVATE_KEY"); address admin = vm.addr(pk); RegulatedEntityRegistry entityRegistry = RegulatedEntityRegistry(vm.envAddress("REGULATED_ENTITY_REGISTRY")); Ledger ledger = Ledger(vm.envAddress("LEDGER_ADDRESS")); address collateralAdapter = vm.envAddress("COLLATERAL_ADAPTER_ADDRESS"); address eMoneyJoinAddr = vm.envAddress("EMONEY_JOIN_ADDRESS"); vm.startBroadcast(pk); Vault vaultImpl = new Vault( admin, admin, address(ledger), address(entityRegistry), collateralAdapter, eMoneyJoinAddr ); DepositToken depositTokenImpl = new DepositToken(); DebtToken debtTokenImpl = new DebtToken(); VaultFactory vaultFactory = new VaultFactory( admin, address(vaultImpl), address(depositTokenImpl), address(debtTokenImpl), address(ledger), address(entityRegistry), collateralAdapter, eMoneyJoinAddr ); console.log("Vault Factory:", address(vaultFactory)); ledger.grantRole(ledger.VAULT_FACTORY_ROLE(), address(vaultFactory)); entityRegistry.grantRole(entityRegistry.REGISTRAR_ROLE(), address(vaultFactory)); vm.stopBroadcast(); console.log("=== [651940] VaultFactory wired ==="); } }