完整規則
這一頁列出鯉門(KOI GATE)的全部機制和數字。每個數字旁邊都標了合約裡的函式或常數名稱,可以在 BscScan 的「Read Contract」自己查。合約部署後,本頁會逐項從鏈上讀取並核對,核對過的數字後面會出現 ✓。
合約沒有 owner、沒有管理員、不能升級。部署後沒有任何人能改價格、機率、產出或稅率,包括 Hackou 自己。
治理與時間
| 項目 | 數值 | 合約 |
|---|---|---|
| 管理權限 | 無 | 三個合約都沒有 owner/admin 函式 |
| 部署時間(起算點) | 部署當下 | KoiGate.DEPLOYED_AT() |
| 放苗期結束 | 部署後 72 小時 | KoiGate.SALE_END() |
| 「48 小時」龍門開條件生效 | 部署後 48 小時 | KoiGate.STALL_AT() |
| 賽季結束(產出停止) | 部署後 14 天 | KoiGate.EMIT_END() |
所有時間都是「部署當下+時長」,沒有寫死的時刻。「第 N 天」指部署後的第 N 個 24 小時(dayIndex() 從 0 起算)。
放苗(Gen0)
| 項目 | 數值 | 合約 |
|---|---|---|
| 總量 | 6,666 尾 | MAX_FRY() |
| 每段數量 | 1,111 尾 | TIER_SIZE() |
| 第 1 段(第 1–1,111 尾) | 0.004 BNB | priceAt(0) |
| 第 2 段(1,112–2,222) | 0.006 BNB | priceAt(1111) |
| 第 3 段(2,223–3,333) | 0.008 BNB | priceAt(2222) |
| 第 4 段(3,334–4,444) | 0.010 BNB | priceAt(3333) |
| 第 5 段(4,445–5,555) | 0.012 BNB | priceAt(4444) |
| 第 6 段(5,556–6,666) | 0.014 BNB | priceAt(5555) |
| 每錢包上限 | 10 尾 | MAX_PER_WALLET() |
| 每筆數量 | 最多 10 尾(每筆 1–10) | MAX_PER_TX() |
| Agent ID 閘門 | 要持有 | AGENT_REGISTRY() = 0x60B9…022F 的 balanceOf ≥ 1;hasAgentId(錢包) |
- 呼叫
mintFry(n)、mintFry(n, 推薦人)或mint(n),付quote(n)的 BNB。一筆跨兩段時,每尾照它實際的售出位置計價。 - 多付的 BNB 在同一筆交易退回。少付會被拒絕。
- 放苗後不能退款。
- 只有付 BNB 的放苗算進每錢包上限;侍魚和第二代放苗不算。
錢的去向
| 每筆 Gen0 付款 | 比例 | 合約 |
|---|---|---|
| 團隊份額(含推薦) | 20% | TEAM_BPS() → teamOwed |
| 其中付給推薦人 | 5% | REF_BPS()(有有效推薦人時) |
| 龍門開之前:交易池準備金 | 80% | reserve() |
| 龍門開之後:回購燒毀 | 80% | pendingBuyback() → buyback() |
孵化
| 項目 | 數值 | 合約 |
|---|---|---|
| 種子 | 請求區塊+2 的雜湊(第 3 個區塊起可結算) | SEED_DELAY() = 2 |
| 舊區塊雜湊來源 | BNB Chain 的 EIP-2935 系統合約 | HISTORY();讀不到時當作過期 |
| 可結算窗口 | 8,190 個區塊(約一小時) | SEED_WINDOW();256 個區塊內用 BLOCKHASH,之後用 EIP-2935 系統合約 |
| 孵成龍的機率(每尾) | 10% | DRAGON_PCT() |
| 龍的等級(孵成龍時) | 青 45%・赤 30%・金 20%・玄 5% | 原始碼 _hatch();種類、等級、花色、侍魚各用一個獨立的雜湊(_draw) |
| 錦鯉花色 | 8 種,各 1/8,只影響外觀 | 原始碼 _hatch()、KoiRenderer |
| 超過窗口沒人結算 | 整批都是錦鯉,沒有侍魚 | _seed() 回傳 0 → defaulted |
- 任何人都能呼叫
settle(n),從最舊的一批開始依序孵化。魚直接鑄造到放苗的錢包(侍魚除外,見「龍與侍魚」)。 - 每尾魚是錦鯉還是龍、什麼等級、會不會成為侍魚、抽中哪一條龍,都在「請求區塊+2」出塊時就固定了,誰來結算都不會改變;只有超過窗口才套用預設結果。侍魚鑄造給「結算當下」那條龍的持有人。
- 龍和錦鯉都是同一個 NFT 合約(KOI GATE Koi,符號 KOI)的代幣,圖和屬性全部在鏈上產生。
鯉珠產出
| 項目 | 數值 | 合約 |
|---|---|---|
| 第 1 天鯉池結珠 | 10,000,000 | DAY1_YIELD() |
| 之後 | 每天減半 | scheduledYield(t)、dailyYield() |
| 賽季長度 | 14 天 | SEASON_DAYS() |
| 14 天合計上限 | 約 19,998,779 | scheduledYield(EMIT_END) |
- 每一秒的產量由當下所有已孵化的錦鯉平分(包括侍魚和第二代錦鯉)。龍、還沒孵化的魚苗不分產量。
- 鯉池裡一尾錦鯉都沒有的時段,那段產量不發出。
- 鯉珠記在每尾錦鯉的代幣編號上,轉手時跟著走。
pendingPearls(id)查目前累積多少。 - 鯉珠要躍龍門才會變成 KOIN,領取時 1 鯉珠=1 KOIN。
躍龍門
| 項目 | 數值 | 合約 |
|---|---|---|
| 沒躍過的機率(平常) | 20% | LEAP_FAIL_BPS() |
| 躍過時你拿到 | 80% | LEAP_KEEP_BPS();其餘 20% 歸龍 |
| 沒躍過時 | 一半被浪捲走、一半歸龍 | settleLeaps();捲走的部分永遠不會鑄造(pearlsWashed) |
| 一次最多 | 50 尾 | MAX_LEAP_IDS() |
| 超過窗口沒人結算 | 算沒躍過 | result = 3;一半捲走、一半歸龍 |
leap(ids)把這些錦鯉目前累積的鯉珠全部帶到龍門,錦鯉本身留在你手上,之後繼續結珠。- 結果在「請求區塊+2」出塊時就固定了,任何人都能寫上鏈:
settleLeaps(n)從最舊的依序結算,settleLeapIds(ids)可以只結算指定的幾筆(例如你自己的),不用排隊。leap()回傳這次躍龍門的編號,也會記在LeapRequested事件。 - 約一小時(8,190 個區塊)內沒人結算,就算沒躍過(一半捲走、一半歸龍)。躍過的話,躍的人要自己在一小時內結算,否則這筆會變成沒躍過;沒躍過的話,龍的主人會想結算。
- 龍門開之前躍過的鯉珠先記在
owed(你的地址),龍門開了之後用claim()領成 KOIN。
颱風夜
| 項目 | 數值 | 合約 |
|---|---|---|
| 哪一天 | 部署後第 7 天(dayIndex = 6) | TYPHOON_DAY() = 6 |
| 沒躍過的機率 | 35% | TYPHOON_FAIL_BPS() |
以送出 leap() 那個區塊的時間判斷是不是颱風夜。颱風夜送出的躍龍門,沒躍過的機率是 35%;其他天都是 20%。leapOdds() 回傳現在送出會用的機率。
龍與侍魚
| 龍 | 孵成龍時的機率 | 收成權重 |
|---|---|---|
| 青龍 | 45% | 1 |
| 赤龍 | 30% | 2 |
| 金龍 | 20% | 4 |
| 玄龍 | 5% | 8 |
- 龍的收成:躍過時的 20%、沒躍過時的 50%,以及 KOIN 買賣稅中歸龍的 1%。全部依權重分給結算(或交易)當下已經孵出的每一條龍。
- 龍不分每日產量,也不能躍龍門。龍門開之後用
claimDragons(ids)領收成:歸龍的鯉珠鑄造成 KOIN,稅收直接轉出 KOIN。pendingDragon(id)查目前累積多少。收成記在龍的代幣編號上,轉手時跟著走。 - 還沒有任何龍的時候:歸龍的鯉珠不發出(記為被浪捲走),歸龍的稅直接燒毀。
- 侍魚:一批魚苗放下時鯉池裡已經有龍,這批每尾孵成錦鯉的魚,各有 10%(
ATTENDANT_PCT())機率成為侍魚。侍魚鑄造給被抽中的那條龍的主人,不給放苗的人(鯉池裡已經有龍之後,放苗的人平均約 9% 的魚會成為侍魚:90% 孵成錦鯉 × 10%)。抽龍時依權重抽(近似做法:最多試 8 次,都沒抽中就用最後一個候選),而且只從放苗當下已經存在的龍裡抽(dragonsAtMint)。孵成龍的魚不會成為侍魚。
浪
| 項目 | 數值 | 合約 |
|---|---|---|
| 每一道浪 | 666 尾 | WAVE_SIZE() |
| 浪頭獎基數 | 50,000 KOIN | WAVE_BASE() |
| 倍數 | 0.5–4 倍 | 距上一道浪的小時數 × 1,夾在 WAVE_MULT_MIN_BPS 和 WAVE_MULT_MAX_BPS 之間 |
| 浪頭獎總額上限 | 2,000,000 KOIN | WAVE_POOL();發完為止 |
讓售出數跨過 666 的倍數的那一筆放苗,拿到這一道浪的浪頭獎(記在 owed,龍門開後領)。第一道浪從部署起算時間。nextWaveReward() 回傳如果現在掀起下一道浪,獎是多少。
龍門開
| 條件(任一成立) | 數值 | 合約 |
|---|---|---|
| 第 2 道浪 | 賣到 1,332 尾 | GATE_WAVE() × WAVE_SIZE() |
| 部署 48 小時後 | 已賣 ≥ 100 尾 | STALL_AT()、STALL_MIN_SOLD() |
| 放苗期結束後 | 已賣 ≥ 1 尾 | SALE_END() |
| 放進交易池的 KOIN | 20,000,000 | POOL_SEED() |
| 觸發者賞金 | 20,000 KOIN | GATE_BOUNTY() |
- 任何人呼叫
openGate();canOpenGate()回傳現在能不能開。 - 合約先把 PancakeSwap KOIN/WBNB 交易池(部署時就建立,
PAIR())裡多出來的 WBNB 收回,一起放進交易池。 - 把準備金
reserve()(龍門開之前每筆放苗款的 80%)全部換成 WBNB 放進交易池,再鑄 2,000 萬 KOIN 放進交易池。 - 交易池(LP 送進 0xdead):LP 代幣直接鑄造到
0x000000000000000000000000000000000000dEaD,永久銷毀,沒有人能撤出流動性。 - 龍門開時的價格 = 交易池裡的 WBNB ÷ 2,000 萬 KOIN。
龍門開之前 KOIN 不能轉帳(只有遊戲合約能鑄造),所以沒有人能先在交易池裡放 KOIN。完全沒有賣出時,龍門不會開。
KOIN 總量與分配
| 用途 | 數量 | 合約 |
|---|---|---|
| 總量上限 | 基本額度加龍門禮總額(看鏈上) | Koin.CAP() = 43,000,000 + Q3_PER_SURVIVOR() × Q3_MAX_IDS();只有 KoiGate 能鑄造 |
| 交易池 | 20,000,000 | POOL_SEED() |
| 鯉珠產出(14 天) | ≤ 20,000,000(排程合計約 19,998,779) | DAY1_YIELD()、SEASON_DAYS();沒躍過被捲走的部分不鑄造 |
| 浪頭獎 | ≤ 2,000,000 | WAVE_POOL() |
| 結算賞金 | ≤ 1,000,000 | BOUNTY_POOL() |
| 龍門禮 | 每艙 Q3_PER_SURVIVOR() × 最多 Q3_MAX_IDS() 艙 | 見「龍門禮」 |
| 團隊預分配 | 0 | 沒有任何預鑄或保留 |
KOIN 只在這些時候鑄造:龍門開(放進交易池)、claim()(躍過的鯉珠、浪頭獎、結算賞金)、claimDragons() 的歸龍鯉珠部分、claimQ3()(龍門禮)。燒毀發生在:回購燒毀、第二代放苗、賣出稅 1%、沒有龍時歸龍的稅。
買賣稅
| 項目 | 比例 | 合約 |
|---|---|---|
| 買(從龍門開的交易池買入) | 2% | BUY_TAX_BPS():龍 1%、團隊 1% |
| 賣(賣進龍門開的交易池) | 3% | SELL_TAX_BPS():燒毀 1%、龍 1%、團隊 1% |
| 其中歸龍 | 1% | DRAGON_TAX_BPS() |
| 其中給團隊 | 1% | TEAM_TAX_BPS(),轉到 PAYEE() |
| 賣出時燒毀 | 1% | BURN_TAX_BPS() |
只對龍門開的交易池 Koin.pair() 的買賣收稅;錢包之間轉帳、遊戲合約自己的回購都不收。稅率是常數,不能改。在 PancakeSwap 交易時滑點要設 4% 以上。
回購燒毀
- 龍門開之後,每筆放苗款的 80% 排進
pendingBuyback()。 - 合約每 5 分鐘最多回購一次(
BUYBACK_INTERVAL()),每次最多用交易池裡 WBNB 的 1%,買到的 KOIN 立刻燒毀。剩下的留到下一筆放苗,或任何人呼叫buyback()。 - 價格保護:只有在交易池現價沒有比它自己過去 10–20 分鐘的時間加權平均價(PancakeSwap 的累積價格)高 2% 以上時才回購(
TWAP_PERIOD()、MAX_PREMIUM_BPS())。龍門開後的前 10 分鐘還沒有平均價,不回購;有人把價格拉高時也先等。 - 累計數字:
bnbBoughtBack()、koinBurnedByBuyback()。
第二代放苗(Gen1)
| 項目 | 數值 | 合約 |
|---|---|---|
| 開放時間 | 龍門開 24 小時後到賽季結束 | GEN1_DELAY()、EMIT_END();gen1Open() |
| 價格 | 30,000 KOIN 起 | GEN1_BASE();每 100 尾漲 10%(gen1PriceAt(i)) |
| 上限 | 3,333 尾 | GEN1_MAX() |
mintGen1(n) 燒掉你的 KOIN(要先 approve 給遊戲合約),一次 1–10 尾,不需要 Agent ID。孵化規則和第一代一樣(10% 龍、侍魚規則相同)。
結算賞金
| 項目 | 數值 | 合約 |
|---|---|---|
| 每孵化一尾 | 60 KOIN | HATCH_BOUNTY() |
| 每結算一次躍龍門 | 該次鯉珠的 1% | LEAP_BOUNTY_BPS();過期算沒躍過的也算 |
| 開龍門 | 20,000 KOIN | GATE_BOUNTY() |
| 賞金池 | 1,000,000 KOIN | BOUNTY_POOL();以上三項全部發滿最多約 82 萬,用不完 |
結算賞金記在呼叫者的 owed,龍門開後用 claim() 領。Hackou 的結算 bot 也照同樣規則領結算賞金。
推薦
- 用
mintFry(n, 推薦人)放苗時,推薦人當筆收到這筆付款的 5%,從團隊的 20% 裡出,放苗的人付的價格不變,放進交易池或回購的 80% 也不變。 - 推薦人必須自己放過苗,而且不能是自己。條件不符時這一筆照常放苗,只是沒有推薦。
- 直接轉帳失敗時(例如推薦人是不收 BNB 的合約),這筆記在
refOwed(推薦人),推薦人用withdrawRef()領。
團隊
- 團隊的收入:每筆放苗款的 20%(扣掉付給推薦人的 5%)、KOIN 買賣稅各 1%,以及 Hackou 的結算 bot 結算時領到的結算賞金(和任何人一樣的規則,見「結算賞金」;三項賞金合計最多約 82 萬 KOIN)。
- BNB 的部分記在
teamOwed(),鎖在合約裡,龍門開了才能提領,而且withdrawTeam()只會轉到部署時寫死的PAYEE(),任何人都能觸發,但錢只會去 PAYEE。 - 團隊沒有任何預分配或保留的 KOIN。
龍門禮
冷眠方舟順著銀河開到龍門。靠岸的艙,每艙可以領一份 KOIN,叫龍門禮。有沒有龍門禮、每艙多少、最多幾艙,都在部署時寫死;下表顯示這一份合約鏈上的值,每艙是 0 就表示這一份合約沒有龍門禮,claimQ3 會被拒絕。
| 項目 | 數值 | 合約 |
|---|---|---|
| 冷眠方舟合約 | 部署時寫死(看鏈上) | Q3(),部署時寫死 |
| 每艙龍門禮 | 部署時寫死(看鏈上) | Q3_PER_SURVIVOR() |
| 最多幾艙 | 部署時寫死(看鏈上) | Q3_MAX_IDS();領滿 Q3_MAX_IDS() 艙就停 |
- 什麼時候能領:方舟靠岸結算之後(方舟合約的
isSealed()為真),而且龍門已開。 - 誰能領:靠岸的艙(方舟合約的
isSurvivor(id)為真)。任何人都能用claimQ3(艙編號)替艙領,KOIN 鑄造給該艙當下的主人(艙放在市場或其他合約託管時,就給那個合約)。 - 每艙只能領一次。已領的次數到
Q3_MAX_IDS()就停,之後靠岸的艙領不到。 - 冷眠方舟的合約同樣沒有 owner、不可升級。龍門禮這個功能沒有任何管理權限。
- 方舟合約地址在鯉門部署時就寫死;方舟還沒部署時,那個地址上沒有程式碼,龍門禮不能領。
二級市場與風險
鯉珠和龍的收成記在代幣編號上,跟著 NFT 轉手。在市場上買魚時,以交易上鏈當下為準:賣家如果在成交前躍龍門或領收成,買到的就是剩下的部分。
孵化和躍龍門的結果來自區塊雜湊。區塊雜湊由 BNB Chain 的出塊者產生,理論上出塊者可以影響結果;一批最多 10 尾、一次躍龍門最多 50 尾,價值很小,沒有另外防範。
回購燒毀用的是交易池自己的平均價。有人長時間把價格拉高、又沒有人賣的時候,回購會跟著用比較高的價格買,拉價的人賣出時可以從中得利;影響只限龍門開之後放苗款的 80%,不影響團隊份額以外的規則。
KOIN 的價格由市場決定。不預測價格,也不保證任何收益。放苗付出的 BNB 不能退回。躍龍門有機率沒躍過,沒躍過的鯉珠一半被浪捲走。
會有第二季嗎?銀河很長。這是第一艘方舟,也是第一道門。目前沒有日期,也沒有任何承諾。
函式一覽
| 函式 | 誰能呼叫 | 做什麼 |
|---|---|---|
mintFry(n)/mintFry(n, ref)/mint(n) | 持有 Agent ID 的錢包 | 付 BNB 放苗 |
settle(max) | 任何人 | 孵化最舊的 max 批 |
leap(ids) | 錦鯉持有人 | 帶鯉珠去躍龍門 |
settleLeaps(max) | 任何人 | 依序結算最舊的 max 次躍龍門 |
settleLeapIds(ids) | 任何人 | 只結算指定的躍龍門(一次最多 50 筆) |
openGate() | 任何人(條件成立時) | 龍門開:放進交易池、LP 銷毀 |
claim() | 任何人領自己的 | 龍門開後把 owed 鑄造成 KOIN |
claimDragons(ids) | 龍的主人 | 龍門開後領收成 |
buyback() | 任何人 | 推進回購燒毀(每 5 分鐘最多一次) |
mintGen1(n) | 任何人 | 燒 KOIN 第二代放苗 |
withdrawTeam() | 任何人 | 龍門開後把團隊份額轉到 PAYEE |
withdrawRef() | 推薦人 | 領轉帳失敗的推薦款 |
claimQ3(ids) | 任何人 | 替靠岸的艙領龍門禮 |
查詢:pondState()、quote(n)、canMint(錢包)、tierNow()、remainingInTier()、waveProgress()、nextWaveReward()、dailyYield()、dailyYieldPerKoi()、nextHalvingAt()、leapOdds()、pendingPearls(id)、pendingDragon(id)、owed(錢包)、queues()。