[가상화폐] [Ethereum] Smart Contract 개발을 위한 환경 세팅 (Remix, Ganache)

iron_modolee.png

안녕하세요. 개발자 모도리입니다.

오늘은 이더리움 스마트 컨트랙트 개발을 위한 아주아주 간단한 윈도우 환경에서의 개발 도구 세팅을 해 보겠습니다.

이더리움 스마트 컨트랙트를 개발할 때 가장 최소한으로 필요한 두 가지가 있습니다. 첫번째는 컨트랙트 코드를 작성하고 컴파일 할 수 있는 IDE, 두번째는 컴파일 된 바이트 코드를 이더리움 네트워크에 배포할 수 있는 Ethereum Node입니다.

개발 도구 설명

IDE

통합 개발 환경이라고 하며 개발하는 언어에 따라서 사용하는 IDE가 달라집니다. C/C++의 경우에는 Visual Studio, Java는 Eclipse, IntelliJ IDEA, Python PyCharm 등 여러가지 IDE가 존재합니다. 윈도우 상에 설치해서 사용하는 IDE가 있는 반면 그냥 웹 브라우저 상에서 동작하는 IDE들도 존재합니다. 우리는 우선 별도의 설치 없이 사용할 수 있는 Online IDE인 Remix를 사용하겠습니다.

Ethereum Node / Network

보통은 Geth, Parity 등을 이용해서 블록을 모두 동기화 시키고 실제 이더리움 메인/테스트 네트워크에 접속해서 진행을 합니다. 하지만 블록을 동기화 시키는데만 해도 2~3일 정도 걸리고(약 한 달 전 제가 동기화 시킨 기준입니다.), 블록을 채굴하기까지 기다려야 되는 등 개발 중에 불편한 점이 많습니다. 그래서 개발 중에는 Ganache와 같은 가상 혹은 프라이빗 네트워크 상에서 스마트 컨트랙트를 구동해 보고 테스트넷을 거쳐 메인넷에 올라가게 됩니다.

개발 및 배포 과정


TestRPC -> TestNet -> MainNet

  • TestRPC : 개발 진행
  • TestNet : 개발 완료 후 MainNet과 동일한 환경에서 테스트
  • MainNet : 실제 서비스에 사용할 수 있도록 배포

Ganache 설치

"가나슈"라고 읽으면 되고, 가상의 이더리움 네트워크를 생성해서 스마트 컨트랙트를 실행할 수 있도록 해주는 프로그램입니다. 이런 가상 환경을 TestRPC라고 합니다.

Ganache 다운로드 페이지에 접속하셔서 다운로드를 받고 설치를 합니다.

01_download_ganache.png

설치를 하면 먹음직스러운 초콜릿 모양의 아이콘이 생깁니다.

02_ganache_icon.png

아이콘을 더블 클릭해서 실행을 하면 아래와 같은 화면이 나옵니다.

03_execute_ganache.png

세부 설정은 제가 조금 변경한 부분이 있는데요, 이 부분은 무시하시고 기본 설정으로 사용하시면 됩니다.
화면에 대해서 간략히 설명 드리겠습니다.

  • 현재 가상의 이더리움 네트워크가 운영되고 있습니다.
  • 해당 네트워크에 접속하려면 http://127.0.0.1:7545로 접속하면 됩니다.
  • 10개의 가상 계정에는 각각 100 이더의 잔액이 충전되어 있습니다. (와우~ *_*)

이 정도로 이해 하시면 충분할 겁니다. 나머지는 그냥 막 누르면서 구경하셔도 됩니다. 어차피 로컬에만 동작하는 가상의 네트워크이니깐요.

우선 여기까지 하면 이더리움 네트워크는 준비 완료입니다.

Remix 접속

웹 브라우저(Chrome 또는 Firefox 추천)를 실행하고 주소창에 https://remix.ethereum.org 를 입력합니다. 접속이 되면 아래와 같은 기본 화면이 나옵니다.

04_connect_remix.png

화면에 나와 있는 코드는 기본 예제 코드이며 무시하셔도 됩니다.

간단히 몇 가지만 세팅을 합니다. 오른쪽에 보면 설정 패널이 있습니다.

  • Compile 탭
    Auto Compile 옵션을 체크합니다.
    05_auto_compile.png

  • Settings 탭
    Solidity 버전을 선택할 수 있는데, 뭔가 안정적으로 보이는 버전을 선택합니다. (아직도 활발하게 개발 중인 언어라서 버전마다 추가/삭제 되는 기능들이 꽤 많이 있습니다.)
    06_solidity_version.png

  • Run 탭
    아까 띄워놓았던 Ganache와 연결을 해야 합니다.
    Environment에서 Web3 Provider를 선택합니다.
    07_web3_provider.png
    그러면 아래와 같은 확인 창이 뜨는데 OK를 눌러줍니다.
    08_alert.png
    그러면 주소를 입력하는 창이 뜨는데, 아까 Ganache 접속을 위한 주소 기억하시나요? http://127.0.0.1:7545 를 입력해 줍니다. (기본적으로 localhost는 127.0.0.1로 치환됩니다. 만약 접속이 안되시면 127.0.0.1로 직접 입력 바랍니다.)
    09_endpoint.png
    정상적으로 접속이 되었다면 Account 부분에 변화가 생깁니다. 아까 Ganache에서 봤던 10개의 계정이 나타나게 됩니다. (Remix 버그로 인해 10개의 계정이 2번 반복해서 나타나는데 무시하고 위에 10개의 계정만 신경 쓰시면 됩니다.)
    10_accounts.png

이렇게 하면 우선 개발 환경 세팅은 끝이 났습니다. 그러면 간단한 스마트 컨트랙트를 작성해서 실행해 볼까요?

스마트 컨트랙트 예제 실행

컨트랙트 작성

샘플로 열려 있는 ballot.sol 창을 닫고 + 버튼을 눌러서 새 창을 생성합니다. 파일 이름은 simple_storage.sol로 지정하고 OK를 누릅니다.

11_new_contract.png

새로 만들어진 창에 아래 코드를 붙여 넣습니다.

pragma solidity ^0.4.0;

contract SimpleStorage {
    uint storedData;

    function set(uint x) public {
        storedData = x;
    }

    function get() public view returns (uint) {
        return storedData;
    }
}

위의 코드는 스마트 컨트랙트 개발의 Hello World!와 같은 코드입니다.

  • solidity 0.4.0 버전을 기준으로 작성
  • SimpleStorage라는 컨트랙트 한 개를 포함
  • storedData라는 상태 변수를 선언
  • set을 통해서 값을 저장
  • get을 통해서 저장된 값을 확인

그러면 해당 코드를 Ganache에 배포해 보겠습니다.

컨트랙트 배포

코드를 붙여넣기 한 순간 아까 지정한 자동 컴파일 옵션 때문에 자동으로 소스가 컴파일 되었을 겁니다. 컴파일이 완료되면 포함하고 있는 컨트랙트의 이름을 오른쪽 패널에 표시합니다.

12_compile_contract.png

SimpleStorage 컨트랙트가 컴파일되어 있는 것을 확인할 수 있습니다. Deploy 버튼을 누르기 전에 Ganache를 다시 한번 살펴 보겠습니다. Current Block에 0이라고 표시된 게 보이실 겁니다.
13_ganache_0.png

이 상태에서 Deploy 버튼을 누릅니다.
Deploy가 되면 오른쪽 패널 아래 새로운 버튼들이 생깁니다.
14_deploy_contract.png

그리고 Ganache의 Current Block를 보면 1로 바뀐 것 확인할 수 있습니다.
15_ganache_1.png

Deploy와 동시에 transaction을 Ganache 가상 네트워크에 전송했고, 채굴이 일어나서 블록이 1개 생성된 것입니다.
Ganche Blocks 탭에서 자세한 내용을 확인할 수 있습니다.

블록이 하나 더 생성되었고,
16_ganache_blocks.png
Transaction을 눌러서 들어가면 방금 Deploy를 하면서 발생시킨 transaction이 들어 있습니다.
17_ganache_transaction.png

이렇게 스마트 컨트랙트가 Ganche 네트워크에 배포되었습니다.

컨트랙트 실행

set과 get 버튼이 있는데, set은 상태 변수에 값을 저장 "쓰기" 명령이고 get은 상태 변수의 값을 불러오는 "읽기" 명령입니다. 배포 된 상태에서 get 버튼을 눌러서 상태 변수 값을 확인합니다.
18_get_0.png
상태 변수의 초기 값은 0으로 세팅되어 있습니다.

그러면 다음으로 set 옆에 입력 간에 원하는 숫자를 입력하고 set은 누른 후 다시 get 을 눌러봅니다.
19_set_get.png
값이 변한 것을 확인할 수 있습니다.

지금은 Remix 환경의 함수 실행 버튼을 통해서 컨트랙트의 함수를 실행하지만, web3.js를 이용해서 실제 웹 페이지 상에서 실행할 수 있도록 구현을 하게 되면 그게 바로 Dapp이 됩니다.

추가로 Ganache를 한 번 다시 확인해 보시면, 블록이 하나 더 채굴 된 것을 확인할 수 있습니다.
20_ganache_block_2.png
get, set, get 함수를 호출 했는데 왜 하나만 채굴 되었을까요?
이유는 상태 변수가 변하지 않는 "읽기" 명령은 채굴이 일어나지 않으며, 상태 변수가 변하는 "쓰기" 명령을 수행할 때에만 채굴이 일어나기 때문입니다.

이렇게 간단한 개발 환경에서 스마트 컨트랙트를 작성하고 가상 네트워크에 배포하고 실행하는 과정까지 마쳤습니다.

Solidity 문법이나, 스마트 컨트랙트 작성을 조금 더 체계적으로 배우고 싶으시면 Loom Network의 Crypto Zombie를 따라해 보시는 것을 추천드립니다.

오늘은 여기서 포스팅을 마치겠습니다. 감사합니다.

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

블록체인 기술

번호 제목 글쓴이 날짜 조회수
66 가상화폐 이오스 지갑 SIMPLEOS (심플오스/심플이오스)에 대해 알아보자 01 icon Work4Block 08-10 2,236
65 가상화폐 ChinaJoy에 참가한 엘라스토스와 댑(BIT.GAME, ViewChain, ioeX, Hashworld) icon Work4Block 08-10 2,200
64 가상화폐 KEEP!T Column 비트코인 뽀개기(9편) icon Work4Block 08-09 2,315
63 가상화폐 KEEP!T 블록체인 뉴스:7/21 - 비트코인의 학술적 유래 (최종) icon Work4Block 08-01 3,483
62 가상화폐 KEEP!T Column 비트코인 뽀개기(7편) icon Work4Block 07-27 2,722
61 가상화폐 KEEP!T 블록체인 뉴스:7/21 - 비트코인의 학술적 유래 (6) icon Work4Block 07-23 2,387
60 가상화폐 아이젝 airdrop 참여하고 RLC 토큰 받아가기~!! 컴퓨터만 켜두면 OK icon Work4Block 07-20 3,119
59 가상화폐 문과생, 블록체인업체에 취직하기 - (3) 저도 블록체인 업계에서 일하고 싶어요! icon Work4Block 06-28 2,987
58 가상화폐 고장난 웹2.0, 패러다임 전환의 시기 icon Work4Block 06-27 3,115
57 가상화폐 Qx, QDex 및 Qrypto라는 3 개의 새로운 프로젝트 icon Work4Block 06-26 2,879
56 가상화폐 [Ethereum] Ethernaut 풀이 - 3.Coin Flip icon Work4Block 06-25 2,492
55 가상화폐 [Ethereum] Ethernaut 풀이 - 2.Fallout icon Work4Block 06-25 3,449
54 가상화폐 [Ethereum] Ethernaut 풀이 - 1.Fallback icon Work4Block 06-25 2,737
53 가상화폐 Overall Analysis of IOTA (아이오타 포괄적 분석) icon Work4Block 06-22 2,538
52 가상화폐 [Ethereum] Ethernaut 풀이 - 0.Hello Ethenaut icon Work4Block 06-21 2,499
51 가상화폐 [Ethereum] Ethernaut 소개 icon Work4Block 06-21 3,258
50 가상화폐 나의 이더리움 분석기 - 중간정리 - 2 icon Work4Block 06-21 3,135
49 가상화폐 이더리움이 go를 사용하는 이유(개인적인 생각) icon Work4Block 06-21 2,335
48 가상화폐 [Ethereum] Smart Contract 개발을 위한 환경 세팅 (Remix, Ganache) icon Work4Block 06-19 7,649
47 가상화폐 나의 이더리움 분석기 - 중간정리 - 1 icon Work4Block 06-19 5,147