티스토리 뷰

BlockChain/Ethereum

Solidity HelloWorld!

Twibap 2018. 6. 19. 19:30

dApp 개발 첫걸음으로 HelloWorld 스마트 컨트랙트를 만들어보았습니다.

코드 작성, 컴파일 및 배포, 그리고 실행 순으로 설명하겠습니다.

이더리움 깃헙 위키 등 Soilidity 예제가 잘 만들어져 있지만 괜히 HelloWorld 한번 찍어보고 싶었습니다.




개발 환경


개발 도구는 Remix를 사용합니다.

Remix는 웹 브라우저 형 IDE로 아무 설치 없이 사용 가능합니다.

MetaMask 지갑을 함께 사용하니 Remix와 연동되어 배포가 쉬웠습니다.

따라서 본 포스팅의 실행 환경은 MetaMask를 사용하기 위해 Chrome 브라우저와 배포 이후 Geth testnet 클라이언트를 사용합니다.

스마트 컨트랙 배포 확인 및 실행을 위해 Geth를 testnet과 미리 동기화 해둡니다.


Geth --testnet console

또는

Geth --testnet -syncmode "light" console





코드 작성


브라우저에서 Remix를 접속해 간단한 HelloWorld를 작성합니다.



빨간색 영역은 파일을 관리하는 영역입니다. 새 파일을 만들거나, github같은 저장소에 업로드 할 수 있습니다.  


주황색 영역은 코드를 작성하는 영역입니다. 처음 접속하면 browser/ballot.sol이란 파일이 만들어져 있는데 무시하고 진행합니다.

ballot.sol 안에 작성되어있는 코드는 이더리움 재단에서 만든 투표 스마트 컨트랙트 예제입니다.

HelloWorld.sol 작성 없이 ballot.sol로 진행해도 문제 없습니다.


노란색 영역은 배포 상황 및 프로그램 실행 결과를 출력하는 콘솔 창입니다.


초록색 영역은 컨트롤 창입니다. 이 곳에서 컴파일 및 배포, 디버깅 등을 진행합니다.




컴파일






먼저 Setting에서 컴파일러 버전을 선택합니다.

이때 컴파일러를 불러오는데 시간이 조금 걸립니다. (네트워크 환경에 따라 또는 제 노트북이 오래된 모델이라 그럴 수 있습니다.)

Current version에 선택한 컴파일러 버전이 제대로 표기되는지 확인하고 Solidity 코드에 선택한 버전을 입력합니다.

버전 선택 기준은 최신 버전 중 Stable 한 것으로 골랐습니다.



Compile 탭에서 [Start to compile]을 클릭해 컴파일을 진행합니다.

입력한 코드가 얼마 없어서 금방 컴파일 됩니다.

[Detalis] 버튼을 누르면 컴파일 결과를 확인할 수 있습니다.

여기에 나타난 정보 중 일부를 실행할 때 사용합니다.




배포


컴파일 한 다음 배포할 차례입니다.

컴파일 결과를 테스트하지 않고 배포 먼저 하는 것이 많이 낯설게 느껴집니다.

스마트 컨트랙은 이더리움 가상머신인 EVM에서 작동하기 때문에 배포를 먼저 해야 합니다.

로컬에 설치된 EVM을 사용하는 방법도 있겠지만, Remix와 테스트넷을 사용하기 때문에 더 쉬운 방법으로 진행하겠습니다.



먼저 MetaMask을 Ropsten Test Network로 설정합니다.

Ropsten testnet은 Geth를 --testnet 옵션과 함께 실행했을 때 연결되는 네트워크입니다.





Remix의 Run 탭에서 Environment 항목에서 Ropsten testnet과 연결된 것을 확인할 수 있습니다.

Account 항목은 MetaMask에서 자동으로 입력이 됩니다.

모든 값을 기본으로 놓고 Deploy 버튼을 클릭합니다.



MetaMask에서 배포를 위한 창이 뜨고 비용이 자동으로 입력되어있습니다.

이 비용은 배포하려는 스마트 컨트랙트가 블록에 포함되어 배포되는 속도에 영향을 미칩니다.

여기서 입력한 비용이 채굴자에게 보상으로 주어지기 때문입니다.

테스트 넷에서는 기본 값으로 진행해도 문제 없이 배포할 수 있습니다.

이더리움 메인 넷에 배포할 때는 신중히 입력해야 하겠죠.





MetaMask에서 [Submit]을 클릭하고 채굴되는 동안 잠시 기다립니다.

그리고 채굴이 되면 Remix 콘솔창과 Run 탭의 맨 아래에 결과가 나타납니다.

Run 탭 맨 아래에 나타난 결과 창에서 스마트 컨트랙의 주소를 확인할 수 있습니다.

이 주소는 블록체인에 저장되어있는 스마트 컨트랙트 호출하기 위해 알아야 하는 정보입니다.


배포된 스마트 컨트랙트는 Remix에서 간단히 실행해 볼 수 있습니다.

visit 버튼을 클릭해 어떻게 되는지 살펴보세요




스마트 컨트랙트 Geth client에서 실행하기


배포한 스마트 컨트랙트가 제대로 블록체인에 포함되었는지 확인하는 방법은 여러가지가 있습니다.

HelloWorld가 출력 되는 것을 보기 위해 Geth 클라이언트에서 실행해 보겠습니다.


앞서 Geth 클라이언트에서 스마트 컨트랙트를 실행하기 위해 알아야할 것 2가지를 언급했습니다.

바로 스마트 컨트랙트 주소와 컴파일 Detail 정보입니다.

컴파일 Detail 정보 중 ABI 값이 필요합니다.

ABI는 Application Binary Interface로 스마트 컨트랙트를 실행하는데 필요한 정보를 정의합니다.

Detail 화면에서 ABI를 복사합니다.

복사 버튼을 클릭하면 쉽게 복사할 수 있습니다. 하지만 클립보드에 불 필요한 값과 함께 저장되므로 빈 주소창 등 임의의 텍스트 창에서 붙여 넣기 후 다시 복사해 텍스트 값만 가져옵니다.


ABI = [ { "constant": true, "inputs": [], "name": "visit", "outputs": [ { "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" } ]

ADDR = "0x4a0c0f233e9709e5283faa18392ae4f25f672468"

contract = eth.contract(ABI).at(ADDR)


Geth를 콘솔 모드에서 위 명령을 입력합니다.



Hello World가 정상적으로 출력 되면 성공입니다!




마무리


지금까지 이더리움 Hello World 스마트 컨트랙트를 배포하고 실행해보았습니다.

이번 포스팅으로 쉽게 블록체인 세상에 다가갈 수 있기를 기대합니다.

구체적인 Solidity 언어 사용법은 CryptoZombie에서 쉽고 재미있게 배울 수 있습니다.
















댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함