[멋쟁이 사자처럼 블록체인 스쿨 3기] 23-06-08

임형석·2023년 6월 8일
0

Ganache & Truffle


Ganache

가나슈는 가상의 이더리움 네트워크를 만들어 놓은 프로그램으로, 스마트 컨트랙트 실행이 가능하다.

이러한 개발 환경을 test RPC 라고 한다.

Truffle

NodeJs 기반으로 만들어진 이더리움 개발 프레임워크이다.

트러플 내에서 일어나는 일은 실제 이더리움 체인에서도 일어날 수 있다.

트러플은 js 문법을 사용해서 Remix IDE 내에서는 할 수 없던 것들을 처리를 할 수 있다.

한마디로 컨트랙트의 활용도가 크게 늘어난다고 볼 수 있겠다.


Truffle 사용


  1. truffle initialize.

vscode 에서 처음 트러플을 initialize 할때, 위 명령어를 사용.

명령어를 입력하면 터미널에는 아래와 같이 표시된다.

그리고 아래의 폴더와 파일들이 생성된다.


  1. contract 작성.

성공적으로 init 되었다면, contracts 폴더에 새로운 컨트랙트 파일을 만들어준다.

아래의 코드를 입력하고 저장해준다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

contract ADD {
    uint public AA = 10;
    
    function setA(uint _n) public {
        AA = _n;
    }

    function getA() public view returns(uint){
        return AA;
    }
}

  1. compile

Remix IDE 의 경우엔 ctrl + S 를 누르면 저장과 동시에 컴파일 되었지만,

Vscode 에서 작성한 컨트랙트는 명령어를 입력해 컴파일링 해야한다.


  1. Ganache

마이그레이션 하기 전에.. 가나슈를 열어 로컬 이더리움 네트워크 환경을 만들어준다.

QUICKSTART 클릭.

이러한 화면이 나오면 된다.

하지만, RPC SERVER 의 PORT 번호가 7545 이다.

그리고 트러플의 기본 값은 8545 이므로 바꿔주어야 한다.

Truffle-config.js 파일의 67 번 줄의 주석을 해제하고 port: 7545 로 수정해준다.


  1. 배포 스크립트 작성

migration 폴더에 숫자_이름.js 형식의 js 파일을 만들어준다.

여기서 중요한 점은, 앞에 1 2 같은 형식을 꼭 붙여야 한다는 것.

js 파일에는 아래와 같은 코드를 작성한다.

const A = artifacts.require("ADD"); // require("컨트랙트명")

module.exports = function (deployer) {
  deployer.deploy(A); // .deploy("첫줄의 변수명")
};

  1. migration

터미널에 truffle migration 명령어 입력 후,

터미널이 아래와 같이 뜨는지 확인.

마이그레이션이 되었다면 build / contracts 폴더에 컨트랙트 이름과 같은 json 파일이 생성된다.

열어보면, 해당 컨트랙트의 abi 파일이다.

가나슈를 확인하면 새로운 블록이 생성되어있다.

이 블록을 클릭하고 자세히 보면 sender, contract address, gas, TX data 등을 확인할 수 있다.


  1. 함수 실행

터미널에 truffle console 명령어 입력.

const A = await TEST.deployed() 입력해서 A 를 배포된 TEST 컨트랙트로 선언.

A.setA(5) 입력해서 setA 함수 실행. 상태변수 AA 를 5로 바꿈.

가나슈에서 새로 생성된 2번 블록을 확인.

터미널에서 A.getA() 입력 후, 상태변수 AA 가 5 로 바뀌어있는 것 확인.


  1. 특정 파일 complie

트러플 프로젝트 폴더에 여러 파일이 들어있을 수 있다.

이런 경우에 truffle com 명령어를 사용하면 폴더 내의 모든 파일을 컴파일링 한다.

그래서, truffle com .\contracts\AS.sol 이렇게 경로를 지정해주면 특정 파일만 컴파일링이 가능하다.


  1. 특정 파일 migrate

트러플 프로젝트 폴더에 여러 파일이 들어있을 수 있다.

이런 경우에 truffle mig 명령어를 사용하면 폴더 내의 모든 파일을 마이그레이션 시킨다.

그래서, truffle mig --f 2 --to 2 이 명령어를 사용해서 from to 를 지정해주면 원하는 파일만

마이그레이션 시킬 수 있다.


  1. 팁과 응용

일정 주기로 함수가 실행되도록 만드는 것이다.

js 에서 사용되는 문법인데, 트러플에서는 이렇게 js 문법을 이용해 컨트랙트를 실행할 수 있다.

그래서 컨트랙트의 활용도가 커진다고 했던 것.

setA() 함수를 2초마다 실행시키도록 하고, 40초 뒤에 중지하도록 코드를 작성했다.

let timer = setInterval(()=>A.setA(5), 2000);
setTimeout(()=>{clearInterval(timer)}, 40000)

매 2초마다 새로운 트랜잭션이 생겨 매 2초마다 블록이 생성되고 있다.

블록을 확인해보면, setA(5) 함수가 실행되었다.


BIP-39 Nimonic words list

가나슈에는 니모닉이 워드가 있다.

니모닉은 메타마스크에서 개인키로도 사용된다.

사용자가 난잡한 개인키를 쉽게 외울 수 있도록 만들었는데, 비트코인의 BIP-39 에 의해 제안 되었었다.

Bitcoin BIP-0039 github

총 2048개. 엄청난 양의 단어이다.


0개의 댓글