[dApp] 진짜 쉬운 이더리움 은행 만들기 1편 with Truffle
할 것
가상의 클라이언트를 생성하고 이더리움을 입출금 가능한 은행 스마트 컨트랙트를 작성해 콘솔 환경에서 실습해봅니다.
이 프로젝트는 github에 등록되어 있습니다.
준비물
Node.js
홈페이지에 접속해 LTS 버전을 설치해주세요. Truffle
을 설치하는데 사용합니다. (Node.js 5.0 상위 버전을 추천합니다.)
Truffle
> npm install -g truffle
Truffle
은 이더리움 dApp 개발 프레임워크입니다. 스마트 컨트랙트 작성, 빌드 및 배포를 제공하며 유닛 테스트에 용이합니다.
Ganache
홈페이지에 접속하면 쉽게 다운로드 및 설치 할 수 있습니다.
Ganache
는 가상의 이더리움 클라이언트를 만들어줍니다. 마음껏 테스트 가능한 지갑, 계정, 화폐를 제공합니다. 이번 예제에서 Ganache
에 있는 이더리움을 사용합니다.
프로젝트 생성
준비물을 모두 설치했다면 이제 프로젝트를 생성해봅시다.
먼저 빈 폴더를 생성합니다:
> mkdir bank
> cd bank
truffle init
을 입력하여 Truffle
프로젝트 뼈대를 생성합니다:
> truffle init
Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!
Commands:
Compile: truffle compile
Migrate: truffle migrate
Test contracts: truffle test
Windows
환경에서 truffle
명령어 실행시 네이밍 충돌로 올바르게 작동하지 않는 경우가 있습니다. 이는 truffle.cmd
명령어로 대체합니다. 만일 계속해서 문제가 생길시 여기에서 해결하세요.
디렉토리 구조를 살펴봅시다:
├── contracts
│
├── migrations
│
├── test
├── truffle-config.js
└── truffle.js
/contracts
Solidity 소스 코드를 담고 있는 폴더입니다. 이곳에 컨트랙트를 직접 작성합니다.
/migrations
이 폴더는 Truffle
에서 매우 큰 의미를 가집니다. migrations
폴더 여러분이 작성한 컨트랙트(Contract
)를 이더리움 네트워크에 Deploy
하는 방식 JavaScript
로 작성합니다.
/test
Truffle
은 여러분이 작성한 Contract
의 Unit Test 를 가능케합니다. /test
폴더에 테스트 케이스를 작성하고 truffle test
로 테스트를 실행합니다.
/truffle.js
,/truffe-config.js
두 스크립트 모두 Truffle Configuration
파일입니다. 프로젝트 생성시 기본적으로 생성되며 일반적으로 /truffle.js
를 사용합니다. /truffle-config.js
는 네이밍 충돌시 사용합니다.
프로젝트 설정
앞서본 /truffle.js
를 수정합니다:
module.exports = {
networks: {
development: {
host: '127.0.0.1',
port: 7545,
network_id: '*',
}
}
};
Truffle
은 이 모듈을 읽어 실행 환경을 조성합니다.
networks
: 현재 dApp
의 네트워크 환경을 정의합니다.
live
-(이더리움 메인 네트워크)development
-(개발용)ropsten
-(Ropsten 네트워크)...
등 접속할 네트워크를 설정합니다.
host
: 이더리움 클라이언트 주소를 가리킵니다. 우리는 로컬에서 작업하므로 127.0.0.1
입니다.
port
: 포트는 Ganache
의 기본 포트 7545
입니다.
network_id
: 이더리움 네트워크는 고유의 Network ID
를 가지고 있습니다. 대표적으로 1
번은 Main Ethereum Network
를 가리킵니다. 우리는 사설(Private
) 네트워크를 사용하므로 *
로 설정합니다.
마무리
지금까지 Truffle
프로젝트 설치 및 환경설정을 마쳤습니다. 다음 포스팅은 아래 내용을 포함합니다.
Contract
생성 및 작성Migration
및Deploy
실행하기
:0 어떻게 입문해야하나 많이 고민했는데
따라하기 쉬워서 너무 좋네요! 감사합니다~