DeFi 금융파생상품(Crypto Default Swap)

Hong·2023년 2월 28일
0
post-thumbnail

Client Deploy : Link

  • 서비스를 이용하기 위해서는 metamask가 설치되어 있어야합니다.
  • 가이드라인

CDS(Crypto Default Swap)은 TradiFi의 CDS처럼 기초자산이 되는 가상자산의 Default 위험으로부터 자산을 보호합니다.



💵

4주간 주말과 밤낮없이, 공휴일 없이 프로젝트에만 매달렸다.

정말 재밌게 했다. 배려와 존중, 능력이 있는 팀원들을 만났고 감사하게도 내가 제시했던 아이디어가 팀 회의를 통해 채택되었기 때문이다.
CDS(신용부도스왑)이라는 금융파생상품과 이더리움의 스마트 컨트렉트는 잘어울리는 조합이라는 것이 자연스럽게 떠올랐다. CDS가 양자간 계약(이미 이름부터 컨트렉트)이고 계약서 안에서 복잡한 로직이 처리되기 때문이다.

CDS와 스마트 컨트렉트는 서로 잘 어울리는 조합이었지만 여전히 challenging한 부분들이 많았다. 처음 프로젝트를 기획할 때부터 CDS의 신용사건이 바라보게 될 기초자산을 무엇으로 할 것이며, 해당 가격 또는 index를 어디서 들고올건지 고민했다.
CDS의 복잡한 로직을 스마트 컨트렉트 위에서 전부 구현하는 것도 문제였다. 탈중앙화된 앱을 만들기 위해 SellerBuyer간의 보상금을 설정하고 CDS Premium을 지급하는 로직을 전부 스마트 컨트렉트 위에서 처리해야했다. 문제는 이더리움의 스마트 컨트렉트가 트랜잭션 처리 속도가 느리며 코드의 저장용량도 작기 때문이다.

물론 프로젝트를 진행하며 마주한 문제들 역시 너무 많다. 가격 오라클 문제.. 유동성 풀 문제.. 토큰 문제.. 등등 하지만 이 포스트에서는 프로젝트 컨셉, 프로젝트 운영모델, 가치창출 방법 등 프로젝트가 어떤 것인지에 대해서만 다룬다.
프로젝트 문제해결과 관련된 내용은 다음 포스트에서 다룬다.







🌏 About Project


CDS(Credit Default Swap)란 무엇입니까?

신용부도스왑(CDS: Credit Default Swap)은 신용파생상품(credit derivatives)의 일종으로 신용보장매입자(credit protection buyer)가 수수료(CDS premium)를 지급하는 대신 신용사건(credit event)이 발생한 경우 신용보장매도자(credit protection seller)로부터 약정에 따른 손실액을 지급받는 조건의 계약입니다.

일반적으로 CDS는 은행, 보험사, 헤지펀드 등 금융회사 사이에서 거래됩니다. CDS Buyer(매수자)는 계약서에 정해진 기간 동안 Premium(수수료)을 납부합니다. 대신 계약이 만료되기 전 기초자산이 Default(채무불이행) 상황에 직면하면 CDS Seller(매도자)로부터 보상금을 지급받습니다. 반대로 계약이 만료되기 전까지 기초자산이 Default 상황에 직면하지 않는다면 CDS Seller는 CDS Buyer로부터 Premium을 지급받고 계약은 종료됩니다.

2008년 서브프라임 모기지 사태를 생각하면 더욱 이해가 깊어집니다. 2005년 Michael Burry(마이클 버리) 박사는 미국 주택 시장 채권이 채무불이행 사태를 겪을 것이라 판단했고 Goldman Sachs, Deutsche Bundesbank, Bear Stearns 등 거대 투자은행을 찾아가 CDO(주택담보대출채권)를 기초자산으로 CDS를 발행합니다. 그는 정해진 기간마다 Premium을 지급했고 2008년 미국 주택 시장이 붕괴했을 때 투자은행들로부터 천문학적인 금액을 받아냅니다.

결론적으로 CDS는 신용리스크, 유동성 리스크, 금리리스크, 외환리스크, 투자리스크 등 자산의 리스크를 제거하거나 체계적으로 완화시킬 수 있는 금융파생상품입니다.



CDS의 문제점

  • CDS 계약자들은 어떤 불편함을 느낍니까?

CDS Seller는 신용사건 발생 시 해당 기초자산의 회수가치를 산출한 뒤 계약서상 보증금액과의 차이를 CDS Buyer에게 지급합니다. 하지만 금융파생상품은 판매자와 구매자의 관계가 복잡하게 얽혀 있습니다. 또한 기초자산의 회수가치를 평가하는 과정은 많은 시간이 걸리기 때문에 비록 CDS Buyer가 신용사건의 발생에 따라 보상금을 받을 수 있는 위치에 있다고 할지라도 실제 보상금 지급은 몇 년이 걸릴지 알 수 없습니다.

  • CDS 계약을 체결하기 위해 어떤 제약이 존재합니까?

ISDA 마스터 계약은 CDS와 같은 파생상품 거래에 대해 표준화된 규정 및 조건을 제시합니다. 비록 ISDA 계약 조건에는 CDS 계약을 위한 자본 요건이 제시되어 있지 않지만 충분하고 안전한 지급보증을 해줄 수 있는 투자은행 및 상업은행과 거래하기 위해서는 일정 수준 이상의 자본요건을 충족해야 합니다.

이러한 제약은 산업 및 금융기관에 따라 다르고 개인이 필요한 자본금을 준비하기 어렵습니다. 때문에 기관이 아닌 개인투자자는 투자 아이디어가 있더라도 시장에 참여할 수 없는 허들이 있습니다.

  • CDS 매수자는 어떤 위험에 직면합니까?

2008년 금융위기 이전 AIG는 매도자로서 CDS를 대량으로 판매했습니다. 물론 미국의 주택시장 붕괴와 같은 Default 이벤트는 일어나기 힘든 블랙스완 같은 존재였습니다. 하지만 그럼에도 불구하고 AIG는 CDS의 지급보증인으로서 리스크를 관리하지 못했고 정부에 구제금융을 신청했습니다. 이처럼 CDS 매수자는 지급보증자가 채무불이행 상황에 마주하여 신용사건이 일어났음에도 보증금을 지급받지 못하는 상황에 빠질 수 있습니다.



Blockchain Solution

  1. 데이터의 가치 이동이 가능한 블록체인 위에서 CDS 계약을 작성할 수 있다면 CDS 계약 당사자들은 복잡한 절차와 법적 분쟁을 거칠필요 없이 CDS 거래를 끝마칠 수 있습니다.
  2. 블록체인 네트워크와 스마트 컨트렉트는 조건부 peer-to-peer 거래를 가능하게 함으로 개인의 자본시장 참여를 활성화시킬 수 있습니다.
  3. 스마트 컨트렉트 위에서 생성되는 CDS의 지급준비금은 블록체인 분산원장 시스템 위에서 투명하게 공개되며 CDS 계약자의 도덕적 해이에서 벗어날 수 있도록 만듭니다.


DeFi Risks

  • exploits of smart contract bugs : 스마트 컨트렉트 버그의 악용
    • The DAO해킹 사건과 같이 배포된 smart contract자체에 결함이 발견되어 마주할 수 있는 DeFi 위험입니다.
  • oracle manipulation : 오라클 조작
    • Oracle Node가 제공하는 데이터에 악의적인 컨텐츠가 포함되면 연결된 모든 DeFi 네트워크에 치명적인 영향을 미칠 수 있습니다. 조작된 데이터로 인해 부당한 청산 가격이 형성되거나 악의적인 차익거래가 일어날 수 있습니다.
  • rug pulls : DeFi 프로젝트의 출구사기
    • 몇몇 DeFi 프로젝트는 소셜 미디어와 마케팅 능력을 활용하여 투자자들을 유인하고 막대한 자금을 챙긴 뒤 잠적합니다.
  • flash loan attack : 무위험 차익거래 공격
    • 플래시론은 단 한 번의 트랜잭션 안에서 일시적으로 담보를 설정하고 대출을 받은 후, 대출 받은 암호화폐를 이용해 가상자산의 시장가격을 조작하고 차익을 가져갈 수 있게합니다. 때때로 이러한 공격은 DEX 유동성 풀과 DeFi를 붕괴시킵니다.
  • Legal Issues : 규제 이슈
    • 암호화폐는 새로 등장한 자산의 형태로 아직 제도권 안에서 안정적으로 작동하지 않습니다. 때문에 갑작스러운 정부의 규제 리스크는 가상자산의 가격과 DeFi 프로젝트에 치명적인 영향을 미칩니다.
  • Macroeconomic Events Affect Cryptocurrency : 실물경제 유동성 및 거시경제 리스크
    • 2008년 금융위기, 팬데믹 사태와 같은 경기침체에 대응하기 위한 세계경제의 급격한 통화팽창 정책과 통화수축정책은 암호화폐 및 가상자산의 변동성과 가격에 큰 영향을 미칩니다.

이외에도 암호화폐 가격과 DeFi 프로젝트는 다양한 위험에 노출되어 있습니다. 우리는 스마트 컨트렉트 위에서 구현되는 CDS를 통해 위와 같은 이벤트에 따라 발생하는 가상자산의 급격한 가격하락에 대응할 수 있습니다.







⚙️ 프로젝트 운영 모델


CDS(Credit Default Swap)의 Buyer-Seller 모델

이 서비스는 프리미엄을 납부하는 CDS 구매자(Buyer)와 구매자 자산의 원금을 보장해주는 CDS 판매자(Seller)간의 CDS 계약을 스마트 컨트랙트로 작성할 수 있게 도와줍니다.

CDS 구매자는 신용사건이 일어났을 때 스마트 컨트렉트에 명시되어 있는 원금을 CDS 판매자로부터 보상받을 수 있습니다.
만약 계약서에 명시되어있는 신용사건이 일어나지 않는다면 구매자는 판매자에게 계속해서 CDS Premium을 지불합니다.

CDS 판매자의 경우, CDS 구매자에게 원금을 보장하는 리스크를 지는 대신, 리스크에 대한 보상으로 CDS 구매자에게 일정 기간마다 프리미엄을 지급 받습니다. 보상 규모가 커지는 만큼, 그리고 계약을 하는 상황에 예상되는 리스크만큼 지급받는 프리미엄은 커질 수 있습니다.

CDS 스마트 컨트랙트에는 프리미엄 지급과, 보상의 이행을 블록체인 위에서 해결합니다. 구매자의 수요와 판매자 유동성 공급 조건이 일치하면 CDS 스마트 컨트랙트를 이용하여 서로의 효용에 맞게 우리의 서비스를 이용할 수 있습니다.



Client-Contract-Server 모델

클라이언트, 컨트랙트, 그리고 서버.
세개의 주체로 작동합니다. 클라이언트는 User에게 UI/UX를 제공합니다. 클라이언트에서 CDS계약을 작성할 수 있습니다. 작성된 CDS 계약은 블록체인 상의 스마트 컨트랙트로 저장되어 계약 조항들을 이행합니다. 서버는 블록체인 상에 저장되어있는 CDS 계약 정보들을 모아 가공하여 클라이언트가 확인할 수 있게 도와줍니다.

클라이언트는 CDS 구매자CDS 판매자가 이용합니다. CDS 구매자CDS 판매자는 서로의 수요와 공급에따라 컨트랙트 계약을 작성하고 체결된 스마트 컨트랙트는 블록체인에 저장됩니다. User는 클라이언트에서 본인의 수요에 맞는 계약이 있는지 확인하고 체결할 수 있습니다. CDS계약이 체결되었다면 내가 체결한 CDS의 정보들을 확인할 수도 있습니다.

컨트랙트는 최초 클라이언트에 의해 작성됩니다. CDS계약이 체결되면 필요한 데이터들은 블록체인 상에 저장됩니다. 이해관계자들은 블록체인 상의 컨트랙트를 통해서 계약내용을 수행합니다. 예를 들어 프리미엄 지급일이 도래하였을 때, 지급하기로 한 금액을 컨트랙트를 통해서 상대방에게 전달할 수 있습니다. 프리미엄이 제때 지급되지 않는다면, 계약은 만료되고 CDS 구매자는 자산에 대한 원금의 보상을 받을 수 없습니다. 또한 CDS의 신용사건이 일어나면 컨트랙트에서 해당 신용사건이 유효한지 판단하고 보상금을 CDS 구매자에게 보상금을 지급합니다.

서버는 블록체인 상에서 클라이언트와 컨트랙트 사이의 상호작용을 통해 만들어지는 정보들을 모아 가공하고 클라이언트에게 전달합니다. 탈중앙화된 블록체인 위에서 저장된 컨트랙트의 정보는 누구든지 확인할 수 있습니다.







💰 가치창출방법


Staking, LP

클라이언트-컨트랙트-서버로 작동하는 프로덕트 구조에서 CDS Buyer(매수자)와 Seller(매도자)의 유동성은 서버의 Admin 계정에서 안전하게 보관됩니다. 우리는 내부적인 통계 절차를 통해 MCR(Minimum Capital Ratio)을 계산합니다. MCR은 최소자본 비율로써 서버 계정에 최소한으로 유지되어야 하는 자본비율과 같습니다. 안전한 지급능력과 임계값을 초과하는 초과 자본 공급량은 저위험 DeFi 수익창출 기회를 위해 사용됩니다.

  1. Deposit Crypto For An APY (Staking)

    초과지급준비금을 저위험 DeFi Staking 서비스에 예치시킵니다. 가상자산을 예치시킴으로써 해당 서비스 네트워크 거래의 유효성을 검사하는 노드가 됩니다. 이를 통해 인센티브를 제공받습니다.

  1. Liquidity Provider

    Uniswap, PancakeSwap, Yearn Finance와 같은 분산형 거래소(DEX)를 이용하면 자산의 구매자와 판매자는 제3자 거래 플랫폼의 개입 없이 서로 다른 암호화폐를 교환할 수 있습니다. 우리는 이러한 DEX의 거래교환을 원활하게 해줄 수 있는 유동성 공급자로서 초과지급준비금을 예치시키고 인센티브를 받습니다.







기능별 시연 영상


기능설명
CDS 작성 및 컨트랙트 생성, 계약 체결, 계약 이행CDS 계약을 작성하고 작성된 계약을 바탕으로 스마트 컨트랙트를 배포하는 기능을 제공합니다. 서로의 수요와 공급이 일치한다면 해당 계약을 체결하여 상대방과 계약을 맺을 수 있는 기능을 제공합니다. CDS 구매자가 판매자에게 프리미엄을 지급하고, 신용사건이 일어났을 때 CDS 구매자가 CDS 판매자로부터 보상을 요구할 수 있는 기능을 제공합니다.
(마이페이지)유저가 작성했거나 참여하고 있는 CDS 계약들을 확인할 수 있습니다.
유저 모니터링 이메일CDS 계약에 대한 정보들을 즉각적으로 확인할 수 있게 메일링 서비스를 제공하고 있습니다.
블록체인 노드 동기화프라이빗 블록체인 노드들이 동기화되는 로그화면, 3개의 노드와 1개의 부트노드


[메인페이지 및 로그인]


[CDS 계약 생성]


[CDS 계약 체결]


[유저 메일링 서비스 및 신규 회원 Faucet]


[프라이빗 이더리움 네트워크 노드간 블록 동기화]







🦾 About Dev


아키텍쳐


DB스키마

users 테이블

유저의 정보를 저장하여 마이페이지의 구성 요소들에 필요한 정보들을 제공합니다. Key 값을 유저를 특정할 수 있는 지갑 공개키로 지정합니다. 유저가 CDS 거래에 참여한 횟수를 확인하기 위해 soldCount, boughCount 라는 필드에 값을 저장하여 제공하고 있습니다. nonce 같은 경우는 인증을 하는 유저에게 서명을 하기 위한 데이터로 제공하고, 서명된 데이터의 유효성을 검증하는 데 사용합니다.


swaps 테이블

CDS 계약에 대한 전반적인 데이터를 저장하고 있습니다. 유저가 제안을 한 CDS나 체결한 CDS의 정보들을 제공해줍니다. users 테이블의 Key 값인 address를 buyer와 seller 에서 참조를 하여, user 테이블과swaps 테이블은 1:N 관계를 갖습니다.


transactions 테이블

CDS 계약 한 건에 생성되는 블록체인 트랜잭션들을 저장해 놓습니다. CDS 계약 생성부터 변경 사항까지 관리합니다. swaps 테이블의 Key 값인 swapId를 transction 테이블의 swapId가 참조를 하여, swaps 테이블과 transactions 테이블이 1:N 관계를 갖습니다.



API

Swagger UI



컨트랙트 설계도

오더북 형식

CDS 계약을 Swap이라는 컨트랙트에 계약 조건을 모두 기록하여 블록체인에 저장하는 방식, 오더북 형식을 사용하여 구현하였습니다.

사실 DeFi를 오더북으록 구현을 하면 체인 상에 저장하는 기록들이 많아 비용이 크게 발생하는 문제가 있습니다. 하지만 CDS 계약이 양자 간의 계약으로 이루어진다는 점을 미루어 보았을 때, 대신 취할 수 있는 유동성 풀 형식으로 구현을 하지 못하거나, 새로운 형태의 CDS를 설계해야만 했습니다. 특히 CDS 계약이 유동성풀로 구현이되어진다면, 디폴트 상황에서 유동성풀 전체가 와해되는 상황이 발생하기 때문에 오히려 유동성풀 구현 방식은 부적합하다고 할 수 있습니다.

오더북 형식은 기존의 CDS가 계약서 상으로 기록되어지는 것처럼 직관적이라는 장점이 있습니다. 프리미엄 지급과 원금 보상에 대한 이행 조건들을 블록체인에 데이터로 저장하고 이행하기만 하면 되기 때문입니다. 현실에서는 법으로서 지켜지는 계약을 블록체인에서는 코드로서 지켜진다고 할 수 있습니다.


팩토리 패턴

SwapHandler 컨트랙트는 CDS 컨트랙트가 상속받아 사용되어집니다. SwapHandler는 새롭게 작성되어지는 CDS 계약을 Swap 컨트랙트의 인스턴스를 배포하여 관리합니다. 이를 통해 동일한 형태의 컨트랙트를 여러 인스턴스로 만듦으로써 추적과 관리가 쉬워집니다.

  • Factory
    • CDS 계약의 생성, 체결, 정산, 보험료 납부 등 CDS 계약 관련 주요 기능에 관한 컨트랙트
    • AssetHandler 사용자의 보증금, 보험료 납부 정보를 기록, 관리하는 컨트랙트
    • SwapHandler 배포한 Swap 컨트랙트를 추적, 관리하는 컨트랙트
  • Instance
    • Swap 생성된 CDS 계약의 세부 내용을 기록, 관리하는 컨트랙트
    • PriceConsumer 프라이빗 네트워크의 모킹 오라클로부터 온체인 가격 정보를 호출하는 컨트랙트
    • PriceConsumerGoerli 고얼리 네트워크의 체인링크로부터 온체인 가격 정보를 호출하는 컨트랙트


📚 기술스택


Frontend

  • React를 이용한 웹 어플케이션을 개발하였습니다.

  • Redux 상태관리 라이브러리를 이용하여 원래의 props를 통한 상태 관리를 단순화하여 구현, 어플리케이션 개발의 편의를 높였습니다.

  • Web3.js와 메타마스크를 이용하여 배포된 컨트랙트와 상호작용 하였습니다.

  • Axios를 통해서 서버와의 API 통신을 구현하였습니다.

  • Tailwind CSS 프레임워크를 사용해서 CSS 작업효율을 높였습니다.


Backend

Typescript와 Express를 활용하여 API 서버를 구현했습니다. 서버는 Launch Template 기반으로 생성되어 오토스케일링과 로드밸런싱이 적용된 고가용성과 고확장성을 갖는 아키텍쳐로 설계하였습니다. 낮은 레이턴시와 HTTPS 적용을 위해 AWS CloudFront를 프록시 서버로 배치했습니다. 사용자 경험 향상을 위한 메일링 서비스에는 AWS SES를 활용하였습니다.

DB는 AWS RDS에 호스팅된 MySQL를 활용했습니다. 클라우드 DB의 도입으로 트래픽의 증가에 유연하게 대응 가능하고, RDB의 엄격한 스키마로 데이터 무결성을 보장할 수 있습니다. 개발과정에서 잦은 스키마 변경에 효과적으로 대응하기 위해 타입안정성을 제공하는 TypeORM을 활용했습니다. 또한 EC2에 호스팅된 API 서버와 동일한 VPC에 위치한 AWS Elasticache를 캐시 DB로 활용하여 주기적으로 갱신되는 정보를 저장하여 DB의 부하를 줄였으며, 이를 세션 저장소로도 활용하여 서버 인스턴스의 수평적 확장시에도 사용자 요청 정보가 확장된 인스턴스간에 공유되도록 설계하였습니다.

DB와 동일한 VPC 내에 단일 EC2로 구성된 블록체인 이벤트 리스너도 구현하였습니다. 리스너는 CDS 컨트랙트에서 송신하는 이벤트를 수신하고 파싱하여 DB에 기록하는 역할을 수행합니다. 자체 홈서버에서 Geth로 운영중인 프라이빗 블록체인 네트워크의 블록생성시간은 5초이므로 쓰기 부하는 크지 않다고 판단하여 단일 EC2로 설계하였습니다.


Blockchain

solidity로 스마트 컨트랙트를 개발하였습니다. CDS 컨트랙트에서 활용하는 통화로 ERC20 표준을 따르는 자체 스테이블 토큰(FUSD)을 발행해서 활용하였습니다. 스마트 컨트랙트 개발에는 Truffle 프레임워크를 이용하였습니다. Truffle을 활용하여 작성된 컨트랙트를 배포, 컴파일, 테스트 하였습니다. 특히 작은 버그에도 민감한 Defi 프로젝트의 특성에 맞게 스마트 컨트랙트에 대한 엄격한 테스트를 작성했습니다. truffle test로 기능별로 테스트를 진행했고, Github Actions에서 테스트를 수행하여 컨트랙트 테스트 및 배포과정을 자동화하였습니다. 블록체인 네트워크는 홈서버에서 구축한 3개의 Geth 노드로 구성된 프라이빗 블록체인 네트워크를 활용하였습니다.




  • 프론트엔드
    • React
    • Redux
    • Axios
    • web3.js
    • Metamask
    • Tailwind CSS
  • 백엔드
    • Typescript
    • TypeORM
    • Express.js
    • Web3.js
    • swagger
  • 인프라
    • Github Actions - 개발중 CI/CD 파이프라인
    • PM2 - 프로세스 관리자
    • AWS EC2 - api 서버
    • AWS ELB, AWS ASG - 서버의 확장성 및 고가용성
    • AWS RDS for MySQL - 메인 db
    • AWS Elaticache for Redis - 캐시 db
    • AWS SES - 메일링 서비스
    • AWS CloudFront - 클라이언트 캐싱 및 https 프로토콜 적용
    • AWS S3 - 클라이언트 정적 배포
    • 홈서버 - Geth 노드, 블록 익스플로러, 노드 모니터 호스팅
  • 블록체인
    • Solidity
    • Ganache
    • Truffle
    • Remix
    • Geth - private blockchain nodes
    • Grafana - node monitor
    • Sirato - block explorer






🎨 About Design


Wireframe (Figma)








  • 3개의 박스는 운영구조 Client, Contract, Server를 반영했습니다
  • 신뢰감을 주는 블루컬러를 사용했습니다
  • 단단하고 믿음직한 Box Shape을 사용했습니다
  • Block을 통해 블록체인의 Web3 탈중앙화 정신을 담고 있음을 전달합니다
  • Block에 Stripe패턴을 추가해 Tech와 미래지향적인 이미지를 주입했습니다
profile
Notorious

0개의 댓글