文件

關於 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 儲備 ÷ 代幣儲備。每次兌換都會變動;沒有訂單簿,也沒有做市商。
市值
池子價格 × 流通供應量(已發行減去已銷毀)。這是一種慣例,不是承諾 — 池子無法兑付這個數字。
價格影響
你自己的兌換會讓價格移動多少。面對固定的儲備,兌換量越大,平均價格越差。
滑點
如果在你獲得報價與確認之間池子發生了變動,報價與實際成交價之間的差額。

畢業

在其他發射台上,畢業是活躍市場中的一條閾值線:代幣在曲線上交易,所有人都盼着它觸到那個神奇的數字。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)

沒有費用分成表,因為沒有費用可分。鑄造者支付的每一個 satoshi 的 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_quantitylp_asset公平鑄造合約 消息(ID 90)。鑄造是普通的 fairmint 消息,數量為 quantity_by_price 的整份倍數。

一個值得了解的集成陷阱:Counterparty Core 11.3 及以上在 verbose=true 下會返回 pool_quantity_normalizedmax_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 發射的代幣可能貶值,也確實會貶值。鑄造前請閲讀風險披露