본문 바로가기
블록체인 및 경제/솔리디티

13. 리믹스 솔리디티 8.0 버전 ERC20토큰 만들기

by Danny_Kim 2020. 11. 15.

1. 스마트 계약의 시작, 리믹스 도구 사용해보기

2. 솔리디티 개발환경 구성

3. 스마트컨트랙트 작성 후 배포하기

4. openzeppelin 사용하여 ERC20 토큰 만들기

5. Ropsten 테스트넷에 ERC20토큰 배포하기

6. web3.js 와 자바스크립트를 활용한 간단한 예제

7. 솔리디티 기초, 리믹스로 컨트랙트 작성하기

8. 솔리디티 기본문법 (변수, 데이터타입, 구조체)

9. 솔리디티 배열, 맵핑

10. 솔리디티 조건문, 반복문(if, else, for)

11. 솔리디티 암호화폐 지불(호텔룸 예약하기 프로그램)

12. 솔리디티 상속

13. 리믹스 솔리디티 6.0 버전 ERC20토큰 만들기

14. web3.js 와 자바스크립트를 활용하여 (이더잔액조회) 지갑 만들기

15. 솔리디티 컨트랙트 Web.js 활용하여 웹으로 보여주기

 

[최종 업데이트 2021년 5월 31일 기준이며 솔리디티 8.0기준입니다.]

 

1. 리믹스에서 아래의 ERC20 라이브러리 다운받아서 추가합니다.

 

ERC20

 

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

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol

 

Extentions

 

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Burnable.sol

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Capped.sol

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Pausable.sol

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Snapshot.sol

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/IERC20Metadata.sol

 

Utils

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/TokenTimelock.sol

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Arrays.sol

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/Pausable.sol

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Counters.sol

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol

 

 

 

위 파일을 모두 다운받으시면 아래와 같은 폴더구조가 생깁니다.

2. Mytoken.sol 파일을 만들고 아래와 같이 코딩해줍니다.

소스는 이렇습니다.

토큰이름은 비트코인 ㅎㅎㅎㅎ 그리고 토큰심볼은 MT, 발행량은 150개입니다. 

뒤에 숫자를 저렇게 많이 적은건 소수점 뒷자리 18개를 표시한겁니다.

pragma solidity ^0.8.0;

import "./token/ERC20/ERC20.sol";

contract MyToken is ERC20{
    uint public INITIAL_SUPPLY = 150000000000000000000;
    
    constructor() public ERC20("MyToken","MT"){
        _mint(msg.sender, INITIAL_SUPPLY);
    }
}

 

3. 컴파일 해줍니다. 버전을 8.0으로 맞춥니다.

 

 

4. Deploy를 해줍니다.

 - 메타마스크가 사전에 설치되어 있어야 합니다.(이 부분은 설명은 생략합니다.)

 - Injected Web3를 선택하면 메타마스크로 연결이 됩니다.

 

 - 메타마스크를 연결하고 Ropsten 테스트넷 계정을 연결합니다.

 

혹시 Ropsten 테스트넷 계정에 이더가 없으면, 아래 사이트에서 이더를 받습니다.

https://faucet.dimensions.network/

 

Ropsten Ethereum (rETH) Faucet

Ethereum Faucet - Ropsten

faucet.dimensions.network

 

 

이제 모든 준비가 끝났습니다. 마지막으로 컨트랙트 MyToken을 선택해주고 Deploy하면 Ropsten테스트넷 계정으로 컨트랙트가 배포됩니다.

 

Deploy를 클릭하면, 메타마스크로 자동연결이 되면서 승인을 누를것을 요청합니다. 승인해줍니다.

 

트랜잭션이 정상적으로 되었으면, 아래와 같이 메타마스크에서 Confirmed transaction 메세지를 보내줍니다.

해당 링크를 따라 들어가서 컨트랙트 주소를 살펴봅니다.

아래와 같이 150 MyToken(MT)이 만들어졌네요!!

와우!!!! 이제 이 MyToken을 친구들에게 보내주면 됩니다!!!!

 

뭔가 아쉬우니...마지막으로 리믹스로 돌아가서 기본적으로 어떤 기능을 제공하는지 살펴봅니다.

아래와 같은 기능들을 제공하고 있네요.

 

그런데, 우리에게는 조금 더 많은 기능이 필요합니다.

락이라든지..에어드랍이라든지..종류는 많이 있겠죠?

 

일단 기본적인 ERC20 토큰 생성법은 아래 메뉴얼에 잘 나와 있습니다.

docs.openzeppelin.com/contracts/3.x/erc20

 

ERC20 - OpenZeppelin Docs

Often, you’ll want to be able to divide your tokens into arbitrary amounts: say, if you own 5 GLD, you may want to send 1.5 GLD to a friend, and keep 3.5 GLD to yourself. Unfortunately, Solidity and the EVM do not support this behavior: only integer (who

docs.openzeppelin.com

 

 

 

 

기본적으로 제공하고 있는 기능과 추가적으로 제공하는 기능들은 아래와 같습니다.

 

ERC20 기본기능

 

추가적으로 사용할 수 있는 기능

 

ERC20Snapshot

ERC20Pausable

ERC20Burnable

ERC20Capped

SafeERC20

TokenTimelock

 

기본기능과 추가기능 모두 아래 API 메뉴얼을 통해서 사용법을 확인 할 수 있으니 한번씩 응용해서 토큰을 만들어보세요!!!

docs.openzeppelin.com/contracts/3.x/api/token/erc20

 

ERC 20 - OpenZeppelin Docs

For an overview of ERC20 tokens and a walk through on how to create a token contract read our ERC20 guide. There a few core contracts that implement the behavior specified in the EIP: IERC20: the interface all ERC20 implementations should conform to. ERC20

docs.openzeppelin.com

 

 

 

참고로 이 예제는 테스트넷에 배포하였는데, 메인넷 배포를 위해서는 메인넷 계정을 연결하고 Deploy하면 됩니다.

 

Deploy를 누르면  아래와 같은 화면이 뜹니다.

가스비가 아래와 같이 소요되네요~

 

트랜잭션이 성공했습니다. 10초도 안걸렸네요!!!

자, 그럼 이걸 제 지갑에 추가해야겠죠?

 

 

아래와 같이 토큰컨트랙트 주소를 추가하면 자동으로 추가됩니다.

토큰 추가 하면 제 지갑에서 토큰을 보낼 수 있습니다.

 

 

아래 이더리움 메인넷에서 제가 발행한 실제 토큰을 확인할 수 있습니다.

 

etherscan.io/token/0x50435674C82960070cFE34feE43bd8090Ac7a29B?a=0x2cB13725CBeA985a01d00a7090c1D7218B9dAF76

 

SANSTUDIO (SAN) Token Tracker | Etherscan

SANSTUDIO (SAN) Token Tracker on Etherscan shows the price of the Token $0.0000, total supply 150, number of holders 1 and updated information of the token. The token tracker page also shows the analytics and historical data.

etherscan.io

 

이제 ICO후에 상장하는 일만 남았군요!!! 

 

반응형

댓글14

  • 정호영 2021.02.01 00:41

    저 위의 파일들은 어떻게 다운받을수 있나요? 들어갔더니 그 파일만 다운할수 있는 버튼이 없는것 같더라고요
    답글

    • Danny_Kim 2021.02.01 11:10 신고

      저기 파일 주소를 복사해서 리믹스에서 깃허브에서 파일 가져오는걸 클릭하시면 됩니다.

  • 2021.02.04 16:14

    비밀댓글입니다
    답글

    • Danny_Kim 2021.02.04 18:13 신고

      문의주신 내용만 가지고는 에러를 알기가 어렵네요

    • Danny_Kim 2021.05.31 09:54 신고

      솔리디티 8.0 버전으로 최신업데이트 하였습니다.(21년5월 31일 기준)

  • kakak 2021.02.09 22:41

    컴파일 과정에서 not found browser/github/token/ERC20/ERC20.sol 이러한 문구가 뜹니다 해결방법을 알려주시면 감사하겠습니다

    답글

    • Danny_Kim 2021.05.31 09:54 신고

      솔리디티 8.0 버전으로 최신업데이트 하였습니다.(21년5월 31일 기준)

  • 이거넷 2021.04.10 09:03

    TokenTimelock 은 simple**.sol 에 어떻게 삽입 해서 사용하면 되는지요 ?
    답글

  • eric 2021.05.01 21:09

    깃허브 링크가 삭제된것이 많아서 대체할수있는 방법을 모르겠네요.
    답글

    • Danny_Kim 2021.05.31 09:55 신고

      솔리디티 8.0 버전으로 최신업데이트 하였습니다.(21년5월 31일 기준)

  • 위시 2021.06.09 16:05

    메인넷에 가스 가격은 어떻게 지불하셨는지 궁금합니다.
    또한 발행갯수에 따라 그 비용이 달라지는지도 알고 싶네요....
    답글

    • Danny_Kim 2021.06.09 18:33 신고

      발행갯수보다는 소스코드의 양에 따라서 가스비가 달라집니다.(소스에 어떤 기능적인 추가기능이 있는지에 따라서..)

    • 위시 2021.06.09 20:26

      답변 감사합니다.
      그럼 지불은 카드나 현금인가요
      아니면 이더리움을 사서 결제하는건가요?

    • Danny_Kim 2021.06.09 21:19 신고

      erc20토큰을 만드는 이더리움 계정에 있는 이더로 결제가 됩니다. 즉, erc 20토큰을 만드는 이더리움 계정에 이더를 거래소에서 구매하셔서 보내셔야겠죠?