본문 바로가기

BlockChain/Ethereum

Ethereum(이더리움) 투표 dApp 개발 1

 

 windows에서 이더리움 개발환경 셋팅 다음으로,

본격적으로 프로젝트를 생성해 개발을 시작해보자ㅏㅏ

 

본 글은 글 맨 아래의 출처를 통해 작성하였으며,
오타 및 실제 코드와의 차이가 있을 수 있습니다ㅏㅏㅏ

 

먼저,

1. 바탕화면에 프로젝트 폴더 하나를 만들어 준다

해당 폴더에 들어가서 우클릭 후,

Git Bash를 실행해준다

 

dApp 구조 생성에는 Truffle Box를 사용할 것이다

Truffle Box 란?

 

Git Bash 창에서

truffle unbox pet-shop

를 치고 엔터

해주면,

우리의 프로젝트 폴더 내에 dApp 구조가 생성된다

 

만약,

해당 구조를 react와 사용하고 싶다면,

위 코드 대신에

truffle unbox react

를 사용하면 된다ㅏㅏ

 

프로젝트 구조를 살펴보면,

  • contracts 디렉토리

모든 스마트 계약 소스들이 들어가는 디렉토리

 

우리는 우리 프로젝트의 migrations를 담당하는 Migration이라는 계약코드를 가지게 된다

  • migrantions 디렉토리
    • migration 파일들이 위치하는 디렉토리
    • 웹 개발 프레임워크에서 데이터베이스의 상태를 변경할때 migration이 필요한 것과 유사
    • 스마트계약을 블록체인에 배포할 때, 이는 블록체인 상태의 업데이트를 의미하기 때문에 migration이 필요

  • node_modules 디렉토리
    • 해당 프로젝트에 필요한 모든 Node dependencies가 존재하는 디렉토리
  • src 디렉토리
    • Client-side 관련 소스들이 위치하는 디렉토리

  • test 디렉토리
    • 스마트 계약의 Test Code들이 위치하는 디렉토리

  • truffle.js 파일
    • Truffle 프로젝트의 주요 설정 내용이 담겨있는 파일

 

프로젝트 구성을 마쳤으니,

이제

스마트 계약을 하나 만들어보자ㅏㅏ

스마트 계약은 dApp의 모든 비즈니스 로직이다

 

만들어 볼 계약은 투표 시스템으로,

1. 선거 후보자들 리스트 보여주기

2. 모든 투표와 투표자들을 추적할 수 있는 기능

3. 선거와 관련한 룰 규정 ( 계정마다 한번의 투표만 허용 )

 

2. 스마트 계약을 만들자

프로젝트의 root 경로( 프로젝트 폴더경로 )에서 contract 폴더에 스마트 계약( 파일명 = Election.sol )을 생성하자!

touch contracts/Election.sol

 

생성된 파일을 열고, 아래와 같이 스마트 계약을 작성해준다

// 스마트 계약은 solidity version을 선언하는 pragma solidity 구문으로 시작
pragma solidity >=0.4.22 <0.8.0;

// contract 계약 이름 정의
contract Election {

	// Read/write candidate
	// candidate 이름을 저장할 string 변수를 선언
	// public으로 설정하면, solidity가 '공짜'로 해당 변수 내용을 조회할 수 있는 getter 함수를 제공
	// string public candidate;
	string public candidate;

	// Constructor
	// contructor 함수는 스마트 계약이 블록체인에 배포될 때 ** 최초에 한번 실행 **
	// 우리가 미리 세팅하고자 하는 변수는 migration을 통해 블록체인에 저장
	constructor() public {
	candidate = "Candidate 1";
    }
}

 

위와 같이 스마트 계약의 뼈대를 만들었다면,

이제 해당 코드가 블록체인에 배포 될 수 있는지 확인해봐야 한다

아래의 코드를 root 경로에서 cmd, git bash 창을 열어 실행해준다

touch migrations/2_deploy_contracts.js

그러면,

migrations 폴더에 2_deploy_contracts.js 파일이 생성된다

 

** migrations 디렉토리에 생성하는 파일들은 모두 숫자로 넘버링해야만

Truffle이 순서를 인식하고 실행해주니 파일 명에 숫자를 꼭 붙여주자!!!! **

 

2_deploy_contracts.js 파일을 열고,

아래와 같이 우리가 작성한 계약을 배포할 migration을 생성해준다

// Election 변수에 우리가 작성한 스마트 계약을 할당
var Election = artifacts.require("./Election.sol");

// 해당 변수를  deployer( 배포자 )에 추가하여, 우리가 migration을 시행할 때 계약이 배포되게끔 한다
module.exports = function(deployer) {
  deployer.deploy(Election);
};

 

deployer 란?

( 배포자 ) 객체는 배포 작업을 준비하기 위한 기본 인터페이스

 

이제 migration을 실행할 차례다

Ganashe가 실행되어진 상태에서,

우리의 프로젝트 경로에서 git bash 또는 cmd를 열고,

truffle migrate

를 입력 후 엔터를 쳐준다

 

 그럼, cmd 창이 쭉쭉 내려가면서, migration이 실행될 것이다ㅏㅏ

그렇게 되면,

우리가 작성한 스마트 계약이 로컬 이더리움 블록체인 환경에 migration되었다!

 

이걸 테스트해보자ㅏㅏ

git bash 또는 cmd에서

truffle console

를 쳐주고 엔터해준다

 

그리고, 우리가 배포한 스마트계약의 인스턴스 ( instance )를 가져와서

계약에 설정한 후보자의 이름을 읽어 올 수 있는지 확인해본다

Election.deployed().then(function(instance) { app = instance })

 

위 코드에서 Election은 우리가 작성한 migration 파일의 변수명이고,

deployed() 함수로 배포된 계약의 instance를 가져오고 이를 app이라는 변수에 할당해준다

이를 실행해서 다음과 같은 결과가 나온다면,

app.candidate()
'Candidate 1'

우리의 계약이 성공적으로 배포, 검색되고 있다는 것이다!

 

 

출처 :

https://choi3897.github.io/ethereum/ethereum-dapp-4/#

 

Ethereum(이더리움) 투표 Dapp 개발 Tutorial - #4.Smoke Test

본 포스팅은 dappuniversity : the-ultimate-ethereum-dapp-tutorial을 토대로 작성되었습니다.

choi3897.github.io

 

Truffle 공식 문서 running-migrations :

https://www.trufflesuite.com/docs/truffle/getting-started/running-migrations

 

Truffle | Running Migrations | Documentation | Truffle Suite

The Truffle suite of tools make dapp development easier and more consistent.

www.trufflesuite.com