[Truffle] Truffle framework for Ethereum


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.jstruffle 설정 파일 (default)
truffle-config.jstruffle 설정 파일 (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)





© 2017. by yeopoong.github.io

Powered by yeopoong