크립토좀비 솔리디티 #1 (contract 편)

    솔리디티(Solidity) 강의 포스팅을 하다가 크립토좀비(Cryptozombies)가 솔리디티를 이해하는데 상당히 유용하다는 것을 깨닫고, 정통(?) 솔리디티의 강의와 크립토좀비의 챕터 및 레슨도 같이 해나가는 것으로 강의하는 것으로 결정하였습니다. 둘을 병행하려는 이유는 크립토좀비가 비록 설명에 매우 강력하지만 솔리디티 언어에 대한 설명이 강력한 것이지 Dapp 개발에 대한 설명이 강력한건 아니기 때문입니다.


    크립토좀비는 개발에 대한 약간의 지식만 있어도 충분히 습득이 가능하여, 사실상 개발자들은 이 포스팅을 볼 필요도 접근도 안했을거라 가정하고 개발에 대한 지식이 없는 사람을 대상으로 크립토좀비를 이해할 수 있게 작성한 포스팅입니다. 


    크립토좀비에 관련된 설명은 이전 포스팅에 적었지만, 혹시나 모르는 분들은 위해서 적자면 이더리움 기반의 코인인 룸 네트워크(Loom Network)에서 이더리움 개발자 양성을 위해 만든 사이트로 무료 입니다.





    크립토좀비 사이트(https://cryptozombies.io/ko/course)에 들어가면, 아래와 같은 커리큘럼이 뜨며 위에서 아래 순서로 난이도가 증가하게 됩니다. 이 장은 솔리디티에 대한 아주 간단한 설명과 contract에 대한 설명으로 된 아주 심플한 포스팅임이며 매우 심플하게 챕터별로 포스팅을 모두 쓸 것입니다.


    우선 본격 강의에 들어가기 전의 스텝바이스텝(Step By Step)입니다.


    좀비 공장 만들기 체크


    Start 클릭


    챕터1은 해당 레슨의 개요입니다.


    챕터1의 내용은 좀비를 만들기 위해서 숫자값을 이용했다는 내용입니다. 무작위 숫자를 이용하고, 그에 따라 좀비의 DNA가 나오는데 우측의 유전자가 총 6가지 있고, 설명을 위한 숫자는 다음과 같습니다. "83562810 49284737" 숫자들은 유전자와 대입되는데 앞의 2자리인 83은 머리 유전자이고 56은 눈 유전자와 연결됩니다. 


    첫번째 레슨은 숫자값을 이용해서 좀비를 생성하자는 것입니다. 우리가 무작위 숫자를 만들어내면 무작위 좀비를 생성해 낼 수 있는 것인데 이것은 마치 해시(Hash)랑 유사합니다. 해시는 난수를 만들어내서 계좌번호 및 검증 등을 수행해 냅니다. 




    컨트랙트(Contract)


    첫번째 강의는 컨트랙트와 버전을 선정하는 것으로 시작됩니다. 모든 솔리디티의 코드는 version pragma라는 것을 선정해야 하는데 솔리디티는 버전별로 문법이 모두 다릅니다. 이해가 안되면 이렇게 생각해보도록 하죠. 우리가 지금 쓰는 한글이 한글 버전 2.0 이라고 해보겠습니다.


    세종대왕이 한글을 처음 만든던 날 버전 0.1을 배포 하였다고 가정을 해보죠. 그 당시에 썼던 한글과 지금 쓰는 한글은 완전 다를 것입니다. 그러면 우리가 지금 알고 있는 한글로 당시 한글로 작성한 글들을 이해할 수 있을까요? 당연히 이해하기 힘들 겁니다.


    바로 버전 명시는 이것과 동일합니다. 솔리디티는 지금 이 순간에도 계속 발전하고 있는 프로그램 언어이지만 소스코드는 한번 만들어지면 별도의 수정이 없이는 같은 상태일 것입니다. 바로 이 솔리디티 버전을 명시하는 것은 어느 시점의 문법을 사용하겠냐의 의미이고, 새로운 컨트랙트를 만들 것이면 당연히 최신의 솔리디티 버전을 명시하는 것이 좋습니다.


    솔리디티 웹사이트, https://solidity.readthedocs.io


    최신의 솔리디티는 그동안의 문제점들을 계속 수정해나간 버전이기 때문에, 최신의 문법과 최신의 솔리디티로 코드를 작성해 나가는 것은 기본중에 기본이겠습니다. 지금 시점의 크립토 좀비는 0.4.19를 사용하라고 적혀 있는데 사실 솔리디티는 지금 0.5.0버전(2018. 12.03 기준)까지 나왔습니다. 


    버전을 이해하셨으면 이제 컨트랙트를 이해하셔야 됩니다. 이더리움을 가장 크게 성장시킨 2가지는 댑(Dapp)과 컨트랙트(Contract) 입니다. 이더리움이 등장하기 전만하더라도 암호화폐들이 스마트하지 못했었습니다. 프로그래밍이 가능하면서 단순하게 화폐 그 이상을 원하지 않았던 것이죠.


    이더리움이 등장하기 전까지는 모두 비트코인과 같이 결제에만 치중한 해시값일 뿐이었습니다. 비탈릭은 프로그래밍을 적극 활용하기 위해 컨트랙트의 개념을 넣게됩니다. 사실상 블록체인이 정말 각광을 받으면서 새로운 시대를 열 수 있다라고 여겨진 것은 스마트 컨트랙트가 가능해졌기 때문입니다.



    컨트랙트는 쉽게 생각해서, 자판기로 생각하시면 됩니다. 우리가 1000원을 넣고 800원짜리 콜라를 뽑았다고 가정하겠습니다. 그리고 자판기에는 가장 싼 음료수가 500원이라고 해보죠. 그럼 어떤 일이 벌어질까요?


    정답은 콜라가 나오고 200원의 거스름돈이 나오게 됩니다. 이게 가장 쉽게 이해할 수 있는 컨트랙트입니다. 만약 1000원을 넣고, 500원짜리 음료수를 먹었다면 거스름돈이 나오지 않게 됩니다. 500원짜리 음료수를 하나 더 시킬 수 있으니까요. 


    암호화폐가 스마트해진 이유는 바로 이러한 스마트 컨트랙트가 가능해져서이고, 이 개념을 성공적으로 적용시킨것이 이더리움(Ethereum) 입니다. 다만 이 개념을 비탈릭 부테린이 만든것은 아닙니다. 현재 암호화폐에 상당한 영향력을 가지고 있는 암호학자인 닉 자보(Nick Szabo)가 1994년 처음 제안을 했었습니다.


    우리는 이제 솔리디티로 컨트랙트를 구현해 볼 것입니다. 쉽게 솔리디티는 컨트랙트를 만드는 언어라고 이해하면 되고 컨트랙트 안에는 자판기 같은 것을 구현하기 위한 펑션들을 만들어야 될 것입니다. 



    1-2 문제 풀이


    크립토 좀비의 왼쪽 설명란에 pragma는 "pragma solidity ^0.4.19;" 라고  선언하라 지시를 내리기 때문에 그냥 시키는 대로 씁니다. 다만 다음에 혹시나 컨트랙트를 만들게 되면 0.4.19를 쓰지 말고 최신 버전의 솔리디티 버전을 지정하는 것이 좋습니다.


    contract를 생성하기 위해서는 contract로 시작하는 단어를 적고, 그리고 컨트랙트의 명칭을 적고 { } 괄호를 입력합니다. 레슨은 ZombieFactory라는 이름으로 빈 컨트랙트를 만들라고 했으니 contract ZombieFactory { }를 지정합니다. 괄호 안에는 컨트랙트를 수행하기 위한 변수, 펑션 등을 넣게 됩니다.


    자판기로 예를 들면 contract VendingMachine 이라는 컨트랙트를 만들고, 안에는 "넣은 돈", "거스름 돈", "버튼 선택" 이런 변수나 펑션 등이 필요할 겁니다.


    정답

    pragma solidity ^0.4.19;


    contract ZombieFactory {


    }



    댓글

    Designed by JB FACTORY