트러플(Truffle) 코딩 실습, 메타마스크(MetaMask) 설치, 가나슈(Ganache) 설치, 메타마스크와 가나슈 연결, 트러플에서의 리액트(React) 사용법

2021. 10. 13. 22:11Blockchain/Truffle

설치 순서

  1. 메타마스크(MetaMask)
  2. 가나슈(Ganache)
  3. 트러플(Trueffle)

메타마스크

* 공개키 : 20자리의 주소키

* 암호키 : 개인키

 

- 설치 및 가입

  1. 크롬에서만 설치 가능
  2. 설치 링크 : https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn4
  3. 설치 후 퍼즐 모양 클릭하여 브라우저 상단 고정 가능
  4. 시작하기 클릭
  5.  기존 사용자는 지갑 가져오기, 첫 사용자는 지갑 생성 클릭
  6. 동의함 클릭
  7. 암호 설정
  8. 비밀 구문 백업, 아래 빈 네모칸에 영어 단어들의 나열이 출력 됨
  9.  비밀 구문 확인, 이전에 나왔던 단어를 순서대로 클릭 후 확인
  10. 가입 완료, 크롬 우측 상단에서 고정한 아이콘으로 지갑 정보 확인 가능

가나슈

* vsCode 환경에서 사용하는 ganache-cli가 아닌 윈도우 환경에서 작동하는 프로그램으로 설치

 

- 설치 및 실행

  1. 설치 링크 : https://www.trufflesuite.com/ganache
  2. 설치 완료 후 Quick START 클릭

가나슈 사용법

- 메타마스크와 연결

  1. 가나슈 실행 -> 우측 상단 톱니바퀴 모양 클릭 -> SERVER 탭 선택
    -> PORT NUMBER를 메타마스크에 나와있는 Localhost 포트번호로 변경 후 우측 상단 RESTART 클릭
  2. 우측 열쇠 모양 클릭 -> 메타마스크 내 입력에 필요한 PRIVATE KEY 준비
  3. 메타마스크 아이콘 클릭 -> 상단 빨간 네모 클릭 -> Localhost 선택
  4. 파란 동그라미 아이콘 클릭 -> 계정 가져오기 선택
  5. 준비했던 가나슈의 PRIVATE KEY를 복붙 후 가져오기 클릭
  6. 메타마스크 화면에 100 ETH 확인, 연결 완료!

- 송금하기

  1. 메타마스크 열어서 보내기 클릭
  2. 가나슈에서 등록한 ADDRESS가 아닌 다른 ADDRESS 선택 하여 복사
  3. 보내기(Send to) 화면 인풋 박스에 붙여넣기
    정상적인 주소가 들어가면 아래 중 두번째 스크린 샷처럼 화면 출력 됨
    금액 설정하여 다음 클릭
    ※ 송금 요청 시 공개키를 요구하지 않는 이유
    * keccak256()을 사용하여 개인키를 생성하고 그 개인키로 공개키까지 생성하는데, 공개키만 알면 개인키는 알 수 없기 때문
  4. 확인 클릭
  5. 송금 처리가 완료되면 가나슈와 메타마스크에 입력했던 금액만큼의 ETH가 변경 됨, 거래 완료
    (메타마스크 업데이트 살짝 느림)

- 거래 내역 확인

  1. 아래와 같이 송금 시 적었던 금액만큼의 ETH의 변동 사항이 보이며, 사용 중인 0번 INDEX의 TX COUNT(거래 횟수)가 1로 증가
  2. TRANSACTIONS : 전체 거래 내역과 상세 내역 확인 가능
  3. BLOCKS : GAS 소비량, TRANSACTION 횟수 등 확인 가능

트러플 코딩 실습

- 트러플이란?

  1. 솔리디티 코딩
  2. 솔리디티 컴파일
  3. 솔리디티 배포 // deploy.js
  4. web3를 활용하여 프론트엔드 구성

* 이전에 해왔던 위의 작업들을 간소화해주는, DApp을 만들기위한 프레임워크

 

- 설치 및 환경 설정

  1. npm instlal -g truffle // 전역으로 설치
  2. truffle init // 개발 환경 구축, 폴더 및 파일 자동 생성
    자동 생성되는 폴더 및 파일 설명 ↓
    * contracts : 솔리디티 코드 작성 공간
    * migrations : deploy 메서드가 사용되는 공간, 배포
    * test : TDD 코드 작성 공간
    * truffle-config.js : truffle 관련 환경 설정 파일
  3. truffle-config.js 파일 내용 수정 // 44~48번째줄 주석 해제 후 port를 가나슈 포트 번호로 수정
  4. truffle create contract HelloToken // truffle 명령어로 파일 생성
    * truffle create [폴더명] [파일명] // 폴더명 내 파일명으로 생성
  5. truffle compile // 컴파일
  6. truffle migrate // 배포
  7. migrations 폴더에 2_helloToken.js 파일 생성 후 1_initial_migration 파일 내용 복붙 후 내용 수정
    * 파일명 규칙 : [숫자]_ [파일명]
    const [파일명] = artifacts.require("[파일명]");
    
    module.exports = function (deployer) {
        deployer.deploy([파일명]);
    }
  8. truffle create test hello_token.js // test 폴더 내 hello_token.js 파일 생성, 해당 파일에 테스트 코드 작성
    const HelloToken = artifacts.require("HelloToken");
    
    contract("HelloToken", () => {
      it("hello function call2", async () = >{
        let instance = await HelloToken.deployed();
        let result = await instance.hello();
        console.log(`result : `,result);
        return result;
      });
    });
  9. truffle test // 테스트, 콘솔 로그 출력 확인
  10. hello_token.js 파일에 에러 코드 추가
    contract("HelloToken", () => {
      it("hello function call2", async () => {
        let instance = await HelloToken.deployed();
        let result = await instance.hell(); // 에러 부분, hello >> hell
        console.log('HelloToken result : ', result);
        return result;
      });
    });​
  11. truffle test // 다시 테스트, 콘솔 로그 출력 확인
    ※ contract가 여러개라도 truffle test 명령어 1번 입력으로 한 번에 전부 테스트 가능

트러플에서의 리액트(React) 사용법

  1. truffle unbox react // 리액트 자동 세팅

    * truffle init의 폴더 구성에서 client 폴더가 추가로 생성 됨
    * client 폴더는 react 프레임워크가 설치 된 공간 // create-react-app = cra가 설치 된 공간
    * truffle unbox next // next.js 자동 세팅
    ※ 설치 완료 시 터미널에 표기되는 명령어 목록
  2. cd client
  3. npm run start // 실행
  4. 에러 발생 // 솔리디티 컴파일과 배포가 완료되어야 함
  5. truffle-config.js 파일 내용 수정 // 수정 전 (아래)

    * 8번째 줄 networks: { } 안에 아래 내용 추가
    development: {
        host: "127.0.0.1",     // Localhost (default: none)
        port: 7545,            // Standard Ethereum port (default: none)
        network_id: "*",       // Any network (default: none)
    },​
    * 수정 후 (아래)
    ※ 포트 번호는 가나슈 포트 번호로 수정
  6. cd ..
  7. truffle complie // 솔리디티 컴파일
    /client/src/contracts 폴더 내 SimpleStorage.json 파일 자동 생성 // 여기서 위 에러 해결 됨
  8. truffle migrate // 솔리디티 배포
  9. cd client
  10. npm run start // 재실행
    아래와 같이 MetaMask Notification 화면이 열리며, 확인 버튼을 클릭하면 거래가 완료 되어 ETH가 줄어듬
    html 화면에서도 아래 빨간 네모 부분이 0에서 5로 변경 됨