PoCs

한 시점의 가격 — 그 순간, 그 창, 그리고 그것을 움직일 수 있는 자

폴리마켓의 5초 트릭과 Balance Coin 오라클 공격은 **같은 결함**입니다 — **가격 하나, 순간 하나, 검증 범위 없음, 지연 없음.** Push 대 Pull 오라클의 갈림은 정확히 그 문제 때문에 존재하고, **해법은 원칙이 아니라 숫자가 붙은 파라미터**입니다.

어떻게 보나

**모델링보다 공격의 값을 매기는 것부터**: 기준 거래소의 호가창 깊이가 주어졌을 때, **가격을 X만큼 T초 동안 움직이는 데 드는 비용은 얼마이며, 평균 창이 길어질수록 그 비용은 어떻게 커지는가.** 그다음 나머지 절반을 **코드로 추적**합니다 — Data Streams 문서의 **오프체인 서명 검증 경로** — 그리고 **단일 마켓 정산의 상한 가스 비용**을 계산합니다. **마켓당 단위 경제를 계산 가능하게 만드는 숫자**입니다. 출처: 스탠퍼드/SMU 정산 조작 연구(CoinDesk 2026-08-07), SlowMist 의 Balance Coin 오라클 익스플로잇 분석(2026-07-22), docs.chain.link/data-streams.

기술 노트

각 항목이 실제로 무엇을 보여주고 어떻게 동작하는지 — 위 카드보다 자세한 기술 설명입니다.

한 시점의 가격 — 그 순간, 그 창, 그리고 그것을 움직일 수 있는 자완료

목적: **2026년의 두 사고는 무관해 보이지만 아닙니다.** 폴리마켓은 단기 암호자산 계약을 **한 시점의 가격 하나**로 정산했고, 스탠퍼드와 싱가포르경영대 연구진은 조작 가능성이 높다고 분류한 정산 구간에서 **계정 821개가 820만 달러를 빼갔다**고 기록했습니다 — **그 구간 손실의 93%가, 마켓메이커를 제외하면, 리테일에 떨어졌습니다.** Balance Coin 은 대출 컨트랙트가 **타당 범위 검증도, 청산 지연도 없이** 오라클 가격을 받아들이게 두었고, 공격자는 비정상적으로 낮은 비트코인 가격을 써넣어 **애초에 대상이 아니던 볼트를 즉시 청산**해 약 **91만 2천 달러**를 가져갔으며, **350만 달러짜리 스테이블코인이 99% 넘게 붕괴**했습니다. **둘 다 암호학의 실패가 아니었고, 컨트랙트 산술의 버그도 필요 없었습니다. 둘 다 한 시점의 가격 하나를 읽고 그것을 진실로 취급했습니다.** 이것이 사후분석 두 건이 아니라 카드인 이유는 **해법이 원칙이 아니라 파라미터**이기 때문입니다 — **평균 창은 얼마나 길어야 하고, 검증 밴드는 얼마나 좁아야, 입력을 움직이는 비용이 그것이 여는 보상보다 커지는가?** **그리고 카드의 나머지 절반은, 왜 그 질문에 답하려고 오라클 아키텍처 하나가 통째로 존재하는가입니다.** Chainlink Data Feeds 와 Data Streams 의 차이는 **Push 와 Pull 의 경계**입니다. **Push**: 오라클 노드가 편차 임계(예: 0.5%)나 하트비트 간격(예: 1시간)에 따라 온체인에 가격을 계속 씁니다. 컨트랙트는 최신 온체인 상태를 읽지만 **기록 사이의 가격은 본질적으로 낡았고**, 오라클 네트워크가 가스를 무한정 부담합니다. **Pull**: 고빈도 데이터가 **오프체인에서 집계되고 암호학적으로 서명**됩니다. 정산 시 호출자가 **타임스탬프가 찍힌 서명 리포트**를 가져와 트랜잭션과 함께 제출하고, 컨트랙트가 **온체인에서 서명을 검증**해 **바로 그 순간의 가격**으로 실행합니다. **이건 성능 개선이 아니라 위 사고에 대한 답입니다.** 예측시장은 *UTC 16:00:00 종가* 나 *사건 발생 시점의 가격* 으로 해소됩니다. **Push 피드는 그 순간의 값을 아예 갖고 있지 않을 수 있습니다** — 그 초에 편차가 갱신을 트리거하지 않았다면. **Pull 은 그 시점에 서명된 리포트를 가져올 수 있습니다.** 폴리마켓이 실제로 낸 해법은 공개돼 있고 **지어내는 대신 시험할 만큼 구체적**입니다 — 단일 가격 스냅샷을 **TWAP** 로 교체: **5분 마켓 30초, 15분·4시간 마켓 60초**, 출처는 Data Streams. **Kalshi 가 규제 지수와 이동평균으로 이미 하는 것과 같은 모양**입니다. **한계는 분명히 말할 값이 있습니다. 이것이 문제의 얼마를 푸는지를 결정하기 때문입니다.** Data Streams 는 **가격 상품**입니다. **범주형 결과** — 누가 선거에서 이겼는가, 마일스톤이 달성됐는가 — 는 해소하지 못하고, 그건 여전히 **분산 합의와 CRE** 의 영역입니다. 이벤트 계약의 상당 부분이 가격이 아니라 사건이므로, **`event-contract-plumbing` 표에서 이것이 채우는 것은 그 칸의 대략 절반**입니다.

동작 방식: ### Push 대 Pull, 그리고 갈림이 존재하는 이유 | | **Data Feeds (Push)** | **Data Streams (Pull)** | |---|---|---| | **가격이 사는 곳** | 오라클 노드가 온체인에 기록 | **오프체인에서 집계·서명** | | **갱신 트리거** | 편차 임계(예: 0.5%) 또는 하트비트(예: 1시간) | **연속, 서브초** | | **갱신 사이의 낡음** | **본질적** | 없음 — 필요한 순간을 호출자가 가져옴 | | **가스 부담** | 오라클 네트워크가 무한정 | **호출자가, 상태 전이가 필요할 때만** | | **임의 시점의 가격** | **없을 수 있음** | 그 밀리초에 서명된 리포트 | | **비용 예측 가능성** | 무한, 외부 부담 | **해소 호출당 — 마켓 단위로 계산 가능** | ### 손잡이 셋, 그리고 그것을 정하는 곡선 | 손잡이 | 하는 일 | 크기 정하는 법 | |---|---|---| | **창 길이** | 짧은 밀어붙임을 평균으로 지움 | **조작 비용을 창 길이에 대해 그리고, 보상과 만나는 지점이 설계 산출물** — 창 자체가 아니라 | | **밴드 폭** | 타당하지 않은 가격을 아예 거부 | **평균보다 싸고 독립적** — Balance Coin 의 기여 | | **지연** | 나쁜 가격을 알아챌 수 있었던 간격 | **지연 오버헤드가 아니라 탐지 창** | 기준 거래소 중간가를 X만큼 T초 움직이는 비용은 **호가창 깊이의 함수**이고, 보상은 **정산까지 들고 간 명목금액**입니다. **그 두 곡선이 교차하는 것이 모델 전부입니다.** ### Pull 의 구체적 이점 셋 - **필요할 때만 가스** — 아무도 안 읽는 가격을 쓰느라 가스를 태우지 않음. - **서브초 지연** — 블록 타임이나 하트비트에 묶이지 않음. - **밀리초 단위** — 만기 있는 계약의 결정론적 정산이 요구하는 바로 그것. ### 이벤트 계약 표에서 오라클의 자리 `event-contract-plumbing` 은 규제 스택 요구사항을 **공짜·직접구축·답없음**으로 나눕니다. **정산과 감사 추적은 온체인에서 공짜로 옵니다. "특정 순간의 값"은 아닙니다** — 그리고 이벤트 계약 정산이 바로 그것에 달려 있습니다. 규제 거래소가 **시장데이터 벤더 계약과 감사 추적 의무**로 푸는 것을, 온체인 거래소는 **서명된 리포트를 검증**해서 풉니다. 비용 상한 질문에도 답합니다 — **호출당 지불이 마켓당 경제를 계산 가능하게** 만들고, 이것이 **Chainlink Functions 가 주지 못했던 성질이자 그것이 sunset 된 이유**입니다. ### 가져갈 한 줄 **오라클 확정과 거래 중단 사이의 간격을, 구현 세부가 아니라 자체 원자성 요건을 가진 공격면으로 취급할 것.** **정산할 가격이 이미 정해진 뒤에도 포지션을 열 수 있다면, 그 창이 곧 제품입니다** — `arb-bots-are-the-peg` 가 거래하지 않는 밴드에, `priced-by-the-wrong-thing` 이 연속 공표되지 않는 마크에 적용하는 **같은 논리**입니다.

Chainlink Data Streams: 오프체인 서명 Pull 흐름