Import sibling archive WIP: keeper stack, CCIP scripts, and CCIP docs
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
101
script/DeployUSDC.s.sol
Normal file
101
script/DeployUSDC.s.sol
Normal file
@@ -0,0 +1,101 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.8.19;
|
||||
|
||||
import {Script} from "forge-std/Script.sol";
|
||||
import {console} from "forge-std/console.sol";
|
||||
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
|
||||
import "@openzeppelin/contracts/access/Ownable.sol";
|
||||
import "@openzeppelin/contracts/security/Pausable.sol";
|
||||
|
||||
/**
|
||||
* @title Standard USDC Token
|
||||
* @notice ERC20 token with pausable and ownable features
|
||||
* @dev Can be used as native USDC or wrapped USDC depending on deployment strategy
|
||||
*/
|
||||
contract StandardUSDC is ERC20, Ownable, Pausable {
|
||||
uint8 private constant DECIMALS = 6; // USDC standard decimals
|
||||
|
||||
constructor(
|
||||
address initialOwner,
|
||||
uint256 initialSupply
|
||||
) ERC20("USD Coin", "USDC") {
|
||||
_transferOwnership(initialOwner);
|
||||
if (initialSupply > 0) {
|
||||
_mint(initialOwner, initialSupply);
|
||||
}
|
||||
}
|
||||
|
||||
function decimals() public pure override returns (uint8) {
|
||||
return DECIMALS;
|
||||
}
|
||||
|
||||
/**
|
||||
* @notice Mint new tokens (only owner)
|
||||
* @param to Address to mint to
|
||||
* @param amount Amount to mint
|
||||
*/
|
||||
function mint(address to, uint256 amount) external onlyOwner {
|
||||
_mint(to, amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* @notice Burn tokens (only owner)
|
||||
* @param from Address to burn from
|
||||
* @param amount Amount to burn
|
||||
*/
|
||||
function burn(address from, uint256 amount) external onlyOwner {
|
||||
_burn(from, amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* @notice Pause token transfers (only owner)
|
||||
*/
|
||||
function pause() external onlyOwner {
|
||||
_pause();
|
||||
}
|
||||
|
||||
/**
|
||||
* @notice Unpause token transfers (only owner)
|
||||
*/
|
||||
function unpause() external onlyOwner {
|
||||
_unpause();
|
||||
}
|
||||
|
||||
function _beforeTokenTransfer(
|
||||
address from,
|
||||
address to,
|
||||
uint256 amount
|
||||
) internal override whenNotPaused {
|
||||
super._beforeTokenTransfer(from, to, amount);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @title DeployUSDC
|
||||
* @notice Deployment script for USDC token
|
||||
*/
|
||||
contract DeployUSDC is Script {
|
||||
function run() external {
|
||||
address deployer = msg.sender;
|
||||
address owner = vm.envOr("USDC_OWNER", deployer);
|
||||
uint256 initialSupply = vm.envOr("USDC_INITIAL_SUPPLY", uint256(0));
|
||||
|
||||
console.log("Deploying USDC Token...");
|
||||
console.log("Deployer:", vm.toString(deployer));
|
||||
console.log("Owner:", vm.toString(owner));
|
||||
console.log("Initial Supply:", initialSupply);
|
||||
|
||||
vm.startBroadcast();
|
||||
|
||||
StandardUSDC usdc = new StandardUSDC(owner, initialSupply);
|
||||
|
||||
vm.stopBroadcast();
|
||||
|
||||
console.log("USDC Token deployed at:", vm.toString(address(usdc)));
|
||||
console.log("Name:", usdc.name());
|
||||
console.log("Symbol:", usdc.symbol());
|
||||
console.log("Decimals:", usdc.decimals());
|
||||
console.log("Total Supply:", usdc.totalSupply());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user