본문 바로가기
블록체인

STO 튜토리얼 프로젝트

by 진득한진드기 2023. 5. 2.

프로젝트 STO 튜토리얼 프로젝트

 

프로젝트 명 : STO 튜토리얼

팀원 : 윤수빈(팀장), 김현태, 박도형, 백준석

 

youtube Link = https://www.youtube.com/watch?v=0fmODCTVs0g 

 

github : https://github.com/pdhyeong/Project-ENTASIS

 

GitHub - pdhyeong/Project-ENTASIS

Contribute to pdhyeong/Project-ENTASIS development by creating an account on GitHub.

github.com

 

전부터 블로그 글로 작성하고 싶었지만 너무 바빠서 이제야 겨우 적는 프로젝트 ㅎ.....

 

관심 가지던 STO에 대해 지식을 알아가면서 프로젝트를 좀 더 디테일 하게 챙길 수 있었던 좋은 시간이었다.

 

나는 전체적인 node.js express를 사용한 백엔드와 배포를 맡게 되었고,

 

docker 이미지 파일로 전환 해서 ec2 서버에서 실행시키는 부분에서 연결이 잘안되는 오류도 만나서  고생도 좀 하게되어서 뭔가 지금은 aws cli 도 이제는 겁없이 다룰수 있게 되었다.

 

나도 많이 부족한데 같은 백엔드 파트분이 처음해보는 백엔드 프로젝트라 이것 저것 알려주면서 하다보니 오히려 내가 더 많이 배워가는 기분 이었고 갑작스러운 팀원의 이탈로 시작부터 잡음이 많아 위태위태 했다 ㅋㅋㅋ ㅠ 마지막에 socket i/o로의 리펙토링을 하지못해서 아쉬웠지만 ㅠ 그래도 애정이 가는 프로젝트였다.

 

API 문서

 

https://github.com/pdhyeong/MEMO/blob/main/ENTASIS/API%EB%AC%B8%EC%84%9C.md

 

GitHub - pdhyeong/MEMO: MEMO

MEMO. Contribute to pdhyeong/MEMO development by creating an account on GitHub.

github.com

 

스마트 컨트랙트 및 토큰 이코노미 설계

 

https://github.com/pdhyeong/MEMO/blob/main/ENTASIS/%EC%8A%A4%EB%A7%88%ED%8A%B8%20%EC%BB%A8%ED%8A%B8%EB%9E%99%ED%8A%B8%20%EC%84%A4%EA%B3%84.md

 

GitHub - pdhyeong/MEMO: MEMO

MEMO. Contribute to pdhyeong/MEMO development by creating an account on GitHub.

github.com

 


프로젝트 소개

 

[ STO 거래소 튜토리얼 “ENTASIS” ]

 

“당신은 STO에 대해 알고 계십니까?”

이 질문을 받는 대부분의 사람들은 잘 모른다고 답할 것입니다.

 

주식, 채권, 코인 등에 투자를 한 경험은 많지만, 대다수의 사람들이 STO에 대해서는 모르는 만큼, 투자자의 입장에서 STO가 무엇이고, 어떤 기능이 있으며, 어떻게 투자할 수 있는지를 이 프로젝트를 통해 이해하도록 도움으로써 증권형 토큰에 대한 투자를 확대시키는 것이 이 프로젝트의 목표입니다.

 

글로벌 자산운용사 블랙록의 대표 래리핑크는 2022. 12. 1. 인터뷰에서 STO를 통해 현재 증권 거래 비용에 포함된 브로커들의 수수료를 매매 당사자들에게 나누어주며 수수료가 낮아질 것이고 투표 또한 ST 소유자들이 할 수 있게 될 것이라고 말했습니다.

 

이 블랙록 자산운용사 대표의 STO에 대한 인식은 프로젝트 주제 선정에 결정에 도움을 주었습니다.

 

우리가 흔히 알고 있는 토큰은 ICO를 기반한 ‘유틸리티 토큰’ 입니다.

 

그렇다면 STO란 무엇일까요?

 

 

STO란

 

 

우선 STO의 기반이 되는 “증권형 토큰(Secturity Token)”이 무엇인지에 대해 이해할 필요가 있습니다.

 

증권형 토큰(일명 ST)은 기업이 주식, 채권 대신 암호화폐 형태로 발행하는 유가 증권입니다.

이 증권형 토큰은 블록체인 플랫폼이 제공하는 서비스를 활용할 권리 대신 주식과 마찬가지로 기업의 법적 소유권을 가졌음을 의미합니다.

 

때문에 증권형 토큰을 보유하고 있으면 기업 또는 기업의 블록체인 플랫폼이 낸 수익이나 자산의 일부를 배당받을 수 있습니다.

 

증권형 토큰은 그 용도가 주식, 채권 등 유가증권과 동일하기 때문에 법과 정책의 개입과 규제를 받아야만 합니다.

 

상법에 정해진 절차에 따라 주식을 발행하듯 관련 법에 따라 증권형 토큰을 발행해야 한다는 것입니다.

 

이 증권형 토큰을 IPO와 같이 상장하여 거래가 이루어지도록 하는 것이 STO 입니다.

 

 

 

 

[ About Service ]

우리 Entasis는 실제 STO 거래소의 기능을 일부 축소하여 상대적으로 기업보다 STO에 대해 접근을 어려워 할 개인 투자자들에게 실제 ST에 투자를 해봄으로써 증권형 토큰에 대해서 더 쉽게 이해하고 접근할 수 있도록 도와주는 “STO 거래소 튜토리얼” 입니다.

 

기본 환경 조성

  • 토큰 가격 형성 및 변동성그에 따라 난수를 통해 가격을 형성하고 주기적으로 가격이 변동할 수 있도록 구현하였습니다.
  • 단기 변동성과 중장기 변동성, 기업의 당기순이익 발표의 값이 난수로 설정되어 각각 3 개의 ST시장을 형성했습니다. 또한 당기순이익에 배당률을 적용하여 기업의 이익을 지분에 따라 배당합니다. 토큰 소유자는 지분율에 따라 투표를 할 수 있습니다.
  • 실제 거래소에서 Market Maker & Market Taker 와 토큰 매매를 통해 가격이 형성이 되지만, 이 프로젝트를 진행하는데 있어서 튜토리얼이라는 점과 대규모의 트래픽이 기대되지 않는다는 점으로 인해 실제 거래소에서 가격 형성이 되는 방식으로 구현하는 것은 제한된다고 판단하였습니다.
  • 블록체인
    • 이더리움 : EC2 인스턴스에서 백그라운드로 가나슈 네트워크를 실행시켰으며, 트러플을 이용하여 컨트랙트를 배포하였습니다.
    • 근본적으로 토큰 거래 기능을 위해 ERC20을 사용하였으며, 증권형 토큰의 기능 일부를 추가하기 위해 ERC1400의 운영자 및 제어자 변수와 거래제한 함수를 발췌하였습니다.
    • 투자자 입장에서 다양한 토큰에 대해서 분석하고 거래를 할 필요가 있다고 판단하여 3개의 기업으로 다양화하여 3개의 컨트랙트를 배포하였으며, 토큰 거래가 이루어질 때마다 해당 토큰 보유자 배열에 저장하여 배당금을 분배할 때 토큰 보유 여부를 확인할 수 있도록 하였습니다.
    • 스테이킹시 토큰 매매 제한을 강제하기 위해서 스테이킹의 모든 기능은 컨트랙트 내에서 구현하였으며, 만료일을 계산하는 데에는 block.timestamp 를 이용하여 만료 여부를 확인할 수 있도록 하였습니다.

 

용량이 큰 사진은 안들어가는 관계로 대략적인 흐름을 설명하도록 하겠습니다.


대략적인 기능 흐름

 

메타 마스크

  • 회원가입을 따로 진행할 필요가 없으며, 메타마스크로 지갑등록을 하면 자동으로 로그인이 됩니다.
  • 메타마스크가 설치되어있지 않은 경우 메타마스크 설치 링크로 유도합니다.
  • 처음 로그인을 하는 메타마스크 지갑인 경우 DB에 등록을 합니다.

 

로그인후 

 

이후에는 로그인을 하면 사용방법을 하나씩 알려주는 튜토리얼 가이드라인이 등장합니다.

 

튜토리얼


 

FAUCET : 초기 자본금 50ETH 부여

초기에는 STO토큰 지원을 위한 50ETH을 부여한다.

 

FAUCET

  • 튜토리얼을 완료하면 자동으로 faucet 기능을 통해 50ETH가 부여됩니다.
  • faucet은 1회만 받을 수 있습니다.

토큰 구매 및 판매

자본금 지원

 

자본금을 가지고 이후에는 위처럼 원하는 가격에 거래를 하고 거래는 메타마스크를 통해 오고 가게 된다.

 

 

 

수수료

 

수수료는 0.04%로 자동으로 계산된다.

 

 


 

배당금 지급

 

 

토큰 별로 totalSupply 대비 투자자가 보유하고 있는 토큰양에 따라 배당금이 지불됩니다.

 

구매 한 토큰 확인

 

 

구매한 토큰에 대한 배당금

웹사이트 상단 로고 아래에 있는 배당금 지급 시간이 모두 지나면 자동으로 배당금이 지급되며, 그 내역이 History에 나타납니다.

 

 


거래 제한

 

 

  • 극단적인 가격 변동률이 발생할 경우 모든 토큰에 거래를 제한시켜 버리는 기능입니다.
  • 1분간 거래가 불가능해지며 이에 따라 토큰 가격도 1분간 변동하지 않습니다.
  • 우리 프로젝트에서는 극단적인 가격 변동이 일어날 일이 없는 점으로 인해 거래 제한 기능을 보여주기 위하여 Circuit Breaker 버튼을 누를 경우 거래 제한이 발동하도록 구현하였습니다.

 

거래 제한 기능

 

거래 제한 해제

 


스테이킹(Stacking)

 

스테이킹

 

  • 스테이킹은 본인이 보유하고 있는 디지털자산을 블록체인 네트워크에 맡기는 방식으로 현금을 은행에 맡기는 예금과 구조가 비슷합니다. 또 보유한 디지털 자산을 블록체인 검증에 활용하도록 맡기는 것을 뜻합니다.
  • 스테이킹을 할 경우 일정기간동안 토큰을 거래소에 맡기고 기간이 만료되면 상대적으로 높은 이율에 따른 보상과 함께 토큰을 돌려받게 됩니다.
  • 단, 스테이킹 기간동안에는 해당 토큰을 사용할 수 없기 때문에, 토큰 가격이 변동으로 인해 토큰을 돌려 받고 싶어도 해당 기간동안에는 돌려 받을 수 없습니다.

 

[스테이킹 요청시]

스테이킹 요청시

 

  • 사용자는 Staking 버튼을 눌러 메타마스크를 통해 서명한 데이터를 원하는 ST 컨트랙트에 보내 스테이킹을 진행합니다.
  • 이 때, 이미 스테이킹이 되어있거나 기입한 Amount(수량)보다 토큰 보유량이 적을 시 에러가 반환됩니다.
  • 토큰이 문제없이 스테이킹이 된다면 우측 Amount List와 Reward List가 갱신되고 하단 Reward Time에 보상 인출까지 남은 기간이 표시됩니다.

 

[보상 인출시]

보상 인출

 

  • Reward Time이 Able로 변경되어 보상 인출이 가능해지면, 사용자는 Reward 버튼을 눌러 보상 인출 함수를 실행하는 데이터를 메타마스크로 서명해 컨트랙트에 보내게 됩니다.
  • 컨트랙트에서 만료일을 확인한 후, 문제가 없다면 사용자에게 스테이킹한 Amount에 Reward를 합한 토큰을 사용자에게 전송합니다.
    • 만료일이 지나지 않았을 경우 Reward 버튼이 비활성화 됩니다.
  • 토큰과 보상이 사용자에게 전송되면 다시 Amount List와 Reward List가 0으로 초기화됩니다.

 


사용 기술 스택

 

기술 스택


와이어 프레임

 

와이어 프레임

 


아키텍쳐

 

아키텍쳐

 

아키텍처의 경우 S3를 이용한 정적 호스트 페이지와 EC2를 이용한 서비스 서버, Database 클라우드 서버, 그리고 블록체인 네트워크 서버로 구성되어 있습니다.

  • 먼저 배포과정에서는 Github Actions 를 활용하여 CI/CD 파이프라인을 구성하여 Github에서 push가 발생할 때마다 배포중인 서비스에 반영되어 자동 배포가 실행됩니다.
  • 클라이언트는 AWS IAM를 통해 S3에 접근하여 배포하였으며, 블록체인 네트워크의 경우 AWS EC2의 인스턴스 내에서 가나슈 네트워크를 백그라운드로 실행하여 네트워크가 지속 가능하도록 설정하였습니다.
  • 서버 부분은 EC2를 이용하여 Docker와 Github Container Registry를 사용하여 EC2내에서 백그라운드로 자동서비스를 실행할 수 있도록 설계하였습니다.

플로우 차트

 


데이터 베이스 스키마