문서
XCP-69의 모든 것을 한곳에. 전반부는 누구나 이해할 수 있는 런칭의 작동 방식입니다. 후반부는 이 사이트와 같은 온체인 데이터를 읽거나 그 위에 무언가를 만들려는 개발자를 위한 것입니다.
개요
XCP-69는 Counterparty 페어민트 풀 위에 구축된 고정 파라미터 토큰 런칭 표준입니다. 팩토리 컨트랙트도, 관리자 키도, 어느 시점에도 플랫폼 커스터디도 없습니다: 프로토콜이 곧 플랫폼입니다. 런칭 생성, 민팅, 스왑 등 모든 행동은 자신의 지갑에서 서명해 비트코인에 브로드캐스트하는 트랜잭션입니다. 이 사이트는 공개 온체인 데이터 위의 인터페이스일 뿐이며, 내일 사라지더라도 모든 런칭, 환불, 풀은 전과 똑같이 계속 작동합니다.
모든 XCP-69 런칭은 동일합니다: 공급량 1억, 1,000토큰 단위당 0.01 XCP로 6,900만 공개 판매, 3,100만은 유동성 풀에 예약, 주소당 10 XCP 상한, 민팅 시작 전 온체인 사전 공지, 그리고 1,000블록의 기간. 읽어야 할 깨알 조항은 없습니다. 깨알 조항 자체가 없기 때문입니다. 전체 파라미터는 작동 방식 페이지에 있습니다.
런칭 메커니즘
런칭은 네 단계를 거칩니다:
- 공지. 모든 런칭은
start_block이전에 온체인에서 확인됩니다. 그 블록이 오기 전까지 페어민터는pending상태이며 합의는 모든 민팅을 거부합니다 — 제작자를 포함해 누구도 먼저 민팅할 수 없습니다. 스텔스 런칭은 없습니다: 첫 단위가 팔리기 전에 전체 조건이 온체인에 올라와 있고 누구나 검증할 수 있습니다. - 민팅.
start_block부터 1,000블록 (약 7일)의 기간입니다. 누구나 1,000토큰 단위로, 단위당 0.01 XCP에, 주소당 최대 1,000,000토큰 (10 XCP)까지 민팅할 수 있습니다. 지불한 XCP와 민팅된 토큰 모두 지출 불가 주소에 에스크로로 보관됩니다 — 런칭이 확정되기 전까지 누구도 아무것도 보유하지 않습니다. 기간의 길이는 실패를 늦출 뿐입니다: 완판은 채워지는 순간 정산되고, 미달이면 약 일주일 안에 모든 민터의 XCP가 풀립니다. - 확정. 6,900만 소프트캡에서 전부 아니면 전무입니다. 소프트캡은 공개 판매 전체와 같으므로, 도달은 곧 완판을 뜻합니다 — 부분 성공은 없습니다. 완판되면 풀이 생성되고, 기한을 놓치면 프로토콜이 모든 민터에게 자동으로 환불하고 에스크로된 공급량을 파기합니다. 하드캡이 채워지더라도 확정은 블록 끝에서 이루어지므로, 풀을 만드는 트랜잭션 안에서 풀을 거래할 수 있는 사람은 없습니다.
- 거래. 모금된 690 XCP 전액과 예약된 3,100만 토큰으로 TOKEN/XCP AMM 풀을 만듭니다. LP 토큰은 지출 불가 주소로 직접 발행됩니다 — 유동성은 합의에 의해 영구히 잠깁니다. 공급량과 설명이 같은 블록에서 잠기고, 거래는 즉시 시작됩니다.
거래와 가격
졸업한 토큰은 상수곱 TOKEN/XCP 풀에서 거래됩니다. 가격은 단순히 풀 준비금의 비율이며, 모든 스왑이 가격을 움직입니다. 각 스왑의 고정 수수료 50 bps는 풀 자체에 지급됩니다 — LP가 소각되었으므로 수수료는 누군가에게 지급되는 대신 잠긴 유동성을 두텁게 합니다.
풀은 3,100만 토큰에 690 XCP로 열립니다: 69/31 ≈ 민팅가의 2.23배. 모든 민터는 구조적으로 오픈 시점에 수익 상태이며, 이른 매도는 나중 매수자가 아니라 풀이 흡수합니다.
Counterparty의 DEX 주문이 유일한 거래 기본 단위입니다: 풀 가격이 호가창보다 좋을 때마다 매칭은 풀을 거칩니다. 시장가 주문은 라우터가 제시한 산출량으로 내는 주문으로, 풀과 호가창에서 최적가로 즉시 체결됩니다. 지정가 주문은 호가창에 대기하며, 풀 가격이 지정한 가격을 넘어서면 자동으로 체결됩니다.
- 가격
- XCP 준비금 ÷ 토큰 준비금. 스왑마다 움직입니다. 호가창도 마켓 메이커도 없습니다.
- 시가총액
- 풀 가격 × 유통 공급량 (발행량에서 소각분을 뺀 값). 관례일 뿐 약속이 아닙니다 — 풀이 그 금액을 지급할 수는 없습니다.
- 가격 영향
- 내 스왑이 가격을 얼마나 움직이는지. 고정된 준비금에 대해 스왑이 클수록 평균 가격은 나빠집니다.
- 슬리피지
- 견적과 확인 사이에 풀이 움직였을 때, 견적 가격과 실제 체결 가격의 차이.
졸업
다른 런치패드에서 졸업은 살아 있는 시장 안의 문턱입니다: 모두가 마법의 숫자에 닿기를 바라는 동안 토큰은 커브 위에서 거래됩니다. XCP-69의 졸업은 둘 중 하나이며 어떤 거래도 존재하기 전에 일어납니다. 1,000블록 안에 6,900만 판매를 완판하면 런칭은 졸업합니다 — 풀 생성, LP 소각, 공급량 잠금, 같은 블록의 확정 단계에서 거래 시작. 놓치면 런칭은 아예 거래되지 않습니다.
환불은 고객 지원 절차가 아닙니다. 프로토콜의 자동 동작입니다: 기한이 되면 모든 민터의 XCP가 반환되고 에스크로된 공급량은 같은 블록에서 파기됩니다. 실패한 런칭은 묘지로 옮겨져 이력이 보존됩니다 — 민팅 기록, 참여자 수, 그리고 온체인 증거인 "soft cap not reached" 태그가 붙은 파기 기록.
수수료
- Creator's share of the 690 XCP raise
- 0%
- Protocol / platform share of the raise
- 0%
- Premine or mint commission to the creator
- 0
- LP tokens
- burned at the unspendable address, forever
- Swap fee after launch
- 50 bps, paid to the pool (the LP is burned, so it deepens locked liquidity)
수수료 분배표는 없습니다. 분배할 수수료가 없기 때문입니다. 민터가 지불한 XCP는 사토시 하나까지 전부 풀로 들어갑니다. 시스템 전체에서 발생하는 비용은 비트코인 트랜잭션 수수료, 이름 있는 자산의 0.5 XCP 이름 등록 수수료, 그리고 생성 시 차감되는 프로토콜의 pooldeposit 가스 수수료뿐입니다 — 우리나 제작자가 아니라 네트워크에 지불되는 비용입니다.
위험 고지
이 표준은 러그풀과 프리마인을 없앱니다. 위험을 없애지는 않으며, 그런 척하지도 않겠습니다:
- 주소당 상한은 원리가 아니라 비용 면에서만 시빌 저항적입니다. 상한은 사람이 아니라 주소 단위입니다. 69명의 군중을 위조하는 비용을 높일 뿐, 막지는 못합니다.
- 환불은 법정화폐 가치가 아니라 XCP 수량을 돌려줍니다. 약 7일의 기간 동안 XCP 가격이 움직이면, 환불은 XCP 기준으로만 원상복구됩니다.
- 2.23배 오프닝 프리미엄은 구조적인 것이지 가격 보장이 아닙니다. 풀의 바닥은 사람들이 팔수록 내려갑니다. 토큰이 민팅가 아래에서 거래되는 것을 막는 장치는 없습니다.
- 토큰 미디어는 제작자가 선택한 경우에만 온체인에 있습니다. 기본적으로 체인은 자산 정보 JSON의 URL을 (
lock_description을 통해) 영구히 보관하고, 이미지와 정보는 오프체인에 호스팅되며 자산의 현재 온체인 소유자만 지갑 서명 메시지로 수정할 수 있습니다. 그 호스팅이 사라지더라도 토큰의 경제 구조 — 공급량, 풀, 환불 — 는 그대로이고 아트워크만 영향을 받습니다. Taproot 지갑으로 런칭하는 제작자는 이미지를 영구 설명으로 온체인에 인스크립션하여 이 의존성을 완전히 없앨 수 있습니다.
연동
이 사이트가 표시하는 모든 것은 공개 API에서 옵니다. 같은 데이터로 직접 런치패드, 봇, 대시보드를 만들 수 있습니다 — 아래의 어떤 것도 우리의 허가가 필요하지 않습니다.
네트워크
- 체인: 비트코인 메인넷의 Counterparty. XCP-69 런칭은 Counterparty 메시지를 담은 평범한 비트코인 트랜잭션입니다.
- API 기본 주소:
https://api.counterparty.io:4000/v2— 또는 직접 counterparty-core 노드를 운영해 신뢰 없이 읽을 수 있습니다. - 프로토콜 기능:
fairmint_pool, 메인넷 블록 961,100 (2026-08-05)에서 활성화. core v11.2.0 이상 필요.
메시지 형식
런칭은 풀 필드 pool_quantity와 lp_asset을 설정한 페어민터 메시지 (ID 90)를 사용합니다. 민팅은 quantity_by_price의 단위 배수로 이루어지는 평범한 fairmint 메시지입니다.
알아둘 만한 연동 함정: Counterparty Core 11.3 이상은 verbose=true에서 pool_quantity_normalized와 max_mint_per_address_normalized를 반환합니다. 표시용으로는 써도 되지만, 표준 준수 계산은 원시 정수 사토시 단위 (×10⁸)로 유지해 비교가 정확하고 verbose가 아닌 이벤트 및 멤풀 데이터와 일치하도록 하세요.
트랜잭션 작성
compose API는 서명되지 않은 원시 비트코인 트랜잭션을 반환합니다 — 노드는 키를 전혀 보지 않습니다. 자신의 지갑으로 서명하고 브로드캐스트하면 끝입니다. verbose=true를 추가하면 PSBT와 파라미터 에코를 받습니다. 모든 수량은 원시 정수입니다.
# Compose an XCP-69 launch (unsigned tx back; sign + broadcast yourself).
# START = a future block: the pre-announcement window. The launch must
# CONFIRM before START or it opens instantly and fails conformance.
curl -G "https://api.counterparty.io:4000/v2/addresses/$ISSUER/compose/fairminter" \
--data-urlencode "asset=MYTOKEN" \
--data-urlencode "price=1000000" \
--data-urlencode "quantity_by_price=100000000000" \
--data-urlencode "hard_cap=10000000000000000" \
--data-urlencode "soft_cap=6900000000000000" \
--data-urlencode "pool_quantity=3100000000000000" \
--data-urlencode "lp_asset=$LP_NAME" \ # any unissued numeric; house style: 69…69, ≡69 (mod 97)
--data-urlencode "max_mint_per_address=100000000000000" \
--data-urlencode "max_mint_per_tx=100000000000000" \
--data-urlencode "start_block=$START" \
--data-urlencode "soft_cap_deadline_block=$((START + 1000))" \
--data-urlencode "end_block=0" \
--data-urlencode "premint_quantity=0" \
--data-urlencode "minted_asset_commission=0" \
--data-urlencode "burn_payment=false" \
--data-urlencode "lock_quantity=true" \
--data-urlencode "lock_description=true" \
--data-urlencode "divisible=true" \
--data-urlencode "description=https://…/MYTOKEN.json" \
--data-urlencode "sat_per_vbyte=$FEE_RATE" \
--data-urlencode "verbose=true"합의는 파싱 시점에 표준의 일관성을 강제합니다: pool_quantity > 0이면 soft_cap은 반드시 hard_cap − premint − pool_quantity와 같아야 합니다 — 전부 아니면 전무는 사이트 정책이 아니라 프로토콜 규칙입니다. 발행자 주소는 0.5 XCP 이름 등록 수수료와 pooldeposit 가스 수수료를 원장에 보유해야 하며, 둘 다 확인 시점에 차감되므로 이후 정산에는 비용이 들지 않습니다. lp_asset은 진짜 무작위로 고르세요: 숫자 발행은 무료이고, 예측 가능한 이름은 브로드캐스트와 확인 사이에 누군가 먼저 등록해 런칭을 무효화할 수 있습니다.
# Compose a mint. quantity is the TOKEN amount (raw, whole lots) —
# the XCP price is computed by consensus and debited from the minter's
# on-ledger XCP balance; nothing rides in the Bitcoin outputs.
curl -G "https://api.counterparty.io:4000/v2/addresses/$MINTER/compose/fairmint" \
--data-urlencode "asset=MYTOKEN" \
--data-urlencode "quantity=100000000000000" \
--data-urlencode "sat_per_vbyte=$FEE_RATE"
# Issuer-side XCP cost of the pool settlement (prepaid at creation):
curl "https://api.counterparty.io:4000/v2/addresses/$ISSUER/compose/pooldeposit/estimatexcpfees"민팅은 quantity_by_price의 단위 배수여야 하고, 트랜잭션당 상한 이내이며, 주소의 남은 한도 이내여야 합니다 — 일부 사용한 상한은 여러 트랜잭션에 걸쳐 채울 수 있습니다. 민터는 XCP를 Counterparty 잔액에 보유해야 하며, XCP 없이 BTC만 있는 지갑은 "insufficient XCP balance"로 compose에 실패합니다.
표준 준수
Core에는 온체인 표준 표식이 없으므로 표준 준수는 하나의 술어입니다: 표준의 고정된 원시 값과의 정확한 일치. 이것이 이 사이트가 실제로 실행하는 함수이며, 런칭은 이를 통과하거나 XCP-69가 아니거나 둘 중 하나입니다.
export const XCP69 = {
/** 100M supply */
HARD_CAP: 10_000_000_000_000_000,
/** 69M public sale — reaching it IS selling out (all-or-nothing) */
SOFT_CAP: 6_900_000_000_000_000,
/** 31M seeded into the TOKEN/XCP pool at close, LP burned */
POOL_QUANTITY: 3_100_000_000_000_000,
/** 1,000-token lots */
QUANTITY_BY_PRICE: 100_000_000_000,
/** 0.01 XCP per lot */
PRICE: 1_000_000,
/** 1M tokens = 10 XCP per address; 69M ÷ 1M = 69 participants */
MAX_MINT_PER_ADDRESS: 100_000_000_000_000,
MAX_MINT_PER_TX: 100_000_000_000_000,
/** Mint window: soft_cap_deadline_block − start_block, exactly (~7 days) */
DEADLINE_BLOCKS: 1_000,
} as const;
/** core's block_index sentinel for unconfirmed transactions */
const MEMPOOL_BLOCK_INDEX = 9_999_999;
export function isXcp69(fm: Fairminter): boolean {
return (
(fm.status === "pending" || fm.status === "open" || fm.status === "closed") &&
fm.pool_quantity === XCP69.POOL_QUANTITY &&
fm.soft_cap === XCP69.SOFT_CAP &&
fm.hard_cap === XCP69.HARD_CAP &&
fm.quantity_by_price === XCP69.QUANTITY_BY_PRICE &&
fm.price === XCP69.PRICE &&
fm.max_mint_per_address === XCP69.MAX_MINT_PER_ADDRESS &&
fm.max_mint_per_tx === XCP69.MAX_MINT_PER_TX &&
fm.premint_quantity === 0 &&
(fm.minted_asset_commission_int ?? 0) === 0 &&
fm.lock_quantity &&
fm.lock_description &&
fm.divisible &&
!fm.burn_payment &&
!fm.asset.startsWith("A") && // named assets only
// timing: scheduled start, fixed window, no end_block
fm.start_block > 0 &&
fm.end_block === 0 &&
(fm.confirmed === false ||
fm.block_index >= MEMPOOL_BLOCK_INDEX || // unconfirmed sentinel
fm.start_block > fm.block_index) && // confirmed before start
(fm.status === "closed"
// core rewrites the deadline to the fill block on early sell-out
? fm.soft_cap_deadline_block <= fm.start_block + XCP69.DEADLINE_BLOCKS
: fm.soft_cap_deadline_block === fm.start_block + XCP69.DEADLINE_BLOCKS)
);
}커미션 조항은 단순한 검사가 놓치는 부분입니다. 프로토콜은 페어민터가 모든 민팅의 최대 99%를 제작자에게 되돌리는 것을 허용하며 — 단계만 더한 프리마인입니다 — 다른 어떤 필드도 이를 잡아내지 못합니다. XCP-69는 이 값이 정확히 0이어야 합니다.
시점 조항은 의도된 두 개의 부등식입니다. 합의는 미래의 시작을 요구하지 않습니다 — 늦게 확인된 런칭은 그냥 즉시 열립니다 — 그래서 사전 공지 보장은 여기에 있습니다: start_block은 확인 블록보다 커야 합니다. 이 조항이 없다면 제작자는 명목상 1,000블록짜리 판매를 늦게 브로드캐스트하고, 자신의 기한 직전에 확인시킨 뒤, 천 블록짜리 메타데이터 뒤에서 거의 즉시 내부자 민팅을 돌릴 수 있습니다. 또한 페어민터 행의 기간 검사는 종료 후 ≤로 완화됩니다. core가 조기 완판 시 기한을 다시 쓰기 때문이며, 종료된 런칭에 대해 이 사이트는 불변의 NEW_FAIRMINTER 이벤트로부터 정확한 일치를 복원합니다 (상태 읽기의 함정 참조). 나머지는 전부 행에 대한 정확한 일치입니다.
온체인 이벤트
전체 생애주기는 GET /v2/events/<EVENT>를 통해 Counterparty 이벤트로 관찰할 수 있습니다:
- NEW_FAIRMINTER
- a launch is created
- NEW_FAIRMINT
- someone mints (also visible in the mempool before confirmation)
- OPEN_POOL
- the launch graduated — the TOKEN/XCP pool was seeded
- POOL_MATCH
- a swap executed against the pool
- ASSET_DESTRUCTION
- escrowed supply destroyed — on a missed soft cap, tagged “soft cap not reached”
상태 읽기
전부 curl로 가져올 수 있습니다. 런칭과 민팅:
# All fairminters currently minting (filter with isXcp69 client-side)
curl "https://api.counterparty.io:4000/v2/fairminters?status=open&verbose=true"
# Every mint into one launch
curl "https://api.counterparty.io:4000/v2/fairminters/<TX_HASH>/fairmints"풀, 가격, 견적:
# Pool state (reserves) — a row here means the launch graduated
curl "https://api.counterparty.io:4000/v2/pools/<ASSET>/XCP"
# Price series: one row per reserve mutation
curl "https://api.counterparty.io:4000/v2/pools/<ASSET>/XCP/price_history"
# Swap quote for a given input quantity (raw integer)
curl "https://api.counterparty.io:4000/v2/pools/<ASSET>/XCP/quote?quantity=100000000"홀더:
# Holders — the unspendable address appears holding the burned LP
curl "https://api.counterparty.io:4000/v2/assets/<ASSET>/holders"생애주기 판별 레시피. 성공과 실패 모두 페어민터 상태 closed로 끝나므로, 풀 행이 구분 기준입니다:
pending→ 예정open→ 민팅 중closed상태이고/v2/pools/<ASSET>/XCP호출이 풀을 반환 → 졸업closed상태이고 풀 행 없음 → 환불됨 ("soft cap not reached" 태그가 붙은 파기 기록으로 확인)
두 번째 연동 함정: 런칭이 일찍 완판되면 soft_cap_deadline_block 값은 다시 쓰입니다 — core가 이를 채워진 블록으로 앞당겨 그 블록의 블록 끝 단계에서 풀이 생성되게 합니다. 종료된 기록에서 이 필드는 원래 기한이 아니라 정산 블록입니다. 카운트다운 UI는 상태가 open인 동안에만 의미가 있습니다. 작성 당시의 값은 추가 전용 이벤트 기록에 남습니다: GET /v2/transactions/<tx_hash>/events/NEW_FAIRMINTER 엔드포인트는 원래 바인딩을 반환하며 (재작성은 별도의 FAIRMINTER_UPDATE 이벤트), 이 사이트는 이를 통해 종료된 런칭의 정확한 기간을 검증합니다.
참조 런칭
지원 및 약관
이 사이트에 표시되는 모든 데이터는 공개 온체인 데이터이며, 여기서 보는 모든 것은 Counterparty 노드에서 직접 검증할 수 있습니다. 이 사이트는 인터페이스일 뿐 어떤 트랜잭션의 상대방도 아닙니다 — 자금을 보관하지 않으며 취소, 가속, 환불을 할 수 없습니다 (환불은 프로토콜이 스스로 처리합니다). 여기 있는 어떤 것도 투자 조언이 아닙니다. XCP-69로 런칭된 토큰은 가치를 잃을 수 있고, 실제로 잃습니다. 민팅 전에 위험 고지를 읽어 주세요.