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

68 lines
3.0 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import {Script, console} from "forge-std/Script.sol";
import {StablecoinReserveVault} from "../../contracts/reserve/StablecoinReserveVault.sol";
/**
* @title DeployStablecoinReserveVault
* @notice Deploy StablecoinReserveVault contract for 1:1 backing mechanism
* @dev This contract should be deployed on Ethereum Mainnet where official USDT/USDC exist
* For Chain 138 deployment, connect via cross-chain bridge
*/
contract DeployStablecoinReserveVault is Script {
// Official token addresses on Ethereum Mainnet
address constant MAINNET_USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
address constant MAINNET_USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
function run() external {
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
address deployer = vm.addr(deployerPrivateKey);
// Load environment variables
address admin = vm.envOr("RESERVE_VAULT_ADMIN", deployer);
// Official token addresses (default to Mainnet, can be overridden)
address officialUsdt = vm.envOr("OFFICIAL_USDT_ADDRESS", MAINNET_USDT);
address officialUsdc = vm.envOr("OFFICIAL_USDC_ADDRESS", MAINNET_USDC);
// Compliant token addresses (on Chain 138 or same network)
address compliantUsdt = vm.envAddress("COMPLIANT_USDT_ADDRESS");
address compliantUsdc = vm.envAddress("COMPLIANT_USDC_ADDRESS");
console.log("Deploying StablecoinReserveVault with deployer:", vm.toString(deployer));
console.log("Admin:", vm.toString(admin));
console.log("Official USDT:", vm.toString(officialUsdt));
console.log("Official USDC:", vm.toString(officialUsdc));
console.log("Compliant USDT:", vm.toString(compliantUsdt));
console.log("Compliant USDC:", vm.toString(compliantUsdc));
vm.startBroadcast(deployerPrivateKey);
StablecoinReserveVault vault = new StablecoinReserveVault(
admin,
officialUsdt,
officialUsdc,
compliantUsdt,
compliantUsdc
);
console.log("StablecoinReserveVault deployed at:", vm.toString(address(vault)));
vm.stopBroadcast();
console.log("\n=== Deployment Summary ===");
console.log("StablecoinReserveVault:", vm.toString(address(vault)));
console.log("Admin:", vm.toString(admin));
console.log("Official USDT:", vm.toString(officialUsdt));
console.log("Official USDC:", vm.toString(officialUsdc));
console.log("Compliant USDT:", vm.toString(compliantUsdt));
console.log("Compliant USDC:", vm.toString(compliantUsdc));
console.log("\nNext Steps:");
console.log("1. Transfer ownership of CompliantUSDT/CompliantUSDC to vault (if needed)");
console.log("2. Fund vault with official USDT/USDC tokens");
console.log("3. Enable deposit functions by ensuring tokens are approved");
}
}