[Truffle] Truffle framework for Ethereum
in Dev on Blockchain, Truffle

Truffle is the most popular development framework for Ethereum with a mission to make your life a whole lot easier.
설치
$ npm install -g truffle
$ truffle version
Truffle v4.1.13 (core: 4.1.13)
Solidity v0.4.24 (solc-js)
프로젝트 생성
$ mkdir sample
$ cd sample
$ truffle init
프로젝트 폴더 구조
파일/폴더명 | 비고 |
---|---|
contracts | 스마튼 컨트랙트 소스 파일 폴더 |
migrations | 배포를위한 스크립트 파일 폴더 |
test | 개발된 컨트랙트를 테스트 하기 위한 폴더 |
truffle.js | truffle 설정 파일 (default) |
truffle-config.js | truffle 설정 파일 (truffle.js 파일이 없는경우 적용됨) |
SimpleStorage Example
스마트 컨트랙트
contracts/SimpleStorage.sol
pragma solidity ^0.4.17;
contract SimpleStorage {
uint val;
function set(uint x) public {
val = x;
}
function get() constant public returns (uint) {
return val;
}
}
배포 스크립트
migrations/2_deploy_sample.js
var SimpleStorage = artifacts.require("SimpleStorage");
module.exports = function(deployer) {
deployer.deploy(SimpleStorage);
};
Note: 기본적으로 migrations 폴더 아래에 포함된 모든 파일을 실행 하기 때문에 배포 시 우선순위를 주기 위해 앞에 숫자를 붙여 준다.
테스트 컨트랙트
test/TestSimpleStorage.sol
pragma solidity ^0.4.17;
import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/SimpleStorage.sol";
contract TestSimpleStorage {
function testSimpleStorage() public {
SimpleStorage ss = new SimpleStorage();
uint expected = 4;
ss.set(expected);
Assert.equal(ss.get(), expected, "value equal test");
}
}
Note: 테스트 파일을 생성 시에 파일명은 contract 명과 일치 하게 하며, contract name은 Test~ 로 시작하고, 함수명도 test~ 로 시작 하여야 한다.
테스트용 이더리움 노드 설정
$ truffle develop
Truffle Develop started at http://127.0.0.1:9545/
Accounts:
(0) 0x627306090abab3a6e1400e9345bc60c78a8bef57
(1) 0xf17f52151ebef6c7334fad080c5704d77216b732
(2) 0xc5fdf4076b8f3a5357c5e395ab970b5b54098fef
(3) 0x821aea9a577a9b44299b9c15c88cf3087f3b5544
(4) 0x0d1d4e623d10f9fba5db95830f7d3839406c6af2
(5) 0x2932b7a2355d6fecc4b5c0b6bd44cc31df247a2e
(6) 0x2191ef87e392377ec08e7c08eb105ef5448eced5
(7) 0x0f4f2ac550a1b4e2280d04c21cea7ebd822934b5
(8) 0x6330a553fc93768f612722bb8c2ec78ac90b3bbc
(9) 0x5aeda56215b167893e80b4fe645ba6d5bab767de
Private Keys:
(0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3
(1) ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f
(2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8ad91193c05875ef1
(3) c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd85da83b71f772aa6c
(4) 388c684f0ba1ef5017716adb5d21a053ea8e90277d0868337519f97bede61418
(5) 659cbb0e2411a44db63778987b1e22153c086a95eb6b18bdf89de078917abc63
(6) 82d052c865f5763aad42add438569276c00d3d88a2d062d36b2bae914d58b8c8
(7) aa3680d5d48a8283413f7a108367c7299ca73f553735860a87b08f39395618b7
(8) 0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07700d8669ff12b7c4
(9) 8d5366123cb560bb606379f90a0bfd4769eecc0557f1b362dcae9012b548b1e5
Mnemonic: candy maple cake sugar pudding cream honey rich smooth crumble sweet treat
⚠️ Important ⚠️ : This mnemonic was created for you by Truffle. It is not secure.
Ensure you do not use it on production blockchains, or else you risk losing funds.
truffle(develop)>
ganache-cli를 직접 설치해서 실행하는 방법
$ npm install -g ganache-cli
$ ganache-cli
Ganache CLI v6.1.8 (ganache-core: 2.2.1)
Available Accounts
==================
(0) 0x4edd1f1994fa1912adb69c7f21e9697ea534a182 (~100 ETH)
(1) 0x837f7badf44aa34b28b10ba6df363464d75a921c (~100 ETH)
(2) 0x9f54595fe48cc0c107752fb7e7c127f19d2176d3 (~100 ETH)
(3) 0x080837726805dcf65e303e135beaf8d24f839164 (~100 ETH)
(4) 0x843e9e1af6a3fd260aa1cc3c3373e4a4a3562027 (~100 ETH)
(5) 0x98e49382ce52cd62d48f6126f9055f2840f0df05 (~100 ETH)
(6) 0xdfdf1219965a325dfddd6f6a4fbb4d1573e46bc2 (~100 ETH)
(7) 0x9b27fbf16f7ef0bfb678b906296eef020f430c65 (~100 ETH)
(8) 0x2bf00228ed492fa0f968c48cdfc5ac77062d7f39 (~100 ETH)
(9) 0xd990b9bfd6ebbdd73630b7758f279cacfb78a167 (~100 ETH)
Private Keys
==================
(0) 0x449ec9909348039edaf65cfd119f50615b66d2f9265289a95f3734a35033cbce
(1) 0x92268b188b3a516ad0425cea26667d1f7612dffba2e2a12b3d917d7532d8c9d6
(2) 0x7876a3ae5816cdbeed847f8655e07cf7812eac6f11670fbd8dff8ccde2ccff5e
(3) 0xa1d6b4752656e21501cee18737809fc9c7f54cda236233ac490d76fc4c565200
(4) 0xda41e6e2947dfa1c74b8fd9badf5bcf712b697861e34c1acd73a979fd4237d53
(5) 0x7457fa005da1bae46ec52b3d471e1cbd4099a9cf2dfaa353c92871984090268b
(6) 0x05127d643718f940f3ca5eb8dad20e476779f87169970410604be39fa4c2cebd
(7) 0x26e1d5eaaafe33c61357b6efeef27582da3d8b87283d827f3f8c0cc3b0e5a35b
(8) 0x2f8b3f2356c5ad9a1755011cc00796167d73d88700e74e88b15a3cc9389739a0
(9) 0x46ad4b94636bcc72b3c358ddc8449cd0b6c0e2b936289e679514a6af0b9d62e6
HD Wallet
==================
Mnemonic: act liar ill hurt term impose toss require team assist wine detail
Base HD Path: m/44'/60'/0'/0/{account_index}
Gas Price
==================
20000000000
Gas Limit
==================
6721975
Listening on 127.0.0.1:8545
배포 및 테스트
컴파일
truffle(develop)> compile
Compiling .\contracts\Migrations.sol...
Writing artifacts to .\build\contracts
배포
truffle(develop)> migrate
Using network 'develop'.
테스트
truffle(develop)> test
Using network 'develop'.
Compiling .\contracts\SimpleStorage.sol...
Compiling .\test\TestSimpleStorage.sol...
Compiling truffle/Assert.sol...
Compiling truffle/DeployedAddresses.sol...
TestSimpleStorage
√ testSimpleStorage (83ms)
1 passing (760ms)