- 添加智能合约: TokenA, TokenB, MiniSwapAMM - 实现 AMM 流动性池功能 (x * y = k 公式) - 支持添加/移除流动性和代币交换 - 包含完整的测试套件 - 创建 React 前端界面,支持钱包连接 - 添加 Web3 集成和现代化 UI 设计 - 包含部署脚本和完整的项目配置
76 lines
2.5 KiB
JavaScript
76 lines
2.5 KiB
JavaScript
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);
|
||
});
|