- 添加智能合约: TokenA, TokenB, MiniSwapAMM - 实现 AMM 流动性池功能 (x * y = k 公式) - 支持添加/移除流动性和代币交换 - 包含完整的测试套件 - 创建 React 前端界面,支持钱包连接 - 添加 Web3 集成和现代化 UI 设计 - 包含部署脚本和完整的项目配置
34 lines
1021 B
Solidity
34 lines
1021 B
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.19;
|
|
|
|
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
|
|
import "@openzeppelin/contracts/access/Ownable.sol";
|
|
|
|
/**
|
|
* @title TokenA
|
|
* @dev 用于 DEX 的第一个 ERC-20 代币
|
|
*/
|
|
contract TokenA is ERC20, Ownable {
|
|
constructor() ERC20("Token A", "TKA") Ownable(msg.sender) {
|
|
// 初始铸造 1,000,000 个代币给部署者
|
|
_mint(msg.sender, 1000000 * 10**decimals());
|
|
}
|
|
|
|
/**
|
|
* @dev 允许所有者铸造更多代币
|
|
* @param to 接收代币的地址
|
|
* @param amount 铸造的代币数量
|
|
*/
|
|
function mint(address to, uint256 amount) public onlyOwner {
|
|
_mint(to, amount);
|
|
}
|
|
|
|
/**
|
|
* @dev 允许任何人铸造代币用于测试(仅限测试环境)
|
|
* @param amount 铸造的代币数量
|
|
*/
|
|
function faucet(uint256 amount) public {
|
|
require(amount <= 10000 * 10**decimals(), "TokenA: Maximum 10,000 tokens per faucet call");
|
|
_mint(msg.sender, amount);
|
|
}
|
|
} |