본문으로 건너뛰기

결과 공간과 단위

CLMSR가 움직이는 바닥은 결과 그리드입니다. 이 문서는 시장이 가격 범위를 어떻게 정의하는지, 오라클 관측값이 틱으로 어떻게 매핑되는지, 그리고 결과 수학과 정산 통화를 왜 분리하는지 설명합니다.

결과 그리드 정의하기

거래가 열리기 전에 각 시장은 OutcomeSpec = (L, U, s, d)를 공표합니다. 하한 L과 상한 U는 오라클 원시 단위(비트코인 종가라면 소수 8자리)로 저장되고, 틱 간격 s가 해상도를 결정합니다. 사용 가능한 빈의 개수는 다음과 같습니다.

n=ULs.n = \left\lceil \frac{U - L}{s} \right\rceil.

메타데이터 d는 오라클 스케일을 기록해 통합자가 이벤트를 해석할 때 어떤 배율을 적용해야 하는지 알려 줍니다.

오라클에서 OutcomeRaw 값을 받으면 Signals는 설정된 그리드에 맞춰 값을 클램프합니다.

b=clamp(OutcomeRawLs,0,n1).b = \mathrm{clamp}\left( \left\lfloor \frac{\text{OutcomeRaw} - L}{s} \right\rfloor, 0, n-1 \right).

모든 빈은 반열린 구간 [L + b s, L + (b+1) s)로 구성됩니다. 상단을 열어 둬서 겹침을 막고, 클램프를 통해 그리드 밖으로 튀어나온 오라클 값이 풀을 공격하지 못하게 합니다.

단위를 분리하는 이유

사용자는 6자리 소수 SUSD로 거래하지만, CLMSR 내부 수학은 18자리 WAD 정밀도를 사용합니다. Signals는 두 체계를 다음처럼 철저히 구분합니다.

  • 통화 단위 (U6): SUSD 차감, 정산, 유동성 예산을 모두 이 단위로 처리합니다.
  • 결과 단위: 틱 매핑과 정산 데이터에서만 쓰는 오라클 원시 스케일입니다.

변환할 때는 10^12를 곱하거나 나눠 6자리 값을 18자리 값으로 바꿉니다.

uint256 constant SCALE_DIFF = 1e12;
wadAmount = amount6 * SCALE_DIFF;
amount6 = wadAmount / SCALE_DIFF;

이 분리는 LMSR 계산을 안정적으로 유지하고, 프런트엔드가 익숙한 소수 자리수를 그대로 보여 주도록 해 줍니다.

유효 범위 조건

포지션은 다음 두 조건을 충족해야 합니다.

  1. lowerTick < upperTick (폭이 0인 범위 금지)
  2. (upperTick - lowerTick)tickSpacing의 정수 배수

백서는 라운딩 보장을 유지하기 위해 최소 주문 δmin=0.01\delta_{\min} = 0.01 SUSD를 권장합니다. 현재 컨트랙트는 더 작은 수량도 허용하므로, 인터페이스에서 더스트 주문을 시도하면 경고를 표시해야 합니다.

구현 현황

항목백서현재 컨트랙트
틱 구간[L + b s, L + (b+1) s)✅ 일치
단위 변환1e12 곱/나눗셈✅ 일치
최소 주문δmin=0.01\delta_{\min} = 0.01 SUSD⚠️ 아직 미강제

최소 주문 제한이 Solidity에 추가될 때까지는 실질적인 하한을 0.01 SUSD로 가정하고, 모든 UI와 스크립트에서 명확히 안내하세요.