Project Entasis

Yun Subin·2023년 2월 16일
0
post-thumbnail
post-custom-banner

팀 소개
팀명 : ENTASIS
프로젝트 명 : STO 튜토리얼
팀원 : 윤수빈(팀장), 김현태, 박도형, 백준석
시연 영상 : https://www.youtube.com/watch?v=0fmODCTVs0g
Github 링크 : GitHub - codestates-beb/BEB-07-final-entasis
배포 링크 : React App
블록체인 네트워크 주소 : http://18.183.252.200:8545 체인ID : 1337
2. 프로젝트 소개
[ STO 거래소 튜토리얼 “ENTASIS” ]
“당신은 STO에 대해 알고 계십니까?”
이 질문을 받는 대부분의 사람들은 잘 모른다고 답할 것입니다. 주식, 채권, 코인 등에 투자를 한 경험은 많지만, 대다수의 사람들이 STO에 대해서는 모르는 만큼, 투자자의 입장에서 STO가 무엇이고, 어떤 기능이 있으며, 어떻게 투자할 수 있는지를 이 프로젝트를 통해 이해하도록 도움으로써 증권형 토큰에 대한 투자를 확대시키는 것이 이 프로젝트의 목표입니다.

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

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

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

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

증권형 토큰(일명 ST)은 기업이 주식, 채권 대신 암호화폐 형태로 발행하는 유가 증권입니다. 이 증권형 토큰은 블록체인 플랫폼이 제공하는 서비스를 활용할 권리 대신 주식과 마찬가지로 기업의 법적 소유권을 가졌음을 의미합니다. 때문에 증권형 토큰을 보유하고 있으면 기업 또는 기업의 블록체인 플랫폼이 낸 수익이나 자산의 일부를 배당받을 수 있습니다.

증권형 토큰은 그 용도가 주식, 채권 등 유가증권과 동일하기 때문에 법과 정책의 개입과 규제를 받아야만 합니다. 상법에 정해진 절차에 따라 주식을 발행하듯 관련 법에 따라 증권형 토큰을 발행해야 한다는 것입니다.

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

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

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

주요 기능
실시간으로 가격 변동이 일어나는 차트 중심의 한 메인 페이지

메타 마스크를 통한 지갑 등록

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

FAUCET (초기 자본금)
튜토리얼을 완료하면 자동으로 faucet 기능을 통해 50ETH가 부여됩니다.
faucet은 1회만 받을 수 있습니다.
ETH를 통한 증권형 토큰 구매 및 판매

실시간으로 변하는 가격을 보고 토큰을 구매 및 판매할 수 있습니다.
투자자가 토큰 거래를 할 경우 메타마스크를 통해 서명이 됩니다.
거래 수수료는 거래대금의 0.04%로 자동으로 계산이 됩니다.
배당금 투표

10분에 한 번씩 지급되는 배당금에 대한 배당률을 결정하기 위해 배당률 투표가 이루어집니다.
투표를 하지 않더라도 배당금을 받을 수 있습니다.
배당금 지급

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

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

[거래 제한 해제]

업로드중..

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

[스테이킹 요청시]
사용자는 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내에서 백그라운드로 자동서비스를 실행할 수 있도록 설계하였습니다.
윤수빈
역할

  • 포지션 : PM / Frontend / Design
  • 개인 깃허브 : https://github.com/Russ481-k
  • 개인 블로그 : https://www.notion.so/1-Entasis-3-b3370daa41fc463fb32d1dccac16d46e
  • 활용 스택 : Figma / Javascript / React/ HTML / CSS / MySQL / Sequelize / Node.js / Scale-Liner / Axios
  • 구현 기능 :
  • 프로젝트 기획&관리
  • 디자인 구상 및 구현
  • 프론트엔드 UI, UX 구현
  • 차트 구현
  • 서버 제공 API를 통한 데이터 요청
  • 서버 실시간 데이터 생성 기능 구현

프로젝트를 마치며
웹소켓을 적용하지 못하여 대규모 트래픽에 대비하지 못했던 것이 아쉽다. 추후에 리팩토링 과정을 통해서 해당 내용을 적용해 보고자 한다.

서버의 차트데이터 로직 구현 외 백엔드와 컨트랙트 부분에 역할을 맡지 못한 점에 추후 솔로 프로젝트로 해당 내용을 구현해야겠다.

profile
Blockchain Web Developer
post-custom-banner

0개의 댓글