ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 나만보는 Blockchain 개념 (7) 크립토 좀비로 알아보는 솔리디티 -1편-
    BlockChain/Technology 2021. 8. 8. 17:34

    오늘의 주제

    좀비!!!

    ...만들기를 통한 솔리디티 개념 정리 1편

    - 컨트랙트, 상태변수&정수, 구조체 -

     


    1. 크립토좀비 

    룸네트워크가 개발한 교육 플랫폼으로 학습자가 대화형 방식으로 크립토 수집품 게임을 직접 만들어 봄으로써 솔리디티로 스마트 컨트렉트를 작성하는 방법을 배울 수 있는 유용한 학습 툴입니다.

     

     

    커리큘럼은 Beginner 6코스, Advanced 5코스, Beyond 4코스로 되어 있습니다. 이번 포스팅에서는 Beginner 1코스를 하겠습니다. 

     

     목표 

    솔리디티에서 생성된 Lv1. 배부른좀비

    모든 생명체는 고유한 DNA를 가지고 있습니다. 우리가 만들게 될 크립토 좀비도 고유한 DNA를 가지고 있고, 이 DNA에 따라 좀비의 외모도 독특하게 바뀝니다. 또한 블록체인에 만들어지기 때문에 한번 태어난 나의 좀비는 영원히 존재하게 됩니다. 사이트에 아주 친절한 설명과 함께  솔리디티 코드를 한줄 한줄 따라가며 작성할 수 있게 되어있으니 직접해보시길 추천합니다.  


    2. 챕터별 솔리디티 개념 

    코드작성은 사이트에 잘 나와 있어서 좀비공장을 만들며 나오는 개념위주로 정리하겠습니다.

     

    챕터 2: 컨트랙트

     

    솔리디티를 감싸는 것은 컨트랙트이다. 컨트랙트는 이더리움 애플리케이션의 가장 기본적인 구성 요소로 이 안에 모든 변수와 함수가 담긴다. 

     

    contract HelloWorld {
    
    }

    컨트랙트 안에 내용을 적어 배포하면 다른 유저들은 어디에서나 이 컨트랙트를 불러와 사용할 수 있다. 그것이 스마트 컨트랙트의 엄청난 장점이다. 

     

    컨트랙트의 작동방식을 보면 

    1. Contract 안에 내용을 구현합니다. Solidity 코드를 컴파일하여 ByteCode를 생성합니다.
    2. Transaction에 Bytecode를 담고, 마이너가 해당 Transaction이 담긴 블록을 채굴하면 네트워크에 컨트랙트가 배포됩니다. 이때 ABI를 취득하고, ABI로부터 컨트랙트 객체가 생성되며 이 컨트랙트 객체를 블록 내용에 포함시킵니다.
    3. 유저는 ABI를 통해 배포된 스마트 컨트랙트 코드에 정의된 함수를 호출하는 Bytecode를 생성하고, Transaction에 담아 네트워크에 전달합니다.
    4. 마이너는 유저로부터 받은 Bytecod를 배포된 스마트 컨트랙트 코드에 따라 EVM(Ethereum Virtual Machine)위에서 실행합니다. 이때 Gas Fee가 계산되면서 블록에 추가되고, 실행 결과가 유효한 경우 실행 결과가 State에 반영됩니다.
    ABI란? 
    Application Binary Interface의 약자로 컨트랙트의 함수와 매개변수들을 JSON 형식으로 나타낸 리스트이다. 컨트랙트의 인터페이스를 담당하여 컨트랙트의 객체를 만들 수 있고, 컨트랙트의 함수를 호출할 수 있게 해주는 표준방법이다.

     

    챕터 3: 상태변수 & 정수

     

    상태변수는 컨트랙트 저장소에 영구적으로 저장이 된다. 즉, 이더리움 블록체인에 기록이 되어 데이터베이스에 데이터를 쓰는 것과 동일하다. 

    contract Example {
      // 이 변수는 블록체인에 영구적으로 저장된다
      uint myUnsignedInteger = 100;
    }​

     

    예시에서는 myUsignedInteger라는 uint를 생성하여 100이라는 값이 배정된다.

    uint란?
    uint 자료형은 부호 없는 정수로 값이 양수이다. uint는 256비트 부호 없는 정수의 다른 표현이며 uint256이다. uint8, uint15, uint32 등과 같이 더 적은 비트로 선언할 수도 있다. 물론 부호있는 정수를 위한 int 자료형도 있지만 컨트랙트에서는 일반적으로 uint를 사용한다.  

     

    챕터 5: 구조체

    더 복잡한 자료형을 다루기 위해 솔리디티는 구조체를 제공한다. 구조체는 JavaScript의 객체(Object)와 비슷한 구조이다. 

    struct Person {
      uint age;   // 데이터 타입 필드명;
      string name;
    }

    예시에서 Person이라는 구조체를 선언하고 Person은 uint타입의 age 필드와 string타입의 name 필드를 담고 있다. 구조체를 통해서 다양한 특성을 가진 자료형 생성이 가능하다. 

     

    이어지는 시리즈에서 솔리디티 개념 정리는 이어집니다 !

    댓글

Designed by Tistory.