feat: 完成 Mini Swap DEX AMM 项目开发

- 添加智能合约: TokenA, TokenB, MiniSwapAMM
- 实现 AMM 流动性池功能 (x * y = k 公式)
- 支持添加/移除流动性和代币交换
- 包含完整的测试套件
- 创建 React 前端界面,支持钱包连接
- 添加 Web3 集成和现代化 UI 设计
- 包含部署脚本和完整的项目配置
This commit is contained in:
2025-07-10 01:39:43 +08:00
parent 8a2454a950
commit 3faf89e0a1
38 changed files with 28192 additions and 1 deletions

76
scripts/deploy.js Normal file
View File

@ -0,0 +1,76 @@
const { ethers } = require("hardhat");
async function main() {
const [deployer] = await ethers.getSigners();
console.log("使用账户部署合约:", deployer.address);
console.log("账户余额:", (await deployer.provider.getBalance(deployer.address)).toString());
// 部署 TokenA
console.log("\n部署 TokenA...");
const TokenA = await ethers.getContractFactory("TokenA");
const tokenA = await TokenA.deploy();
await tokenA.waitForDeployment();
console.log("TokenA 部署到:", await tokenA.getAddress());
// 部署 TokenB
console.log("\n部署 TokenB...");
const TokenB = await ethers.getContractFactory("TokenB");
const tokenB = await TokenB.deploy();
await tokenB.waitForDeployment();
console.log("TokenB 部署到:", await tokenB.getAddress());
// 部署 MiniSwapAMM
console.log("\n部署 MiniSwapAMM...");
const MiniSwapAMM = await ethers.getContractFactory("MiniSwapAMM");
const miniSwapAMM = await MiniSwapAMM.deploy(
await tokenA.getAddress(),
await tokenB.getAddress()
);
await miniSwapAMM.waitForDeployment();
console.log("MiniSwapAMM 部署到:", await miniSwapAMM.getAddress());
// 给部署者和其他账户铸造一些代币用于测试
console.log("\n铸造测试代币...");
const signers = await ethers.getSigners();
const testAccounts = signers.slice(0, 3); // 获取前 3 个账户
for (let i = 0; i < testAccounts.length; i++) {
const account = testAccounts[i];
// 给每个账户铸造 10,000 个 TokenA 和 TokenB
await tokenA.connect(account).faucet(ethers.parseEther("10000"));
await tokenB.connect(account).faucet(ethers.parseEther("10000"));
console.log(`给账户 ${account.address} 铸造了 10,000 TKA 和 10,000 TKB`);
}
// 保存合约地址到文件
const fs = require("fs");
const contractAddresses = {
TokenA: await tokenA.getAddress(),
TokenB: await tokenB.getAddress(),
MiniSwapAMM: await miniSwapAMM.getAddress(),
deployer: deployer.address
};
fs.writeFileSync(
"contract-addresses.json",
JSON.stringify(contractAddresses, null, 2)
);
console.log("\n部署完成");
console.log("合约地址已保存到 contract-addresses.json");
console.log("\n合约地址:");
console.log("TokenA:", await tokenA.getAddress());
console.log("TokenB:", await tokenB.getAddress());
console.log("MiniSwapAMM:", await miniSwapAMM.getAddress());
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});