이타인클럽

코스 전체목록

닫기

DreamStory Smart Contract Overview

개발이 매우 더디게 진행되고 있네요. 그래도 꾸준히 목표한대로 가보려고 합니다.

이전글 - [DreamChain DApp] #2 Front-End 화면구성 및 Routing

본 내용은 Ethereum and Solidity: The Complete Developer's Guide을 참고해서 작성되었습니다.

dreamchain_ppt.png


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

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

1. Overview

image.png

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

2. Story Details 수정사항

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

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

3. 상태변수들

image.png

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

4. Download 구조체

image.png

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

5. Modifiers

image.png

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

6. Functions

image.png

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

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

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

댓글

댓글 본문
버전 관리
이타인
현재 버전
선택 버전
graphittie 자세히 보기