My Ether Wallet(MEW) 사용법, 트러플(Truffle) 환경에서 ERC-20 토큰을 테스트넷에 배포하기

2021. 10. 20. 09:59Blockchain/Truffle

기본 세팅

  1. 가나슈와 메타마스크 연결
  2. truffle init
  3. truffle-config.js 수정 // 주석 해제

작업 순서

  1. 환경 설정
  2. 코드 작성
  3. 가나슈 배포(local)
  4. 테스트넷 배포(테스트넷 이더리움)

My Ether Wallt (MEW)

- MEW란?

* 메타마스크와 같은 지갑, 온라인 브라우저(사이트)로 구현되어 있음
* 스마트 컨트랙트에 대한 메서드나 내용들을 볼 수 있는 기능이 있음
* 프론트단이 없어도 결과 확인 가능 // postman과 비슷한듯

 

- 사용법

  1. 사이트 접속 (링크 : http://www.myetherwallet.com)
  2. 메타마스크 연결하기
    Access my wallet 클릭
    Browser Extension 클릭 후 Ether가 들어있는 계정에 연결
  3. 연결 완료 확인
    연결 완료 시 출력되는 화면

작업 시작

    1. npm init // root 디렉토리에서 작업
    2. npm install openzeppelin-solidity
    3. /node_modules/openzeppelin-solidity/contracts/token/ERC20/ 디렉토리 확인
    4. truffle version // 트러플 및 솔리디티 버젼 확인
      Truffle 버젼 확인 (수정 전)
    5. truffle-config.js에서 솔리디티 버젼 수정
      truffle-config.js (수정 전)
      truffle-config.js 수정 후
    6. truffle version // 수정 된 솔리디티 버젼 확인
      Truffle 버젼 수정 후
    7. truffle create contract IngToken
      truffle create migration IngToken
      여기까지 작업한 폴더 구조
    8. IngToken.sol 코드 작성
      // SPDX-License-Identifier: MIT
      pragma solidity >= 0.4.22 < 0.9.0;
      
      contract IngToken {
        string public name = "INGOO TOKEN";
        string public symbol = "ING";
        uint256 public decimals = 18;
        uint256 public totalSupply = 10000 * (10 ** decimals); // ** == 제곱
        
        string text = "hello world 11";
      
          constructor() public {
          }
      }​
       
    9. 1634691029_ing_token.js 코드 수정
      const IngToken = artifacts.require("IngToken");
      
      module.exports = function (deployer) {
          deployer.deploy(IngToken);
      };​
    10. truffle compile
      truffle migrate
      truffle compile 완료 화면 (warning 무시)
      truffle migrate 완료 화면
    11. 배포 된 IngToken의 contract address 값 빼놓기
      0x28DA734D00041840182a5dEFd6Db94bfeE363647
    12. ABI 가져오기
      /build/contracts/IngToken.json 파일 안에 3번째~65번째 줄까지 복사
      텍스트나 콤마 제외하고 배열만 복사
    13. Contract > Interact with Contract 선택 > 아래와 같이 입력 후 Interact 클릭
      Contract Address : 14번에서 가져온 값, ABI/JSON Interface : 15번에서 가져온 값
    14. 새로운 팝업창 뜨면서 리스트에 IngToken.sol에 적었던 변수 내용이 출력 됨
      하지만 /* string text = "hello world 11"; */ 이 변수는 출력되지 않음, public 처리가 되지 않았기 때문
      아래와 같이 테스트 가능
      리스트
      Decimals
      Name
      Symbol
      TotalSupply
    15. IngToken.sol 코드 수정
      // SPDX-License-Identifier: MIT
      pragma solidity >= 0.4.22 < 0.9.0;
      
      import '../node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol';
      
      contract IngToken is ERC20 {
        string public _name = "INGOO TOKEN";
        string public _symbol = "ING";
        // uint256 public _decimals = 18;
        uint256 public _totalSupply = 10000 * (10 ** uint256(decimals())); // ** == 제곱
        
        string text = "hello world 11";
      
          constructor() ERC20(_name, _symbol) {
              _mint(msg.sender, _totalSupply); // 토큰 생성 끝
          }
      }​
    16. /build/contract에 있는 기존 json 파일 삭제 후 새로 컴파일과 배포 진행
      truffle comiple
      truffle migrate
      현재까지 작업한 폴더 구조
    17. 새로 배포 된 IngToken의 contract address값 빼놓기
      ABI도 새로 가져오기
      /build/contracts/IngToken.json 파일 안에 3번째~65번째 줄까지 복사
      0x80f2164E37BC92C7E79fDA3D622987ED5d607c8B
    18. MEW에 해당 값 입력 후 Interact
      리스트
      Interact 클릭
      BalanceOf 테스트 // Inputs : 아래 account값 내용 입력
      0x3b3018d8868F22f6537Cc9Bff48534D518BDa66F
    19. 메타마스크 import token으로 새 토큰 생성
      토큰 계약 주소 : 새로 가져왔던 contract address
      새 토큰 생성 완료, 10000 ING 확인
    20. IngToken.sol 코드 수정
      // SPDX-License-Identifier: MIT
      pragma solidity >= 0.4.22 < 0.9.0;
      
      import '../node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol';
      // Ownable.sol : 배포자만 실행 할 수 있게 해주는 라이브러리
      import '../node_modules/openzeppelin-solidity/contracts/access/Ownable.sol';
      // Pausable.sol : 메서드를 호출하면 해당 메서드를 사용 할 수 있음
      // pause()      : 컨트랙트 동작을 잠시 멈춤
      // unpause ()   : 컨트랙트 동작을 잠시 실행
      import '../node_modules/openzeppelin-solidity/contracts/security/Pausable.sol';
      
      contract IngToken is ERC20, Ownable, Pausable {
        string public _name = "INGOO TOKEN";
        string public _symbol = "ING";
        // uint256 public _decimals = 18;
        uint256 public _totalSupply = 10000 * (10 ** uint256(decimals())); // ** == 제곱
        
        string text = "hello world 11";
      
          constructor() ERC20(_name, _symbol) {
              _mint(msg.sender, _totalSupply); // 토큰 생성 끝
          }
      
          // onlyOwner로 배포자만 실행 할 수 있게 처리
          function pause() public onlyOwner {
              _pause();
          }
          function unpause() public onlyOwner {
              _unpause();
          }
      }​
    21. /build/contract에 있는 기존 json 파일 삭제 후 새로 컴파일과 배포 진행
      truffle comiple
      truffle migrate
    22. 새로 배포 된 IngToken의 contract address값 빼놓기
      ABI도 새로 가져오기
      /build/contracts/IngToken.json 파일 안에 3번째~65번째 줄까지 복사
      0x83C1D984637441b6925950342c55a1bf8E736615
    23. 메타마스크에서 가나슈 1번 인덱스의 PRIAVET KEY로 계정 추가 후
      테스트를 위해 추가 된 계정에 500 ING 보내기
      10000 ING -> 9500 ING
      0 ING -> 500 ING
    24. MEW에 해당 값 입력 후 Interact
      Inteact 클릭
      리스트
      Pause 선택 후 Write 클릭
      위와 같은 화면 출력, Confirm & Send 클릭
    25. Pause 오류 발생 // 배포 먼저 진행함
    26. 링크 접속 후 회원가입 진행 (링크 : https://infura.io)
      로그인 완료
    27. 새 프로젝트 생성
      [ETHERUM] 탭 선택 후 CREATE A PROJECT 클릭
       
      프로젝트명 입력
    28. 프로젝트 선택 후 [SETTINGS] 탭 클릭
      ENDPOINTS가 Mainer으로 기본 설정 되어있는데 테스트넷인 Ropsten으로 변경 후 SAVE CHANGES 클릭
      변경 완료
    29. truffle-config.js 파일 수정
      21~24번째 줄 주석 해제
      60~67번째 줄 주석 해제
      infura.io에 있는 KEYS의 복사 버튼 클릭
      61번째 줄 URL 수정 // infura.io에서 복사한 내용 붙여넣기
    30. 메타마스크 회원 가입 시 받았던 시드 문구 필요
      시드문구 기억 안날 경우 아래 참고
      동그라미 버튼 클릭 -> 설정 클릭
      보안 및 개인정보 보호 클릭
      비밀 복구 구문 공개 클릭 후 패스워드 입력
    31. root 디렉토리(truffle-config.js와 같은 경로)에 .secret 파일 생성 후 시드 문구 붙여넣기
    32. /build/contract에 있는 기존 json 파일 삭제 후 새로 컴파일과 배포 진행
      truffle comiple // 컴파일 오류 발생
      npm install @truffle/hdwallet-provider로 해결
      truffle migrate // 테스트넷에 배포하기 때문에 시간 소요
      배포 완료 화면
    33. 이더스캔 접속 (링크 : https://etherscan.io/)
      우측 상단 아이콘 클릭 후 Ropsten Testnet 선택
    34. 검색창에 migrate 결과물 중 transaction hash값 입력 후 검색
      0x3237c1963575d562d32537355e7acbbe0ee2b2bac0149d920701045d8f6f9e1b
      테스트넷 배포 완료 결과물 확인