Files
smom-dbis-138/script/deploy/DeployGasCanonicalTokens.s.sol
defiQUG 76aa419320 feat: bridges, PMM, flash workflow, token-aggregation, and deployment docs
- CCIP/trustless bridge contracts, GRU tokens, DEX/PMM tests, reserve vault.
- Token-aggregation service routes, planner, chain config, relay env templates.
- Config snapshots and multi-chain deployment markdown updates.
- gitignore services/btc-intake/dist/ (tsc output); do not track dist.

Run forge build && forge test before deploy (large solc graph).

Made-with: Cursor
2026-04-07 23:40:52 -07:00

86 lines
3.5 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "forge-std/Script.sol";
import {CompliantFiatToken} from "../../contracts/tokens/CompliantFiatToken.sol";
/**
* @title DeployGasCanonicalTokens
* @notice Deploy Wave 1 gas-native canonical c* tokens on Chain 138.
*
* Env:
* PRIVATE_KEY (required)
* GAS_FAMILY (optional) - deploy one family only: eth_mainnet, eth_l2, bnb, pol, avax, cro, xdai, celo, wemix
* GAS_INITIAL_OWNER (optional, defaults to deployer)
* GAS_ADMIN (optional, defaults to deployer)
* GAS_INITIAL_SUPPLY (optional, defaults to 0)
* DEPLOY_GAS_<FAMILY>=0 to skip a family when GAS_FAMILY is unset
*/
contract DeployGasCanonicalTokens is Script {
uint8 internal constant DECIMALS = 18;
function run() external {
uint256 pk = vm.envUint("PRIVATE_KEY");
address deployer = vm.addr(pk);
address owner = vm.envOr("GAS_INITIAL_OWNER", deployer);
address admin = vm.envOr("GAS_ADMIN", deployer);
uint256 initialSupply = vm.envOr("GAS_INITIAL_SUPPLY", uint256(0));
string memory targetFamily = vm.envOr("GAS_FAMILY", string(""));
vm.startBroadcast(pk);
_deployOne(owner, admin, initialSupply, targetFamily, "eth_mainnet", "DEPLOY_GAS_ETH_MAINNET", "Ethereum Mainnet Gas (Compliant)", "cETH", "ETH");
_deployOne(owner, admin, initialSupply, targetFamily, "eth_l2", "DEPLOY_GAS_ETH_L2", "Ethereum L2 Gas (Compliant)", "cETHL2", "ETH");
_deployOne(owner, admin, initialSupply, targetFamily, "bnb", "DEPLOY_GAS_BNB", "BNB Gas (Compliant)", "cBNB", "BNB");
_deployOne(owner, admin, initialSupply, targetFamily, "pol", "DEPLOY_GAS_POL", "Polygon Gas (Compliant)", "cPOL", "POL");
_deployOne(owner, admin, initialSupply, targetFamily, "avax", "DEPLOY_GAS_AVAX", "Avalanche Gas (Compliant)", "cAVAX", "AVAX");
_deployOne(owner, admin, initialSupply, targetFamily, "cro", "DEPLOY_GAS_CRO", "Cronos Gas (Compliant)", "cCRO", "CRO");
_deployOne(owner, admin, initialSupply, targetFamily, "xdai", "DEPLOY_GAS_XDAI", "Gnosis Gas (Compliant)", "cXDAI", "XDAI");
_deployOne(owner, admin, initialSupply, targetFamily, "celo", "DEPLOY_GAS_CELO", "Celo Gas (Compliant)", "cCELO", "CELO");
_deployOne(owner, admin, initialSupply, targetFamily, "wemix", "DEPLOY_GAS_WEMIX", "Wemix Gas (Compliant)", "cWEMIX", "WEMIX");
vm.stopBroadcast();
}
function _deployOne(
address owner,
address admin,
uint256 initialSupply,
string memory targetFamily,
string memory familyKey,
string memory envFlag,
string memory name,
string memory symbol,
string memory currencyCode
) internal {
if (!_shouldDeploy(targetFamily, familyKey, envFlag)) return;
CompliantFiatToken token = new CompliantFiatToken(
name,
symbol,
DECIMALS,
currencyCode,
owner,
admin,
initialSupply
);
console.log(symbol, address(token));
console.log(" familyKey", familyKey);
console.log(" owner", owner);
console.log(" admin", admin);
console.log(" initialSupply", initialSupply);
}
function _shouldDeploy(
string memory targetFamily,
string memory familyKey,
string memory envFlag
) internal view returns (bool) {
if (bytes(targetFamily).length != 0) {
return keccak256(bytes(targetFamily)) == keccak256(bytes(familyKey));
}
return vm.envOr(envFlag, uint256(1)) != 0;
}
}