관리자가 여러명인 토큰 만들어보기

CY·2022년 2월 9일
0

ERC20으로 토큰을 만드는 법을 배운 후에 조금이나마 커스터마이징한 토큰을 만들어보고자
관리자가 3명인 토큰을 만들어보기로 했다.

개요

일단 기본적인 틀은 ERC20 Interface를 활용해 토큰을 발급하는 컨트랙트이다.
따라서 이 SimpleToken이라는 컨트랙트는 ERC20 Interface에 추가로 Owner의 관리를 돕는 OwnerHelper라는 abstract 컨트랙트를 상속받는다.
토큰을 처음 발행하게 되면 첫 Owner는 addInitialOwner 함수를 통해 2명의 초기 Owner를 추가로 선발하게 된다.
이후 한 관리자가 권한 양도를 요청하는 경우 다른 두 명의 동의를 얻어 관리자의 권한을 양도할 수 있다.

OwnerHelper의 function들

기본 구조

  • _owner : 관리자들의 주소가 담긴 array
  • Vote : 투표의 결과(동의, 비동의, 미투표)를 담는 열거형 자료구조
  • _vote : Vote 타입으로 각 Owner의 투표상태를 저장
  • _candidate : 새 owner 후보자
  • _preOwner : 양도를 희망하는 owner
  • OwnerStatus : 선거 상태(선출, 선거중)을 담는 열거형 자료구조
  • _ownerStatus : OwnerStatus 타입으로 현재 선거 상태를 나타냄

constructor

생성한 주소를 owner에 추가해주며 Owner의 상태를 선출중으로 초기화

addInitialOwner

기존의 Owner가 Owner로 추가 지정할 2개의 주소를 받아 생성. 이후 3명의 후보가 모두 뽑혔으므로 상태를 선출됨으로 변경

voteTransferOwnership

양도를 원하는 관리자가 새 주소를 지정하고 투표를 여는 함수이다. 새 주소는 일단 후보자로 등록되며 _ownerStatus가 VOTING으로 변경되어 다른 2명의 투표결과를 기다리게 된다.

transferVote

투표가 시작되고 다른 두 명이 투표를 할 수 있게 도와주는 함수이다.

투표 후 모든 투표가 끝났는지를 checkVoteEnd함수로 확인하고

끝난경우 countingVote함수로 집계를 하게 된다.

모두가 동의한 경우 관리자가 바뀌게 되며 이외에는 그대로 유지한다.

개발 회고

TIL

ERC20을 활용해 컨트랙트를 개발하며 토큰들이 유통되는 흐름이나 과정등에 대해 좀 더 알 수 있는 기회가 되었다.

Problem

컨트랙트 배포 후 추가적으로 2명의 owner를 추가하는 형식이 아닌 construct에서 바로 3명을 만들어주고 싶었는데 오류가 나서 과정을 나누게 되었다. 아마 interface에서 요구하는 틀을 벗어나서 컴파일이 안되는 것으로 추측된다. 여기에 대해 좀 더 공부해봐야겠다.

Try

실제 토큰이 유통될 때 요구하는 것들을 좀 더 디테일하게 다루면 좋았지 않았을까 싶다. 현재는 투표를 통해 관리자 권한의 위임만 구현되었지만, 새로운 기능의 추가나 특정 이벤트 실행 등 좀 더 다양한 기능들을 관리자들의 투표로 이행되게 만들어 보는 것도 좋은 시도가 될 것 같다.

코드

github - OwnerHelperVote

profile
CY's StudyRoom

0개의 댓글