ERC-20

이상학·2021년 11월 6일
0

Blockchain

목록 보기
1/4
  1. 개발환경 세팅 및 FLOW
  2. SmartContract 작성 및 배포
  3. etherscan에서 contract 확인
  4. 토큰 mint
  5. etherscan에서 token 확인

1. 개발환경 세팅 및 FLOW

리소스

IDE: online IDE인 REMIX를 활용해도 괜찮다. 필자는 vscode를 사용
Infura : smartcontract의 네트워크 배포를 위해선 node가 필요하다. 이를 제공해주는 infura node api 활용
ganache : solidity 배포 테스트
truffle : (ethereum development environment) Solidity 언어로 smartcontract 작성을 위한 프레임워크
hardhat : (ethereum development environment) Solidity 언어로 smartcontract 작성을 위한 프레임워크
Myetherwallet : wallet과 연동되어 본인 소유 account 속 contract(token형태) 확인가능
etherscan : ethereum transaction을 확인하기 위한 사이트
openzeppelin : ethereum smart contract 작성을 도와주는 library

개발 FLOW

nvm(node version manager)설치. 프로젝트마다 원하는 node.js Version이 다르기에.

brew install nvm

.zshrc에 path설정

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" 
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

node version 16설치 및 default설정

nvm install v16
nvm list
nvm use v16
nvm alias default 16.13.0

필요한 libray 설치

npm install truffle, ganache-cli, @openzeppelin/contracts

2. SmartContract 작성 및 배포

truffle 으로 ethereum project 진행
project 프레임 잡기

truffle init

디렉토리 구조는 아래와 같다

(truffle이 정한 디렉토리 구조 약속)
contracts 디렉토리에 smartcontract.sol 작성

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract PLAYPLZTOKEN is ERC20{
    uint public INITIAL_SUPPLY = 120000; 
    constructor() ERC20("PLAYPLZTOKEN","PPTOEKN"){
        _mint(msg.sender, INITIAL_SUPPLY); 
    } 
}

contract plyplztoken is ERC20{~~이란
openzeppelin에서 정의한 ERC20 contract에 덮어쓰기 하는것이다. 마치 python에서 class 상속받고 override하는 방식처럼 이해하면 쉽다. INITIAL_SUPPLY attribute를 정의해주면 ERC20 스마트컨트랙트는 배포된후 INITIAL_SUPPLY만큼 token을 발행(mint)한다.

truffle compile 하면 build 디렉토리에 컴파일된 .json파일 생성

truffle compile

migrations 디렉토리에 migration.js 작성

var PLAYPLZTOKEN = artifacts.require("PLAYPLZTOKEN")
module.exports = function(deployer){
    deployer.deploy(PLAYPLZTOKEN);
}

truffle-config.js 작성

infura api를 이용해 HDWalletprovider 설정 및 mnemonic 암호 설정(.secret파일에 mnemonic phrase 불러오기)

 const HDWalletProvider = require('@truffle/hdwallet-provider');
 const infurakey = "c39c73ade6234570a752da78c29ff630";
 const fs = require('fs');
 const mnemonic = fs.readFileSync(".secret").toString().trim();

ropsten 네트워크 설정

 module.exports = { 
   networks: {
     ropsten: {
     provider: () => new HDWalletProvider(mnemonic, `https://ropsten.infura.io/v3/c39c73ade6234570a752da78c29ff630`),
     network_id: 3,       // Ropsten's id
     gas: 5500000,        // Ropsten has a lower block limit than mainnet
     confirmations: 2,    // # of confs to wait between deployments. (default: 0)
     timeoutBlocks: 200,  // # of blocks before a deployment times out  (minimum/default: 50)
     skipDryRun: true     // Skip dry run before migrations? (default: false for public nets )
     },
   },

// Set default mocha options here, use special reporters etc.
mocha: {
// timeout: 100000
},

smart contract 배포하기

truffle migrate --reset

3. etherscan에서 contract 확인

https://etherscan.io 에서 contract address 로 확인

4. 토큰 Mint

  • truffle cli를 활용한 방법
    instance = await PLAYPLZTOKEN.deployed()
    instance.name()
    instance.symbol()
    instance.mint("PLAYPLZTOKEN contract속 정의된 mint함수가 필요한 인자1","PLAYPLZTOKEN contract속 정의된 mint함수가 필요한 인자2")
    instance.totalSupply()

  • etherscan contract 탭에서 GUI를 활용하는 방법

  • REMIX를 활용하는 경우

5. etehrscan에서 token 확인

profile
기억의 지배장

0개의 댓글