36장 중 36장

요약

2026년 4월 28일 Polymarket는 Polygon의 결제 담보를 USDC.e(브리지된 USDC 토큰, 계약 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)에서 네이티브 USDC와 1:1로 상환 가능한 Polymarket 발행 스테이블코인인 pUSD로 이전했습니다. 웹 앱 트레이더는 아무것도 할 필요가 없었으며 - 스냅샷 블록에서 잔액과 포지션이 자동 전환되었습니다. API와 봇 운영자는 업데이트해야 합니다: 모든 CLOB 주문 서명 안의 담보 자산 주소가 변경되었고, 기존 USDC.e 기준으로 서명된 주문은 취소되었으며, py-clob-client 0.40 이상이 필요합니다. 이 가이드는 봇이 전환 과정 중과 이후에도 계속 실행되도록 필요한 정확한 코드, 계약, 승인 변경 사항을 안내합니다.

배울 내용: Polymarket이 왜 USDC.e에서 벗어났는지, 계약 수준에서 무엇이 바뀌었는지, 정확한 py-clob-client 업그레이드 경로, 새 담보에 대한 허용량을 다시 승인하는 방법, 스왑 후 잔액을 확인하는 방법, 그리고 현재 대부분의 계정이 보유한 기존 USDC.e 잔여분을 처리하는 방법을 알아봅니다.
사전 요구 사항: 이미 작동하는 Polymarket 계정, Polygon 계약에 대한 기본적인 이해, 그리고 2026년 4월 28일 이전에 만들어진 기존 봇 또는 수동 API 워크플로가 있어야 합니다. 오늘 새로 시작하는 경우 최신 SDK만 설치하고 네 번째 장으로 건너뛰면 됩니다 - USDC.e를 다룰 일은 전혀 없을 것입니다.
01
제1장

1부: 세 개의 스테이블코인, 하나의 Polygon

이전 마이그레이션 전, Polymarket의 Polygon 상에는 세 가지 USD 스테이블코인이 존재했습니다. 그 차이를 아는 것이 Polymarket이 왜 거래 장소를 바꿨는지 이해하는 첫걸음입니다.

토큰발행자Polygon 상의 계약준비금 유형
USDC.ePolygon PoS bridge0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174Ethereum 메인넷에서 브리지됨
USDC (native)Circle0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359네이티브, Polygon에 직접 발행
pUSDPolymarket TreasurySee docs.polymarket.com/pusd네이티브 USDC로 1:1 담보, 월별 증명

Polymarket은 출시 당시인 2020년에 Polygon에서 지배적인 USDC 변형이었기 때문에 원래 USDC.e를 선택했습니다. 이후 Circle은 Polygon에 네이티브 USDC를 직접 발행했고, 브리지 버전이 결국 단계적으로 폐지될 것임을 시사했습니다. 모든 시장의 결제를 계속 USDC.e로 처리하면, Polymarket은 브리지의 갑작스러운 종료라는 장기 꼬리 위험에 노출되었습니다. Polymarket이 통제하는 스테이블코인으로 마이그레이션하면 이 문제를 해결할 수 있고, 동일한 계산 단위를 공유하는 향후 제품 기능(예: 무기한 선물 증거금, 금고 예치, 크로스체인 영수증)도 가능해집니다.

02
2장

2부: pUSD란 무엇인가(그리고 무엇이 아닌가)

pUSD는 Polygon(체인 ID 137)에서 6자리 소수점을 가진 표준 ERC-20 토큰으로, USDC와 같은 정밀도를 가집니다. pUSD는 Polymarket Treasury 계약만이 발행할 수 있으며, 언제든지 수수료 없이 네이티브 USDC로 1:1 상환할 수 있습니다(네트워크 가스비는 여전히 적용됨). pUSD를 뒷받침하는 준비금은 분리된 계정에 보관되며, 제3자 확인서와 함께 매월 보고됩니다.

pUSD는 알고리즘 스테이블코인이 아니며, 암호화폐로 과담보화되지도 않고, 이자 수익도 발생하지 않습니다. Polymarket 외부에서 pUSD를 보유한다면, 이를 네이티브 USDC에 대한 Polymarket 발행 IOU로 생각하는 것이 좋습니다 - 플랫폼 내부에서는 유용하지만, 필요 시 상환 가능하며, 외부 지갑에 장기 보유한다고 해서 얻는 이점은 없습니다.

감사 및 준비금: pUSD 스마트 계약은 Polymarket의 상시 감사인에 의해 감사되었습니다. 준비금 확인 보고서는 매월 docs.polymarket.com/pusd-audit에 게시됩니다. 큰 금액을 장기 보유하기 전에 두 가지 모두 확인하세요.
03
제3장

3부: 웹 앱 트레이더가 본 것

polymarket.com을 통해서만 거래한다면, 마이그레이션은 보이지 않았습니다. 2026년 4월 28일 스냅샷 블록에서:

  • Polymarket 프록시 지갑에 보유된 모든 USDC.e 잔액은 1:1 비율로 pUSD로 원자적으로 변환되었습니다.
  • 열린 포지션은 동일한 달러 가치, 동일한 결과 오즈, 동일한 만료 시점을 유지했습니다. 조건부 토큰 ID는 변경되지 않았습니다.
  • USDC.e로 표시된 대기 중인 주문은 스냅샷 시점에 취소되었습니다. 마이그레이션 이후의 새 주문은 자동으로 pUSD를 기준으로 서명됩니다.
  • 외부 지갑으로의 출금은 USDC.e 전송에서 네이티브 USDC 전송으로 바뀌었습니다(또는 요청 시 원시 pUSD - 대부분의 사용자는 이를 필요로 하지 않습니다).

서명, 트랜잭션 또는 설정 변경은 필요하지 않았습니다. 중요했던 대기 중인 지정가 주문은 마이그레이션 후 수동으로 다시 넣어야 합니다. 취소는 일회성 이벤트였습니다.

04
4장

4부: API 및 봇 운영자 - 중요한 변경 사항

이 부분은 아무 조치도 하지 않으면 봇이 깨지는 부분입니다.

주문 서명에서 무엇이 바뀌었나: CLOB 주문은 EIP-712를 통해 서명되며, 타입 데이터의 일부로 담보 자산 주소를 참조합니다. 마이그레이션 이전에는 그 주소가 USDC.e(0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)였습니다. 마이그레이션 이후에는 pUSD입니다. 이전 주소로 서명된 주문은 CLOB에서 서명 검증에 실패하며 "invalid 메이커 (maker) asset" 또는 "signature mismatch" 오류를 반환합니다.

py-clob-client 업그레이드

Polymarket은 전환 2주 전에 pUSD를 완전히 지원하는 py-clob-client 0.40.0을 공개했습니다. 0.34.x 라인은 마이그레이션 다음 날 종료되었습니다.

# pUSD를 인식하는 릴리스로 올리기
pip install --upgrade "py-clob-client>=0.40.0"

# 연결된 담보 자산 확인
python -c "from py_clob_client.constants import POLYGON; \
print('pUSD address:', POLYGON.get('collateral'))"

새 SDK는 시작 시 체인 설정에서 담보 주소를 가져오므로, 하드코딩할 필요가 전혀 없습니다. 포크했거나 더 오래된 버전을 고정해 사용 중이라면, 가장 안전한 방법은 lockfile을 삭제하고 최신 constants 모듈로 다시 설치한 뒤 테스트 스위트를 다시 실행하는 것입니다.

승인 허용량 다시 설정

Polymarket 프록시 지갑은 사용자 거래 계정 → CTF Exchange 계약에 대해 pUSD 토큰의 ERC-20 허용량이 필요합니다. USDC.e에 대한 기존 허용량은 아직 체인에 남아 있지만 완전히 쓸모가 없습니다. CLOB는 이를 사용하지 않습니다. 새로운 pUSD 허용량이 없으면 모든 주문이 "INSUFFICIENT_ALLOWANCE"를 반환합니다.

from py_clob_client.client import ClobClient

client = ClobClient(
    host="https://clob.polymarket.com",
    chain_id=137,
    key=os.environ["POLY_PRIVATE_KEY"],
    funder=os.environ["POLY_FUNDER"],
    signature_type=1,  # Magic-link 계정용 POLY_PROXY
)
client.set_api_creds(client.create_or_derive_api_creds())

# 한 번만: CTF Exchange 계약에 대해 pUSD 승인
# (헬퍼는 py-clob-client 0.40에 추가됨)
client.update_balance_allowance(asset_type="COLLATERAL")

API 자격 증명 새로 고침

기존 API 키는 계속 작동하지만, 4월 1일 이전에 자격 증명을 생성했다면 예방 차원에서 교체해야 합니다. 이제 L1 ECDSA 서명은 새 담보 주소를 포함하는 도메인에 바인딩되기 때문입니다. 가장 간단한 방법은 다음과 같습니다:

creds = client.create_or_derive_api_creds()  # 멱등적으로 다시 생성
client.set_api_creds(creds)

# .env에 저장
print(creds.api_key, creds.api_secret, creds.api_passphrase)
05
5장

파트 5: 마이그레이션 후 봇 검증하기

실제 자금으로 어떤 사이징 로직도 돌리기 전에 이 최소 스모크 테스트를 실행하세요:

# 1. 프록시 지갑의 pUSD 잔고 확인
from py_clob_client.client import ClobClient
client = ClobClient(...)  # 위와 동일
balance = client.get_balance_allowance(params={"asset_type": "COLLATERAL"})
print("pUSD 잔고(원시):", balance["balance"])
print("거래소에 대한 허용량:", balance["allowance"])

# 2. 호가에 크게 벗어난 위치에 1달러 지정가 주문 제출
from py_clob_client.clob_types import OrderArgs
order = client.create_order(OrderArgs(
    token_id=test_token_id,
    price=0.05,        # 시장과는 전혀 가깝지 않음
    size=20,           # $0.05 기준 $1 명목가치
    side="BUY",
))
resp = client.post_order(order)
print(resp)

# 3. 취소하고 확인
client.cancel(order_id=resp["orderID"])

이 세 호출이 모두 성공하면 연결은 정상입니다. SDK가 pUSD 기준으로 서명했고, 허용량이 인식되며, 주문 원장이 일관적입니다. 천천히 다시 규모를 키우세요.

업그레이드 시점을 신중히 잡으세요: 스냅샷 블록을 지나도록 봇을 계속 실행했다면, 로컬 주문장 상태가 아마 달라졌을 것입니다. 큰 거래소 변경 이후에는 호가를 제시하기 전에 항상 REST 스냅샷과 대조해 정합성을 맞추세요.
06
제6장

6부: 일반적인 오류와 수정

오류 또는 증상원인수정
signature verification failedUSDC.e EIP-712 도메인에 대해 서명된 주문py-clob-client를 0.40+로 업그레이드하고 constants 모듈을 다시 불러오세요
모든 주문에서 INSUFFICIENT_ALLOWANCE프록시에서 CTF Exchange로의 pUSD 허용량이 없음update_balance_allowance(asset_type="COLLATERAL")를 한 번 실행하세요
invalid maker asset하드코딩된 USDC.e 주소가 아직 설정에 남아 있음하드코딩된 담보 주소를 모두 SDK 상수로 교체하세요
지갑에 USDC.e 잔액이 0보다 크게 표시됨 after migration제3자 전송에서 남은 "먼지" 토큰Circle의 CCTP에서 USDC.e를 네이티브 USDC로 다시 브리지하거나 그대로 두세요
WebSocket 재연결 시 빈 호가창이 생성됨이전 구독이 스냅샷 이전의 오래된 시장 상태를 사용함로컬 캐시를 삭제하고 REST 호가창을 다시 가져온 다음 다시 구독하세요
외부 지갑으로 출금 시 USDC 대신 pUSD가 표시됨출금 모달에서 "USDC" 대신 "pUSD"를 선택함"USDC"를 선택하세요 - 브리지가 pUSD → 네이티브 USDC를 1:1로 변환합니다
07
7장

Part 7: 조건부 토큰, 주문 ID, 그리고 변하지 않은 다른 것들

리팩터 범위를 명확히 하기 위해, 마이그레이션 전반에서 안정적으로 유지되는 식별자 목록은 다음과 같습니다:

  • Conditional Token 계약(CTF): 주소가 동일합니다. YES / NO ERC-1155 포지션은 그대로 유지됩니다.
  • condition_id 및 question_id: 시장 파라미터로부터 결정적으로 생성되며, 담보 교체의 영향을 받지 않습니다.
  • token_id(결과): condition_id + 결과 인덱스로부터 파생되며, 변경되지 않습니다.
  • Polymarket 프록시 지갑 주소: 동일한 주소이며, 동일한 Gnosis Safe 스타일 코드입니다.
  • API key, API secret, API passphrase: 여전히 유효합니다(회전을 권장하지만 필수는 아닙니다).
  • WebSocket 스키마: 동일합니다. 새 asset 필드는 체결 이벤트에서 "USDC.e" 대신 "pUSD"로 표시됩니다.
  • Gamma 및 Data API: 인증이 필요 없고, 변경되지 않았습니다. 이들은 담보 토큰을 직접 참조한 적이 없습니다.
작은 UI 변경 하나: 이제 Polymarket 프록시 지갑 화면에는 잔액이 pUSD로 표시되며, 1:1 USD 레이블이 함께 보입니다. 블록 탐색기(PolygonScan, Polygonscan API)는 프록시 지갑의 거래 내역에서 pUSD ERC-20 전송을 표시합니다. 이전 USDC.e 전송은 기록에 계속 보이며, 한동안은 주소에 ERC-20 토큰 행이 두 개 표시될 뿐입니다.
08
8장

8부: 세금 및 장부 기록상의 영향

대부분의 관할권에서 USDC.e를 pUSD로 자동 전환하는 것은 USD에 연동된 스테이블코인의 1:1 동종 교환이며 과세 대상 이벤트를 발생시키지 않습니다. 원가 기준과 보유 기간은 그대로 승계됩니다.

다만 장부 기록상 두 가지는 주의할 만합니다:

  1. 원장 스키마를 업데이트하세요. USDC.e 계약으로 Polygon 거래를 필터링하는 세금 도구, SQLite 원장, 또는 회계사 내보내기 파일은 마이그레이션 이후의 모든 거래를 조용히 놓치게 됩니다. pUSD 계약 주소를 별칭으로 추가하세요.
  2. 스냅샷 전환을 주석으로 남기세요. 대부분의 제도에서 과세 대상은 아니지만, 기록에는 전환 내역을 명확히 남기세요: 금액, 블록, 타임스탬프, 그리고 이것이 1:1 스테이블코인 마이그레이션이라는 메모를 포함하세요. 나중에 관할권에서 이를 문의하면 깔끔한 감사 추적 기록이 필요합니다.

이스라엘 트레이더는 ITA 관련 보고를 위해 세금 가이드를 참고해야 합니다. 마이그레이션 자체는 표준 처리 방식에 변화를 주지 않지만, 계약 주소 변경은 자동 보고 도구에서 중요합니다.

09
9장

파트 9: 전환을 직접 겪은 운영자들의 프로 팁

  1. requirements.txt에서 py-clob-client를 >=0.40,<0.50로 고정하세요. 0.40 라인은 pUSD 주문에 올바르게 서명하는 최소 버전이며, 상한을 고정하면 향후의 호환성 깨짐을 막을 수 있습니다.
  2. 낮은 거래량 시간대에 허용 한도를 다시 승인하세요. update_balance_allowance 호출은 Polygon 트랜잭션 한 번입니다. 빠른 시장 변동 중에 수행하면 가스비 급등을 자초하는 셈입니다.
  3. 4월 28일 전에 USDC.e 잔액을 스냅샷으로 남기세요. 전환이 자동이더라도, 검증 가능한 사전 스냅샷 잔액이 어떤 정산 문제든 이의 제기하는 가장 깔끔한 방법입니다.
  4. 스냅샷 전에 대기 중인 주문을 직접 취소하세요. 어차피 거래소에서 취소했겠지만, 직접 처리하면 "시스템 취소" 항목 대신 깔끔한 원장 기록이 남습니다.
  5. 오래된 대시보드를 주의하세요. 제3자 Polymarket 대시보드(PolymarketAnalytics, Polynance 등)는 pUSD 이벤트를 다시 파싱하는 데 2-3일이 걸렸습니다. 봇의 로컬 DB가 며칠 동안은 공개 대시보드보다 앞설 수 있습니다.
  6. USDC.e 자잘한 잔액은 본인 일정에 맞춰 브리지하세요. 대부분의 계정에는 과거 수수료 리베이트나 피어 간 전송에서 남은 몇 센트의 USDC.e가 있습니다. Circle의 CCTP나 표준 Polygon Portal 브리지를 사용하면 됩니다 - 급할 필요는 없습니다.
  7. 블록 익스플로러 알림에 예전 USDC.e 주소를 계속 넣어 두세요. 전환 후에라도 프록시에서 USDC.e가 빠져나가는 일이 있다면, 즉시 확인할 만한 경고 신호입니다.

다음은?

핵심 요점

Polymarket pUSD 마이그레이션은 이미 Polymarket 봇을 운영 중인 모든 운영자에게 저위험의 일회성 리팩터입니다. py-clob-client를 0.40+로 올리고, pUSD 허용을 다시 승인하고, 1달러 스모크 테스트를 실행한 뒤, 재개하면 됩니다. 그 아래의 인프라(CTF, 조건 ID, 토큰 ID, API 키)는 변경되지 않았으므로, 영향 범위는 작고 롤백도 깔끔합니다.