---
# System prepended metadata

title: KryptoCamp Week2 HW
tags: [KryptoCamp]

---

# KryptoCamp Week2 HW

實作部署 ERC721, ERC20

## 第一題 (ERC20)

### 基本題

部署方式選擇 JavaScript VM（Lodon）

1. 找到檔案中的 myToken721.sol

2. 嘗試修改 name 與 symbol

3. 調整 mint 數量，確定能夠拿到 2 個 ERC721 Token

4. 添加一個功能並且傳送 n 個數量 ERC721 Token 給二號（ex. 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2）地址

5. 貼 程式碼 Gist 連結 & 交易成功的截圖

```=solidity
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract HooToken is ERC20 {
    uint public initialSupply = 10000000;
    constructor() ERC20("HooToken", "HT") {
        _mint(msg.sender, initialSupply);
    }
    function mint(uint _amount, address _to) public payable {
        _mint(_to, _amount);
    }
}
```

#### JavaScript VM（Lodon）

![](https://i.imgur.com/VkXjIMk.png)

![](https://i.imgur.com/6TbZjzO.png)

#### Injected Web3（Metamask）

![](https://i.imgur.com/3bzG4D5.png)

![](https://i.imgur.com/qxJI6pC.png)

https://rinkeby.etherscan.io/tx/0x5999a7f10bb1248bd6382316ec605872039206575414c2d0f5b0eec8e14ea377

## 第二題 (ERC721)

### 基本題

1. 選擇一個測試用的錢包（請新開錢包盡量不要用原本自己在使用的）

2. Metamask 中選擇 Rinkeby 網路進行部署

3. 將必要完成作業的合約部署至 Rinkeby 測試鏈

4. 進行呼叫，並且傳送 1 個 ERC721 Token 至（0x8c86618D194627172101812b51B4b9bB794DAC4c）地址

5. 自行嘗試是否能新增額外功能，使用最直覺撰寫方式即可，不需要針對燃料費用或程式內容進行優化

例如（燃燒 ERC721 Token、退款 ERC721 Token、鑄造購買時將多餘的金額進行自動退款，或有其他想法也行）。

＊自行嘗試功能不一定要非常完整，但至少必須要能夠提出偽代碼，並且說明用途，在實體課程時可以一起討論實作方式。

6. 貼 程式碼 Gist 連結 & 交易成功的截圖

```
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract HooNFT is ERC721 {
    constructor() ERC721("HooNFT", "HOO") {}
    
    uint256 _tokenId = 0;
    uint256 _maxSupply = 100;
    uint256 _price = 10; 

    function mint(uint256 tokenId) public {
        require(_tokenId < _maxSupply, "sold out");
        _mint(msg.sender, tokenId);
        ++_tokenId; 
    }

    function trasferTokens(uint256[] memory id, address _to) public {
        require(balanceOf(msg.sender) > 0, "not enough NFT");
        for(uint i = 0; i < id.length; i++) {
            safeTransferFrom(msg.sender, _to, id[i]);
        }
    }

}
```

#### 修改 name 與 symbol
![](https://i.imgur.com/PXVgHKW.png)

#### 轉移 2個 NFT

##### JavaScript VM（Lodon）
![](https://i.imgur.com/pXaQEmK.png)

##### Injected Web3（Metamask）
![](https://i.imgur.com/hBApmVS.png)

https://rinkeby.etherscan.io/tx/0x410942aafb3c6c073181d529ff551212c4c52c2d49d5537f4d6c86939020191f

###### tags: `KryptoCamp`
