@antseed/ants 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/dist/ants-web/assets/Arc-VDBY7LNS-BChRXCXW.js +1 -0
  2. package/dist/ants-web/assets/Brave-BRAKJXDS-mq-Xo37j.js +1 -0
  3. package/dist/ants-web/assets/Browser-76IHF3Y2-BMhRaC5Z.js +1 -0
  4. package/dist/ants-web/assets/Chrome-65Q5P54Y-DR9MQEVr.js +1 -0
  5. package/dist/ants-web/assets/Edge-XSPUTORV-DEoZslQE.js +1 -0
  6. package/dist/ants-web/assets/Firefox-AAHGJQIP-Bp_Hm04m.js +1 -0
  7. package/dist/ants-web/assets/Linux-OO4TNCLJ-B0aw93n9.js +1 -0
  8. package/dist/ants-web/assets/Macos-MW4AE7LN-Vvm8Drw3.js +1 -0
  9. package/dist/ants-web/assets/Opera-KQZLSACL-Cwv5MDFy.js +1 -0
  10. package/dist/ants-web/assets/Safari-ZPL37GXR-C4Ggg6rz.js +1 -0
  11. package/dist/ants-web/assets/Windows-PPTHQER6-BlyV2p7Y.js +1 -0
  12. package/dist/ants-web/assets/add-1qQ_SVL6.js +15 -0
  13. package/dist/ants-web/assets/all-wallets-D0QF065k.js +6 -0
  14. package/dist/ants-web/assets/apechain-SX5YFU6N-q5qBv-mp.js +1 -0
  15. package/dist/ants-web/assets/app-store-j-2thKGl.js +17 -0
  16. package/dist/ants-web/assets/apple-CCcInWVX.js +18 -0
  17. package/dist/ants-web/assets/ar_AR-44JUQ6EW-BMX-am0v.js +1487 -0
  18. package/dist/ants-web/assets/arbitrum-WURIBY6W-CqVkHBr5.js +1 -0
  19. package/dist/ants-web/assets/arrow-bottom-DVZa97G2.js +8 -0
  20. package/dist/ants-web/assets/arrow-bottom-circle-tt2k5BWG.js +11 -0
  21. package/dist/ants-web/assets/arrow-left-DnjqXMe0.js +8 -0
  22. package/dist/ants-web/assets/arrow-right-De8QMymS.js +8 -0
  23. package/dist/ants-web/assets/arrow-top-BS2oLt_x.js +8 -0
  24. package/dist/ants-web/assets/assets-Q6ZU7ZJ5-P8HioiAD.js +1 -0
  25. package/dist/ants-web/assets/avalanche-KOMJD3XY-Dsn_JPR4.js +1 -0
  26. package/dist/ants-web/assets/bank-DIxCskFM.js +14 -0
  27. package/dist/ants-web/assets/base-OAXLRA4F-CoYTVIiL.js +1 -0
  28. package/dist/ants-web/assets/baseAccount-44UITRK7-CsjdbWCf.js +1 -0
  29. package/dist/ants-web/assets/basic-D0Dg7j2v.js +2128 -0
  30. package/dist/ants-web/assets/berachain-NJECWIVC-DumxnFvf.js +1 -0
  31. package/dist/ants-web/assets/blast-V555OVXZ-BbhJh1tj.js +1 -0
  32. package/dist/ants-web/assets/browser-n9VVPree.js +14 -0
  33. package/dist/ants-web/assets/bsc-N647EYR2-B2nLKXWV.js +1 -0
  34. package/dist/ants-web/assets/card-Bl7AHEuE.js +14 -0
  35. package/dist/ants-web/assets/ccip-C_ifxkiT.js +1 -0
  36. package/dist/ants-web/assets/celo-GEP4TUHG-CenIBYLU.js +1 -0
  37. package/dist/ants-web/assets/checkmark-DXB1SsFx.js +11 -0
  38. package/dist/ants-web/assets/checkmark-bold-CIMnw7st.js +8 -0
  39. package/dist/ants-web/assets/chevron-bottom-DGkVb8CY.js +8 -0
  40. package/dist/ants-web/assets/chevron-left-D8vC6sW_.js +8 -0
  41. package/dist/ants-web/assets/chevron-right-CP8tyhU4.js +8 -0
  42. package/dist/ants-web/assets/chevron-top-DUqp6O8b.js +8 -0
  43. package/dist/ants-web/assets/chrome-store-CDk6Jfiv.js +61 -0
  44. package/dist/ants-web/assets/clock-t0Dwo5ck.js +8 -0
  45. package/dist/ants-web/assets/close-BiTlv6FX.js +8 -0
  46. package/dist/ants-web/assets/coinPlaceholder-PJZCh_De.js +8 -0
  47. package/dist/ants-web/assets/compass-CctP2ZVM.js +8 -0
  48. package/dist/ants-web/assets/connect-UA7M4XW6-IY3X6Bmr.js +1 -0
  49. package/dist/ants-web/assets/copy-b1i5dSZT.js +15 -0
  50. package/dist/ants-web/assets/core-4w9H32as.js +908 -0
  51. package/dist/ants-web/assets/create-FASO7PVG-D_rvSpre.js +1 -0
  52. package/dist/ants-web/assets/cronos-HJPAQTAE-BEOvlOC4.js +1 -0
  53. package/dist/ants-web/assets/cursor-kLCZuRWK.js +3 -0
  54. package/dist/ants-web/assets/cursor-transparent-C1IxvCBs.js +12 -0
  55. package/dist/ants-web/assets/de_DE-PYAO5YD6-BWlqPWgO.js +1487 -0
  56. package/dist/ants-web/assets/degen-FQQ4XGHB-CeHTs88l.js +1 -0
  57. package/dist/ants-web/assets/desktop-Qa_41eha.js +9 -0
  58. package/dist/ants-web/assets/disconnect-7QBZVVG8.js +8 -0
  59. package/dist/ants-web/assets/discord-DuRr0OMy.js +17 -0
  60. package/dist/ants-web/assets/es_419-HRGOJ6VT-D-qzxUM-.js +1487 -0
  61. package/dist/ants-web/assets/ethereum-RGGVA4PY-SWGOlkuk.js +1 -0
  62. package/dist/ants-web/assets/etherscan-BOImzSgC.js +6 -0
  63. package/dist/ants-web/assets/events-DQ172AOg.js +1 -0
  64. package/dist/ants-web/assets/exclamation-triangle-evZ54TSt.js +4 -0
  65. package/dist/ants-web/assets/extension-YSvzNEgu.js +8 -0
  66. package/dist/ants-web/assets/external-link-BukU3aK3.js +8 -0
  67. package/dist/ants-web/assets/facebook-WJZQGI9M.js +26 -0
  68. package/dist/ants-web/assets/farcaster-Dt0XRvlP.js +12 -0
  69. package/dist/ants-web/assets/filters-CFC5g--u.js +8 -0
  70. package/dist/ants-web/assets/flow-5FQJFCTK-CUie2reO.js +1 -0
  71. package/dist/ants-web/assets/fr_FR-IGGVC6RM-D8LpUM75.js +1487 -0
  72. package/dist/ants-web/assets/github-Bhz0AnGj.js +18 -0
  73. package/dist/ants-web/assets/gnosis-37ZC4RBL-B137OtHZ.js +1 -0
  74. package/dist/ants-web/assets/google-CGzSUXjP.js +18 -0
  75. package/dist/ants-web/assets/gravity-J5YQHTYH-Bj6B0uod.js +1 -0
  76. package/dist/ants-web/assets/hardhat-TX56IT5N-CV1FY-wE.js +1 -0
  77. package/dist/ants-web/assets/help-circle-BoGPtVJY.js +12 -0
  78. package/dist/ants-web/assets/hi_IN-XSKAA3MF-C3QUpWyP.js +1487 -0
  79. package/dist/ants-web/assets/hyperevm-VKPAA4SA-CHwraEsx.js +1 -0
  80. package/dist/ants-web/assets/id-ir8rS0J_.js +12 -0
  81. package/dist/ants-web/assets/id_ID-KUOB4UAL-K9y-nRWm.js +1487 -0
  82. package/dist/ants-web/assets/image-DXBUHwz_.js +4 -0
  83. package/dist/ants-web/assets/index-9ALlRD6p.css +1 -0
  84. package/dist/ants-web/assets/index-B7p3jPAJ.js +1 -0
  85. package/dist/ants-web/assets/index-BqWNkBzB.js +395 -0
  86. package/dist/ants-web/assets/index-C-I4ROfT.js +16 -0
  87. package/dist/ants-web/assets/index-Chq8yV_g.js +47 -0
  88. package/dist/ants-web/assets/index-Ci5bF__2.js +1729 -0
  89. package/dist/ants-web/assets/index-kzlEvkEN.js +1 -0
  90. package/dist/ants-web/assets/index.es-D1GdDJUC.js +39 -0
  91. package/dist/ants-web/assets/info-DzGq_QPQ.js +3 -0
  92. package/dist/ants-web/assets/info-circle-z91TqQxH.js +12 -0
  93. package/dist/ants-web/assets/ink-FZMYZWHG-62p-5IK5.js +1 -0
  94. package/dist/ants-web/assets/ja_JP-4WRQ63RX-Ct5pF4ug.js +1487 -0
  95. package/dist/ants-web/assets/kaia-65D2U3PU-JmuLQ4gC.js +1 -0
  96. package/dist/ants-web/assets/ko_KR-I2K7AIEP-B5gw8Mwb.js +1487 -0
  97. package/dist/ants-web/assets/lightbulb-CgYwiQYs.js +3 -0
  98. package/dist/ants-web/assets/linea-QRMVQ5DY-DuI3vv0d.js +1 -0
  99. package/dist/ants-web/assets/login-UP3DZBGS-Db_wM5oQ.js +1 -0
  100. package/dist/ants-web/assets/mail-FLPFIbqi.js +8 -0
  101. package/dist/ants-web/assets/manta-SI27YFEJ-CpVOKa06.js +1 -0
  102. package/dist/ants-web/assets/mantle-CKIUT334-DR2WgqzU.js +1 -0
  103. package/dist/ants-web/assets/metaMaskWallet-SITXT2FV-BlemcphV.js +1 -0
  104. package/dist/ants-web/assets/metamask-sdk-QG4PtQco.js +542 -0
  105. package/dist/ants-web/assets/mobile--kHpa5NK.js +9 -0
  106. package/dist/ants-web/assets/monad-4KWC6TSS-DVXSkpiz.js +1 -0
  107. package/dist/ants-web/assets/more-CJbReLy0.js +11 -0
  108. package/dist/ants-web/assets/ms_MY-6VZW6Q3Z-BtFD07hR.js +1487 -0
  109. package/dist/ants-web/assets/network-placeholder-BfSizFBN.js +14 -0
  110. package/dist/ants-web/assets/nftPlaceholder-BTfly2G8.js +8 -0
  111. package/dist/ants-web/assets/off-DCMXa6Y2.js +8 -0
  112. package/dist/ants-web/assets/optimism-HAF2GUT7-ec6Nqxs9.js +1 -0
  113. package/dist/ants-web/assets/play-store-CbbevixE.js +32 -0
  114. package/dist/ants-web/assets/plus-BxINT2r_.js +13 -0
  115. package/dist/ants-web/assets/polygon-WW6ZI7PM-DXlmm4L1.js +1 -0
  116. package/dist/ants-web/assets/pt_BR-N3XOZ4SV-CvVpfsHb.js +1487 -0
  117. package/dist/ants-web/assets/qr-code-CMEsvGrE.js +6 -0
  118. package/dist/ants-web/assets/rainbowWallet-O26YNBMX-DUhYus-9.js +1 -0
  119. package/dist/ants-web/assets/recycle-horizontal-BldRTXPT.js +9 -0
  120. package/dist/ants-web/assets/refresh-82vLCcdB.js +8 -0
  121. package/dist/ants-web/assets/refresh-S4T5V5GX-CwqIaaxK.js +1 -0
  122. package/dist/ants-web/assets/reown-logo-BPGalyzg.js +12 -0
  123. package/dist/ants-web/assets/ronin-EMCPYXZT-N-QBHZdV.js +1 -0
  124. package/dist/ants-web/assets/ru_RU-IITAPRET-DOj6Jzj7.js +1487 -0
  125. package/dist/ants-web/assets/safeWallet-5MNKTR5Z-D-5imDLD.js +1 -0
  126. package/dist/ants-web/assets/sanko-RHQYXGM5-OX010CbN.js +1 -0
  127. package/dist/ants-web/assets/scan-4UYSQ56Q-CjMz6-XC.js +1 -0
  128. package/dist/ants-web/assets/scroll-5OBGQVOV-DJFECiai.js +1 -0
  129. package/dist/ants-web/assets/search-CADsyV1c.js +8 -0
  130. package/dist/ants-web/assets/secp256k1-B5byVYSZ.js +1 -0
  131. package/dist/ants-web/assets/secp256k1-Cb4vPU9D.js +1 -0
  132. package/dist/ants-web/assets/send-DyAisqGO.js +15 -0
  133. package/dist/ants-web/assets/sign-A7IJEUT5-CGsRnPrd.js +1 -0
  134. package/dist/ants-web/assets/superposition-HG6MMR2Y-bRkgatRO.js +1 -0
  135. package/dist/ants-web/assets/swapHorizontal-BfHwXZPT.js +8 -0
  136. package/dist/ants-web/assets/swapHorizontalBold-FIoCjqnp.js +8 -0
  137. package/dist/ants-web/assets/swapHorizontalMedium-CzDDCY_G.js +16 -0
  138. package/dist/ants-web/assets/swapHorizontalRoundedBold-CvMRJeWj.js +8 -0
  139. package/dist/ants-web/assets/swapVertical-BgSezaow.js +8 -0
  140. package/dist/ants-web/assets/telegram-CsMNhXCs.js +16 -0
  141. package/dist/ants-web/assets/th_TH-3ZQCKCQE-BcHUN2Q4.js +1487 -0
  142. package/dist/ants-web/assets/three-dots-DYf4gmVW.js +5 -0
  143. package/dist/ants-web/assets/tr_TR-QUPUGMUF-CwpF6ZFn.js +1487 -0
  144. package/dist/ants-web/assets/twitch-BtBr-NTg.js +18 -0
  145. package/dist/ants-web/assets/twitterIcon-BmRf6M77.js +6 -0
  146. package/dist/ants-web/assets/uk_UA-SSN6SV5E-IlYYyRC6.js +1487 -0
  147. package/dist/ants-web/assets/unichain-C5BWO2ZY-BfguYsnu.js +1 -0
  148. package/dist/ants-web/assets/verify-cxA8gdP6.js +8 -0
  149. package/dist/ants-web/assets/verify-filled-DHnnW8EE.js +8 -0
  150. package/dist/ants-web/assets/vi_VN-7BUVRNYY-CZ9S75qZ.js +1487 -0
  151. package/dist/ants-web/assets/w3m-modal-D1ucMOAa.js +642 -0
  152. package/dist/ants-web/assets/wallet-BT4Fue1R.js +8 -0
  153. package/dist/ants-web/assets/wallet-placeholder-C2J5s6Yp.js +14 -0
  154. package/dist/ants-web/assets/walletConnectWallet-YHWKVTDY-D3lyiczV.js +1 -0
  155. package/dist/ants-web/assets/walletconnect-B5k8iJl-.js +30 -0
  156. package/dist/ants-web/assets/warning-circle-9rNSUSsX.js +12 -0
  157. package/dist/ants-web/assets/x-CpRc85jR.js +12 -0
  158. package/dist/ants-web/assets/xdc-KJ3TDBYO-DNV6zchh.js +1 -0
  159. package/dist/ants-web/assets/zetachain-TLDS5IPW-Udhyw16T.js +1 -0
  160. package/dist/ants-web/assets/zh_CN-HJBN674C-Baf0GEeT.js +1487 -0
  161. package/dist/ants-web/assets/zh_HK-JW3WLRKE-VztJKXL5.js +1487 -0
  162. package/dist/ants-web/assets/zh_TW-VNNRNXY7-aWfg7Qp4.js +1487 -0
  163. package/dist/ants-web/assets/zksync-DH7HK5U4-Dt4usFw6.js +1 -0
  164. package/dist/ants-web/assets/zora-FYL5H3IO-iB4wygST.js +1 -0
  165. package/dist/ants-web/index.html +2 -2
  166. package/dist/api-types.d.ts +168 -6
  167. package/dist/browser-signer.d.ts +30 -0
  168. package/dist/browser-signer.js +189 -0
  169. package/dist/browser-signer.js.map +1 -0
  170. package/dist/jobs.d.ts +10 -3
  171. package/dist/jobs.js +97 -20
  172. package/dist/jobs.js.map +1 -1
  173. package/dist/position-actions.d.ts +13 -0
  174. package/dist/position-actions.js +25 -0
  175. package/dist/position-actions.js.map +1 -0
  176. package/dist/routes.d.ts +7 -0
  177. package/dist/routes.js +63 -5
  178. package/dist/routes.js.map +1 -1
  179. package/dist/server.d.ts +8 -0
  180. package/dist/server.js +157 -12
  181. package/dist/server.js.map +1 -1
  182. package/dist/service/context.d.ts +13 -2
  183. package/dist/service/context.js +35 -4
  184. package/dist/service/context.js.map +1 -1
  185. package/dist/service/display-snapshot.d.ts +28 -0
  186. package/dist/service/display-snapshot.js +144 -0
  187. package/dist/service/display-snapshot.js.map +1 -0
  188. package/dist/service/emissions.js +11 -19
  189. package/dist/service/emissions.js.map +1 -1
  190. package/dist/service/explorer.js +2 -1
  191. package/dist/service/explorer.js.map +1 -1
  192. package/dist/service/format.d.ts +1 -1
  193. package/dist/service/format.js +2 -0
  194. package/dist/service/format.js.map +1 -1
  195. package/dist/service/indexed-wallet.d.ts +7 -0
  196. package/dist/service/indexed-wallet.js +58 -0
  197. package/dist/service/indexed-wallet.js.map +1 -0
  198. package/dist/service/indexer.d.ts +32 -3
  199. package/dist/service/indexer.js +64 -8
  200. package/dist/service/indexer.js.map +1 -1
  201. package/dist/service/legacy-payout.d.ts +3 -0
  202. package/dist/service/legacy-payout.js +32 -0
  203. package/dist/service/legacy-payout.js.map +1 -0
  204. package/dist/service/network.d.ts +5 -0
  205. package/dist/service/network.js +185 -0
  206. package/dist/service/network.js.map +1 -0
  207. package/dist/service/overview-reads.d.ts +30 -0
  208. package/dist/service/overview-reads.js +69 -0
  209. package/dist/service/overview-reads.js.map +1 -0
  210. package/dist/service/overview.js +14 -36
  211. package/dist/service/overview.js.map +1 -1
  212. package/dist/service/pool-merge.d.ts +2 -1
  213. package/dist/service/pool-merge.js +11 -4
  214. package/dist/service/pool-merge.js.map +1 -1
  215. package/dist/service/pools.d.ts +22 -1
  216. package/dist/service/pools.js +257 -98
  217. package/dist/service/pools.js.map +1 -1
  218. package/dist/service/position-feed.d.ts +73 -0
  219. package/dist/service/position-feed.js +173 -0
  220. package/dist/service/position-feed.js.map +1 -0
  221. package/dist/service/positions.d.ts +3 -5
  222. package/dist/service/positions.js +155 -93
  223. package/dist/service/positions.js.map +1 -1
  224. package/dist/service/rewards.d.ts +1 -0
  225. package/dist/service/rewards.js +117 -56
  226. package/dist/service/rewards.js.map +1 -1
  227. package/dist/service/rpc-provider.d.ts +3 -0
  228. package/dist/service/rpc-provider.js +32 -3
  229. package/dist/service/rpc-provider.js.map +1 -1
  230. package/dist/service/seller-models.d.ts +2 -0
  231. package/dist/service/seller-models.js +94 -0
  232. package/dist/service/seller-models.js.map +1 -0
  233. package/dist/service/seller.js +33 -30
  234. package/dist/service/seller.js.map +1 -1
  235. package/dist/service/stake-eligibility.d.ts +6 -0
  236. package/dist/service/stake-eligibility.js +50 -0
  237. package/dist/service/stake-eligibility.js.map +1 -0
  238. package/dist/service/usage.js +5 -13
  239. package/dist/service/usage.js.map +1 -1
  240. package/dist/service/yield.d.ts +3 -0
  241. package/dist/service/yield.js +12 -0
  242. package/dist/service/yield.js.map +1 -0
  243. package/dist/view-cache.d.ts +5 -10
  244. package/dist/view-cache.js +12 -14
  245. package/dist/view-cache.js.map +1 -1
  246. package/dist/wallet-errors.d.ts +9 -0
  247. package/dist/wallet-errors.js +32 -0
  248. package/dist/wallet-errors.js.map +1 -0
  249. package/package.json +8 -3
  250. package/dist/ants-web/assets/index-BunPfgXh.css +0 -1
  251. package/dist/ants-web/assets/index-zCPoF694.js +0 -40
@@ -0,0 +1,58 @@
1
+ /** Live position status older than this is rejected; Antscan refreshes it every 15s. */
2
+ const LIVE_MAX_AGE_SECONDS = 15;
3
+ const REWARDS_MAX_AGE_SECONDS = 3600;
4
+ /** Tolerated clock skew between Antscan and this machine. */
5
+ const CLOCK_SKEW_SECONDS = 30;
6
+ const nowSeconds = () => Math.floor(Date.now() / 1000);
7
+ function validateChain(ctx, data) {
8
+ const { source } = data;
9
+ const matches = source.chainId === ctx.chain.evmChainId
10
+ && source.contracts.sellerPools.toLowerCase() === ctx.chain.sellerPoolsAddress?.toLowerCase()
11
+ && source.contracts.sellerPoolsRewards.toLowerCase() === ctx.chain.sellerPoolsRewardsAddress?.toLowerCase();
12
+ if (!matches)
13
+ throw new Error('Antscan position chain or contracts do not match this dashboard');
14
+ }
15
+ /** The wallet's positions with live on-chain status from Antscan, accepted only when fresh, complete and past our read barrier. */
16
+ export async function liveWalletPositions(ctx, epoch) {
17
+ const indexer = ctx.indexer();
18
+ if (!indexer?.rewardPositions)
19
+ throw new Error('Antscan positions are unavailable');
20
+ const data = await indexer.rewardPositions(ctx.address);
21
+ validateChain(ctx, data);
22
+ const { liveSource } = data;
23
+ const now = nowSeconds();
24
+ const fresh = now - liveSource.fetchedAt < LIVE_MAX_AGE_SECONDS && liveSource.fetchedAt <= now + CLOCK_SKEW_SECONDS;
25
+ if (liveSource.currentEpoch !== epoch || liveSource.stale || !liveSource.complete || data.liveError || !fresh)
26
+ throw new Error(data.liveError ?? 'Antscan live position status is stale or incomplete');
27
+ const barrier = ctx.positionReadBarriers?.get(ctx.address.toLowerCase());
28
+ if (barrier && (liveSource.fetchedAt <= barrier.at || data.source.indexedBlock < barrier.block))
29
+ throw new Error('Antscan live positions have not caught up with your transaction');
30
+ if (data.positions.some(row => row.power == null || row.nextPower == null || row.withdrawableEpoch === null || row.maxLockedNext === null || row.changePending === null))
31
+ throw new Error('Antscan live position fields are incomplete');
32
+ return data;
33
+ }
34
+ /** Indexed staker rewards per position, accepted only for this chain's contracts, a fresh complete snapshot, and past our read barrier. */
35
+ export async function indexedWalletRewards(ctx, epoch, outstanding = false) {
36
+ const indexer = ctx.indexer();
37
+ if (!indexer?.rewardPositions)
38
+ throw new Error('Antscan indexed rewards are unavailable');
39
+ const data = await indexer.rewardPositions(ctx.address, outstanding);
40
+ return validateWalletRewards(ctx, epoch, data);
41
+ }
42
+ export function validateWalletRewards(ctx, epoch, data) {
43
+ validateChain(ctx, data);
44
+ const { source } = data;
45
+ const now = nowSeconds();
46
+ const fresh = now - source.indexedAt <= REWARDS_MAX_AGE_SECONDS && source.indexedAt <= now + CLOCK_SKEW_SECONDS;
47
+ if (source.schemaVersion !== 1 || data.currentEpoch !== epoch || source.stale || !fresh)
48
+ throw new Error('Antscan reward snapshot is stale');
49
+ if (!source.complete || !source.historyComplete || source.historyFromBlock > source.indexedBlock)
50
+ throw new Error('Antscan reward history is incomplete');
51
+ const barrier = ctx.positionReadBarriers?.get(ctx.address.toLowerCase());
52
+ if (barrier && source.indexedBlock < barrier.block)
53
+ throw new Error('Antscan rewards have not caught up with your transaction');
54
+ if (data.positions.some(row => row.rewards.status !== 'available' || row.rewards.pending === null))
55
+ throw new Error('Some indexed position rewards are unavailable');
56
+ return data;
57
+ }
58
+ //# sourceMappingURL=indexed-wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexed-wallet.js","sourceRoot":"","sources":["../../src/service/indexed-wallet.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,12 @@
5
5
  * reconstructed from RPC log scans. Every method returns plain JSON-shaped
6
6
  * data; amounts stay as decimal strings.
7
7
  */
8
+ import { type DisplaySnapshot } from './display-snapshot.js';
9
+ import { type RewardPositions } from './position-feed.js';
8
10
  export interface IndexedStakingEpoch {
11
+ snapshotBlock?: number;
12
+ lastBlockNumber?: number;
13
+ complete?: boolean;
9
14
  epoch: number;
10
15
  totalPowerWeight: string;
11
16
  totalActiveStake: string;
@@ -17,6 +22,7 @@ export interface IndexedStakingEpoch {
17
22
  stakerBudget: string;
18
23
  }
19
24
  export interface IndexedPool {
25
+ participationComplete?: boolean;
20
26
  agentId: number;
21
27
  seller: string | null;
22
28
  sellerName: string | null;
@@ -34,8 +40,17 @@ export interface IndexedPool {
34
40
  lastUsagePoints: string;
35
41
  volumeUsdc: string;
36
42
  lastVolumeUsdc: string;
43
+ volumeAvailable?: boolean;
44
+ lastVolumeAvailable?: boolean;
37
45
  lastEmission: string;
38
46
  lastEmissionSettled: boolean;
47
+ /** Preserve absent/invalid historical inputs instead of treating them as a real zero. */
48
+ historicalYield?: {
49
+ power: string;
50
+ reward: string;
51
+ settled: boolean;
52
+ } | null;
53
+ stakers?: number | null;
39
54
  lastRewardPer1kPower: string | null;
40
55
  projectedEmission: string;
41
56
  projectedRewardPer1kPower: string | null;
@@ -60,14 +75,18 @@ export interface IndexedPoolEpoch {
60
75
  settled: boolean;
61
76
  }
62
77
  export interface IndexedPoolDetail {
78
+ activeStake?: string | null;
63
79
  pool: (IndexedPool & {
64
80
  firstStakeAt: number | null;
65
81
  }) | null;
66
82
  epochs: IndexedPoolEpoch[];
67
- openPositions: number;
68
- stakers: number;
83
+ openPositions: number | null;
84
+ stakers: number | null;
85
+ /** Stake in open positions waiting for their activation epoch; null when the explorer predates the field. */
86
+ pendingStake: string | null;
69
87
  }
70
88
  export interface IndexedPosition {
89
+ lastBlockNumber?: number;
71
90
  id: number;
72
91
  owner: string;
73
92
  agentId: number;
@@ -86,6 +105,9 @@ export interface IndexedPosition {
86
105
  slashedAmount: string;
87
106
  createdAt: number;
88
107
  closedAt: number | null;
108
+ /** Live power this epoch as read by the explorer; null when the explorer could not read it or predates the field. */
109
+ power?: string | null;
110
+ nextPower?: string | null;
89
111
  }
90
112
  export interface IndexedSellerEpoch {
91
113
  seller: string;
@@ -117,6 +139,9 @@ export interface IndexedEpochMetric {
117
139
  requests: string;
118
140
  }
119
141
  export interface Indexer {
142
+ rewardPositions?(owner: string, outstanding?: boolean): Promise<RewardPositions>;
143
+ displaySnapshot?(epoch: number): Promise<DisplaySnapshot>;
144
+ invalidate?(): void;
120
145
  readonly baseUrl: string;
121
146
  pools(): Promise<IndexedPools>;
122
147
  pool(agentId: number, epochs?: number): Promise<IndexedPoolDetail>;
@@ -129,7 +154,8 @@ export interface Indexer {
129
154
  }
130
155
  export declare class IndexerError extends Error {
131
156
  readonly url: string;
132
- constructor(message: string, url: string);
157
+ readonly status?: number | undefined;
158
+ constructor(message: string, url: string, status?: number | undefined);
133
159
  }
134
160
  export declare class AntscanIndexer implements Indexer {
135
161
  private readonly fetchImpl;
@@ -137,10 +163,13 @@ export declare class AntscanIndexer implements Indexer {
137
163
  readonly baseUrl: string;
138
164
  private readonly cache;
139
165
  constructor(baseUrl: string, fetchImpl?: typeof fetch, ttlMs?: number);
166
+ invalidate(): void;
167
+ displaySnapshot(epoch: number): Promise<DisplaySnapshot>;
140
168
  private get;
141
169
  pools(): Promise<IndexedPools>;
142
170
  pool(agentId: number, epochs?: number): Promise<IndexedPoolDetail>;
143
171
  positions(owner: string, includeClosed?: boolean): Promise<IndexedPosition[]>;
172
+ rewardPositions(owner: string, outstanding?: boolean): Promise<RewardPositions>;
144
173
  stakingEpochs(limit?: number): Promise<IndexedStakingEpoch[]>;
145
174
  sellerEpochs(epochs?: number): Promise<Map<string, IndexedSellerEpoch[]>>;
146
175
  participant(address: string, epochs?: number): Promise<IndexedParticipant>;
@@ -5,13 +5,17 @@
5
5
  * reconstructed from RPC log scans. Every method returns plain JSON-shaped
6
6
  * data; amounts stay as decimal strings.
7
7
  */
8
+ import { fetchDisplaySnapshot } from './display-snapshot.js';
9
+ import { fetchRewardPositions } from './position-feed.js';
8
10
  const FETCH_TIMEOUT_MS = 8_000;
9
11
  const CACHE_TTL_MS = 15_000;
10
12
  export class IndexerError extends Error {
11
13
  url;
12
- constructor(message, url) {
14
+ status;
15
+ constructor(message, url, status) {
13
16
  super(message);
14
17
  this.url = url;
18
+ this.status = status;
15
19
  this.name = 'IndexerError';
16
20
  }
17
21
  }
@@ -23,11 +27,18 @@ const str = (value) => (value === null || value === undefined ? '0' : String(val
23
27
  const lower = (value) => (typeof value === 'string' && value ? value.toLowerCase() : null);
24
28
  /** `convert(value)`, or null when the field is absent. */
25
29
  const optional = (value, convert) => (value === null || value === undefined ? null : convert(value));
30
+ /** A non-negative integer string, or null for anything else (absent field, error marker, older explorer). */
31
+ const decimalOrNull = (value) => (/^\d+$/.test(String(value ?? '')) ? String(value) : null);
32
+ /** A non-negative safe integer count, or null. */
33
+ const countOrNull = (value) => (value != null && Number.isSafeInteger(Number(value)) && Number(value) >= 0 ? Number(value) : null);
26
34
  const CLOSE_REASONS = ['split', 'merge', 'move', 'withdraw'];
27
35
  function toStakingEpoch(row) {
28
36
  if (!row)
29
37
  return null;
30
38
  return {
39
+ snapshotBlock: row['snapshotBlock'] == null ? undefined : num(row['snapshotBlock']),
40
+ lastBlockNumber: row['lastBlockNumber'] == null ? undefined : num(row['lastBlockNumber']),
41
+ complete: ['epoch', 'totalActiveStake', 'totalPowerWeight', 'stakerBudget', 'totalWeightedPoolPoints'].every(key => /^\d+$/.test(String(row[key] ?? ''))),
31
42
  epoch: num(row['epoch']),
32
43
  totalPowerWeight: str(row['totalPowerWeight']),
33
44
  totalActiveStake: str(row['totalActiveStake']),
@@ -41,6 +52,7 @@ function toStakingEpoch(row) {
41
52
  }
42
53
  function toPool(row) {
43
54
  return {
55
+ participationComplete: ['openPositions', 'totalPositions'].every(key => row[key] != null && Number.isSafeInteger(Number(row[key])) && Number(row[key]) >= 0),
44
56
  agentId: num(row['agentId']),
45
57
  seller: lower(row['seller']),
46
58
  sellerName: typeof row['sellerName'] === 'string' ? row['sellerName'] : null,
@@ -58,8 +70,13 @@ function toPool(row) {
58
70
  lastUsagePoints: str(row['lastUsagePoints']),
59
71
  volumeUsdc: str(row['volumeUsdc']),
60
72
  lastVolumeUsdc: str(row['lastVolumeUsdc']),
73
+ volumeAvailable: row['volumeUsdc'] != null,
74
+ lastVolumeAvailable: row['lastVolumeUsdc'] != null,
61
75
  lastEmission: str(row['lastEmission']),
62
76
  lastEmissionSettled: row['lastEmissionSettled'] === true,
77
+ historicalYield: /^\d+$/.test(String(row['lastWeight'] ?? '')) && /^\d+$/.test(String(row['lastEmission'] ?? '')) && typeof row['lastEmissionSettled'] === 'boolean'
78
+ ? { power: String(row['lastWeight']), reward: String(row['lastEmission']), settled: row['lastEmissionSettled'] } : null,
79
+ stakers: countOrNull(row['stakers']),
63
80
  lastRewardPer1kPower: optional(row['lastRewardPer1kPower'], str),
64
81
  projectedEmission: str(row['projectedEmission']),
65
82
  projectedRewardPer1kPower: optional(row['projectedRewardPer1kPower'], str),
@@ -69,6 +86,7 @@ function toPool(row) {
69
86
  function toPosition(row) {
70
87
  const closedBy = CLOSE_REASONS.find((reason) => reason === row['closedBy']) ?? null;
71
88
  return {
89
+ lastBlockNumber: row['lastBlockNumber'] == null ? undefined : num(row['lastBlockNumber']),
72
90
  id: num(row['id']),
73
91
  owner: lower(row['owner']) ?? '',
74
92
  agentId: num(row['agentId']),
@@ -87,6 +105,8 @@ function toPosition(row) {
87
105
  slashedAmount: str(row['slashedAmount']),
88
106
  createdAt: num(row['createdAt']),
89
107
  closedAt: optional(row['closedAt'], num),
108
+ power: decimalOrNull(row['power']),
109
+ nextPower: decimalOrNull(row['nextPower']),
90
110
  };
91
111
  }
92
112
  const toSellerEpoch = (row) => ({
@@ -116,10 +136,22 @@ export class AntscanIndexer {
116
136
  this.ttlMs = ttlMs;
117
137
  this.baseUrl = baseUrl.replace(/\/$/, '');
118
138
  }
119
- get(path) {
120
- const hit = this.cache.get(path);
139
+ invalidate() { this.cache.clear(); }
140
+ displaySnapshot(epoch) {
141
+ const key = `display:${epoch}`;
142
+ const hit = this.cache.get(key);
121
143
  if (hit && Date.now() - hit.at < this.ttlMs)
122
144
  return hit.value;
145
+ const value = fetchDisplaySnapshot(this.baseUrl, this.fetchImpl, epoch);
146
+ this.cache.set(key, { at: Date.now(), value });
147
+ value.catch(() => { if (this.cache.get(key)?.value === value)
148
+ this.cache.delete(key); });
149
+ return value;
150
+ }
151
+ get(path, cache = true) {
152
+ const hit = this.cache.get(path);
153
+ if (cache && hit && Date.now() - hit.at < this.ttlMs)
154
+ return hit.value;
123
155
  const url = `${this.baseUrl}${path}`;
124
156
  const value = (async () => {
125
157
  let response;
@@ -130,10 +162,11 @@ export class AntscanIndexer {
130
162
  throw new IndexerError(`Explorer unreachable: ${error.message}`, url);
131
163
  }
132
164
  if (!response.ok)
133
- throw new IndexerError(`Explorer responded with HTTP ${response.status}`, url);
165
+ throw new IndexerError(`Explorer responded with HTTP ${response.status}`, url, response.status);
134
166
  return await response.json();
135
167
  })();
136
- this.cache.set(path, { at: Date.now(), value });
168
+ if (cache)
169
+ this.cache.set(path, { at: Date.now(), value });
137
170
  value.catch(() => { if (this.cache.get(path)?.value === value)
138
171
  this.cache.delete(path); });
139
172
  return value;
@@ -150,18 +183,41 @@ export class AntscanIndexer {
150
183
  const raw = await this.get(`/api/staking/pools/${agentId}?epochs=${epochs}`);
151
184
  return {
152
185
  pool: raw.pool ? toPool(raw.pool) : null,
153
- epochs: (raw.epochs ?? []).map((row) => ({
186
+ epochs: (raw.epochs ?? []).filter(row => row['volumeUsdc'] != null).map((row) => ({
154
187
  epoch: num(row['epoch']), weight: str(row['weight']), activeStake: str(row['activeStake']), usagePoints: str(row['usagePoints']), weightedUsagePoints: str(row['weightedUsagePoints']),
155
188
  volumeUsdc: str(row['volumeUsdc']), requests: str(row['requests']), settledEmission: str(row['settledEmission']), settled: row['settled'] === true,
156
189
  })),
157
- openPositions: num(raw.openPositions),
158
- stakers: num(raw.stakers),
190
+ openPositions: countOrNull(raw.openPositions),
191
+ stakers: countOrNull(raw.stakers),
192
+ pendingStake: decimalOrNull(raw.pendingStake),
193
+ activeStake: decimalOrNull(raw.activeStake),
159
194
  };
160
195
  }
161
196
  async positions(owner, includeClosed = true) {
162
197
  const raw = await this.get(`/api/staking/positions?owner=${owner.toLowerCase()}${includeClosed ? '&includeClosed=1' : ''}`);
163
198
  return (raw.positions ?? []).map(toPosition);
164
199
  }
200
+ rewardPositions(owner, outstanding = false) {
201
+ const key = `rewards:${owner.toLowerCase()}:${outstanding}`;
202
+ const hit = this.cache.get(key);
203
+ if (hit && Date.now() - hit.at < this.ttlMs)
204
+ return hit.value;
205
+ const value = (async () => {
206
+ for (let attempt = 0;; attempt++) {
207
+ try {
208
+ return await fetchRewardPositions(owner, outstanding, path => this.get(path, false));
209
+ }
210
+ catch (error) {
211
+ if (!(error instanceof IndexerError && error.status === 409 && attempt === 0))
212
+ throw error;
213
+ }
214
+ }
215
+ })();
216
+ this.cache.set(key, { at: Date.now(), value });
217
+ value.catch(() => { if (this.cache.get(key)?.value === value)
218
+ this.cache.delete(key); });
219
+ return value;
220
+ }
165
221
  async stakingEpochs(limit = 8) {
166
222
  const raw = await this.get(`/api/staking/epochs?limit=${limit}`);
167
223
  return (raw ?? []).map((row) => toStakingEpoch(row));
@@ -1 +1 @@
1
- {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/service/indexer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/service/indexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { LegacySellerPayout } from '../api-types.js';
2
+ import type { AntsContext } from './context.js';
3
+ export declare function legacySellerPayout(ctx: AntsContext, legacyAddress: string | null | undefined): Promise<LegacySellerPayout>;
@@ -0,0 +1,32 @@
1
+ import { Interface, isError, ZeroAddress } from 'ethers';
2
+ const policyInterface = new Interface(['function canClaimSellerUnlocked(address seller) view returns (bool)']);
3
+ export async function legacySellerPayout(ctx, legacyAddress) {
4
+ try {
5
+ const legacy = ctx.legacyEmissionsAt(legacyAddress ?? null);
6
+ if (!legacy)
7
+ return { destination: 'unknown', recipient: null };
8
+ const policy = await legacy.sellerUnlockPolicy();
9
+ let unlocked = false;
10
+ if (policy !== ZeroAddress) {
11
+ try {
12
+ const result = await ctx.provider().call({
13
+ from: legacyAddress, to: policy,
14
+ data: policyInterface.encodeFunctionData('canClaimSellerUnlocked', [ctx.address]),
15
+ });
16
+ unlocked = policyInterface.decodeFunctionResult('canClaimSellerUnlocked', result)[0] === true;
17
+ }
18
+ catch (error) {
19
+ if (!isError(error, 'CALL_EXCEPTION'))
20
+ throw error;
21
+ }
22
+ }
23
+ if (unlocked)
24
+ return { destination: 'wallet', recipient: ctx.address };
25
+ const pool = await legacy.sellerRewardsPool();
26
+ return pool === ZeroAddress ? { destination: 'unknown', recipient: null } : { destination: 'locked', recipient: pool };
27
+ }
28
+ catch {
29
+ return { destination: 'unknown', recipient: null };
30
+ }
31
+ }
32
+ //# sourceMappingURL=legacy-payout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-payout.js","sourceRoot":"","sources":["../../src/service/legacy-payout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAIzD,MAAM,eAAe,GAAG,IAAI,SAAS,CAAC,CAAC,qEAAqE,CAAC,CAAC,CAAC;AAE/G,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAgB,EAAE,aAAwC;IACjG,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,GAAG,CAAC,iBAAiB,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACjD,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;oBACvC,IAAI,EAAE,aAAc,EAAE,EAAE,EAAE,MAAM;oBAChC,IAAI,EAAE,eAAe,CAAC,kBAAkB,CAAC,wBAAwB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;iBAClF,CAAC,CAAC;gBACH,QAAQ,GAAG,eAAe,CAAC,oBAAoB,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;YAChG,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC;oBAAE,MAAM,KAAK,CAAC;YACrD,CAAC;QACH,CAAC;QACD,IAAI,QAAQ;YAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QACvE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC9C,OAAO,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACzH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACrD,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AntsContext } from './context.js';
2
+ import type { EmissionsView, NetworkSnapshot } from '../api-types.js';
3
+ export declare function invalidateNetwork(ctx: AntsContext): void;
4
+ export declare function networkSnapshot(ctx: AntsContext): Promise<NetworkSnapshot>;
5
+ export declare function networkLegacy(ctx: AntsContext): Promise<EmissionsView['legacy']>;
@@ -0,0 +1,185 @@
1
+ import { Interface, ZeroAddress } from 'ethers';
2
+ import { GATE_MINTERS, gateMinterId, multicallRead } from '@antseed/node/payments';
3
+ const ABI = new Interface([
4
+ 'function genesis() view returns(uint256)',
5
+ 'function epochDuration() view returns(uint256)',
6
+ 'function effectiveEpoch() view returns(uint256)',
7
+ 'function currentEpoch() view returns(uint256)',
8
+ 'function INITIAL_EMISSION() view returns(uint256)',
9
+ 'function initialEmission() view returns(uint256)',
10
+ 'function HALVING_INTERVAL() view returns(uint256)',
11
+ 'function SHARE_DENOMINATOR() view returns(uint256)',
12
+ 'function GATE_SHARE_DENOMINATOR() view returns(uint256)',
13
+ 'function getEpochEmission(uint256) view returns(uint256)',
14
+ 'function cumulativeEmissionThrough(uint256) view returns(uint256)',
15
+ 'function minters(bytes32) view returns(address controller,uint32 shareBps,bool editable)',
16
+ 'function minterEpochBudget(bytes32,uint256) view returns(uint256)',
17
+ 'function totalSupply() view returns(uint256)',
18
+ 'function MAX_SUPPLY() view returns(uint256)',
19
+ 'function totalActiveStakeAtEpoch(uint256) view returns(uint256)',
20
+ 'function totalPowerWeightAtEpoch(uint256) view returns(uint256)',
21
+ 'function totalBuyerPointsByEpoch(uint256) view returns(uint256)',
22
+ 'function totalSellerPointsByEpoch(uint256) view returns(uint256)',
23
+ 'function stakerEpochBudget(uint256) view returns(uint256)',
24
+ 'function usageEpochBudgets(uint256) view returns(uint256 buyer,uint256 seller)',
25
+ 'function dynamicStakerConfigAt(uint256) view returns(tuple(uint32 minShareBps,uint32 maxShareBps,uint256 stakeShareTarget))',
26
+ 'function dynamicUsageConfigAt(uint256) view returns(tuple(uint32 buyerMinShareBps,uint32 buyerMaxShareBps,uint32 sellerMinShareBps,uint32 sellerMaxShareBps,uint256 volumeShareTarget))',
27
+ 'function emissionsGate() view returns(address)',
28
+ 'function sellerPools() view returns(address)',
29
+ 'function usageAccounting() view returns(address)',
30
+ 'function emissions() view returns(address)',
31
+ 'function staking() view returns(address)',
32
+ ]);
33
+ const caches = new WeakMap();
34
+ const TTL_MS = 20_000;
35
+ export function invalidateNetwork(ctx) {
36
+ const cache = caches.get(ctx);
37
+ if (cache)
38
+ caches.set(ctx, { key: cache.key, metadata: cache.metadata });
39
+ }
40
+ export function networkSnapshot(ctx) {
41
+ const key = JSON.stringify(ctx.chain);
42
+ let cache = caches.get(ctx);
43
+ if (!cache || cache.key !== key) {
44
+ cache = { key };
45
+ caches.set(ctx, cache);
46
+ }
47
+ if (cache.pending)
48
+ return cache.pending;
49
+ const value = cache.value;
50
+ const age = value ? Date.now() - value.fetchedAt : Infinity;
51
+ if (value && age < TTL_MS && age < value.epoch.secondsToBoundary * 1000)
52
+ return Promise.resolve(value);
53
+ const entry = cache;
54
+ const pending = readSnapshot(ctx, entry).then(snapshot => {
55
+ entry.value = snapshot;
56
+ return snapshot;
57
+ }).finally(() => { entry.pending = undefined; });
58
+ entry.pending = pending;
59
+ return pending;
60
+ }
61
+ async function readSnapshot(ctx, cache) {
62
+ const chain = ctx.chain;
63
+ const gate = chain.emissionsGateAddress;
64
+ if (!gate || gate === ZeroAddress)
65
+ throw new Error('The emission gate is not configured on this network.');
66
+ const provider = ctx.provider();
67
+ const block = await provider.getBlock('latest');
68
+ if (!block)
69
+ throw new Error('The latest network block is unavailable.');
70
+ const options = { blockTag: block.number };
71
+ if (!cache.metadata) {
72
+ const methods = ['genesis', 'epochDuration', 'INITIAL_EMISSION', 'HALVING_INTERVAL', 'SHARE_DENOMINATOR'];
73
+ const values = await multicallRead(provider, methods.map(method => ({ target: gate, iface: ABI, method })), options);
74
+ const required = (index) => {
75
+ const value = values[index]?.[0];
76
+ if (typeof value !== 'bigint')
77
+ throw new Error(`Network configuration unavailable: ${methods[index]}.`);
78
+ return value;
79
+ };
80
+ const metadata = { genesis: Number(required(0)), duration: Number(required(1)), initial: required(2).toString(), halving: Number(required(3)), denominator: Number(required(4)) };
81
+ if (![metadata.genesis, metadata.duration, metadata.halving, metadata.denominator].every(Number.isSafeInteger) || metadata.duration <= 0 || metadata.denominator <= 0)
82
+ throw new Error('Invalid emission timing or share denominator.');
83
+ cache.metadata = metadata;
84
+ }
85
+ const metadata = cache.metadata;
86
+ const epoch = Math.max(0, Math.floor((block.timestamp - metadata.genesis) / metadata.duration));
87
+ const requests = [];
88
+ const errors = [];
89
+ const add = (target, method, args = []) => {
90
+ if (!target || target === ZeroAddress)
91
+ return -1;
92
+ return requests.push({ target, iface: ABI, method, args }) - 1;
93
+ };
94
+ const poolRewards = chain.sellerPoolsRewardsAddress;
95
+ const usageRewards = chain.usageRewardsAddress;
96
+ const ids = {
97
+ epoch: add(gate, 'currentEpoch'), effective: add(gate, 'effectiveEpoch'),
98
+ emission: add(gate, 'getEpochEmission', [epoch]), nextEmission: add(gate, 'getEpochEmission', [epoch + 1]),
99
+ cumulative: add(gate, 'cumulativeEmissionThrough', [epoch + 1]),
100
+ supply: add(chain.antsTokenAddress, 'totalSupply'), maxSupply: add(chain.antsTokenAddress, 'MAX_SUPPLY'),
101
+ stake: add(chain.sellerPoolsAddress, 'totalActiveStakeAtEpoch', [epoch]), weight: add(chain.sellerPoolsAddress, 'totalPowerWeightAtEpoch', [epoch]),
102
+ buyerPoints: add(chain.usageAccountingAddress, 'totalBuyerPointsByEpoch', [epoch]), sellerPoints: add(chain.usageAccountingAddress, 'totalSellerPointsByEpoch', [epoch]),
103
+ stakerBudget: add(poolRewards, 'stakerEpochBudget', [epoch]), usageBudgets: add(usageRewards, 'usageEpochBudgets', [epoch]),
104
+ stakerConfig: add(poolRewards, 'dynamicStakerConfigAt', [epoch]), nextStakerConfig: add(poolRewards, 'dynamicStakerConfigAt', [epoch + 1]),
105
+ usageConfig: add(usageRewards, 'dynamicUsageConfigAt', [epoch]), nextUsageConfig: add(usageRewards, 'dynamicUsageConfigAt', [epoch + 1]),
106
+ initial: add(poolRewards, 'initialEmission'),
107
+ stakerGate: add(poolRewards, 'emissionsGate'), usageGate: add(usageRewards, 'emissionsGate'),
108
+ pools: add(poolRewards, 'sellerPools'), accounting: add(usageRewards, 'usageAccounting'),
109
+ stakerDenominator: add(poolRewards, 'GATE_SHARE_DENOMINATOR'), usageDenominator: add(usageRewards, 'GATE_SHARE_DENOMINATOR'),
110
+ registryEmissions: add(chain.registryContractAddress, 'emissions'), registryStaking: add(chain.registryContractAddress, 'staking'),
111
+ };
112
+ const buckets = GATE_MINTERS.map(minter => {
113
+ const id = gateMinterId(minter.id);
114
+ return { name: minter.name, id, info: add(gate, 'minters', [id]), budget: add(gate, 'minterEpochBudget', [id, epoch]), nextBudget: add(gate, 'minterEpochBudget', [id, epoch + 1]) };
115
+ });
116
+ const values = await multicallRead(provider, requests, options);
117
+ const read = (index, label) => {
118
+ const value = index < 0 ? null : values[index];
119
+ if (!value)
120
+ errors.push(`${label} unavailable.`);
121
+ return value ?? null;
122
+ };
123
+ const amount = (index, label) => {
124
+ const value = read(index, label)?.[0];
125
+ return typeof value === 'bigint' ? value.toString() : null;
126
+ };
127
+ if (amount(ids.epoch, 'Current epoch') !== String(epoch))
128
+ throw new Error('The emission epoch does not match the snapshot block. Refresh the network data.');
129
+ const bucketViews = buckets.map(bucket => ({ name: bucket.name, id: bucket.id, controller: read(bucket.info, `${bucket.name} controller`)?.[0] ?? null, budget: amount(bucket.budget, `${bucket.name} limit`), nextBudget: amount(bucket.nextBudget, `${bucket.name} next-epoch limit`) }));
130
+ const matches = (index, expected) => typeof values[index]?.[0] === 'string' && values[index][0].toLowerCase() === expected?.toLowerCase();
131
+ const stakerVerified = matches(ids.stakerGate, gate) && matches(ids.pools, chain.sellerPoolsAddress)
132
+ && bucketViews[0]?.controller?.toLowerCase() === poolRewards?.toLowerCase() && values[ids.stakerDenominator]?.[0] === BigInt(metadata.denominator);
133
+ const usageVerified = matches(ids.usageGate, gate) && matches(ids.accounting, chain.usageAccountingAddress)
134
+ && bucketViews[1]?.controller?.toLowerCase() === usageRewards?.toLowerCase() && values[ids.usageDenominator]?.[0] === BigInt(metadata.denominator);
135
+ if (!stakerVerified)
136
+ errors.push('Staker controller connections could not be verified against the emission gate.');
137
+ if (!usageVerified)
138
+ errors.push('Usage controller connections could not be verified against the emission gate.');
139
+ const stakerConfig = (index) => {
140
+ const result = read(index, 'Staker configuration')?.[0];
141
+ return stakerVerified && result ? { minShareBps: Number(result[0]), maxShareBps: Number(result[1]), stakeShareTarget: result[2].toString() } : null;
142
+ };
143
+ const usageConfig = (index) => {
144
+ const result = read(index, 'Usage configuration')?.[0];
145
+ return usageVerified && result ? { buyerMinShareBps: Number(result[0]), buyerMaxShareBps: Number(result[1]), sellerMinShareBps: Number(result[2]), sellerMaxShareBps: Number(result[3]), volumeShareTarget: result[4].toString() } : null;
146
+ };
147
+ const emission = amount(ids.emission, 'Epoch emission');
148
+ const config = stakerConfig(ids.stakerConfig);
149
+ const initial = amount(ids.initial, 'Staker initial emission');
150
+ const buyerPoints = amount(ids.buyerPoints, 'Buyer usage input');
151
+ const sellerPoints = amount(ids.sellerPoints, 'Seller usage input');
152
+ const usage = read(ids.usageBudgets, 'Usage budgets');
153
+ const effective = amount(ids.effective, 'Reward activation epoch');
154
+ const registryEmissions = read(ids.registryEmissions, 'Registry emissions pointer');
155
+ const registryStaking = read(ids.registryStaking, 'Registry staking pointer');
156
+ const activation = !registryEmissions || !registryStaking ? 'unverified'
157
+ : matches(ids.registryEmissions, chain.usageAccountingAddress) && matches(ids.registryStaking, chain.sellerRegistryAddress) ? 'active' : 'not-active';
158
+ const nextBoundaryAt = metadata.genesis + (epoch + 1) * metadata.duration;
159
+ return {
160
+ chainId: chain.chainId, evmChainId: chain.evmChainId, blockNumber: block.number, blockTimestamp: block.timestamp, fetchedAt: Date.now(),
161
+ activation,
162
+ epoch: { current: epoch, effective: effective === null ? null : Number(effective), genesis: metadata.genesis, epochDuration: metadata.duration, nextBoundaryAt, secondsToBoundary: Math.max(0, nextBoundaryAt - block.timestamp) },
163
+ shareDenominator: metadata.denominator, initialEmission: metadata.initial, halvingInterval: metadata.halving,
164
+ emission, nextEmission: amount(ids.nextEmission, 'Next epoch emission'), cumulativeScheduled: amount(ids.cumulative, 'Scheduled cumulative emission'),
165
+ totalSupply: amount(ids.supply, 'Token supply'), maxSupply: amount(ids.maxSupply, 'Maximum token supply'),
166
+ totalActiveStake: amount(ids.stake, 'Active stake'), totalPowerWeight: amount(ids.weight, 'Power weight'),
167
+ usageVolume: buyerPoints === null || sellerPoints === null ? null : (BigInt(buyerPoints) > BigInt(sellerPoints) ? buyerPoints : sellerPoints),
168
+ buckets: bucketViews,
169
+ budgets: { staker: stakerVerified ? amount(ids.stakerBudget, 'Staker budget') : null, buyer: usageVerified && usage ? String(usage[0]) : null, seller: usageVerified && usage ? String(usage[1]) : null },
170
+ stakerConfig: config, nextStakerConfig: stakerConfig(ids.nextStakerConfig),
171
+ scaledStakeTarget: config && emission !== null && initial !== null && BigInt(initial) > 0n ? (BigInt(config.stakeShareTarget) * BigInt(emission) / BigInt(initial)).toString() : null,
172
+ usageConfig: usageConfig(ids.usageConfig), nextUsageConfig: usageConfig(ids.nextUsageConfig),
173
+ contracts: Object.fromEntries(Object.entries({ registry: chain.registryContractAddress, gate, sellerPools: chain.sellerPoolsAddress, stakerRewards: poolRewards, usageRewards, usageAccounting: chain.usageAccountingAddress, token: chain.antsTokenAddress }).filter((entry) => !!entry[1])),
174
+ errors: [...new Set(errors)],
175
+ };
176
+ }
177
+ export async function networkLegacy(ctx) {
178
+ const stack = await ctx.stack();
179
+ const contract = ctx.legacyEmissionsAt(stack.legacyEmissions);
180
+ if (!contract || !stack.legacyEmissions)
181
+ return null;
182
+ const [shares, info] = await Promise.all([contract.getShares(), contract.getEpochInfo()]);
183
+ return { contract: stack.legacyEmissions, sellerPct: shares.sellerSharePct, buyerPct: shares.buyerSharePct, reservePct: shares.reserveSharePct, teamPct: shares.teamSharePct, currentEpoch: info.epoch };
184
+ }
185
+ //# sourceMappingURL=network.js.map