IV. DeFi 기초지식(DeFi Primitives)
1. 거래(TRANSACTIONS), DeFi의 기본
거래가 블록체인 세상에서 어떻게 이루어지는지 알아야 DeFi를 제대로 이해할 수 있다.
거래는 다른 주소(address)로 데이터를 보내고 코인이나 토큰을 전송하는 것이다.
거래를 이해하기 위해 은행의 계좌번호 같은 주소라는 개념부터 알아야 한다.
이더리움의 경우 두 종류의 주소가 있다.
1) 외부소유 계정(EOA, the externally owned account):
은행의 개인 계좌 개념으로 이해하자.
메타마스크(이더리움 전용) 같은 블록체인 지갑 서비스를 통해 계좌신청을 한다.
신청을 하면 공인인증서 역할을 하는 개인키(private key)를 생성해 준다.
개인키는 본인의 컴퓨터나 스마트폰에만 저장하고 남들에게 알려주면 안된다.
[Q&A] 메타마스크 지갑으로 만든 계정과 거래소에서 만든 계정이 뭐가 다른가?
업비트나 빗썸 같은 거래소에서 만든 계정의 개인키는 내 컴퓨터에 저장되지 않는다.
거래비용 절감의 이유로 거래소 지갑의 개인키 권한은 거래소가 가진다.
개인키를 내가 가지고 있지 않기 때문에 개인키가 필요한 DeFi 투자가 힘들다.
DeFi를 하기 위해서는 메타마스크와 같은 블록체인 지갑을 통해 계정을 만들자.
물론 공인인증서 만으로는 거래가 안된다.
계좌번호가 있어야 돈을 줄 것 아닌가.
그래서 계좌번호 역할의 공개키(public key)가 필요하다.
공개키는 개인키와 짝궁이다.
공개키로 잠근 것은 그 키와 짝이 맞는 개인키로 열 수 있다 정도만 우선 이해하자.
직관적 이해를 위해 A가 B에게 코인을 송금하는 과정를 두 단계로 나누어 살펴보자.
A계좌의 개인키는 A만 가지고 있고, B계좌의 개인키는 B만 가지고 있다.
반면 A와 B계좌 공개키는 모두에게 공개되어 누구나 사용할 수 있다는 점 감안하자.
1단계: A의 계좌에서 코인을 인출
A계좌에 있는 코인은 A계좌의 공개키로 잠겨있다.
짝이 맞는 A계좌의 개인키로 열어 코인을 인출할 수 있다
2단계: B의 계좌에 입금하고, 입금된 코인은 B가 사용 가능한 상태로
인출한 코인을 송금할 때 모두에게 공개된 B의 공개키로 잠궈서 보낸다.
쉽게 말해 B의 계좌주소로 B만 열수 있게 잠궈서 보낸다로 이해하자.
B의 공개키로 잠겨진 코인은 짝이 맞는 개인키를 가진 B만이 열어 사용할 수 있다.
공개키를 해시(hash)함수를 통해 짧게 만든 것이 주소(address)다.
공개키를 계좌번호처럼 바로 쓸 수도 있지만,
공개키의 길이가 너무 길기 때문에 보통은 주소를 생성해 계좌번호 역할로 쓴다.
주소까지 만들었으면 성공적으로 외부소유 계정(이하 EOA로 표기)을 만든 것이다.
EOA를 통해 코인과 토큰을 보관, 송금할 수 있고
바로 뒤에 설명할 컨트렉트 계정(이하 CA로 표기)의 자동화된 계약을 실행시킬 수 있다.
2) 컨트렉트 계정(CA, contract account):
자동화된 은행의 계좌로 생각하자.
CA는 자동화된 계약(smart contract)을 바탕으로 하다 보니 개인키는 없다.
EOA처럼 코인과 토큰을 보관하고 전송할 수 있다.
EOA나 다른 CA가 요청하면 거래(자동화된 계약)를 한다.
이론만 봐서는 이해가 잘 안되니,
각각 1이더(ETH, 이하 ETH로 표기)씩 보유하고 있는 EOA와 CA 사례를 가정하자.
EOA(은행 개인계좌 역할)가 1ETH를 CA(자동화된 은행의 계좌 역할)에 보내면서
ETH 가격이 300만원을 넘으면, 2ETH를 EOA에게 준다는 계약을 요청했다고 하자.
1) 계약을 요청하기 전: EOA는 1ETH, CA는 1ETH 보유 상태다.
2) 1이더를 보내면서 CA에게 계약을 요청: EOA는 0ETH, CA는 2ETH가 된다.
3) ETH 가격이 300만원을 넘어 CA가 계약 실행: EOA는 2ETH, CA는 0ETH가 된다.
[Q&A]메모리 풀(memory pool 또는 mempool)이란?
기존의 중앙화된 금융 거래에서는 존재하지 않는 개념이다.
거래가 실행되어 블록에 기록되기 전에 대기하는 대기실 개념인데 이 것 때문에 발생하는 문제가 있다.
예를 들어 A투자자가 비트코인을 10,000개 매수하는 주문을 넣었다.
그 주문를 보고 B투자자가 A투자자 주문보다 먼저 비트코인을 1개 매수한 후,
A투자자가 10,000개 매수해서 코인이 급등한 후에 팔았다고 하자.
전통 금융시장에서 위의 행동을 하면 선행매매로 법적 처벌감이고,
일반적인 경우 자기보다 먼저 넣은 주문보다 먼저 체결할 수도 없다.
그러나 DeFi에서는 블록체인 상의 모든 정보가 공개되어 있기 때문에 합법이고,
거래 수수료 격인 가스비를 많이 지불하면 주문이 메모리 풀에서 대기하고 있을 때,
먼저 제출한 주문보다 더 빨리 체결시킬 수 있다.이 때문에 특히 거래를 검증하는 채굴자들이 메모리 풀의 정보로 이득을 취하기 좋다.
1)채굴자들이 메모리 풀에 올라온 대규모 매수 주문 거래 요청을 본다.
2) 그 거래를 처리하기 전에
3) 본인의 매수 주문을 먼저 체결하고,
4) 대규모 매수 주문을 처리해서 가격이 오른 후
5) 앞서 본인이 매수했던 물량을 매도하면?
이런 것들을 채굴자 착취 가치(MEV, miner extractable value)라 하고,
작업증명 모델의 단점으로 지적된다.
2. 대체가능 토큰(FUNGIBLE TOKENS), 코인이 아니라 계약이다
대체가능 토큰(Fungible tokens)을 다루기 전에 토큰의 개념부터 명확히 하자.
대부분 코인과 토큰을 비슷하게 생각한다.
비트코인이나 이더리움은 독자적인 블록체인 기술을 가지고 있는 것은 코인이고,
USDC, 유니스왑은 다른 블록체인 플랫폼 코인 위에서 만들어진 토큰으로 알고 있다.
투자 관점에서는 코인이나 토큰이나 큰 차이 없는 것도 사실이다.
다만 좀 더 정확하게는 토큰은 코인과 달리 토큰 ‘계약’의 일부분임을 명심하자.
각 토큰은 누가 무엇을 얼마나 소유하고 있는지를 기록한 독립적인 데이터베이스다.
예를 들어 이더리움 기반 토큰의 경우 이더리움 계정에 보관되어 있는 것이 아니라,
토큰 계약 내부에만 기록되어 있는 것이다.
[Q&A] 피싱(phishing)공격을 예방하기 위해 토큰 계약을 해지(revoke)해야 하는 이유
토큰은 ‘계약’이기 때문에 이더리움과 같은 코인과 달리
계약(CA)에 의해 토큰을 전송하기 위해 처음 한 번은 권한을 ‘승인(approval)’해야 한다.
해당 계약에게 토큰을 전송할 수 있는 권한을 ‘확인(confirm)’하면 절차는 끝난다.
아쉽게도 이 절차는 블록체인 상에 기록되기 때문에 가스비가 든다.
계약을 해지(revoke)하면 토큰 승인 계약은 취소된다.
계약이 취소되면 토큰을 전송할 수 없고, 피싱으로 인한 토큰 도난을 막을 수 있다.
revoke.cash가 대표적으로 계약을 해지할 수 있는 곳이다.
피싱이 의심되면 이곳에 와서 토큰 승인 계약을 취소하자.
취소하는 것도 가스비가 든다.
실제 1이더(이하 ETH로 표시)의 코인을 송금하면,
이더리움의 거래를 볼 수 있는 이더스캔의 Value 값에 1ETH를 송금했다고 표시된다.
그러나 WRLD라는 토큰을 1이더 가치만큼 송금하면
이더스캔 상의 Value 값은 0ETH로 표시된다.
이 때 내 토큰의 가치가 0이 된 것으로 착각해서 놀라지 말자.
0ETH를 송금하는 이더리움 거래를 했는데,
0ETH 거래에 포함된 부가적인 계약으로 WRLD 토큰 1이더만큼 송금했다고 표시된다.
[심화과정]
이더리움 개발자는 누구나 대체가능한 토큰(fungible tokens) 계약을 만들 수 있다.
이 계약에 다양한 아이디어를 넣어 금융 구조를 짤 수 있다.
그러므로 대체가능한 토큰은 DeFi 발전의 초석이다.
대체가능 토큰은 비탈릭 부테린과 파비안 보겔스텔러가 제시한 ERC-20이 표준이다.
1편에서도 언급했듯이 ERC는 이더리움 상 프로그래밍 표준을 설명하는 기술 문서다.
ERC-20 토큰이 만들어지면, ERC-20 표준을 지원하는 서비스와 자동으로 호환된다.
ERC-20을 준수하려면 아래 6가지 기능은 계약에 필수적으로 포함되어야 한다.
솔리디티(solidity)라는 이더리움 프로그래밍 언어의 기능이다.(1) totalSupply(): 토큰의 총 갯수를 알려준다.
(2) balanceOf(account): 특정 계정(account)의 토큰 잔고를 알려준다.
(3) transfer(recipient address, amount): (계약을 호출하는 사람의 토큰을 소유한 경우) 지정된 양(amount)만큼 받는이의 주소(recipient address)으로 보낸다.
(4) tranferFrom(sender address, recipient address, amount): (계약을 호출하는 사람이 토큰을 소유하지 않은 경우) 보내는이의 주소(sender address)의 토큰 잔고 중 지정된 양(amount)을 받는이의 주소(recipient address)로 보낸다.
(5) approve(spender address, amount): 계약 대상(spender address)에게 내 잔고에서 인출할 수 있는 한도(amount)를 설정한다. 예를 들어 구독 계약을 했는데, 승인 금액의 한도가 없다면 악의적으로 큰 금액을 탈취당할 수 있다.(6) allowance(owner address, spender address): approve와 짝을 이루는 기능이다.
내(owner address)가 계약 대상(spender address)에게 인출을 허락한 토큰의 남은 잔고를 확인할 수 있다. 총 승인 금액 한도에서 지금까지 지출한 금액을 뺀 금액과 같다.(1)번에서 (4)번까지의 기능은 직관적으로도 토큰 전송 용도 정도로 제한된다.
(5)번과 (6)번 기능이 ERC-20 인터페이스의 핵심인데, 이 기능을 통해 토큰을 직접 소유하지 않아도 다양한 어플리케이션을 통해 여러가지 구조를 짤 수 있다.
대체가능 토큰인 ERC-20의 분류는 책의 기준을 참고해 세 가지로 나누었다.
토큰에 따라 두 가지 이상 분류에 모두 해당될 수도 있다.
(1) 지분 토큰(Equity Token):
주식과 유사하다. 일반적으로 토큰 지분만큼 자산이나 수익에 대한 권리를 가진다. 다만 의결권 없는 우선주처럼 의결권은 분리되어 있는 경우도 많다.
(2) 유틸리티 토큰(Utility Tokens):
여러가지 서비스 이용에 사용할 수 있다. DeFi의 담보, 블록체인 게임 내의 아이템 구매, 거래소의 수수료 대신 지급, 맴버쉽 기능 등 다양한 곳에 활용된다.
(3) 의결권 토큰(Governance Tokens):
주식의 의결권과 유사하다. 일반적으로 토큰 지분만큼 의사결정 영향력이 있다. 탈중앙 자율 조직인 DAO 토큰의 핵심 기능이기도 하다.
3. 대체불가능 토큰, NFT(NON-FUNGIBLE TOKENS)
대체가능한 토큰은 돈처럼 다른 돈으로 대체가능하고, 단위가 쪼개지고 합쳐질 수 있다.
예를 들어 100달러를 빌려주는 경우 다른 지폐로 대체해서 받아도 문제없고,
1달러 지폐 100개를 주나 100달러 지폐 하나를 주나 동일하다.
반대로 NFT는 다른 토큰으로 대체 불가능하다.
각각의 고유한 특성이 있어 다른 토큰으로 대체되거나 작은 단위로 쪼개질 수 없다.
같은 다이아몬드 하나라도 품질의 차이 때문에 1:1 교환이 불가능한 것과 같은 원리다. 대체가 불가능하니 디지털 영역에서 진위나 소유권을 증명하는데 사용된다.
[심화과정]
1) NFT의 표준
이더리움에서는 ERC-721이 NFT의 표준이다.
하나의 잔고로 정보가 저장되는 ERC-20과 달리 ERC-721은 각각의 토큰마다 고유의 특성이 부여되어 메타데이터(metadata, 데이터를 설명해 주는 데이터)와 연결된다.
또한 ERC-20과 달리 approve 기능의 한도를 일부 수량만 부분적으로 할 수 없다.
모두 되거나 전부 안되거나 둘 중 하나다.
그 외 몇 가지 기능을 더 소개하면 아래와 같다.
(1) balanceOf(address):
특정 주소(address)가 소유한 계약에 포함된 NFT의 갯수를 알려준다.
(2) ownerOf(id):
ID가 입력되면 NFT 소유자의 주소를 알려준다.
흔히 NFT는 디지털 예술작품의 소유권으로 알려져 있다.
그런데 NFT 소개가 왜 DeFi에서 나오나?
사실 NFT는 맞춤형 금융 상품 설계에 훌륭한 도구다.
DeFi에서 NFT를 증서(deeds)라고도 하는데, 맞춤형 금리와 기간을 설정한 후에 P2P로 대출을 할 경우 그 증서로서 NFT를 활용할 수 있다.
복권 성격을 지닌 금융상품에도 활용할 수 있다. 전체 복권은 대체 불가능한 NFT 형태로 발행한 후 당첨된 복권만 가치를 부여하면 된다.
2) 멀티토큰 표준(Multitoken Standard)
ERC-20과 ERC-721의 성격을 섞은 멀티토큰 모델로서 ERC-1155 표준이 있다.
ERC-1155를 우리가 참고하는 책에서나 인터넷 검색에서 찾아보면,
대부분 ERC-20과 ERC-721의 장점을 섞어서 만들었다 정도로 두리뭉실하게 설명한다.
개인적으로 좀 더 명확히 정리하면 아래와 같다.
ERC-20은 대체가능하고, 더 작은 단위로 쪼갤 수 있다.
ERC-721은 대체불가능하고, 작은 단위로 쪼갤 수 없다.
ERC-1155는 대체가능한데, 작은 단위로 쪼갤 수 없다.
ERC-1155가 가장 필요한 곳은 게임아이템이다.
’녹슨 칼’이라는 흔한(common) 게임아이템을 토큰으로 10,000개 발행한다고 하자.
ERC-20는 작은 단위로 쪼개지는 것이 문제다. ’녹슨 칼’을 반으로 쪼개어 쓸 수는 없다.
ERC-721도 문제다. 같은 칼인데 대체불가능해서 일일이 발행하면 가스비가 엄청나다.
ERC-1155가 정답이다. 한번에 수만개를 발행해 가스비도 줄이고, 칼을 쪼갤 수도 없다.
4. 수탁서비스(CUSTODY)
DeFi는 외부의 결제대금예치(escrow)나 수탁(custody) 기관이 따로 필요없다.
자동화된 계약 내에 이 기능이 포함되기 때문이다.
금융권에 있는 사람이면 이 것이 왜 파괴적 혁신인지 좀 더 와닿을 것이다.
5. 공급 조절(SUPPLY ADJUSTMENT)
이제 토큰을 발행하고 소각해 공급을 조절하는 구조를 알아보자.
1) 토큰 소각(Burn: Reduce Supply)
블록체인의 기록은 없앨 수 없다.
이 점 때문에 토큰 소각은 주식 소각과는 다르며, 두 가지 방법의 소각이 있다.
참고로 두 방법 모두 토큰을 사용할 수 없게 만든 것이므로 총유통량에 변화는 없다.
(1) 수작업(manually)을 해서 누구도 소유하지 않은(개인키가 없는) 주소로 보내기
소각하는 토큰이 전송되는 주소를 eater address라고 하며, ‘0x000000000000000000000000000000000000dEaD’라는 주소가 대표적이다.
실수로 잘못된 주소로 보내는 경우에도 사실상 소각이다.
(2) 코드로 자동화해서 특정한 계약을 통해 토큰을 사용할 수 없게 만들기
DeFi에서도 토큰 소각 메카니즘을 활용해
1) 잘못된 행동을 한 사용자가 예치한 토큰에 패널티를 부과하거나,
2) 토큰 희소성을 높여 가격을 올리거나,
3) 투자 풀(pool)에서 나와 기초자산을 환매할 때 사용된다.
2) 토큰 발행(Mint: Increase Supply)
소각의 반대가 발행이다.
다만 소각과 달리 발행하면 유통량이 늘어나고,
소각처럼 실수로 발행되거나 수동적인 발행 메카니즘이 있는 것은 아니라,
전부 계약 메카니즘에 의해 발행된다.
DeFi에서도 토큰 발행 메카니즘을 활용해
1) 보상을 주거나,
2) 토큰 희소성을 줄여 가격을 낮추거나,
3) 투자 풀에 진입해 소유권 지분을 가져갈 때 사용된다.
많은 DeFi들이 토큰을 발행해 보상으로 제공한다.
다만 발행량이 늘면 가격이 떨어지는데, 이를 해결하기 위한 다양한 방법이 등장한다.
자세한 내용은 개별 DeFi 분석에서 다루겠다.
3) 본딩 커브: 공급의 가격 매기기(Bonding Curve: Pricing Supply)
자동화된 계약으로 공급가격을 조절하는 것을 본딩커브(bonding curve)라 한다.
쉽게 말해 토큰 공급순서에 따른 토큰 가격 책정의 알고리즘이다.
주식 살 때처럼 매수자와 매도자의 호가로 가격이 결정되는 것이 아니라,
알고리즘으로 결정된 가격으로 거래된다는 점만 기억해도 좋다.
(1) 고정(constant): 구매순서와 상관없이(공급순서 상관없이) 고정된 가격을 사용한다.
(2) 선형(linear): 뒤에 공급되는 물량일수록 가격이 선형으로 증가한다.
즉, 먼저 구매할 수록 싸게 산다. 폰지 사기(pozni scheme) 느낌이 들기 시작한다.
(3) 강한선형(superlinear): 뒤에 공급되는 물량일수록 가격이 기하급수적으로 증가한다.
앞서 선형 본딩 커브는 강한선형에 비하면 양반이다.
언뜻 봐서는 너무나 폰지 사기같은 이 구조도 많이 쓴다고 하는데 지속가능 구조인가?
아직 강한선형 커브를 사용하는 DeFi를 분석해 본 적은 없으니 일단 평가는 유보한다.
(4) S자곡선(logistic/sigmoid): 공급량과 가격의 관계가 S자 곡선 모양이다.
처음에는 강한선형 본딩 커브처럼 기하급수적으로 가격이 증가하다가,
정해진 가격 상한선 근처에서는 고정가격 형태가 된다.
그나마 이 구조는 가격 상한선이 합리적인 수준에서 결정될 수 있다면
현실적으로도 지속가능한 모델이 될 수 있을 것 같다.
실제 이 본딩 커브를 쓰는 DeFi도 많다고 한다.
참고로 계약이나 비용 구조 때문에 매도자의 본딩 커브가 매수자에 비해 불리할 수 있다.
들어올 땐 쉬워도 나갈 때는 쉽지 않은 구조가 DeFi 입장에서는 유리하다.
본딩 커브 구조를 본 첫 느낌은
시장에 의해 가격이 결정되는 구조가 아니라,
알고리즘에 의해 일방적으로 가격이 결정되는 구조다 보니 악용의 여지가 많아 보인다.
악용의 여지는 많아도 진주같은 아이디어도 있으리라 기대하며
구체적인 내용은 개별 DeFi 사례분석 때 언급하겠다.
‘2편을 마치며’
개념을 완전히 이해하고 넘어가려다 보니 계획보다 글 분량이 3배는 길어졌다.
사실 귀차니즘이 큰 필자는 결론 한줄과 핵심 근거 한두줄의 글 스타일을 선호한다.
그러나 DeFi는 기본 개념부터 생소해 내 스타일로 쓰면 암호문이 될 것 같아 포기했다.
글 하나의 호흡이 너무 길면 전달력이 떨어지니 2편은 이정도로 마무리 한다.
사실 글을 더 이어가기엔 나도 지쳐서…
혹시 1편이 궁금하다면 아래 링크를 클릭하자.
좋은 글 잘 봤습니다. 감사합니다 ^^
본딩커브 설명 부분은 좀 더 정확하게 이해한 내용 바탕으로 추후 보강계획입니다. 실제 디파이에 적용될 때 보니 제가 다소 오해한 부분이 있네요. 우선 가볍게(?) 보시길 바랍니다.