# 第 1 次讀書會實作練習 - 使用範例檔案,實作部署 ERC721 或 ERC20 作業
[TOC]
## 基本題一 部屬 ERC721
#### 1.找到myToken721.sol

#### 2.嘗試修改name與symbol
學生改為"CharmingFish", "CMF"
```solidity=
// contracts/GameItem.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
contract MyNFT is ERC721 {
constructor() ERC721("CharmingFish", "CMF") {}
function mint(uint256 tokenId) public {
_mint(msg.sender, tokenId);
}
}
```
#### 3.調整 mint 數量,確定能夠拿到 2 個 ERC721 Token

#### 4.添加一個功能並且傳送 n 個數量 ERC721 Token 給二號地址
```solidity=
function transferFrom(address from,address to,uint256 tokenId) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved");
_transfer(from, to, tokenId);
}
```
#### 5.貼程式碼Gist連結 & 交易成功的截圖
Link : https://gist.github.com/Charming0420/de47b5b82f097de6e6f1e423981551c3
截圖 :

<br>
## 基本題二 部屬 ERC20
#### 1.找到檔案中的 myToken.sol

#### 2.嘗試修改 name(CharlesToken) 與 symbol(CS)
學生改為"CharmingFish", “CMF”
```solidity=
// contracts/GLDToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
constructor(uint256 initialSupply) ERC20("CharmingFish", "CMF") {
_mint(msg.sender, initialSupply);
}
}
```
#### 3.調整 mint 數量,確定能夠拿到 10,000 個 ERC20 Token

#### 4.添加一個功能並且傳送 n 個數量 ERC20 Token 給二號地址
```solidity=
function buyToken(address to, uint256 amount) public{
address owner = msg.sender;
_transfer(owner,to,amount);
}
```
#### 5.貼程式碼Gist連結 & 交易成功的截圖
Link : https://gist.github.com/Charming0420/655c877277c7126a37a238cabbcc677d
截圖 :

<br>
<!-- ## 進階題一 ERC721自行添加功能優化,部署至Goreli測試鏈
#### 1. 選擇一個測試用的錢包
#### 2. MetaMask中選擇Goreli網路進行部署
#### 3. 將必要完成作業的合約部署至Goreli測試鏈
#### -->
###### tags: `KryptoCamp 第 1 次讀書會實作練習`