DreamStory Contract Overview

그냥 코딩부터 하기보단 이렇게 차례차례 구성을 잡고 가니 시간은 오래 걸리지만 깔끔하게 정리되는 기분이 들어 좋네요. 이런 스타일은 이전에 소개드린 온라인 강좌 스타일임을 밝힙니다.

스마트 컨트랙트의 기본 동작 방식에 대해서는 별도로 설명하지 않습니다. 이와 관련된 부분은 아래 글을 참고해 주세요.

여기서 부터는 스마트 컨트랙트 동작 방식을 어느 정도 이해한다는 전제 하에 진행하겠습니다.


스마트 컨트랙트 코딩을 하기전에 어떤 컨트랙트를 만들지 구성을 잡아보겠습니다.


Overview

image.png앞에서 주요 용어에 대해서 간략히 설명했는데, 여기서 그림과 함께 다시 설명합니다.

  • Author는 드리머로서 꿈 일기를 올리는 사람으로,DreamStory 컨트랙트를 생성하여 꿈 일기를 올립니다. 여기서 꿈 일기 하나당 DreamStory 컨트랙트가 생성되는 것에 주의합니다.
  • 이 꿈 일기가 맘에 들어 기부하고 싶은 사람들을 Contributor라고 합니다.
  • Contributor는 기부하는 행동이 해당 꿈 일기에 Voting하는 것과 동일합니다.
  • Contributor는 Author가 Contact에 누적된 금액을 인출하는 것에 대해 승인할 수 있습니다.
  • Author는 인출 승인withdrawal approval이 일정 이상일 경우 금액을 인출할 수 있습니다. (finalize withdrawal)
  • 추가로 그림에는 나타나지 않았지만 Contributor와 다르게 꿈 일기의 사용허가를 구매하는 Downloader가 있습니다.


Story Details 수정사항

개발하면서 강좌를 만들고 있어서 수정사항이 발생하는 점 양해바랍니다. 이전에 보여드린 Story Details 화면 구성이 약간 변경되었습니다.
image.png

  • ApproveWithdrawal 버튼과 FinalizeWithdrawal 버튼이 추가되었습니다.
  • FinalizeWithdrawal 버튼과 같이 연한 녹색으로 되어 있는 것은 Author만 실행할 수 있음을 의미합니다.


상태변수

image.png

  • 스마트 컨트랙트에 사용될 상태변수입니다.
  • 상태변수는 기본적으로 Storage에 저장됩니다.
  • 저장위치는 크게 Storage, Memory가 있는데, 간단히 Storage는 장기적으로 저장하는 변수를 의미하고, Memory는 일시적으로 저장하는 변수를 의미합니다.
  • 따라서, 스마트 컨트랙트의 상태변수는 값을 계속 유지하고 있어야 합니다. 반면 함수 인자와 같은 Memory 변수는 쓰고 나면 사라져도 괜찮습니다.
  • 나중에 코딩할 때 Storage, Memory 변수를 주의해야 합니다.
  • mapping 타입의 변수가 꽤 있습니다. array를 사용하는 게 더 편해 보이지만, 이더리움 특성상 계산에 gas가 소요되므로 이 비용을 최소로 하기 위해 mapping을 사용했습니다. 자세한 것은 코딩할 때 설명하겠습니다.


Download 구조체

image.png

  • Download한 이력을 관리하기 위한 구조체입니다.
  • 간단히 언제 다운로드했는지, 다운로드한 사람, 다운로드 가격을 관리합니다.
  • 참고로 이 구조체가 상태변수에 사용되었습니다.


Modifiers

image.png

  • Solidity에서 보이는 특이한 기능인 modifier입니다.
  • 주로 반복적으로 사용되는 코드를 줄이기 위해 사용됩니다.
  • 여기서는 크게 반복되지는 않지만, 새로운 기능이라 구현에 추가합니다.
  • 단순히 특정 함수를 호출할 수 있는 사용자를 제한하는 데 사용합니다.


Functions

image.png

  • 앞서 설명한 함수의 설명입니다.
  • 잘 보면 웹페이지에 표시되는 기능이 모두 스마트 컨트랙트에 구현되는 것이 아닙니다. 일예로, View Download와 같은 버튼의 기능을 바로 스마트 컨트랙트에서 처리하지 않습니다. 웹페이지에서 해당 버튼 명령을 받아서 필요한 내용을 스마트 컨트랙트(여기서는 getSummary) 함수를 호출하여 처리합니다.
  • 몇몇 함수는 Author나 Contributor만 실행할 수 있습니다. 이 내용이 위 그림의 Restriction에 나타나 있습니다.
  • 또, 아직은 구현 계획이 없지만 구현하고 싶은 함수도 표시했습니다.


다음에는 이와 같은 구성을 보며 스마트 컨트랙트 코딩을 해보겠습니다. 이렇게 구성이 갖춰지고 나면 코딩하는 것은 금방 되겠지요. 과연 그럴까요? Remix에서 코딩하고 간단히 테스트 하는 것을 다음에 진행하겠습니다.



오늘의 실습: 코딩을 바로 하지 말고, 코딩할 내용을 미리 고민해서 이 글과 같은 구성도를 만들어 보세요.



 [한빛미디어 블록체인 도서 보러가기]