원문은 Pavel Naydanov의 글입니다.
편집 | Odaily 별자리 일보 Golem(@web3_golem)

편집자 주: Polymarket은 이번 미국 대선에서 더 많은 관심을 받았습니다. 이는 누적 거래량이 36억 달러를 넘어섰을 뿐만 아니라 여론조사와 전통 미디어보다 먼저 그리고 성공적으로 트럼프의 승리를 예측했기 때문에, Polymarket이 단순한 베팅 사이트가 아니라 더 실제적이고 신뢰할 수 있는 "뉴스 사이트"가 될 것이라는 인식이 생겼습니다(추천 읽기: 《Vitalik의 새 글: 예측 시장에서 정보 금융까지》). Polymarket은 이번 블록체인 혁신의 가장 눈부신 "풍경"일 수 있습니다.
그렇다면 "블록체인 혁명"의 의미를 가진 Polymarket은 기술적으로 어떻게 구현되었을까요? 스마트 계약 개발자 Pavel Naydanov가 Polymarket이 채택한 기술을 자세히 분해하고 설명했습니다. 이는 개발자(특히 예측 시장을 구축하는 후발주자들)에게 시사점이 있습니다. Odaily 별자리 일보는 기술 구현 부분을 번역했으니, 이제 이 프로토콜의 각 부분에 대한 기술 세부 사항을 살펴보겠습니다.
CTF: 결과 토큰화
Polymarket의 모든 이벤트 결과는 토큰화됩니다:
이러한 토큰을 Share token이라고 합니다;
Share는 기본 자산으로 구매되므로 완전히 담보화되어 있습니다;
Share는 기본 자산을 얻기 위해 팔 수 있습니다.
Share token은 Gnosis 조건부 토큰 프레임워크(CTF)를 기반으로 구현된 ERC-1155입니다. 이 프레임워크는 효과가 입증되었고 다양한 프로토콜에서 테스트를 거쳤습니다. CTF는 최대 256개의 결과를 지원할 수 있습니다.
각 예측은 CTF에서 고유한 조건 ID로 식별됩니다. 이 ID는 세 가지 매개변수의 해시 값으로 구성됩니다:
오라클: 이벤트 결과를 결정할 오라클의 주소. 이를 통해 지정된 오라클만이 예측을 정산할 수 있습니다;
질문 ID: 예측 식별자. 예측 생성자가 설정합니다. 이는 단순한 카운터일 수 있고, 이전 예측에 1을 더하는 것일 수 있습니다. 또는 텍스트와 기타 데이터 해시를 사용하는 더 복잡한 방식일 수 있습니다;
outcomeSlotCount: 예측의 가능한 결과 수.
다음 그림은 CTF(조건부 토큰 프레임워크)의 작동 방식을 직관적으로 보여줍니다:

사용자는 베팅 시 기본 자산을 제공하고 Share token을 받습니다. CTF에서는 이를 조건부 토큰이라고 합니다. 오라클이 예측 결과를 결정한 후 사용자는 예측 결과에 따라 CTF에서 보상을 받을 수 있습니다.
사용자가 조건부 토큰을 받을 때 특정 입장을 취한 것으로 간주됩니다. CTF에서 입장은 각 예측의 가능한 결과 조합을 나타냅니다. CTF는 이러한 입장을 각 예측에 대해 생성하며, 각 입장은 사용자가 선택할 수 있는 가능한 결과 조합 중 하나에 해당합니다.
예를 들어:
2024년 최고 흥행 영화는 무엇일까요?
인사이드 아웃 2
데드풀 3
조커 2
미니언즈 4
듄 2
매드 맥스 4
기타
사용자는 "인사이드 아웃 2"가 2024년 최고 흥행 영화가 될 것이라고 투표하거나, "듄 2"가 절대 2024년 최고 흥행 영화가 되지 않을 것이라고 투표할 수 있습니다. 이러한 예측 조합이 그들의 입장으로 간주됩니다.
CTF는 입장을 처리하는 두 가지 흥미로운 메커니즘을 제공합니다: 분할 및 병합. 분할 메커니즘을 통해 단일 입장을 여러 개별 결과로 분할할 수 있으며, 병합을 통해 다른 결과를 단일 입장으로 결합할 수 있습니다. 이러한 메커니즘을 통해 사용자는 자신의 입장을 유연하게 관리할 수 있습니다.
CTF는 Polymarket에 네 가지 주요 이점을 제공합니다:
Share token을 사용하여 사용자의 특정 예측 결과에 대한 투표를 확인할 수 있습니다;
사용자의 투표를 다양한 입장으로 구성할 수 있는 유연한 시스템을 구현했습니다;
오라클의 신호에 따라 결과 계산의 책임을 CTF에 위임했습니다;
승리 결과의 Share token 수에 따라 보상을 계산합니다.
또한 CTF는 사용자의 입장이 병합될 수 있는 관련 활동을 허용합니다. 그러나 현재 Polymarket에는 이러한 사례가 없습니다. CTF에 대한 자세한 내용은공식 문서에서 확인할 수 있습니다.
주문 메커니즘

구매를 위해 Polymarket 인터페이스는 세 가지 유형의 주문을 제공합니다:
시장가 주문 - 현재 시장 가격으로 즉시 구매;
지정가 주문 - 지정한 가격에 도달하면 구매할 수 있는 지연 주문;
자동화된 마켓 마이커(AMM) - 풀의 준비금 금액에 기반하여 탈중앙화 거래소와 유사한 가격으로 자동으로 결정된 가격으로 구매.
현재 AMM 주문 기능은 작동하지 않는 것 같으며 AMM을 통한 구매가 허용되는 예측을 찾을 수 없습니다. Polymarket의 Discord에서 한 사용자의 댓글이 이 상황을 어느 정도 설명합니다.

AMM은 구식이 되었습니다.
Polymarket 문서에 따르면 AMM은 조건부 토큰 프레임워크의 일부 스마트 계약으로 개발되었습니다. 따라서 AMM은 Share token의 구매 가격을 결정하는 데 사용됩니다. 이 기본 메커니즘에는 안정적인 가격 책정과 변동성 감소를 위해 유동성이 필요합니다. 유동성 공급자는 시스템 운영을 위해 각 구매에서 보상을 받는 경제적 인센티브가 필요합니다.
초기에 Polymarket은 CTF에 완전히 기반했을 수 있으며 AMM을 사용하여 가격을 결정했을 것입니다. 그러나 시간이 지남에 따라 프로토콜은 주문장을 포함하는 혼합 솔루션을 개발했고, 지정가 주문과 시장가 주문이 이 맞춤형 솔루션에서 작동하기 시작했습니다. 이 솔루션을 CLOB(중앙 제한가 주문장) 또는 BLOB(이진 제한가 주문장)이라고 합니다.
CLOB 및 BLOB
CLOB(중앙 제한가 주문장) 또는 BLOB(이진 제한가 주문장)은 혼합 분산형 주문장 시스템을 나타냅니다. 이 시스템에서 전용 운영자는 주문 매칭을 처리하고 스마트 계약 실행을 시작합니다.
자세한 설명 없이도 시스템은 다음 그림과 같습니다:

사용자는 실행할 주문을 생성할 수 있으며, 이는 지정가 주문 또는 시장가 주문일 수 있습니다. 운영자는 사용자 주문을 매칭하고 스마트 계약 실행을 시작합니다. 주문 생성은 EIP-712 표준에 따라 사용자 개인 키로 서명된 데이터 구조를 생성하는 것을 의미합니다. 주문이 실행되기 전에 오프체인에 저장되므로 주문 조건을 빠르고 무료로 조정하거나 완전히 취소할 수 있습니다.
그러나 주문장과 주문 매칭과 관련된 모든 내용은 API를 통해서만
그러나 Exchange.sol 스마트 컨트랙트는 공개되어 있으며, CTF에서 사용자 입장을 생성하는 역할을 합니다. 또한 사용자 입장을 관리하고 자산을 전송할 수 있어 프로토콜 내의 보안성과 투명성을 보장합니다.

이 스마트 컨트랙트는 감사를 거쳤으며, 감사 보고서가 저장소에 첨부되어 있습니다.
스마트 컨트랙트
Exchange 스마트 컨트랙트의 실제 이름은 CTFExchange.sol입니다. 약 100줄의 코드로 구성되어 있지만 많은 종속성을 가지고 있습니다.

대부분은 제한된 기능을 구현하는 작은 스마트 컨트랙트들입니다:
BaseExchange.sol: ERC-1155 토큰 수신 기능을 구현하는 추상 스마트 컨트랙트이며, 재진입 공격을 방지합니다.
Auth.sol: 역할 관리자로, CTFExchange.sol의 관리자와 운영자를 정의하는 인증 함수와 수정자를 포함합니다.
Assets.sol: 기본 자산(담보)과 CTF 주소의 두 가지 자산을 정의합니다.
Fees.sol: 프로토콜 수수료를 정의합니다.
Pausable.sol: 예기치 않은 상황 발생 시 프로토콜이 중앙화된 방식으로 대응할 수 있는 스마트 컨트랙트 작업 일시 중지 기능을 정의합니다. 관리자 역할에만 적용됩니다.
AssetOperation.sol: 기본 자산과 CTF의 작업을 정의합니다. 입장 전송, 분할 및 병합을 포함합니다.
Signature.sol: 주문 확인 시 사용되는 사용자 서명의 코드를 정의합니다.
Hashing.sol: 서명 확인에 사용되는 주문 매개변수의 해시 값을 정의합니다.
Registry.sol: 시스템에 예측을 등록하고 예측에 토큰을 등록하는 프로세스를 정의합니다.
실제 주문 실행과 관련된 모든 내용은 Trading.sol에 구현되어 있습니다.코드를 살펴보고 스마트 컨트랙트를 연구하는 것도 쉽습니다. 이 구조는 함수를 통해 명확한 진입점을 정의합니다:
fillOrder() — 주문을 생성한 사용자와 선택한 호가(다른 주문) 간에 주문을 실행합니다.
fillOrders() — fillOrder()와 동일하지만 주문 목록에 대해 수행합니다.
matchOrders() — 운영자가 두 개의 다른 주문을 선택하고 실행합니다.
위의 모든 함수는 운영자만 호출할 수 있습니다.

스마트 컨트랙트에 어떻게 접근하든 결과는 항상 동일합니다: 두 사용자가 자신의 주문에 따라 토큰을 교환합니다.
프로토콜 수수료
수수료는 출력 자산을 기준으로 부과됩니다. 이진 예측의 경우 수수료는 대칭적이므로: 사용자가 0.99달러에 토큰을 판매하면 0.01달러에 토큰을 구매하는 구매자와 동일한 수수료를 지불합니다.
계산 공식은 간단하며 공식 문서에서 가져왔습니다:

유동성 보상 프로그램
이 프로그램의 전반적인 목표는 시장 유동성을 높이는 것입니다.
주문 장부 기반 거래소가 제대로 작동하려면 한계가격 주문을 생성하는 사람이 필요합니다. 이러한 한계가격 주문은 시장가 주문의 즉각적인 실행을 가능하게 하는 유동성을 제공하며, 이러한 한계가격 주문을 생성하는 사용자를 시장 조성자라고 합니다. 한계가격 주문이 시장 가격에 더 근접할수록 시장 주문의 실행 속도가 빨라지고 거래량도 늘어나, 최종 사용자에게 이점이 됩니다. 또한 유동성이 높을수록 시장 조작이 어려워집니다.
충분한 유동성을 보장하기 위해 Polymarket은 한계가격 주문을 생성하는 사용자를 장려하는 특별한 보상 프로그램을 마련했습니다. 한계가격 주문이 평균 시장 가격에 더 근접할수록 보상이 높아집니다. 보상은 매일 자정(UTC 기준)에 자동으로 지급됩니다.
이 시스템은 dYdX를 모델로 했으며, 자세한 내용은 원래 dYdX의 유동성 공급자 보상 프로그램과 Polymarket의 자세한 유동성 보상 계산 공식을 참조하세요.
오라클
오라클은 예측 결과를 제공합니다 - 이벤트가 발생했는지 여부와 관계없이. 오라클은 프로토콜의 가장 중요한 구성 요소 중 하나이지만 Polymarket 팀이 아닌 제3자 서비스인 UMA에 의해 제공됩니다.
UMA는 블록체인에 모든 유형의 데이터를 기록할 수 있는 탈중앙화된 오라클입니다. 단, 검증할 수 없는 데이터는 제외됩니다. 이 오라클은 낙관적이어서 분쟁이 없는 한 데이터가 정확한 것으로 간주됩니다. UMA에는 분쟁을 해결하기 위한 자체 중재 시스템인 DVM(Data Verification Mechanism)이 있으며, 중재자는 UMA 생태계의 참여자, 특히 UMA 토큰 보유자입니다.
예측 결과를 결정하고 블록체인에 기록하는 프로세스는 다음과 같습니다:

Statement: 예측과 보상이 오라클에 추가됩니다. 예측 결과에 이의를 제기하고 보상을 받을 수 있는 사람은 누구나 가능합니다.
Challenge period: 이의 제기 기간으로, 이 기간 동안 누구나 예측 결과에 이의를 제기할 수 있습니다. 이의 제기가 없고 시간이 지나면 예측 결과가 최종 정산을 위해 준비된 것으로 간주됩니다.
Dispute: 분쟁으로, 프로토콜 참여자는 누구나 보상을 받기 위해서든 공정성을 위해서든 결과에 이의를 제기할 수 있습니다. 실제로 이런 경우는 드물게 발생하는데, 이는 대부분의 참여자가 정직하게 행동한다는 게임 이론 때문입니다.
Voting: 투표로, 분쟁이 발생하면 UMA 토큰 보유자가 분쟁을 해결하기 위해 투표합니다. UMA는 투표에 사용되는 프로토콜 토큰이며, 참여자는 투표에 참여하면 보상을 받습니다.
정산: 마지막 단계는 정산 프로세스로, 데이터가 실제로 블록체인에 기록됩니다. 이 후에 예측
제출된 예측 결과에 대한 투표에 참여하는 참여자는 담보를 스마트 계약에 제공합니다. 그들의 결과가 의문시되면 그들은 담보를 잃게 될 것입니다. 그렇지 않으면 그들은 담보를 되찾고 보상을 받게 될 것입니다. 이는 정확한 결과만 제출하도록 강력한 동기를 부여합니다.
예측 결과에 이의를 제기하는 참여자들도 담보를 제공해야 합니다. 그들이 옳다면 그들은 담보를 되찾고 보상을 받을 것입니다. 그렇지 않으면 그들은 담보를 잃게 될 것입니다. 이는 참여자들이 확신하는 잘못된 결과만 도전하도록 동기를 부여합니다.
분쟁을 해결하는 참여자들입니다. 그들은 우마(UMA) 토큰을 담보로 제공해야 하며, 분쟁 해결로 인한 보상을 받게 될 것입니다. 그들이 잘못 투표하거나 투표하지 않으면 그들은 일부 담보 잔액을 잃게 될 것입니다. 그렇지 않으면 그들은 보상을 받게 될 것입니다. 게으름은 용납되지 않습니다.
특히 주목할 만한 점은 분쟁 중 투표 프로세스가 두 단계의 commit/reveal 방식을 사용한다는 것입니다:
Commit: 참여자들은 투표 해시값을 스마트 계약에 제출함으로써 비밀리에 투표합니다. 이는 해시값만으로는 참여자가 어떻게 투표했는지 알 수 없음을 의미합니다.
Reveal: 투표 단계가 끝난 후 참여자들은 그들의 투표를 공개하며, 스마트 계약은 이것이 이전에 제출된 해시값과 일치하는지 확인합니다.
이러한 두 단계 투표 프로세스는 유권자들이 예언기 또는 예측 결과에 의존하는 서비스를 훼손하기 위해 공모하는 것을 방지할 수 있습니다. 또한 예측 결과는 여러 번 의문시될 수 있으며, 이 경우 우마(UMA)는 이전 분쟁이 해결된 후 의사 결정 프로세스를 다시 시작할 수 있습니다.
분쟁 개시 프로세스는 다음과 같습니다:

결론
Polymarket은 겉보기에 단순한 도박 및 예측 시스템이지만 실제로는 세 가지 주요 모듈로 구성되어 있으며, 각 모듈은 다른 프로토콜과 팀에 의해 개발되었습니다:
CTF(조건부 토큰 프레임워크): 예측에서의 포지션, 지분 및 Share를 관리합니다. 노시스(Gnosis)가 만든 이 유연한 프레임워크는 예측 시장에 매우 적합합니다.
CLOB(중앙 한정가 주문장): Polymarket이 주문장과 한정가 주문을 구현하는 내부 솔루션입니다. CLOB을 통해 사용자는 생태계에 효과적으로 참여하고 유동성 집계를 돕습니다.
우마(UMA): 독특한 분쟁 해결 중재 시스템을 갖춘 탈중앙화 오라클입니다. 우마(UMA)는 시스템의 핵심으로, 블록체인을 통해 예측 결과를 전송합니다.
Polymarket은 베팅 시스템이지만 기술적으로 볼 때 이 프로토콜은 다양한 프로젝트의 기술을 성공적으로 결합했으며, 이는 개발자들에게 특히 매력적입니다.
관련 기사






