mirror of
https://github.com/arkorty/B.Tech-Project-III.git
synced 2026-04-19 12:41:48 +00:00
init
This commit is contained in:
99
dmtp/server/deploy-test-token.ts
Normal file
99
dmtp/server/deploy-test-token.ts
Normal file
@@ -0,0 +1,99 @@
|
||||
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();
|
||||
Reference in New Issue
Block a user