diff --git a/07_ContractDev/MyToken.sol b/07_ContractDev/MyToken.sol new file mode 100644 index 0000000..3b11acc --- /dev/null +++ b/07_ContractDev/MyToken.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; + +contract MyToken is ERC721, Ownable { + uint256 private _nextTokenId = 0; + + constructor() + ERC721("MyToken", "MTK") + Ownable(msg.sender) + {} + + function mint(uint256 quantity) public payable { + require(quantity == 1, "quantity must be 1"); + require(msg.value == 0.01 ether, "must pay 0.01 ether"); + uint256 tokenId = _nextTokenId++; + _mint(msg.sender, tokenId); + } +} diff --git a/README.md b/README.md index ce3a00a..658114c 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ DApp 开发极简入门 **第 6 讲:Next.js 部署**:[教程](./06_NextJS/readme.md) -**第 7 讲:合约开发和测试**:[教程](./07_ContractDev/readme.md) +**第 7 讲:合约开发和测试**:[教程](./07_ContractDev/readme.md) | [代码](./07_ContractDev/MyToken.sol) **第 8 讲:合约部署**:[教程](./08_ContractDeploy/readme.md)