Files
B.Tech-Project-III/dmtp/server/deploy-test-token.ts
2026-04-05 00:43:23 +05:30

99 lines
4.0 KiB
TypeScript

import { ethers } from 'ethers';
import * as dotenv from 'dotenv';
import MockERC20Artifact from './artifacts/contracts/MockERC20.sol/MockERC20.json';
dotenv.config();
async function deployTestToken() {
try {
console.log('🚀 Deploying Test Token to Celo Sepolia...\n');
// Initialize provider and signer
const provider = new ethers.JsonRpcProvider(
process.env.CELO_RPC_URL || 'https://forno.celo-sepolia.celo-testnet.org'
);
const privateKey = process.env.PRIVATE_KEY;
if (!privateKey) {
throw new Error('PRIVATE_KEY not configured in .env');
}
const signer = new ethers.Wallet(privateKey, provider);
console.log(`📝 Deploying from: ${signer.address}`);
// Check balance
const balance = await provider.getBalance(signer.address);
const balanceInCELO = ethers.formatEther(balance);
console.log(`💰 Account balance: ${balanceInCELO} CELO\n`);
if (parseFloat(balanceInCELO) === 0) {
console.log('❌ Insufficient balance! Get testnet CELO from:');
console.log(' https://faucet.celo.org');
process.exit(1);
}
// Deploy token with name and symbol
const tokenName = 'Test USD';
const tokenSymbol = 'tUSD';
console.log(`📦 Deploying ${tokenName} (${tokenSymbol})...\n`);
const TestToken = new ethers.ContractFactory(
MockERC20Artifact.abi,
MockERC20Artifact.bytecode,
signer
);
console.log('⏳ Sending deployment transaction...');
const token = await TestToken.deploy(tokenName, tokenSymbol);
console.log(`📍 Deployment transaction sent: ${token.deploymentTransaction()?.hash}`);
console.log('⏳ Waiting for confirmation...\n');
await token.waitForDeployment();
const tokenAddress = await token.getAddress();
console.log('✅ Token deployed successfully!\n');
console.log('═══════════════════════════════════════');
console.log(`Token Address: ${tokenAddress}`);
console.log('═══════════════════════════════════════\n');
// Verify deployment - create a properly typed contract instance
const deployedToken = new ethers.Contract(tokenAddress, MockERC20Artifact.abi, signer);
// Mint initial supply (1 million tokens)
const initialSupply = ethers.parseEther('1000000');
console.log('⏳ Minting initial supply...');
const mintTx = await deployedToken.mint(signer.address, initialSupply);
await mintTx.wait();
console.log('✅ Minted 1,000,000 tokens\n');
const name = await deployedToken.name();
const symbol = await deployedToken.symbol();
const totalSupply = await deployedToken.totalSupply();
const deployerBalance = await deployedToken.balanceOf(signer.address);
console.log('📊 Token Details:');
console.log(` Name: ${name}`);
console.log(` Symbol: ${symbol}`);
console.log(` Total Supply: ${ethers.formatEther(totalSupply)} ${symbol}`);
console.log(` Deployer Balance: ${ethers.formatEther(deployerBalance)} ${symbol}\n`);
// Output for .env
console.log('📝 Update your .env file with:');
console.log(` CUSD_SEPOLIA_ADDRESS=${tokenAddress}\n`);
console.log('📄 To verify on Celoscan:');
console.log(` 1. Go to https://sepolia.celoscan.io/address/${tokenAddress}#code`);
console.log(` 2. Click "Verify and Publish"`);
console.log(` 3. Use contract: contracts/MockERC20.sol:MockERC20`);
console.log(` 4. Constructor arguments: "${tokenName}", "${tokenSymbol}"\n`);
process.exit(0);
} catch (error) {
console.error('❌ Deployment failed:', error);
process.exit(1);
}
}
deployTestToken();