feat: 完成 Mini Swap DEX AMM 项目开发
- 添加智能合约: TokenA, TokenB, MiniSwapAMM - 实现 AMM 流动性池功能 (x * y = k 公式) - 支持添加/移除流动性和代币交换 - 包含完整的测试套件 - 创建 React 前端界面,支持钱包连接 - 添加 Web3 集成和现代化 UI 设计 - 包含部署脚本和完整的项目配置
This commit is contained in:
76
scripts/deploy.js
Normal file
76
scripts/deploy.js
Normal 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);
|
||||
});
|
||||
Reference in New Issue
Block a user