ERC20으로 토큰을 만드는 법을 배운 후에 조금이나마 커스터마이징한 토큰을 만들어보고자
관리자가 3명인 토큰을 만들어보기로 했다.
일단 기본적인 틀은 ERC20 Interface를 활용해 토큰을 발급하는 컨트랙트이다.
따라서 이 SimpleToken이라는 컨트랙트는 ERC20 Interface에 추가로 Owner의 관리를 돕는 OwnerHelper라는 abstract 컨트랙트를 상속받는다.
토큰을 처음 발행하게 되면 첫 Owner는 addInitialOwner 함수를 통해 2명의 초기 Owner를 추가로 선발하게 된다.
이후 한 관리자가 권한 양도를 요청하는 경우 다른 두 명의 동의를 얻어 관리자의 권한을 양도할 수 있다.
생성한 주소를 owner에 추가해주며 Owner의 상태를 선출중으로 초기화
기존의 Owner가 Owner로 추가 지정할 2개의 주소를 받아 생성. 이후 3명의 후보가 모두 뽑혔으므로 상태를 선출됨으로 변경
양도를 원하는 관리자가 새 주소를 지정하고 투표를 여는 함수이다. 새 주소는 일단 후보자로 등록되며 _ownerStatus가 VOTING으로 변경되어 다른 2명의 투표결과를 기다리게 된다.
투표가 시작되고 다른 두 명이 투표를 할 수 있게 도와주는 함수이다.
투표 후 모든 투표가 끝났는지를 checkVoteEnd함수로 확인하고
끝난경우 countingVote함수로 집계를 하게 된다.
모두가 동의한 경우 관리자가 바뀌게 되며 이외에는 그대로 유지한다.
ERC20을 활용해 컨트랙트를 개발하며 토큰들이 유통되는 흐름이나 과정등에 대해 좀 더 알 수 있는 기회가 되었다.
컨트랙트 배포 후 추가적으로 2명의 owner를 추가하는 형식이 아닌 construct에서 바로 3명을 만들어주고 싶었는데 오류가 나서 과정을 나누게 되었다. 아마 interface에서 요구하는 틀을 벗어나서 컴파일이 안되는 것으로 추측된다. 여기에 대해 좀 더 공부해봐야겠다.
실제 토큰이 유통될 때 요구하는 것들을 좀 더 디테일하게 다루면 좋았지 않았을까 싶다. 현재는 투표를 통해 관리자 권한의 위임만 구현되었지만, 새로운 기능의 추가나 특정 이벤트 실행 등 좀 더 다양한 기능들을 관리자들의 투표로 이행되게 만들어 보는 것도 좋은 시도가 될 것 같다.