💡 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
'블록체인 > WEB3 개발' 카테고리의 다른 글
Local에서 ERC-721 개발해 Truffle 로 배포하기 (0) | 2022.07.21 |
---|---|
Remix에서 ERC-721 개발하기 (0) | 2022.07.20 |
Ganache/Ganache-cli 설치하기, Ganache와 Remix 연동, Ganache Network에 스마트 컨트랙트 배포 (0) | 2022.07.15 |
Geth를 사용해 스마트 컨트랙트 빌드하기 (0) | 2022.07.13 |
모든 언어의 시작은 "Hello World" 부터! 솔리디티로 헬로우월드 찍어보기 (0) | 2022.07.13 |
댓글