Solidity 튜토리얼 2: truffle + zeppelin-solidity를 이용한 크라우드 세일 계약 I

Yoonjae Yoo
DNEXT
Published in
7 min readApr 1, 2018

지난번에 다루어본 Solidity 튜토리얼 1: Youtube 광고 수익 정산 계약에 이어 오늘은 사전 등록 크라우드 세일 계약을 작성하는 방법에 대해 알아보겠습니다.

사전 등록 크라우드 세일이란, 미리 화이트리스트에 등록된 참여자에 대해서만 토큰을 판매하는 방식입니다. 즉, 1) 토큰을 발행하고 2) 사전 등록을 진행하고 3) 실제 토큰을 판매하는 세 과정으로 이루어지게 됩니다. 이 포스트에서는 Solidity를 사용해 세 단계로 나누어 각각에 해당하는 스마트 계약을 작성해보려고 합니다.

우리가 발행할 토큰의 특징은 아래와 같습니다.

  • 이름 : DNext Token
  • 심볼 : DNX
  • 최소 단위 : Emma (10⁸ Emma = 1 DNX)
  • 플랫폼 : 이더리움 (ERC20)
  • 발행량 : 21,000,000 (비트코인의 발행량과 유사)
  • 발행 방식 : 사전에 모두 발행, 추가 발행은 없음

사전 등록 규칙은 아래와 같습니다.

  • 신원 증명 : 참여자 본인이 추후 토큰을 지급받을 이더리움 주소를 직접 화이트리스트 스마트 계약에 등록해야 한다.
  • 익명성 : 화이트리스트에 등록된 이더리움 주소는 (개발진을 포함해) 누구도 볼 수 없다.
  • 권한 : 화이트리스트 등록 여부는 본인만 확인할 수 있고, 원한다면 삭제도 가능하다.

토큰 판매 전략은 아래와 같습니다.

  • 교환 비율 : 1 ETH=1000 DNX
  • 최대 판매 수량(Hard Cap) : 5,000,000 DNX

개발 환경 구축

스마트 계약의 작성과 배포 및 테스트는 Remix IDE에서 모두 가능합니다. 하지만 우리는 오늘 zeppelin-solidity¹라는 라이브러리(library)²를 사용하기 위해서 truffle이라는 프레임워크(framework)³을 설치할 예정입니다.

truffle을 설치하기 위해서는 npm이라는 도구가 필요합니다. 우선 npm이 무엇인지에 대해서는 당장 알 필요가 없습니다. truffle을 설치하게 도와주는 패키지 매니저로써 여기를 참고하여 설치하면 됩니다.

npm이 설치되었으면 명령 프롬프트(Windows) 혹은 터미널(Mac, Linux)를 열어 아래와 같이 명령어를 입력해봅니다. (앞으로는 명령행(command line)⁴이라고 지칭할 것입니다.)

npm -v

그러면 아래와 같은 결과가 나타나야 합니다. (버전 이름은 다를 수 있습니다.)

5.6.0

성공적으로 설치가 되었습니다. 이제 truffle을 설치해 봅시다.

npm install -g truffle

설치가 완료되었다면 명령행에서 다음과 같이 입력해봅시다.

truffle

아래와 같은 결과가 나온다면 성공적으로 설치가 된 것입니다.

Truffle v4.1.5 - a development framework for EthereumUsage: truffle <command> [options]Commands:
init Initialize new and empty Ethereum project
compile Compile contract source files
migrate Run migrations to deploy contracts
deploy (alias for migrate)
build Execute build pipeline (if configuration present)
test Run JavaScript and Solidity tests
debug Interactively debug any transaction on the blockchain (experimental)
opcode Print the compiled opcodes for a given contract
console Run a console with contract abstractions and commands available
develop Open a console with a local development blockchain
create Helper to create new contracts, migrations and tests
install Install a package from the Ethereum Package Registry
publish Publish a package to the Ethereum Package Registry
networks Show addresses for deployed contracts on each network
watch Watch filesystem for changes and rebuild the project automatically
serve Serve the build directory on localhost and watch for changes
exec Execute a JS module within this Truffle environment
unbox Download a Truffle Box, a pre-built Truffle project
version Show version number and exit
See more at http://truffleframework.com/docs

기본적인 개발 환경은 구축이 완료되었습니다.

프로젝트 생성하기

프로젝트란 우리가 작성할 여러개의 스마트 계약 및 라이브러리가 포함된 디렉토리(혹은 폴더)의 형태로써, 우리는 이 프로젝트 안에서 모든 작업을 할 것입니다. 우선은 프로젝트를 생성해야 합니다.

우선, 원하는 경로에 프로젝트의 이름과 동일한 디렉토리(혹은 폴더)를 생성합니다. (윈도의 경우 C:\Users\Yoonjae\Documents\dnx, 맥의 경우 /Users/Yoonjae/Documents/dnx와 같이 생성하면 됩니다. 물론 이 디렉토리는 원하는 이름으로 설정하면 되고, 사용자마다 모두 다를 것입니다.)

명령행에서 아래 명령어로 프로젝트 디렉토리에 접근한 후, 프로젝트를 생성합니다.

cd C:\Users\Yoonjae\Documents\dnx
truffle init

아래와 같은 결과가 나타납니다.

Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!
Commands:Compile: truffle compile
Migrate: truffle migrate
Test contracts: truffle test

이제 우리가 스마트 계약을 작성할 프로젝트가 생성되었습니다. 다음은 zeppelin-solidity를 설치할 차례입니다. 이 라이브러리를 설치하는 이유는, 많은 사람들에 의해서 어느정도 안전성이 검증된 기본 스마트 계약을 제공해주기 때문입니다. 우리도 해당 라이브러리의 계약을 토대로 우리만의 새로운 계약을 작성할 것입니다.

아래와 같이 입력합니다.

cd C:\Users\Yoonjae\Documents\dnx
npm init -y
npm install -E zeppelin-solidity

이 과정이 끝나고 나면 dnx 디렉토리 밑에 node_modules라는 디렉토리가 생성되어 있고, 그 밑에 zeppelin-solidity라는 디렉토리도 생성되어 있을 것입니다.

이제 스마트 계약 작성을 위한 모든 준비가 끝났습니다. 다음 포스트에서는 본격적으로 크라우드 세일을 위한 스마트 계약을 작성할 것입니다.

스마트 계약과 관련한 도움이 필요하다면 DNext에서 운영하고 있는 블록체인 전문 교육 기관인 DNext Campus를 언제든 방문해주시기 바랍니다. 블록체인, 이더리움, 스마트 계약에 관련된 주제로 정규 교육 과정을 운영중에 있습니다.

또한 저희 DNext에서는 토큰 발행 및 판매와 관련한 전문 컨설팅 서비스를 제공하고 있습니다. 도움이 필요하신 분들은 support@dnext.co로 문의주시기 바랍니다.

  1. zeppelin-solidity: OpenZeppelin에서 무료로 공개하는 라이브러리.
  2. 라이브러리: 자주 사용되는 코드의 집합으로써 쉽게 가져다 쓸 수 있도록 (보통 무료로) 제공.
  3. 프레임워크: 개발과 테스트에 필요한 여러가지 기능을 쉽게 조합할 수 있도록 도와주는 도구.
  4. 명령행: 마우스를 사용하지 않고 키보드를 사용해 여러 명령어를 입력하고 그 결과값을 볼 수 있는 환경.

--

--