본문 바로가기
블록체인/WEB3 개발

Truffle(트러플), Truffle Develop, Truffle과 Ganache 연동

by 제이제이_은재 2022. 7. 15.
반응형

💡 Truffle 프레임워크

 

truffle 프레임워크는 스마트 컨트랙트solidity) 개발시 개발, 배포 및 테스트 환경을 제공한다. 이 프레임워크는 node.js 에서 동작을 하며 npm으로 설치할 수 있다.

 

[요구사항]

- NodeJS 5.0 이상

- 윈도우, 리눅스, Mac OS X

- JSON RPC API를 지원하는 이더리움 클라이언트

npm install -g truffle

 

TRUFFLE SUITE https://trufflesuite.com/

 

✓ Truffle 프로젝트 생성

 

일단 아래 명령어로 Truffle Sample Project를 만들어본다. sample 디렉토리를 만들고 sample 폴더로 들어가 truffle init을 통해 트러플 프로젝트를 초기화한다. 

mkdir sample
cd sample
truffle init

 

정상적으로 수행이 되면 다음의 폴더 구조로 생성이 된다.

 

 

* contracts: solidity로 개발된 스마트 컨트랙트 소스 파일 폴더

* contracts/Migration.sol: 배포를 도와주는 solidity 파일 

* migrations: 배포를 위한 스크립트 파일 폴더

* migrations/1_inital_migration.js: Migrations.sol을 배포하는 스크립트

* test: 개발된 컨트랙트를 테스트 하기 위한 폴더

* truffle-config.js: truffle 설정 파일

 

Migrations.sol 파일을 삭제하면 배포시 오류가 발생한다.

 

 

✓ Truffle Develop

 

TRUFFLE DEVELOP은 truffle에서 기본으로 제공하는 이더리움 클라이언트이다.

 

이더리움 클라이언트 실행은 아래 명령어로 한다.

 

truffle develop

위 명령어를 프로젝트 루트폴더에서 실행하면 10개의 Accounts와 Private Keys 가 리스트업 되면서 truffle(develop) > 프롬프트가 나타나게 됩니다. 또한, JSON-RPC용(http://127.0.0.1:9545/) 서비스가 제공된다. 

 

명령어 실행과 동시에 truffle console로 입장하게 되는데, .exit을 입력하면 콘솔이 종료된다.

 

 

✓ 스마트 컨트랙트 컴파일

 

truffle(develop)> compile

 

위 명령어 실행시 프로젝트 루트 폴더에 /build 폴더가 생성이 되며 contracts 폴더 아래에 있는 solidity 파일이 json 형태로 변경되어 생성이 된다.

 

 

 

✓ 스마트 컨트랙트 배포

truffle(develop)> migrate

위 명령어 실해시 /build 폴더에 생성된 파일을 서버에 배포가 된다.

 

 

 

✓ 스마트 컨트랙트 테스트

truffle(develop)> test

 

위 명령어 실행시 /test 폴더에 있는 .js, .sol 파일을 실행하여 테스트를 수행한다. 

 

* solidity 파일로 테스트 파일을 생성시에 파일명은 contract명과 일치하게 하며, contract name Test~ 로 시작하고, 함수명도 test~ 로 시작하여야 한다.

 

 

💻 간단한 예제를 통한 실습

 

✓ 샘플 코드 작성

contracts/Sample.sol 파일을 작성한다.

pragma solidity ^0.8.10;
contract SimpleStorage{
    uint val;

    function set(uint x) public {
        val = x;
    }

    function get() public view returns (uint){
        return val;
    }
}

 

✓ 배포 스크립트 작성

migrations/2_deploy_sample.js 파일을 생성한다.

 

var SimpleStorage = artifacts.require("SimpleStorage");

module.exports = function (deployer) {
    deployer.deploy(SimpleStorage);
};

컨트랙트를 호출할 때는 파일명이 아닌 컨트랙트명으로 불러온다. 배포파일을 확인하면 파일명 앞에 숫자가 붙어 있는데, migrations 폴더 아래에 포함된 모든 파일을 실행하기 때문에 배포시 우선순위를 주기 위해 앞에 숫자를 붙여 준다.

 

 

✓ 테스트 컨트랙트 작성

test/TestSimpleStorage.sol 파일을 생성한다.

 

pragma solidity ^0.8.10;

import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/Sample.sol";


contract TestSimpleStorate {
    function testSimpleStorage() public {
        SimpleStorage ss = new SimpleStorage();

        uint expected = 4;
        ss.set(expected);
        Assert.equal(ss.get(), expected, "Value equal test");
    }
}

위 코드를 준비하면 테스트 과정까지 모두 준비가 되었다. 이제 컴파일 후 이더리움 클라이언트에 배포하고 테스트하는 과정을 알아보자.

 

컴파일

truffle(develop)> compile

 

배포

truffle(develop)> migrate

 

테스트

truffle(develop)> test

 

최종 결과

 

✓ Truffle 과 Ganache 연동하기

 

 

Truffle은 설정 파일만 간단히 수정하여 Ganache 와 연동이 가능하다. Ganache 연동을 위해서는 네트워크 설정을 해야하는데, 이는 truffle-config.js파일을 간단히 수정하여 설정할 수 있다.

 

수정 후 truffle networks 를 아래의 명령어로 확인한다.

truffle(develop)> truffle networks

 

develop 네트워크가 기본으로 등록된 것을 확인할 수 있다.

 

기존에 작성했던 파일을 그대로 Ganache 네트워크에 업데이트 해보자. 

 

* Ganache 에 블록이 추가되지 않는다면 Truffle을 재시작해보자! 

truffle(develop)> migrate

 

 

반응형

댓글