文件

關於 XCP-69 的一切,盡在一處。前半部分向所有人解釋發射如何運作。後半部分面向開發者,幫助他們讀取本站所用的同一份鏈上數據,或在其之上構建。

概覽

XCP-69 是一套建立在 Counterparty 公平鑄造池之上的固定參數代幣發射標準。沒有工廠合約,沒有管理員密鑰,任何時候都沒有平台託管:協議就是平台。每一個操作 — 建立發射、鑄造、兌換 — 都是你在自己錢包裏簽名並廣播到比特幣網絡的交易。本站只是公開鏈上數據之上的一個介面;即使它明天消失,每一次發射、退款和流動性池都會一如既往地運作。

每一次 XCP-69 發射都完全相同:1 億供應量,6900 萬公開發售、每份 1,000 枚代幣 0.01 XCP,3100 萬預留給流動性池,每地址上限 10 XCP,鑄造開啓前的鏈上預公告,以及 1,000 個區塊的窗口期。沒有小字條款可讀,因為根本沒有小字條款。完整參數集見運作機制頁面。

發射機制

反轉: 在大多數發射台上,交易立刻開始,人羣之後才來 — 如果會來的話。XCP-69 把這一點反過來 — 在社區把發射完全認購之前,交易無法開始。每地址 10 XCP 的上限意味着,沒有至少 69 個不同地址,就不可能完成 6900 萬的公開發售。從機制上講,沒有任何代幣會在真實的人羣付款之前開始交易。

一次發射會經歷四個階段:

  1. 公告。 每次發射都會在其 start_block 之前於鏈上確認。在該區塊到來前,公平鑄造合約處於 pending 狀態,共識會拒絕所有鑄造 — 包括建立者在內,沒有人能提前鑄造。不存在偷偷發射:在第一份可被買入之前,全部條款已經放在鏈上,任何人都可以查驗。
  2. 鑄造。 從 start_block 起的 1,000 個區塊窗口期(約 7 天)。任何人都可以按每份 0.01 XCP 鑄造整份 1,000 枚代幣,每地址最多 1,000,000 枚(10 XCP)。支付的 XCP 和鑄造的代幣都由協議鎖定在不可花費地址 — 在發射結束之前,沒有人持有任何東西。窗口期長度只會推遲失敗:售罄的那一刻就會結算,而未售罄則會在大約一週內釋放每位鑄造者的 XCP。
  3. 結算。 6900 萬軟頂,全有或全無。軟頂等於整個公開發售量,所以達到軟頂就是售罄 — 不存在部分成功。售罄則注入流動性池;錯過截止期則協議自動退款給每位鑄造者,並銷毀託管中的供應量。即使達到硬頂,結算也在區塊末尾進行,因此沒有人能在建立流動性池的那筆交易裏對其交易。
  4. 交易。 募集到的全部 690 XCP 加上預留的 3100 萬代幣,注入一個 TOKEN/XCP AMM 流動性池。LP 代幣直接鑄造到不可花費地址 — 流動性由共識永久鎖定。供應量和描述在同一區塊鎖定,交易立即開始。

交易與定價

已畢業的代幣在一個恆定乘積的 TOKEN/XCP 流動性池中交易。價格就是池中兩種儲備的比率;每一次兌換都會移動它。每次兌換固定收取 50 bps 的費用,支付給池子本身 — 由於 LP 已銷毀,費用會加深鎖定的流動性,而不會付給任何人。

流動性池以 690 XCP 對 3100 萬代幣開盤:69/31 ≈ 鑄造價的 2.23×。每位鑄造者在開盤時從結構上就處於盈利,而吸收早期離場的是池子 — 不是後來的買家。

Counterparty 的 DEX 訂單是唯一的交易原語:只要流動性池的價格優於訂單簿,撮合就會經由池子進行。市價單是按路由器報價輸出下的訂單 — 它會立即以最優價格從池子和訂單簿成交。限價單掛在訂單簿上,一旦池子價格越過你的價格,就會自動成交。

價格
池價等於 XCP 儲備 ÷ 代幣儲備。兌換會改變這一比率。限價單也可以在 Counterparty 的訂單簿上成交。
市值
池子價格 × 流通供應量(已發行減去已銷毀)。這是一種慣例,不是承諾 — 池子無法兑付這個數字。
價格影響
你自己的兌換會讓價格移動多少。面對固定的儲備,兌換量越大,平均價格越差。
滑點
如果在你獲得報價與確認之間池子發生了變動,報價與實際成交價之間的差額。

畢業

在其他發射台上,畢業是活躍市場中的一條閾值線:代幣在曲線上交易,所有人都盼着它觸到那個神奇的數字。XCP-69 的畢業是非此即彼的,而且發生在任何交易存在之前。在 1,000 個區塊內售罄 6900 萬,發射就畢業 — 流動性池注入、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 gas 費 — 這些都付給網絡,而不是付給我們或建立者。

風險披露

這套標準消除了跑路和預挖。它並不消除風險,我們也不會假裝它能:

  • 每地址上限只在成本上抗女巫攻擊,在原理上並不能。 上限按地址計,而非按人計。它抬高了偽造 69 人參與的成本,但無法杜絕。
  • 退款退回的是 XCP 數量,而不是法幣價值。 如果 XCP 價格在約 7 天的窗口期內波動,退款只能讓你在 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)。鑄造是普通的 fairmint 消息,數量為 quantity_by_price 的整份倍數。

一個值得了解的集成陷阱:Counterparty Core 11.3 及以上在 verbose=true 下會返回 pool_quantity_normalized 和 max_mint_per_address_normalized。它們可用於展示,但標準符合性的計算請保持使用原始整數 satoshi 單位(×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 的 gas 費;兩者都在確認時扣除,因此之後的結算不產生任何費用。請用真正的隨機數來選擇 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 的整份倍數,且不超過單筆交易上限和該地址的剩餘額度 — 用掉一部分的額度可以分多筆交易補滿。鑄造者需要 在其 Counterparty 餘額中 有 XCP;只有 BTC 而沒有 XCP 的錢包在構造交易時會失敗並返回 "insufficient XCP balance"。

符合性

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 會把它提前到售罄的那個區塊,以便在該區塊的末尾階段注入流動性池。在已關閉的記錄中,該欄位是結算區塊,而不是原始截止期。倒計時介面只在狀態為 open 時才有意義。構造時的值保留在只增不改的事件歷史中:GET /v2/transactions/<tx_hash>/events/NEW_FAIRMINTER 返回原始綁定值(改寫是一個單獨的 FAIRMINTER_UPDATE 事件),本站正是藉此核驗已關閉發射的確切窗口期。

參考發射

公平鑄造池已於 2026-08-05 啟用,目前尚無 XCP-69 發射。第一次發射將在此連結為參考代幣 — 用於校驗你的集成的標準記錄:它的公平鑄造合約記錄應通過上述判定式,它的鑄造記錄應顯示 ≥69 個不同地址,它的流動性池記錄應顯示已銷毀的 LP 位於不可花費地址。

支援與條款

本站展示的所有數據都是公開的鏈上數據;你在這裏看到的一切,都可以自行對照 Counterparty 節點核驗。本站只是一個介面,不是任何交易的對手方 — 它從不持有資金,也無法撤銷、加速或退款(退款由協議自行處理)。這裏沒有任何內容構成投資建議;通過 XCP-69 發射的代幣可能貶值,也確實會貶值。鑄造前請閲讀風險披露。