
Polymarket의 기술 구현 방식을 초상세하게 파헤친다
글: Pavel Naydanov
번역: Golem, Odaily 성계일보
편집자주: 이번 미국 대선에서 Polymarket은 36억 달러를 초과하는 누적 거래량을 기록한 것뿐만 아니라 여론조사 및 기존 언론보다 먼저 도널드 트럼프의 승리를 성공적으로 예측함으로써 더 많은 주목을 받았다. 이로 인해 사람들은 Polymarket이 단순한 베팅 사이트를 넘어 보다 사실적이고 신뢰할 수 있는 뉴스 플랫폼이 될 수 있음을 깨닫게 되었다(참고로 추천: 《비탈릭의 새 글: 예측 시장에서 정보 금융으로》). Polymarket은 이번 블록체인 혁신에서 가장 두드러진 '풍경선'이 될 가능성이 있다.
그렇다면 '블록체인 혁명'의 의미를 지닌 Polymarket은 기술적으로 어떻게 구현되었을까? 스마트 계약 개발자 Pavel Naydanov은 Polymarket이 사용하는 기술을 상세히 분석하고 설명하였으며, 개발자들에게 일정한 시사점을 제공한다. Odaily 성계일보는 그 중 기술 구현 부분을 아래와 같이 번역하여 소개하며, 이제 프로토콜의 각 기술적 세부사항을 자세히 살펴보도록 하자.
CTF: 결과를 토큰화하기
Polymarket의 모든 이벤트 결과는 토큰화되어 있다:
-
이러한 토큰을 Share 토큰이라 부른다;
-
Share는 기본 자산으로 구매되며, 따라서 완전하게 담보된다;
-
Share는 다시 기본 자산으로 매도될 수 있다.
Share 토큰은 Gnosis의 조건부 토큰 프레임워크(CTF)를 기반으로 한 ERC-1155이며, 이 프레임워크는 이미 여러 프로토콜에서 검증된 바 있으며, 최대 256개의 결과를 하나의 이벤트에 지원할 수 있다.
모든 예측은 CTF 내에서 고유한 조건 ID로 식별되는데, 이 조건 ID는 다음 세 가지 파라미터의 해시값으로 구성된다:
-
오라클: 이벤트 결과를 결정할 오라클의 주소로, 지정된 오라클만 예측을 정산할 수 있도록 보장한다;
-
문제 ID: 예측 식별자로, 예측 생성자가 설정한다. 이는 새로운 예측마다 증가하는 간단한 카운터일 수도 있고, 텍스트와 기타 데이터의 해시를 사용하는 복잡한 방식일 수도 있다;
-
outcomeSlotCount: 예측 가능한 결과의 수.
아래 이미지는 CTF(조건부 토큰 프레임워크)의 작동 원리를 직관적으로 보여준다.

사용자는 베팅 시 기본 자산을 제공하고 CTF에서 조건부 토큰이라 불리는 Share 토큰을 받는다. 오라클이 예측 결과를 확정하면, 사용자는 해당 결과에 따라 CTF로부터 보상을 수령할 수 있다.
사용자가 조건부 토큰을 받으면 특정 입장을 취한 것으로 간주된다. CTF에서 입장(Position)은 각 예측의 가능한 결과 조합 집합을 의미한다. CTF는 각 예측에 대해 이러한 입장을 생성하며, 각 입장은 사용자가 선택할 수 있는 가능한 결과 조합 중 하나에 해당한다.
예를 들어:
2024년 박스오피스 1위 영화는 무엇인가?
-
인사이드 아웃 2
-
분노의 질주: 매드 맥스
-
데드풀 3
-
조커 2
-
미니언즈 4
-
듄 2
-
기타
사용자는 『인사이드 아웃 2』가 박스오피스 1위가 될 것이라고 투표하거나, 『듄 2』는 절대 2024년 박스오피스 1위가 될 수 없다고 판단할 수 있다. 이러한 예측 조합은 그들의 입장으로 간주된다.
CTF는 입장 처리를 위한 두 가지 흥미로운 메커니즘을 제공한다: 분할(Split)과 병합(Merge). 분할 메커니즘은 단일 입장을 여러 개의 개별 결과로 나눌 수 있게 하며, 병합은 다양한 결과를 하나의 입장으로 통합할 수 있게 한다. 이러한 메커니즘은 사용자가 자신의 입장을 유연하게 관리할 수 있도록 해준다.
CTF는 Polymarket에 다음과 같은 네 가지 중요한 장점을 제공한다:
-
Share 토큰은 사용자의 특정 예측 결과에 대한 투표를 확인하는 데 사용할 수 있다;
-
사용자의 투표를 다양한 입장으로 조합할 수 있는 유연한 시스템을 구현하였다;
-
오라클의 신호에 따라 결과 산출 책임을 CTF에 위임하였다;
-
승리한 결과의 Share 토큰 수에 따라 보상을 계산한다.
또한 언급할 만한 점은, CTF는 사용자의 입장이 병합 가능한 관련 활동을 조직할 수 있도록 하지만, 현재 Polymarket에는 아직 그러한 사례가 없다. CTF에 대해 더 알고 싶다면 공식 문서를 참고할 수 있다.
주문 메커니즘

구매를 위해 Polymarket 인터페이스는 세 가지 유형의 주문을 제공한다:
-
Market —— 현재 시장 가격으로 즉시 구매;
-
Limit —— 지정된 가격에 도달했을 때 구매하도록 지연 주문 설정;
-
AMM —— 유동성 풀의 보유금액을 기반으로, 탈중앙화 거래소와 유사한 방식으로 자동 결정된 가격으로 구매.
현재 AMM 주문 기능은 비활성 상태처럼 보이며, AMM을 통해 구매 가능한 예측을 찾을 수 없었다. Polymarket의 Discord에서 한 사용자의 댓글이 이러한 상황을 어느 정도 설명해주고 있다.

AMM은 이미 폐기되었다.
Polymarket 문서에 따르면, AMM은 조건부 토큰 프레임워크의 일부로서 스마트 계약으로 개발되었다. 따라서 AMM은 Share 토큰의 구매 가격을 결정하는 데 사용된다. 이 기본 메커니즘은 안정적인 가격 책정과 변동성 감소를 위해 유동성이 필요하다. 유동성 제공자는 시스템 운영을 유지하기 위해 매 거래마다 보상을 받아야 하는 경제적 인센티브가 필요하다.
처음 Polymarket은 아마도 완전히 CTF 기반으로, AMM을 사용해 가격을 결정했을 것이다. 그러나 시간이 지나면서 프로토콜은 주문장(Order Book)을 포함하는 하이브리드 솔루션을 개발하였고, 제한 주문과 시장 주문 두 가지 유형이 이 맞춤형 솔루션 위에서 작동하기 시작했다. 이 솔루션은 CLOB(Central Limit Order Book) 또는 BLOB(Binary Limit Order Book)이라 불린다.
CLOB 및 BLOB
CLOB(Central Limit Order Book) 또는 BLOB(Binary Limit Order Book)은 하이브리드 탈중앙화 주문장 시스템을 나타낸다. 이 시스템에서 전담 운영자(operator)가 주문 체결을 처리하고 스마트 계약 실행을 시작한다.
자세한 설명 없이, 시스템은 아래 이미지와 같다:

사용자는 제한 주문 또는 시장 주문 형태로 실행할 주문을 생성한다. 운영자가 사용자 주문을 매칭하고 스마트 계약상에서 실행을 시작한다. 주문 생성은 EIP-712 표준에 따라 사용자의 개인키로 서명된 데이터 구조를 생성하는 것을 의미한다. 주문은 체결 전 체인 외부(off-chain)에 저장되므로, 주문 조건을 빠르고 무료로 조정하거나 완전히 취소할 수 있다.
하지만 주문장 및 주문 매칭과 관련된 모든 것은 API를 통해서만 접근할 수 있으며, 편의를 위해 Polymarket은 JavaScript용과 Python용 두 가지 클라이언트를 제공한다.
그러나 Exchange.sol 스마트 계약은 공개되어 있으며, CTF 내에서 사용자 입장을 생성하는 역할을 한다. 또한 사용자 입장을 관리하고 자산을 이전할 수 있어 프로토콜 내에서 보안성과 투명성을 보장한다.

이 스마트 계약은 감사를 완료했으며, 감사 보고서는 저장소에 첨부되어 있다.
스마트 계약
Exchange 스마트 계약은 실제로 더 구체적인 이름인 CTFExchange.sol이다. 코드는 약 100줄로 크지 않지만, 다수의 종속성이 존재한다.

이들 대부분은 제한된 기능을 구현하는 소규모 스마트 계약이다:
-
BaseExchange.sol: ERC-1155 토큰 수령 기능을 구현하는 추상 스마트 계약으로, 재진입 공격 방지도 담당;
-
Auth.sol: 역할 관리자로, 역할 설정을 위한 검증 함수와 수정자를 정의하며, CTFExchange.sol의 admin과 operator를 관리;
-
Assets.sol: 두 가지 자산을 정의, 즉 기본 자산(담보물)과 CTF 주소;
-
Fees.sol: 프로토콜 수수료를 정의;
-
Pausable.sol: 스마트 계약 운영을 일시 중지할 수 있는 기능을 정의. 예기치 못한 상황 발생 시 채택되는 일종의 중심화 방식으로, admin 역할에만 적용됨;
-
AssetOperation.sol: 기본 자산과 CTF의 작업을 정의. 입장 이전, 분할, 병합을 포함;
-
Signature.sol: 주문 검증 시 사용되는 사용자 서명을 검증하는 코드 정의;
-
Hashing.sol: 서명 검증을 위한 주문 파라미터의 해시값 정의;
-
Registry.sol: 시스템 내 예측 등록 및 예측용 토큰 등록 과정을 정의.
실제 주문 실행과 관련된 모든 것은 Trading.sol 스마트 계약에 구현되어 있다. 코드를 탐색하고 스마트 계약을 연구하는 것도 간단하다. 이 구조는 함수를 통해 명확한 진입점을 정의한다:
-
fillOrder() — 주문을 생성한 사용자와 선택한 호가(다른 주문) 사이에서 주문 실행;
-
fillOrders() — fillOrder()와 동일하지만 주문 목록에 사용;
-
matchOrders() — 운영자가 두 개의 다른 주문을 선택하여 실행.
위 모든 함수는 operator에 의해서만 호출될 수 있다.

스마트 계약에 어떤 방식으로 진입하든 결과는 항상 동일하다: 두 사용자가 각자의 주문에 따라 토큰을 교환한다.
프로토콜 수수료
수수료는 출력되는 자산 기준으로 부과된다. 이진 예측의 경우 수수료는 대칭적이며, 이는 사용자가 0.99달러에 토큰을 판매할 경우, 0.01달러에 토큰을 구매하는 구매자와 동일한 수수료를 지불한다는 의미이다.
계산 공식은 간단하며, 공식 문서에서 발췌하였다:

유동성 보상 프로그램
이 프로그램의 전체 목표는 시장 유동성을 유도하는 것이다.
주문장 기반 거래소가 제대로 작동하려면 누군가가 제한 주문을 생성해야 한다. 제한 주문은 시장 주문의 즉시 실행을 가능하게 하는 유동성을 제공하며, 제한 주문을 생성하는 사용자는 마켓메이커라 불린다. 제한 주문이 시장 가격과 얼마나 '밀접하게' 위치하는지에 따라 시장 주문의 실행 속도가 빨라지고 거래량도 커지며, 이는 궁극적으로 최종 사용자에게 유리하다. 또한 유동성이 클수록 시장을 조작하기도 어려워진다.
충분한 유동성을 확보하기 위해 Polymarket은 사용자가 제한 주문을 생성하도록 유도하는 특별한 보상 프로그램을 마련하였다. 제한 주문이 평균 시장 가격에 더 가까울수록 보상이 커진다. 보상은 매일 자정(UTC 기준)에 자동 지급된다.
이 시스템은 dYdX를 모델로 하였으며, 더 자세한 내용은 원본 dYdX의 유동성 인센티브 프로그램 및 Polymarket의 상세한 유동성 보상 계산 공식을 참조할 수 있다.
오라클
오라클은 예측 결과, 즉 사건이 발생했는지를 제공하는 데 사용된다. 오라클은 프로토콜의 가장 중요한 구성 요소 중 하나이지만, Polymarket 팀이 아닌 제3자 서비스에 의해 운영되며, 이를 UMA라고 한다.
UMA는 블록체인 상에 모든 유형의 데이터를 기록하기 위한 탈중앙화 오라클이지만, 검증할 수 없는 데이터는 제외된다. 이 오라클은 낙관적(Optimistic)이며, 논란이 제기되지 않는 한 데이터는 기본적으로 올바른 것으로 간주된다. UMA는 논란 해결을 위한 자체 중재 시스템을 갖추고 있으며, 중재인은 실제 인간, 즉 UMA 생태계 참여자, 특히 UMA 토큰 보유자들이다. 이 시스템을 DVM(Data Verification Mechanism)이라 부른다.
예측 결과를 결정하고 블록체인에 기록하는 과정은 다음과 같다:

-
Statement: 예측과 함께 보상이 오라클에 추가된다. 예측 결과 정산에 성공적으로 이의를 제기한 사람은 보상을 받을 수 있다;
-
Challenge period: 논란 제기 기간으로, 누구든지 예측 결과에 이의를 제기할 수 있다. 만약 논란이 발생하지 않고 기간이 종료되면, 예측 결과는 최종 정산 준비 상태로 간주되며, 이는 그 정확성을 나타낸다;
-
Dispute: 논란. 프로토콜 참여자는 결과에 대해 이의를 제기할 수 있으며, 이는 보상을 얻기 위해서든 공정성을 위해서든 가능하다. 실제로 이러한 상황은 드물며, 게임 이론상 대부분의 참여자가 정직하게 행동하기 때문이다.
-
Voting: 투표. 논란이 제기되면 UMA 토큰 보유자가 투표를 통해 논란을 해결한다. UMA는 투표에 사용되는 프로토콜 토큰이며, 참여자는 투표 참여에 대한 보상을 받는다.
-
Settlement: 마지막 단계는 정산 과정으로, 블록체인에 실제로 데이터를 기록하는 것이다. 이후 예측 결과는 신뢰할 수 있다고 간주된다.
전체 프로토콜은 게임 이론을 기반으로 하며, 어떠한 참여자라도 악의적인 행위는 경제적으로 불리하다.
-
예측 결과를 제출하여 투표에 참여하는 자는 스마트 계약에 담보물을 제공한다. 만약 그들의 결과에 이의가 제기되면 담보물을 잃게 된다. 그렇지 않으면 담보물을 회수하고 보상을 받는다. 이는 정확한 결과만 제출하도록 강력한 동기를 부여한다.
-
예측 결과에 이의를 제기하는 참여자도 담보물을 제공한다. 만약 옳다면 담보물을 돌려받고 보상을 받지만, 틀리면 담보물을 잃는다. 이는 참여자가 확실히 잘못된 결과에 대해서만 이의를 제기하도록 유도한다.
-
논란 해결에 참여하는 자는 UMA 토큰을 스테이킹(staking)해야 하며, 논란 해결에 대한 보상을 받는다. 만약 잘못 투표하거나 전혀 투표하지 않으면 일부 스테이킹 잔액을 잃게 되며, 그렇지 않으면 보상을 받는다. 게으름을 피울 수 있는 방법은 없다.
특히 주목할 점은, 논란 중 투표 과정이 commit/reveal 방식으로 두 단계로 나뉘어 있다는 것이다:
-
Commit: 제출. 참여자는 투표의 해시값을 스마트 계약에 제출함으로써 비밀 투표를 한다. 이는 해시값만으로는 누가 어떻게 투표했는지 알 수 없게 한다.
-
Reveal: 공개. 투표 기간 종료 후, 참여자는 자신의 투표를 공개하며, 스마트 계약은 이 투표가 이전에 제출한 해시값과 일치하는지 검증한다.
이러한 2단계 투표 방식은 투표자들이 공모하여 오라클을 훼손하거나 예측 결과에 의존하는 서비스를 공격하는 것을 방지한다. 동시에 예측 결과는 여러 차례 이의 제기가 가능하며, 이 경우 UMA는 이전 논란 종료 후 의사결정 과정을 재개할 수 있다.
논란 제기 과정은 다음과 같다:

결론
일견 단순한 도박 및 예측 시스템처럼 보이는 Polymarket은 사실상 세 가지 주요 모듈로 구성되어 있으며, 각각은 서로 다른 프로토콜과 팀에 의해 개발되었다:
-
CTF(조건부 토큰 프레임워크): 예측 내 조합, 입장, Share를 관리하는 프레임워크로, Gnosis가 개발한 이 유연한 프레임워크는 예측 시장에 매우 적합하다.
-
CLOB(중앙 제한 주문장): Polymarket이 주문장과 제한 주문을 구현하기 위해 사용하는 내부 솔루션. CLOB은 사용자가 생태계에 효과적으로 참여하고 유동성을 집약하는 데 도움을 준다.
-
UMA: 독특한 논란 해결 중재 시스템을 갖춘 탈중앙화 오라클. UMA는 핵심 요소로서 블록체인을 통해 예측 결과를 전달한다.
Polymarket은 도박 시스템이지만, 기술적으로 보면 다양한 프로젝트의 기술을 성공적으로 통합하였으며, 개발자들에게 특히 매력적이다.
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News














