트러플(Truffle) 코딩 실습, 메타마스크(MetaMask) 설치, 가나슈(Ganache) 설치, 메타마스크와 가나슈 연결, 트러플에서의 리액트(React) 사용법
2021. 10. 13. 22:11ㆍBlockchain/Truffle
설치 순서
- 메타마스크(MetaMask)
- 가나슈(Ganache)
- 트러플(Trueffle)
메타마스크
* 공개키 : 20자리의 주소키
* 암호키 : 개인키
- 설치 및 가입
- 크롬에서만 설치 가능
- 설치 링크 : https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn4
- 설치 후 퍼즐 모양 클릭하여 브라우저 상단 고정 가능
- 시작하기 클릭
- 기존 사용자는 지갑 가져오기, 첫 사용자는 지갑 생성 클릭
- 동의함 클릭
- 암호 설정
- 비밀 구문 백업, 아래 빈 네모칸에 영어 단어들의 나열이 출력 됨
- 비밀 구문 확인, 이전에 나왔던 단어를 순서대로 클릭 후 확인
- 가입 완료, 크롬 우측 상단에서 고정한 아이콘으로 지갑 정보 확인 가능
가나슈
* vsCode 환경에서 사용하는 ganache-cli가 아닌 윈도우 환경에서 작동하는 프로그램으로 설치
- 설치 및 실행
- 설치 링크 : https://www.trufflesuite.com/ganache
- 설치 완료 후 Quick START 클릭
가나슈 사용법
- 메타마스크와 연결
- 가나슈 실행 -> 우측 상단 톱니바퀴 모양 클릭 -> SERVER 탭 선택
-> PORT NUMBER를 메타마스크에 나와있는 Localhost 포트번호로 변경 후 우측 상단 RESTART 클릭
- 우측 열쇠 모양 클릭 -> 메타마스크 내 입력에 필요한 PRIVATE KEY 준비
- 메타마스크 아이콘 클릭 -> 상단 빨간 네모 클릭 -> Localhost 선택
- 파란 동그라미 아이콘 클릭 -> 계정 가져오기 선택
- 준비했던 가나슈의 PRIVATE KEY를 복붙 후 가져오기 클릭
- 메타마스크 화면에 100 ETH 확인, 연결 완료!
- 송금하기
- 메타마스크 열어서 보내기 클릭
- 가나슈에서 등록한 ADDRESS가 아닌 다른 ADDRESS 선택 하여 복사
- 보내기(Send to) 화면 인풋 박스에 붙여넣기
정상적인 주소가 들어가면 아래 중 두번째 스크린 샷처럼 화면 출력 됨
금액 설정하여 다음 클릭
※ 송금 요청 시 공개키를 요구하지 않는 이유
* keccak256()을 사용하여 개인키를 생성하고 그 개인키로 공개키까지 생성하는데, 공개키만 알면 개인키는 알 수 없기 때문 - 확인 클릭
- 송금 처리가 완료되면 가나슈와 메타마스크에 입력했던 금액만큼의 ETH가 변경 됨, 거래 완료
(메타마스크 업데이트 살짝 느림)
- 거래 내역 확인
- 아래와 같이 송금 시 적었던 금액만큼의 ETH의 변동 사항이 보이며, 사용 중인 0번 INDEX의 TX COUNT(거래 횟수)가 1로 증가
- TRANSACTIONS : 전체 거래 내역과 상세 내역 확인 가능
- BLOCKS : GAS 소비량, TRANSACTION 횟수 등 확인 가능
트러플 코딩 실습
- 트러플이란?
- 솔리디티 코딩
- 솔리디티 컴파일
- 솔리디티 배포 // deploy.js
- web3를 활용하여 프론트엔드 구성
* 이전에 해왔던 위의 작업들을 간소화해주는, DApp을 만들기위한 프레임워크
- 설치 및 환경 설정
- npm instlal -g truffle // 전역으로 설치
- truffle init // 개발 환경 구축, 폴더 및 파일 자동 생성
자동 생성되는 폴더 및 파일 설명 ↓
* contracts : 솔리디티 코드 작성 공간
* migrations : deploy 메서드가 사용되는 공간, 배포
* test : TDD 코드 작성 공간
* truffle-config.js : truffle 관련 환경 설정 파일 - truffle-config.js 파일 내용 수정 // 44~48번째줄 주석 해제 후 port를 가나슈 포트 번호로 수정
- truffle create contract HelloToken // truffle 명령어로 파일 생성
* truffle create [폴더명] [파일명] // 폴더명 내 파일명으로 생성 - truffle compile // 컴파일
- truffle migrate // 배포
- migrations 폴더에 2_helloToken.js 파일 생성 후 1_initial_migration 파일 내용 복붙 후 내용 수정
* 파일명 규칙 : [숫자]_ [파일명]
const [파일명] = artifacts.require("[파일명]"); module.exports = function (deployer) { deployer.deploy([파일명]); }
- 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; }); });
- truffle test // 테스트, 콘솔 로그 출력 확인
- 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; }); });
- truffle test // 다시 테스트, 콘솔 로그 출력 확인
※ contract가 여러개라도 truffle test 명령어 1번 입력으로 한 번에 전부 테스트 가능
트러플에서의 리액트(React) 사용법
- truffle unbox react // 리액트 자동 세팅
* truffle init의 폴더 구성에서 client 폴더가 추가로 생성 됨
* client 폴더는 react 프레임워크가 설치 된 공간 // create-react-app = cra가 설치 된 공간
* truffle unbox next // next.js 자동 세팅 ※ 설치 완료 시 터미널에 표기되는 명령어 목록 - cd client
- npm run start // 실행
- 에러 발생 // 솔리디티 컴파일과 배포가 완료되어야 함
- 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) },
※ 포트 번호는 가나슈 포트 번호로 수정 - cd ..
- truffle complie // 솔리디티 컴파일
/client/src/contracts 폴더 내 SimpleStorage.json 파일 자동 생성 // 여기서 위 에러 해결 됨
- truffle migrate // 솔리디티 배포
- cd client
- npm run start // 재실행
아래와 같이 MetaMask Notification 화면이 열리며, 확인 버튼을 클릭하면 거래가 완료 되어 ETH가 줄어듬 html 화면에서도 아래 빨간 네모 부분이 0에서 5로 변경 됨