# ERC-20 Contract 만들기

Remix를 이용하여 ERC-20 컨트랙트 배포 테스트를 진행하는 것이 가능합니다.

{% hint style="danger" %}
**주의**

한번 배포된 컨트랙트는 수정 및 삭제가 불가능합니다.\
필요한 정보를 포함한 Code로 작성하여 배포해주세요.
{% endhint %}

아래의 순서로 컨트랙트 배포 과정을 진행해 보도록 하겠습니다.

* Step 1 : Remix 사이트에 접속하여 파일 생성하기
* Step 2 : ERC-20 컨트랙트 작성하기
* Step 3 : SOLIDITY COMPILER 탭으로 이동하여 버전 맞추고 컴파일하기
* Step 4 : DEPLOY & RUN TRANSACTIONS 설정하기
* Step 5 : MetaMask 가스비용 설정 및 서명하기

{% hint style="info" %}
아래 예제는 WEMIX3.0 테스트넷을 기반으로 작성되었습니다.
{% endhint %}

### Step 1 : Remix 사이트에 접속하여 파일 생성하기

<https://remix.ethereum.org> 로 접속하면 다음과 같습니다.&#x20;

<figure><img src="https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/n8crVKDTSFoJ2MJwIN2t/0.0.0%20Remix%20%E1%84%8E%E1%85%A9%E1%84%80%E1%85%B5%20%E1%84%92%E1%85%AA%E1%84%86%E1%85%A7%E1%86%AB.png" alt=""><figcaption><p>Remix 초기 화면</p></figcaption></figure>

contracts 디렉터리에 Storage.sol, Owner.sol, Ballot.sol 세가지의 예제 스마트 컨트랙트가 보여지게 되며, 새로 작성하려면 이를 선택하여 지우고 새 파일을 생성합니다.

아래 그림은 contracts 디렉터리에 `WEMIX_ERC20.sol` 파일을 생성하는 예입니다.

<figure><img src="https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/wBsYO7z6YeO6yi1eyASa/0.0.1.%20%E1%84%91%E1%85%A1%E1%84%8B%E1%85%B5%E1%86%AF%20%E1%84%89%E1%85%A2%E1%86%BC%E1%84%89%E1%85%A5%E1%86%BC.png" alt=""><figcaption><p>파일 생성</p></figcaption></figure>

### Step 2 : ERC-20 컨트랙트 작성하기&#x20;

다음과 같은 ERC-20 컨트랙트를 작성할 수 있습니다.&#x20;

```null
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";

contract MyToken is ERC20 {
    constructor(string memory name, string memory symbol) ERC20(name, symbol) {
        // Mint 100 tokens to msg.sender
        // Similar to how
        // 1 dollar = 100 cents
        // 1 token = 1 * (10 ** decimals)
        _mint(msg.sender, 99999999 * 10**uint(decimals()));
    }
    function burn(address account, uint256 amount) public virtual returns (bool) {
        
        _burn(account, amount * 10**uint(decimals()));

        return true;
    }
}
```

아래 그림은 위의 코드를 생성한  `WEMIX_ERC20.sol` 파일에 작성한 예입니다.

<figure><img src="https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/gdxwcka3CIQ9jw308V3Q/0.0.2.%20%E1%84%8B%E1%85%A8%E1%84%8C%E1%85%A6%20%E1%84%8F%E1%85%A9%E1%84%83%E1%85%B3.png" alt=""><figcaption><p>예제 코드</p></figcaption></figure>

### Step 3 : SOLIDITY COMPILER 탭으로 이동하여 버전 맞추고 컴파일하기

코드가 작성되면 솔리디티 컴파일러 화면에 맞는 컴파일러 버전을 선택한 후 컴파일을 할 수 있습니다.

제공되는 예제 코드의 컴파일러 버전은 0.8.19 입니다.

<figure><img src="https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/1tkc5gTLOUP2wa58Jezn/0.1.0.%20%E1%84%8B%E1%85%A8%E1%84%8C%E1%85%A6%20%E1%84%8F%E1%85%A9%E1%84%83%E1%85%B3%20%E1%84%8F%E1%85%A5%E1%86%B7%E1%84%91%E1%85%A1%E1%84%8B%E1%85%B5%E1%86%AF.png" alt=""><figcaption><p>예제 코드 컴파일</p></figcaption></figure>

### Step 4 : DEPLOY & RUN TRANSACTIONS 설정하기

Deploy & Run Transactions 화면에서 배포하려고 하는 환경(ENVIRONMENT)를 선택하고 스마트 컨트랙트를 배포하여 테스트를 해볼 수 있습니다.&#x20;

아래 그림은 환경(ENVIRONEMNT)를 'Injected Provider - MetaMask'로 지정한 예입니다.

<figure><img src="https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/D3IcvVzyMf98ZhhZgOph/%E1%84%87%E1%85%A2%E1%84%91%E1%85%A9%E1%84%92%E1%85%AA%E1%86%AB%E1%84%80%E1%85%A7%E1%86%BC%20%E1%84%89%E1%85%A5%E1%86%AF%E1%84%8C%E1%85%A5%E1%86%BC.png" alt=""><figcaption><p>배포환경 설정</p></figcaption></figure>

환경(ENVIRONEMNT)을 'Injected Provider - MetaMask'로 선택하게 되면 MetaMask로 연결이 되는데, 이 때 네트워크는 'WEMIX\_Testnet' 연결이 필요합니다.\
\
MetaMask 연결과 관련된 내용은 [Use MetaMask](https://docs.wemix.com/ko/quick-start/account/use-metamask) 참고하십시오.

<figure><img src="https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/oRupcT9NMlx8hiRWAnYR/0.1.2%20%E1%84%86%E1%85%A6%E1%84%90%E1%85%A1%E1%84%86%E1%85%A1%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%20&#x26;%20WEMIX_Testnet%20%E1%84%8B%E1%85%A7%E1%86%AB%E1%84%80%E1%85%A7%E1%86%AF.png" alt=""><figcaption><p>메타마스크 &#x26; WEMIX_Testnet 연결</p></figcaption></figure>

CONTRACT에서 MyToken을 찾아 Deploy 옆 입력박스에  'string name', 'string symbol'에 사용자가 원하는 Name과 Symbol을 입력해주면 됩니다.

아래 그림은 'WTOKEN', 'WT'으로 지정하는 예입니다.

<figure><img src="https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/Xfglx4wkPQiC6KaHWhpL/0.2.0.%20Token%20Name%20&#x26;%20Symbol%20%E1%84%89%E1%85%A5%E1%86%AF%E1%84%8C%E1%85%A5%E1%86%BC.png" alt=""><figcaption><p>Token Name &#x26; Symbol 설정</p></figcaption></figure>

### **Step 5 : MetaMask 가스비용 설정 및 서명하기**

Deploy & Run Transactions 화면에서의 설정이 끝나고 'Deploy' 를 선택하면 아래와 같이 MetaMask 팝업이 뜨며 이더리움을 기반으로 기본 설정된 'Gas fee'를 보여주는 화면이 나옵니다.&#x20;

WEMIX는 이더리움과는 다른 Fee 정책을 가지고 있으므로 반드시 'Site suggested'을 선택하여 Gas fee를 변경해 주셔야 합니다.

<figure><img src="https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/oPa9MDF5wPi8v0LO9evN/0.2.1.%20%E1%84%80%E1%85%B5%E1%84%87%E1%85%A9%E1%86%AB%20%E1%84%89%E1%85%A5%E1%86%AF%E1%84%8C%E1%85%A5%E1%86%BC%E1%84%83%E1%85%AC%E1%86%AB%20%E2%80%9CGas%20fee%E2%80%9D.png" alt=""><figcaption><p>MetaMask 기본 설정된 'Gas fee'</p></figcaption></figure>

아래 화면에서 'Advanced'를 선택하면 사용자가 'Max priority fee (GWEI)'와 'Max fee(GWEI)'를 수동으로 설정 할 수 있습니다.

<figure><img src="https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/T2JrzsGyP2Xbf7TYOWwR/0.2.2.%20%E1%84%80%E1%85%B5%E1%84%87%E1%85%A9%E1%86%AB%20gas%20fee.png" alt=""><figcaption><p>MetaMask 기본 설정된 'Gas fee' 설정 진입화면</p></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/g9mLX1NMxURLPmodOmB1/0.2.3.%20gas%20fee%20%E1%84%87%E1%85%A7%E1%86%AB%E1%84%80%E1%85%A7%E1%86%BC.png" alt=""><figcaption><p>“Gas fee” 수동 설정</p></figcaption></figure>

현재 WEMIX는 고정 'Max priority fee(GWEI)'를 사용하고 있으며 값은 100입니다.&#x20;

Max fee는 사용자가 정의하는 값으로 최소값은 MaxPriorityFee+BASE\_FEE입니다.&#x20;

WEMIX의 BASE\_FEE는 EIP-1559를 따라 가변입니다. 따라서, Transaction이 성공적으로 만들어지기 위해서는 아래와 같이 설정해 주시기를 권장 드립니다.&#x20;

1. Max base fee (GWEI) = 101
2. Max priority fee (GWEI) = 100&#x20;

위 그림에서 Fee 설정을 완료하고 'Save'를 선택하면 아래의 그림과 같이 배포 준비가 완료됩니다.

<figure><img src="https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/16lvcphpXn5tDAuiAcq4/0.2.4.%20gas%20fee%20%E1%84%87%E1%85%A7%E1%86%AB%E1%84%80%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%AA%E1%86%AB%E1%84%85%E1%85%AD.png" alt=""><figcaption><p>ERC-20 예시 컨트렉트 배포 Confirm</p></figcaption></figure>

위 그림에서 'Confirm'을 선택하면 컨트랙트 배포가 진행됩니다.

아래 그림처럼 Remix 화면 하단에 초록색 체크마크가 나오면 정상적으로 배포가 완료된 것 입니다.

<figure><img src="https://content.gitbook.com/content/iXnTk8WgxaTaNidAuUYQ/blobs/A5zFJlvxyDtdSYgDgwSi/0.3.0.%20ERC-20%20%E1%84%8B%E1%85%A8%E1%84%89%E1%85%B5%20%E1%84%8F%E1%85%A5%E1%86%AB%E1%84%90%E1%85%B3%E1%84%85%E1%85%A6%E1%86%A8%E1%84%90%E1%85%B3%20%E1%84%87%E1%85%A2%E1%84%91%E1%85%A9%20%E1%84%8B%E1%85%AA%E1%86%AB%E1%84%85%E1%85%AD.png" alt=""><figcaption><p>ERC-20 예시 컨트렉트 배포 완료</p></figcaption></figure>
