# 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)


#### Injected Web3(Metamask)


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

#### 轉移 2個 NFT
##### JavaScript VM(Lodon)

##### Injected Web3(Metamask)

https://rinkeby.etherscan.io/tx/0x410942aafb3c6c073181d529ff551212c4c52c2d49d5537f4d6c86939020191f
###### tags: `KryptoCamp`