領取與結算
領取必須憑驗證服務為通過 Gate 的參與者簽署的憑證。合約在放款前會在鏈上再驗一次。
EIP-712 憑證
Section titled “EIP-712 憑證”憑證是 EIP-712 對 ClaimAuth 結構的 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; // 一次性,由驗證服務發放}- 參與者通過 Loot 的 Gate。
- 驗證服務為參與者錢包簽發
ClaimAuth,為該(pool, recipient)釘死一次性nonce,設短deadline,完成簽名。 - 參與者向獎池提交
claim(auth, signature)。 - 獎池驗證通過後,計算或讀取分配並轉帳。
拼手氣和均分 Loot 的憑證攜帶零分配,金額在領取時由合約計算;自訂 Loot 由驗證服務簽入確切金額或 token ID。
獎池在動帳前獨立檢查:
- 簽名恢復的地址等於獎池快照的驗證者地址;
poolAddress等於本獎池(不能跨池重用);recipient等於 caller(別人不能用你的憑證);deadline未過期;nonce未使用;- 領取者尚未領過,且還有名額。
四重約束讓憑證不可重放:綁定單一獎池(domain + poolAddress)、單一領取者、一次性 nonce(使用後銷毀)、短 deadline。再加上合約強制每場 Loot 一個錢包只能領一次。憑證外洩或重用也無效——只能做驗證服務授權過的那一次。
這是 Gatoll 信任模型的核心:驗證服務決定資格,合約決定結算。即使驗證服務作惡,也無法讓獎池對不合格地址付兩次,或付到錯誤的池。