// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "forge-std/Script.sol"; import "../src/TokenFactory138.sol"; import "../src/ComplianceRegistry.sol"; import "../src/PolicyManager.sol"; import "./helpers/Config.sol"; import "./helpers/EnvValidation.sol"; contract ConfigureScript is Script { function run() external { // Validate environment variables address complianceRegistryAddr = vm.envAddress("COMPLIANCE_REGISTRY"); EnvValidation.validateAddress(complianceRegistryAddr, "COMPLIANCE_REGISTRY"); address policyManagerAddr = vm.envOr("POLICY_MANAGER", address(0)); // Optional address tokenFactoryAddr = vm.envOr("TOKEN_FACTORY", address(0)); // Optional ComplianceRegistry complianceRegistry = ComplianceRegistry(complianceRegistryAddr); uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); vm.startBroadcast(deployerPrivateKey); address deployer = vm.addr(deployerPrivateKey); console.log("=== Configuration Script ==="); console.log("ComplianceRegistry:", vm.toString(complianceRegistryAddr)); console.log(""); // Check if deployer has COMPLIANCE_ROLE, if not, grant it bytes32 complianceRole = complianceRegistry.COMPLIANCE_ROLE(); if (!complianceRegistry.hasRole(complianceRole, deployer)) { console.log("Granting COMPLIANCE_ROLE to deployer..."); // Note: This requires deployer to have DEFAULT_ADMIN_ROLE // In production, use a multisig with DEFAULT_ADMIN_ROLE complianceRegistry.grantRole(complianceRole, deployer); console.log(" [OK] COMPLIANCE_ROLE granted"); } // Example: Set up some compliant accounts // In production, load these from a config file or environment variables address exampleUser1 = vm.envOr("EXAMPLE_USER_1", address(0)); address exampleUser2 = vm.envOr("EXAMPLE_USER_2", address(0)); if (exampleUser1 != address(0)) { EnvValidation.validateAddress(exampleUser1, "EXAMPLE_USER_1"); console.log("Setting compliance for exampleUser1:", vm.toString(exampleUser1)); complianceRegistry.setCompliance(exampleUser1, true, 1, bytes32(0)); console.log(" [OK] Compliance set"); } if (exampleUser2 != address(0)) { EnvValidation.validateAddress(exampleUser2, "EXAMPLE_USER_2"); console.log("Setting compliance for exampleUser2:", vm.toString(exampleUser2)); complianceRegistry.setCompliance(exampleUser2, true, 1, bytes32(0)); console.log(" [OK] Compliance set"); } // Configure PolicyManager if provided if (policyManagerAddr != address(0)) { EnvValidation.validateAddress(policyManagerAddr, "POLICY_MANAGER"); console.log(""); console.log("PolicyManager:", vm.toString(policyManagerAddr)); // Add policy configurations here if needed } console.log(""); console.log("=== Configuration Complete ==="); vm.stopBroadcast(); } }