Files
smom-dbis-138/script/deploy/DeployBridgeVaultDeterministic.s.sol
2026-03-02 12:14:09 -08:00

39 lines
1.6 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import {Script, console} from "forge-std/Script.sol";
import {CREATE2Factory} from "../../contracts/utils/CREATE2Factory.sol";
import {BridgeVault138} from "../../contracts/emoney/BridgeVault138.sol";
/**
* @title DeployBridgeVaultDeterministic
* @notice Deploy BridgeVault138 via CREATE2 with fixed salt for chains 1, 137, 56 (Ethereum, Polygon, BSC).
* @dev Use identical ADMIN, POLICY_MANAGER, COMPLIANCE_REGISTRY on all three chains so the vault address is the same.
* Env: PRIVATE_KEY, ADMIN, POLICY_MANAGER, COMPLIANCE_REGISTRY.
* See docs/runbooks/MULTI_CHAIN_EXECUTION_DETERMINISTIC_DEPLOYMENT.md
*/
contract DeployBridgeVaultDeterministic is Script {
uint256 constant SALT_BRIDGE_VAULT = uint256(keccak256("BridgeVault"));
function run() external {
uint256 pk = vm.envUint("PRIVATE_KEY");
address deployer = vm.addr(pk);
address admin = vm.envOr("ADMIN", deployer);
address policyManager = vm.envAddress("POLICY_MANAGER");
address complianceRegistry = vm.envAddress("COMPLIANCE_REGISTRY");
vm.startBroadcast(pk);
CREATE2Factory factory = new CREATE2Factory();
bytes memory bytecode = abi.encodePacked(
type(BridgeVault138).creationCode,
abi.encode(admin, policyManager, complianceRegistry)
);
address vaultAddr = factory.deploy(bytecode, SALT_BRIDGE_VAULT);
console.log("BridgeVault138:", vaultAddr);
console.log("CREATE2Factory:", address(factory));
vm.stopBroadcast();
}
}