rwadurian/tools/testnet-setup/deploy-test-usdt.ts

129 lines
3.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 部署测试 USDT 合约到测试网
*
* 使用方法:
* npx ts-node deploy-test-usdt.ts --network bsc-testnet
* npx ts-node deploy-test-usdt.ts --network kava-testnet
*
* 环境变量:
* DEPLOYER_PRIVATE_KEY - 部署者私钥 (必须有测试网原生代币用于 gas)
*/
import { ethers } from 'ethers';
// 测试 USDT 合约 ABI (简化版)
const TEST_USDT_ABI = [
'constructor()',
'function name() view returns (string)',
'function symbol() view returns (string)',
'function decimals() view returns (uint8)',
'function totalSupply() view returns (uint256)',
'function balanceOf(address) view returns (uint256)',
'function transfer(address to, uint256 amount) returns (bool)',
'function mint(address to, uint256 amount)',
'function faucet()',
'function airdrop(address[] recipients, uint256 amount)',
];
// 编译后的合约字节码 (需要先编译合约获得)
// 运行: solc --optimize --bin TestUSDT.sol -o ./build
// 或使用 Remix IDE 编译获取
const TEST_USDT_BYTECODE = `
注意: 这里需要填入编译后的字节码
请使用 Remix IDE 或 solc 编译 TestUSDT.sol 获取字节码
`;
// 网络配置
const NETWORKS = {
'bsc-testnet': {
name: 'BSC Testnet',
chainId: 97,
rpcUrl: 'https://data-seed-prebsc-1-s1.binance.org:8545',
explorerUrl: 'https://testnet.bscscan.com',
faucet: 'https://testnet.bnbchain.org/faucet-smart',
},
'kava-testnet': {
name: 'KAVA Testnet',
chainId: 2221,
rpcUrl: 'https://evm.testnet.kava.io',
explorerUrl: 'https://testnet.kavascan.com',
faucet: 'https://faucet.kava.io',
},
};
async function main() {
// 解析命令行参数
const networkArg = process.argv.find((arg) => arg.startsWith('--network='));
const networkName = networkArg?.split('=')[1] || 'bsc-testnet';
const network = NETWORKS[networkName as keyof typeof NETWORKS];
if (!network) {
console.error(`Unknown network: ${networkName}`);
console.error(`Available networks: ${Object.keys(NETWORKS).join(', ')}`);
process.exit(1);
}
console.log(`\n=== 部署测试 USDT 到 ${network.name} ===\n`);
// 检查私钥
const privateKey = process.env.DEPLOYER_PRIVATE_KEY;
if (!privateKey) {
console.error('错误: 请设置 DEPLOYER_PRIVATE_KEY 环境变量');
console.error('\n获取测试网代币:');
console.error(` ${network.faucet}`);
process.exit(1);
}
// 连接网络
const provider = new ethers.JsonRpcProvider(network.rpcUrl);
const wallet = new ethers.Wallet(privateKey, provider);
console.log(`部署者地址: ${wallet.address}`);
// 检查余额
const balance = await provider.getBalance(wallet.address);
console.log(`余额: ${ethers.formatEther(balance)} ${networkName.includes('bsc') ? 'tBNB' : 'KAVA'}`);
if (balance === 0n) {
console.error('\n错误: 余额为 0请先从水龙头获取测试代币');
console.error(`水龙头: ${network.faucet}`);
process.exit(1);
}
// 部署合约
console.log('\n正在部署合约...');
// 注意: 实际使用时需要先编译合约获取 bytecode
// 这里提供一个替代方案: 使用 Remix IDE 部署
console.log(`
========================================
手动部署步骤 (使用 Remix IDE):
========================================
1. 打开 Remix IDE: https://remix.ethereum.org
2. 创建新文件 TestUSDT.sol复制合约代码
3. 编译合约:
- 选择 Solidity 0.8.20
- 启用 Optimizer (runs: 200)
4. 部署:
- Environment: Injected Provider (MetaMask)
- 切换 MetaMask 到 ${network.name}
- Chain ID: ${network.chainId}
- RPC: ${network.rpcUrl}
5. 部署成功后,将合约地址更新到 .env:
${networkName.includes('bsc') ? 'BSC_USDT_CONTRACT' : 'KAVA_USDT_CONTRACT'}=0x...
6. 验证合约 (可选):
${network.explorerUrl}/address/0x.../code
========================================
`);
}
main().catch(console.error);