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
This commit is contained in:
85
script/deploy/DeployGasCanonicalTokens.s.sol
Normal file
85
script/deploy/DeployGasCanonicalTokens.s.sol
Normal file
@@ -0,0 +1,85 @@
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user