Skip to content

領取與結算

領取必須憑驗證服務為通過 Gate 的參與者簽署的憑證。合約在放款前會在鏈上再驗一次。

憑證是 EIP-712ClaimAuth 結構的 typed-data 簽名。domain 把簽名綁定到特定獎池:

domain = {
name: "GatollRewardPool",
version: "1",
chainId,
verifyingContract: <pool address>
}
ClaimAuth = {
address poolAddress; // 目標獎池
address recipient; // 可領取的地址
uint256 amount; // 同質資產數量或 NFT 數量
uint256[] tokenIds; // NFT id(否則為空)
uint256 deadline; // 過期時間(unix 秒)
uint256 nonce; // 一次性,由驗證服務發放
}
  1. 參與者通過 Loot 的 Gate。
  2. 驗證服務為參與者錢包簽發 ClaimAuth,為該 (pool, recipient) 釘死一次性 nonce,設短 deadline,完成簽名。
  3. 參與者向獎池提交 claim(auth, signature)
  4. 獎池驗證通過後,計算或讀取分配並轉帳。

拼手氣均分 Loot 的憑證攜帶零分配,金額在領取時由合約計算;自訂 Loot 由驗證服務簽入確切金額或 token ID。

獎池在動帳前獨立檢查:

  • 簽名恢復的地址等於獎池快照的驗證者地址;
  • poolAddress 等於本獎池(不能跨池重用);
  • recipient 等於 caller(別人不能用你的憑證);
  • deadline 未過期;
  • nonce 未使用;
  • 領取者尚未領過,且還有名額。

四重約束讓憑證不可重放:綁定單一獎池(domain + poolAddress)、單一領取者、一次性 nonce(使用後銷毀)、短 deadline。再加上合約強制每場 Loot 一個錢包只能領一次。憑證外洩或重用也無效——只能做驗證服務授權過的那一次。

這是 Gatoll 信任模型的核心:驗證服務決定資格,合約決定結算。即使驗證服務作惡,也無法讓獎池對不合格地址付兩次,或付到錯誤的池。