Polymarket의 기술 구현에 대한 매우 자세한 공개

이 기사는 기계로 번역되었습니다
원문 표시
Polymarket는 다양한 프로젝트의 기술을 성공적으로 결합하여, 후발주자들에게 특히 참고할 만한 가치가 있습니다.

작성자: Pavel Naydanov

번역: Golem, 오데일리 (odaily)

편집자 주: Polymarket는 이번 미국 대선에서 더 많은 관심을 받았습니다. 이는 누적 거래량이 36억 달러를 넘어섰을 뿐만 아니라, 여론조사와 전통 미디어보다 먼저 그리고 성공적으로 트럼프의 승리를 예측했기 때문입니다. 이를 통해 Polymarket이 단순한 베팅 사이트가 아니라 더 실제적이고 신뢰할 수 있는 뉴스 플랫폼이 될 것이라는 것을 알 수 있습니다(추천 읽기: 《Vitalik의 새 글: 예측 시장에서 정보 금융까지》). Polymarket은 이번 블록체인 혁신의 가장 눈부신 '풍경'일 수 있습니다.

그렇다면 '블록체인 혁명'의 의미를 가진 Polymarket은 기술적으로 어떻게 구현되었을까요? 스마트 컨트랙트 개발자 Pavel Naydanov가 Polymarket이 채택한 기술을 자세히 분해하고 설명했습니다. 개발자들에게 시사점이 있을 것 같습니다. 오데일리(odaily)는 기술 구현 부분을 번역했으니, 이제 이 프로토콜의 각 부분에 대한 기술 세부 사항을 자세히 살펴보겠습니다.

CTF: 결과 토큰화

Polymarket의 모든 이벤트 결과는 토큰화되어 있습니다:

  • 이러한 토큰을 Share 토큰이라고 합니다;

  • Share는 기본 자산으로 구매되므로 완전히 담보화되어 있습니다;

  • Share는 기본 자산을 얻기 위해 팔 수 있습니다.

Share 토큰은 Gnosis의 조건부 토큰 프레임워크(CTF) ERC-1155를 기반으로 구현되었으며, 이 프레임워크는 효과성이 입증되었고 다양한 프로토콜에서 테스트를 거쳤습니다. CTF는 최대 256개의 결과를 지원할 수 있습니다.

각 예측은 CTF에서 고유한 조건 ID로 식별됩니다. 이 ID는 세 가지 매개변수의 해시 값으로 구성됩니다:

  • 오라클: 이벤트 결과를 결정할 오라클의 주소. 이를 통해 지정된 오라클만이 예측을 정산할 수 있습니다;

  • 문제 ID: 예측 식별자. 예측 생성자가 설정합니다. 이는 단순한 카운터일 수 있고, 이전 예측에 1을 더하는 것일 수 있습니다. 또는 텍스트와 기타 데이터 해시를 사용하는 더 복잡한 방식일 수 있습니다;

  • outcomeSlotCount: 예측의 가능한 결과 수.

아래 그림은 CTF(조건부 토큰 프레임워크)의 작동 원리를 직관적으로 보여줍니다.

사용자는 베팅 시 기본 자산을 제공하고 Share 토큰(CTF의 조건부 토큰)을 받습니다. 오라클이 예측 결과를 확정하면 사용자는 예측 결과에 따라 CTF에서 보상을 받을 수 있습니다.

사용자가 조건부 토큰을 받으면 특정 입장을 확정한 것으로 간주됩니다. CTF에서 입장은 각 예측의 가능한 결과 조합을 나타냅니다. CTF는 이러한 입장을 각 예측에 대해 생성하며, 각 입장은 사용자가 선택할 수 있는 가능한 결과 조합 중 하나에 해당합니다.

예를 들어:

2024년 최고 흥행 영화는 무엇일까요?

  • 인사이드 아웃 2

  • 매드 맥스 4

  • 데드풀 3

  • 조커 2

  • 미니언즈 4

  • 듄 2

  • 기타

사용자는 '인사이드 아웃 2'가 2024년 최고 흥행 영화가 될 것이라고 투표하거나, '듄 2'가 절대 2024년 최고 흥행 영화가 되지 않을 것이라고 투표할 수 있습니다. 이러한 예측 조합이 그들의 입장으로 간주됩니다.

CTF는 입장을 처리하는 두 가지 흥미로운 메커니즘을 제공합니다: 분할과 병합. 분할 메커니즘을 통해 단일 입장을 여러 개별 결과로 분할할 수 있으며, 병합은 다른 결과를 하나의 입장으로 결합합니다. 이러한 메커니즘을 통해 사용자는 자신의 입장을 유연하게 관리할 수 있습니다.

CTF는 Polymarket에 네 가지 주요 이점을 제공합니다:

  • Share 토큰은 사용자의 특정 예측 결과에 대한 투표를 확인하는 데 사용됩니다;

  • 사용자의 투표를 다양한 입장으로 구성할 수 있는 유연한 시스템을 구현했습니다;

  • 오라클의 신호에 따라 결과 계산의 책임을 CTF에 위임했습니다;

  • 승리 결과의 Share 토큰 수량에 따라 보상을 계산합니다.

또한 주목할 만한 점은 CTF가 사용자의 입장을 병합할 수 있는 관련 활동을 허용한다는 것입니다. 그러나 현재 Polymarket에는 이러한 사례가 없습니다. CTF에 대한 자세한 내용은 공식 문서에서 확인할 수 있습니다.

주문 메커니즘

구매를 위해 Polymarket 인터페이스는 세 가지 유형의 주문을 제공합니다:

  • 시장가 주문 - 현재 시장 가격으로 즉시 구매;

  • 지정가 주문 - 지정한 가격에 도달하면 구매하는 지연 주문;

  • 자동화된 마켓 마이커(AMM) - 풀의 준비금 금액에 기반하여 자동으로 결정된 가격으로 구매, 탈중앙화 거래소와 유사합니다.

현재 AMM 주문 기능은 작동하지 않는 것 같으며, AMM을 통한 구매가 허용되는 예측을 찾을 수 없습니다. Polymarket의 Discord에서 한 사용자의 댓글이 이 상황을 어느 정도 설명합니다.

AMM은 구식이 되었습니다.

Polymarket 문서에 따르면 AMM은 조건부 토큰 프레임워크의 일부 스마트 컨트랙트로 개발되었습니다. 따라서 AMM은 Share 토큰의 구매 가격을 결정하는 데 사용됩니다. 이러한 기본 메커니즘에는 유동성이 필요하여 가격 안정성을 보장하고 변동성을 낮출 수 있습니다. 유동성 공급자는 경제적 인센티브를 받아야 하며, 각 구매에서 보상을 받아야 시스템이 작동할 수 있습니다.

초기에 Polymarket은 완전히 CTF 기반이었고 AMM을 사용하여 가격을 결정했을 수 있습니다. 그러나 시간이 지남에 따라 프로토콜은 주문장을 가진 혼합 솔루션을 개발했고, 두 가지 다른 유형의 주문(지정가 및 시장가)이 이 맞춤형 솔루션에서 작동하기 시작했습니다. 이 솔루션을 CLOB(중앙 제한가 주문장) 또는 BLOB(이진 제한가 주문장)이라고 합니다.

CLOB 및 BLOB

CLOB(중앙 제한가 주문장) 또는 BLOB(이진 제한가 주문장)은 혼합 분산형 주문장 시스템을 나타냅니다. 이 시스템에서 전용 운영자는 주문 매칭을 처리하고 스마트 컨트랙트 실행을 시작합니다.

자세한 설명 없이도 시스템은 다음 그림과 같습니다:

사용자는 실행할 주문을 생성할 수 있으며, 이는 지정가 주문 또는 시장가 주문일 수 있습니다. 운영자는 사용자 주문을 매칭하고 스마트 컨트랙트에서 실행을 시작합니다. 주문 생성은 EIP-712 표준에 따라 사용자 개인 키로 서명된 데이터 구조를 생성하는 것을 의미합니다. 주문이 실행되기 전에 오프체인에 저장되므로 주문 조건을 빠르고 무료로 조정하거나 완전히 취소할 수 있습니다.

그러나 주문장과 주문 매칭과 관련된 모든 내용은 API를 통해서만 액세스할 수 있습니다. 편의를 위해 Polymarket은 JavaScript와 Python 두 가지 클라이언트를 제공합니다.

그럼에도 불구하고 Exchange.sol 스마트 컨트랙트는 공개되어 있으며, CTF에서 사용자 입장을 생성하는 역할을 합니다. 또한 사용자 입장을 관리하고 자산을 전송할 수 있어 프로토콜 내의 보안과 투명성을 보장합니다.

이 스마트 컨트랙트는 감사를 거쳤으며, 감사 보고서가 리포지토리에 첨부되어 있습니다.

스마트 컨트랙트

Exchange 스마트 컨트랙트의 실제 이름은 CTFExchange.sol입니다. 코드가 크지 않아 약 100줄 정도이지만, 많은 종속성을 가지고 있습니다.

대부분은 제한된 기능을 구현하는 작은 스마트 컨트랙트입니다:

  • BaseExchange.sol: ERC-1155 토큰 수신 기능을

    • fillOrder() — 주문을 생성한 사용자와 사용자가 선택한 호가(다른 주문) 사이에서 주문을 실행합니다;

    • fillOrders() — fillOrder()와 동일하지만 주문 목록에 적용됩니다;

    • matchOrders() — 운영자가 두 개의 다른 주문을 선택하고 실행합니다.

    위의 모든 기능은 운영자만 호출할 수 있습니다.

    스마트 계약에 어떻게 들어가든 결과는 항상 동일합니다: 두 사용자가 그들의 주문에 따라 토큰을 교환합니다.

    프로토콜 수수료

    수수료는 출력 자산에 따라 부과됩니다. 이진 예측의 경우 수수료는 대칭적이며, 이는 사용자가 0.99달러에 토큰을 판매하면 0.01달러에 토큰을 구매하는 구매자와 동일한 수수료를 지불한다는 의미입니다.

    계산 공식은 매우 간단하며 공식 문서에서 가져왔습니다:

    유동성 보상 프로그램

    이 프로그램의 전반적인 목표는 시장 유동성을 높이는 것입니다.

    주문 장부 기반 거래소가 제대로 작동하려면 한계가격 주문을 생성하는 사람이 필요합니다. 한계가격 주문은 시장가 주문의 즉각적인 실행을 가능하게 하는 유동성을 제공합니다. 한계가격 주문을 생성하는 사용자를 시장 조성자(MM)라고 합니다. 한계가격 주문이 시장 가격에 더 가까울수록 시장 주문의 실행 속도가 빨라지고 거래량도 늘어나, 최종 사용자에게 이점이 됩니다. 또한 유동성이 높을수록 시장 조작이 더 어려워집니다.

    충분한 유동성을 보장하기 위해 Polymarket은 사용자가 한계가격 주문을 생성하도록 장려하는 특별한 보상 프로그램을 수립했습니다. 한계가격 주문이 평균 시장 가격에 더 가까울수록 보상이 더 높습니다. 보상은 매일 자정(UTC 기준)에 자동으로 지급됩니다.

    이 시스템은 DYDX를 모델로 하였으며, 더 자세한 내용은 DYDX의 유동성 보상 프로그램과 Polymarket의 자세한 유동성 보상 계산 공식을 참조하십시오.

    오라클

    오라클은 예측 결과를 제공합니다 - 이벤트가 발생했는지 여부와 관계없습니다. 오라클은 프로토콜의 가장 중요한 구성 요소 중 하나이지만 Polymarket 팀이 아닌 제3자 서비스인 UMA에 의해 제공됩니다.

    UMA는 블록체인에 모든 유형의 데이터를 기록할 수 있는 탈중앙화된 오라클입니다. 그러나 검증할 수 없는 데이터는 제외됩니다. 이 오라클은 낙관적이며, 분쟁이 없는 한 데이터가 정확한 것으로 간주됩니다. UMA에는 분쟁을 해결하기 위한 자체 중재 시스템이 있으며, 중재자는 실제 사람 - UMA 생태계의 참여자, 특히 UMA 토큰 보유자입니다. 이 시스템을 DVM(Data Verification Mechanism)이라고 합니다.

    예측 결과를 결정하고 블록체인에 기록하는 프로세스는 다음과 같습니다:

    1. Statement: 예측과 보상이 오라클에 추가됩니다. 예측 결과에 이의를 제기하고 보상을 받을 수 있는 사람은 누구나;

    2. Challenge period: 이의 제기 기간, 이 기간 동안 누구나 예측 결과에 이의를 제기할 수 있습니다. 이의 제기가 없고 시간이 지나면 예측 결과가 최종 정산을 위해 준비된 것으로 간주됩니다, 이는 정확성을 의미합니다;

    3. Dispute: 분쟁, 프로토콜 참여자는 누구나 보상을 받기 위해서든 공정성을 위해서든 결과에 이의를 제기할 수 있습니다. 실제로 이런 경우는 드물게 발생하는데, 게임 이론상 대부분의 참여자가 정직하게 행동하기 때문입니다.

    4. Voting: 투표, 분쟁이 발생하면 UMA 토큰 보유자가 분쟁을 해결하기 위해 투표합니다. UMA는 투표에 사용되는 프로토콜 토큰이며, 참여자는 투표에 참여하여 보상을 받습니다.

    5. Settlement: 마지막 단계는 정산 과정, 즉 데이터를 실제로 블록체인에 기록하는 것입니다. 이 후에 예측 결과를 신뢰할 수 있게 됩니다.

    전체 프로토콜은 게임 이론에 기반하며, 참여자가 악의적으로 행동하는 것이 경제적으로 불리합니다.

    1. 예측 결과를 투표에 제출하는 참여자는 스마트 계약에 담보를 제공합니다. 그들의 결과가 의문시되면 담보를 잃게 되지만, 그렇지 않으면 담보를 되찾고 보상을 받게 됩니다. 이는 정확한 결과만 제출하도록 강력한 동기를 부여합니다.

    2. 예측 결과에 이의를 제기하는 참여자 역시 담보를 제공해야 합니다. 그들이 옳다면 담보를 되찾고 보상을 받지만, 그렇지 않으면 담보를 잃게 됩니다. 이는 참여자들이 확신하는 경우에만 이의를 제기하도록 동기를 부여합니다.

    3. 분쟁 해결에 참여하는 사람들은 UMA 토큰을 스테이킹해야 하며, 분쟁 해결에 대한 보상을 받게 됩니다. 그들이 잘못 투표하거나 투표하지 않으면 스테이킹 잔액의 일부를 잃게 되지만, 그렇지 않으면 보상을 받게 됩니다. 게으르게 행동할 방법이 없습니다.

    특히 주목할 만한 것은 분쟁 투표 프로세스가 두 단계의 commit/reveal 방식을 사용한다는 점입니다:

    • Commit: 참여자가 투표 해시값을 스마트 계약에 제출하여 비밀리에 투표하는 것을 의미하므로, 해시값만으로는 참여자가 어떻게 투표했는지 알 수 없습니다.

    • Reveal: 투표 단계가 끝난 후 참여자가 그들의 투표를 공개하면, 스마트 계약이 이전에 제출된 해시값과 일치하는지 확인합니다.

    이러한 두 단계 투표 프로세스는 투표자가 담합하여 오라클을 훼손하거나 예측 결과에 의존하는 서비스를 공격하는 것을 방지합니다. 또한 예측 결과는 여러 번 이의 제기될 수 있으며, 이 경우 UMA는 이전 분쟁이 해결된 후 의사 결정 프로세스를 다시 시작할 수 있습니다.

    분쟁 제기 프로세스는 다음과 같습니다:

    결론

    Polymarket은 겉보기에는 단순한 도박 및 예측 시스템이지만, 실제로는 세 가지 주요 모듈로 구성되어 있으며, 각 모듈은 다른 프로토콜과 팀에 의해 개발되었습니다:

    • CTF(Conditional Token Framework): 예측에서 포지션, 지분 등을 관리하는 Gnosis가 만든 유연한 프레임워크.

    • CLOB(Central Limit Order Book): Polymarket이 주문 장부와 한계가격 주문을 구현하기 위해 사용하는 내부 솔루션. CLOB을 통해 사용자가 생태계에 효과적으로 참여하고 유동성을 집계할 수 있습니다.

    • UMA: 독특한 분쟁 해결 중재 시스템을 갖춘 탈중앙화된 오라클. UMA는 시스템의 핵심으로, 블록체인을 통해 예측 결과를 전송합니다.

    Polymarket은 베팅 시스템이지만, 기술적으로는 다양한 프로젝트의 기술을 성공적으로 결합했기 때문에 개발자에게 특히 매력적입니다.

출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트