아하토큰(AHT) ERC-20 컨트랙트 구현부터 배포까지 A to Z (1편)
안녕하세요? 지식커머스플랫폼 아하(Aha) 프론트엔드 및 컨트랙트 개발자입니다.
아하(Aha)는 질문자, 답변자, 큐레이터 모두 커뮤니티에 기여한 만큼 매일 토큰 보상을 분배 받는 암호화폐 보상형 Q&A 플랫폼입니다.▶ 아하 (Aha) 둘러보기 : https://www.a-ha.io/?from=medium
▶ AHT token contract github: https://github.com/aha-official/AHT
토큰 컨트랙트를 구현하고 메인넷에 배포하는 방법은 여러가지가 있습니다. 예를 들어 Mist 브라우저를 이용하면 입문자도 간단한 컨트랙트를 생성하여 배포를 할 수 있습니다. 그러나 코드 에디터가 아니기 때문에 엘레강스하게 컨트랙트를 작성하기에는 무리가 있고, 배포 전에 테스트 코드를 돌려볼 수도 없습니다.
이 시리즈는 아래 도구들을 활용하여 실제 메인넷에 배포하여 상용 구동이 가능한 수준의 컨트랙트를 작성하여 테스트넷에 배포를 해보고, 메인넷에 배포하여 Etherscan에 등록하는 과정까지의 전부(A-Z)를 모두 다룰 예정입니다.
우선 개발 환경 세팅부터 시작해야겠죠?
에디터는 Remix IDE, Atom 등 어떤 것을 쓰셔도 무관하지만, 저는 요즘 대세(?)인 Visual Studio Code를 사용하겠습니다.
Solhint
(Solidity linter*의 일종)를 사용해서 코드 작성 중 linting 이 가능하기 때문에 코딩중에 바로바로 자잘한 오류 검사가 가능합니다. (linter 설치는 다음 편에 설명 드릴게요)
* linter: 소스 코드를 분석하여 프로그램 오류, 버그, 스타일 오류, 의심스러운 구조체에 표시(flag)를 달아놓기 위한 도구
두번째 준비해야할 것은 컨트랙트 개발시 대세 framework인 Truffle 입니다.
Solidity는 스크립트형 언어가 아니므로 컴파일러가 필요합니다. Truffle을 사용하면 컴파일, 테스팅, 배포 등 번거로운 작업을 (비교적..) 어려운 환경설정 없이 진행할 수 있습니다.
로 가서 어떻게 인스톨을 하는지 봅시다. npm
명령어로 설치를 하게 되어 있네요.
여기서 잠깐! npm은 node package manager입니다. Mac 의 homebrew와 비슷한 패키지 관리 툴입니다. npm이 없으신 분들은 nvm(node version manager)를 이용해서 설치하시기를 권장 드립니다.
다 설치가 되었으면, 터미널을 오픈해서 아래 명령어로 node와 npm 버전이 잘 출력되는지 확인해봅시다.
$ node -v // v10.15.0
$ npm -v // 6.5.0
/* 위 버전은 저와 다를 수도 있습니다. */
Truffle documentation 에 적혀있는 아래 명령어로 Truffle을 설치합시다. -g
옵션은 글로벌 설치입니다. 어디 깔리는지 궁금하신 분들은 터미널에 npm root -g
를 입력해보시면 됩니다.
$ npm install truffle -g
Truffle이 잘 설치되었는지 확인해봅시다.
$ truffle version
Truffle v5.0.3 (core: 5.0.3)
Solidity v0.5.0 (solc-js)
Node v10.15.0
/* 위 버전은 저와 다를 수도 있습니다. */
이제, 토큰 컨트랙트 프로젝트를 생성할 디렉토리를 하나 생성해줍니다.
저는 ~/Code/contracts/Medium
이라는 디렉토리를 생성했습니다.
생성한 디렉토리로 들어가서 아래 커맨드를 실행하여 Truffle 프로젝트를 생성합니다.
$ truffle init✔ Preparing to download
✔ Downloading
✔ Cleaning up temporary files
✔ Setting up boxUnbox successful. Sweet!Commands:Compile: truffle compile
Migrate: truffle migrate
Test contracts: truffle test
그러면, 뭔가를 다운로드하고, unbox가 성공했다는 메시지가 보일 겁니다. 다운로드된 파일들을 살펴봅시다.
$ tree
.
├── contracts
│ └── Migrations.sol
├── migrations
│ └── 1_initial_migration.js
├── test
└── truffle-config.js3 directories, 3 files
contracts
: Solidity 컨트랙트 디렉토리. 컨트랙트는 전부 이 폴더 안에 작성합니다.migrations
: 배포 스크립트 디렉토리. 컨트랙트를 배포하는 데 쓰이는 스크립트 파일들이 모이는 곳입니다.test
: 테스트 코드 디렉토리. 테스트 코드는 solidity나 javascript로 작성할 수 있습니다. 즉, 테스트 모듈은 이곳에 작성하면 됩니다.truffle-config.js
: 네트워크 환경 설정 등 환경과 관련된 설정을 하기 위한 파일.
마지막으로, Ganache를 설치해줍시다.
저는 쫄보니까 컨트랙트를 메인넷에 바로 배포하지 않고, 프라이빗 로컬→ 테스트넷 → 메인넷 순으로 진행할 것입니다.
첫번째 순서인 로컬 블록체인에 배포를 하려면, 로컬 블록체인을 구성해야겠죠?
Ganache는 로컬에 personal 이더리움 블록체인을 구동시켜주는 툴입니다. 구동 후에는 로컬 블록체인의 블록, tx(트랜젝션) 등을 조회해볼 수 있습니다.
Ganache는 cli 버전과 gui 버전이 있습니다. 하는 역할은 비슷한데 cli 는 gui 보다 훨씬 더 많은 옵션을 제공합니다. gui 버전으로도 충분하기 때문에 (그리고 cli 보다 이쁘니까) gui 버전을 설치해서 진행하도록 하겠습니다.
‘Blocks’ tap을 눌러보시면 첫 번째 블록이 보입니다. 로컬 블록체인의 genesis block 인 셈이죠.
여기까지 오셨으면, contract를 구현 & 개발하고 테스트, 배포할 수 있는 환경을 갖추어놓고 계실 겁니다.👏 다음 편에서는 코딩을 편하게 할 수 있도록 solidity 코딩을 위한 에디터 설정에 대해서 말씀 드리겠습니다. 헥헥..