@antseed/ants 0.1.5 → 0.1.7
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.
- package/dist/ants-web/assets/Arc-VDBY7LNS-BChRXCXW.js +1 -0
- package/dist/ants-web/assets/Brave-BRAKJXDS-mq-Xo37j.js +1 -0
- package/dist/ants-web/assets/Browser-76IHF3Y2-BMhRaC5Z.js +1 -0
- package/dist/ants-web/assets/Chrome-65Q5P54Y-DR9MQEVr.js +1 -0
- package/dist/ants-web/assets/Edge-XSPUTORV-DEoZslQE.js +1 -0
- package/dist/ants-web/assets/Firefox-AAHGJQIP-Bp_Hm04m.js +1 -0
- package/dist/ants-web/assets/Linux-OO4TNCLJ-B0aw93n9.js +1 -0
- package/dist/ants-web/assets/Macos-MW4AE7LN-Vvm8Drw3.js +1 -0
- package/dist/ants-web/assets/Opera-KQZLSACL-Cwv5MDFy.js +1 -0
- package/dist/ants-web/assets/Safari-ZPL37GXR-C4Ggg6rz.js +1 -0
- package/dist/ants-web/assets/Windows-PPTHQER6-BlyV2p7Y.js +1 -0
- package/dist/ants-web/assets/add-1qQ_SVL6.js +15 -0
- package/dist/ants-web/assets/all-wallets-D0QF065k.js +6 -0
- package/dist/ants-web/assets/apechain-SX5YFU6N-q5qBv-mp.js +1 -0
- package/dist/ants-web/assets/app-store-j-2thKGl.js +17 -0
- package/dist/ants-web/assets/apple-CCcInWVX.js +18 -0
- package/dist/ants-web/assets/ar_AR-44JUQ6EW-BMX-am0v.js +1487 -0
- package/dist/ants-web/assets/arbitrum-WURIBY6W-CqVkHBr5.js +1 -0
- package/dist/ants-web/assets/arrow-bottom-DVZa97G2.js +8 -0
- package/dist/ants-web/assets/arrow-bottom-circle-tt2k5BWG.js +11 -0
- package/dist/ants-web/assets/arrow-left-DnjqXMe0.js +8 -0
- package/dist/ants-web/assets/arrow-right-De8QMymS.js +8 -0
- package/dist/ants-web/assets/arrow-top-BS2oLt_x.js +8 -0
- package/dist/ants-web/assets/assets-Q6ZU7ZJ5-P8HioiAD.js +1 -0
- package/dist/ants-web/assets/avalanche-KOMJD3XY-Dsn_JPR4.js +1 -0
- package/dist/ants-web/assets/bank-DIxCskFM.js +14 -0
- package/dist/ants-web/assets/base-OAXLRA4F-CoYTVIiL.js +1 -0
- package/dist/ants-web/assets/baseAccount-44UITRK7-CsjdbWCf.js +1 -0
- package/dist/ants-web/assets/basic-D0Dg7j2v.js +2128 -0
- package/dist/ants-web/assets/berachain-NJECWIVC-DumxnFvf.js +1 -0
- package/dist/ants-web/assets/blast-V555OVXZ-BbhJh1tj.js +1 -0
- package/dist/ants-web/assets/browser-n9VVPree.js +14 -0
- package/dist/ants-web/assets/bsc-N647EYR2-B2nLKXWV.js +1 -0
- package/dist/ants-web/assets/card-Bl7AHEuE.js +14 -0
- package/dist/ants-web/assets/ccip-C_ifxkiT.js +1 -0
- package/dist/ants-web/assets/celo-GEP4TUHG-CenIBYLU.js +1 -0
- package/dist/ants-web/assets/checkmark-DXB1SsFx.js +11 -0
- package/dist/ants-web/assets/checkmark-bold-CIMnw7st.js +8 -0
- package/dist/ants-web/assets/chevron-bottom-DGkVb8CY.js +8 -0
- package/dist/ants-web/assets/chevron-left-D8vC6sW_.js +8 -0
- package/dist/ants-web/assets/chevron-right-CP8tyhU4.js +8 -0
- package/dist/ants-web/assets/chevron-top-DUqp6O8b.js +8 -0
- package/dist/ants-web/assets/chrome-store-CDk6Jfiv.js +61 -0
- package/dist/ants-web/assets/clock-t0Dwo5ck.js +8 -0
- package/dist/ants-web/assets/close-BiTlv6FX.js +8 -0
- package/dist/ants-web/assets/coinPlaceholder-PJZCh_De.js +8 -0
- package/dist/ants-web/assets/compass-CctP2ZVM.js +8 -0
- package/dist/ants-web/assets/connect-UA7M4XW6-IY3X6Bmr.js +1 -0
- package/dist/ants-web/assets/copy-b1i5dSZT.js +15 -0
- package/dist/ants-web/assets/core-4w9H32as.js +908 -0
- package/dist/ants-web/assets/create-FASO7PVG-D_rvSpre.js +1 -0
- package/dist/ants-web/assets/cronos-HJPAQTAE-BEOvlOC4.js +1 -0
- package/dist/ants-web/assets/cursor-kLCZuRWK.js +3 -0
- package/dist/ants-web/assets/cursor-transparent-C1IxvCBs.js +12 -0
- package/dist/ants-web/assets/de_DE-PYAO5YD6-BWlqPWgO.js +1487 -0
- package/dist/ants-web/assets/degen-FQQ4XGHB-CeHTs88l.js +1 -0
- package/dist/ants-web/assets/desktop-Qa_41eha.js +9 -0
- package/dist/ants-web/assets/disconnect-7QBZVVG8.js +8 -0
- package/dist/ants-web/assets/discord-DuRr0OMy.js +17 -0
- package/dist/ants-web/assets/es_419-HRGOJ6VT-D-qzxUM-.js +1487 -0
- package/dist/ants-web/assets/ethereum-RGGVA4PY-SWGOlkuk.js +1 -0
- package/dist/ants-web/assets/etherscan-BOImzSgC.js +6 -0
- package/dist/ants-web/assets/events-DQ172AOg.js +1 -0
- package/dist/ants-web/assets/exclamation-triangle-evZ54TSt.js +4 -0
- package/dist/ants-web/assets/extension-YSvzNEgu.js +8 -0
- package/dist/ants-web/assets/external-link-BukU3aK3.js +8 -0
- package/dist/ants-web/assets/facebook-WJZQGI9M.js +26 -0
- package/dist/ants-web/assets/farcaster-Dt0XRvlP.js +12 -0
- package/dist/ants-web/assets/filters-CFC5g--u.js +8 -0
- package/dist/ants-web/assets/flow-5FQJFCTK-CUie2reO.js +1 -0
- package/dist/ants-web/assets/fr_FR-IGGVC6RM-D8LpUM75.js +1487 -0
- package/dist/ants-web/assets/github-Bhz0AnGj.js +18 -0
- package/dist/ants-web/assets/gnosis-37ZC4RBL-B137OtHZ.js +1 -0
- package/dist/ants-web/assets/google-CGzSUXjP.js +18 -0
- package/dist/ants-web/assets/gravity-J5YQHTYH-Bj6B0uod.js +1 -0
- package/dist/ants-web/assets/hardhat-TX56IT5N-CV1FY-wE.js +1 -0
- package/dist/ants-web/assets/help-circle-BoGPtVJY.js +12 -0
- package/dist/ants-web/assets/hi_IN-XSKAA3MF-C3QUpWyP.js +1487 -0
- package/dist/ants-web/assets/hyperevm-VKPAA4SA-CHwraEsx.js +1 -0
- package/dist/ants-web/assets/id-ir8rS0J_.js +12 -0
- package/dist/ants-web/assets/id_ID-KUOB4UAL-K9y-nRWm.js +1487 -0
- package/dist/ants-web/assets/image-DXBUHwz_.js +4 -0
- package/dist/ants-web/assets/index-9ALlRD6p.css +1 -0
- package/dist/ants-web/assets/index-B7p3jPAJ.js +1 -0
- package/dist/ants-web/assets/index-BqWNkBzB.js +395 -0
- package/dist/ants-web/assets/index-C-I4ROfT.js +16 -0
- package/dist/ants-web/assets/index-Chq8yV_g.js +47 -0
- package/dist/ants-web/assets/index-Ci5bF__2.js +1729 -0
- package/dist/ants-web/assets/index-kzlEvkEN.js +1 -0
- package/dist/ants-web/assets/index.es-D1GdDJUC.js +39 -0
- package/dist/ants-web/assets/info-DzGq_QPQ.js +3 -0
- package/dist/ants-web/assets/info-circle-z91TqQxH.js +12 -0
- package/dist/ants-web/assets/ink-FZMYZWHG-62p-5IK5.js +1 -0
- package/dist/ants-web/assets/ja_JP-4WRQ63RX-Ct5pF4ug.js +1487 -0
- package/dist/ants-web/assets/kaia-65D2U3PU-JmuLQ4gC.js +1 -0
- package/dist/ants-web/assets/ko_KR-I2K7AIEP-B5gw8Mwb.js +1487 -0
- package/dist/ants-web/assets/lightbulb-CgYwiQYs.js +3 -0
- package/dist/ants-web/assets/linea-QRMVQ5DY-DuI3vv0d.js +1 -0
- package/dist/ants-web/assets/login-UP3DZBGS-Db_wM5oQ.js +1 -0
- package/dist/ants-web/assets/mail-FLPFIbqi.js +8 -0
- package/dist/ants-web/assets/manta-SI27YFEJ-CpVOKa06.js +1 -0
- package/dist/ants-web/assets/mantle-CKIUT334-DR2WgqzU.js +1 -0
- package/dist/ants-web/assets/metaMaskWallet-SITXT2FV-BlemcphV.js +1 -0
- package/dist/ants-web/assets/metamask-sdk-QG4PtQco.js +542 -0
- package/dist/ants-web/assets/mobile--kHpa5NK.js +9 -0
- package/dist/ants-web/assets/monad-4KWC6TSS-DVXSkpiz.js +1 -0
- package/dist/ants-web/assets/more-CJbReLy0.js +11 -0
- package/dist/ants-web/assets/ms_MY-6VZW6Q3Z-BtFD07hR.js +1487 -0
- package/dist/ants-web/assets/network-placeholder-BfSizFBN.js +14 -0
- package/dist/ants-web/assets/nftPlaceholder-BTfly2G8.js +8 -0
- package/dist/ants-web/assets/off-DCMXa6Y2.js +8 -0
- package/dist/ants-web/assets/optimism-HAF2GUT7-ec6Nqxs9.js +1 -0
- package/dist/ants-web/assets/play-store-CbbevixE.js +32 -0
- package/dist/ants-web/assets/plus-BxINT2r_.js +13 -0
- package/dist/ants-web/assets/polygon-WW6ZI7PM-DXlmm4L1.js +1 -0
- package/dist/ants-web/assets/pt_BR-N3XOZ4SV-CvVpfsHb.js +1487 -0
- package/dist/ants-web/assets/qr-code-CMEsvGrE.js +6 -0
- package/dist/ants-web/assets/rainbowWallet-O26YNBMX-DUhYus-9.js +1 -0
- package/dist/ants-web/assets/recycle-horizontal-BldRTXPT.js +9 -0
- package/dist/ants-web/assets/refresh-82vLCcdB.js +8 -0
- package/dist/ants-web/assets/refresh-S4T5V5GX-CwqIaaxK.js +1 -0
- package/dist/ants-web/assets/reown-logo-BPGalyzg.js +12 -0
- package/dist/ants-web/assets/ronin-EMCPYXZT-N-QBHZdV.js +1 -0
- package/dist/ants-web/assets/ru_RU-IITAPRET-DOj6Jzj7.js +1487 -0
- package/dist/ants-web/assets/safeWallet-5MNKTR5Z-D-5imDLD.js +1 -0
- package/dist/ants-web/assets/sanko-RHQYXGM5-OX010CbN.js +1 -0
- package/dist/ants-web/assets/scan-4UYSQ56Q-CjMz6-XC.js +1 -0
- package/dist/ants-web/assets/scroll-5OBGQVOV-DJFECiai.js +1 -0
- package/dist/ants-web/assets/search-CADsyV1c.js +8 -0
- package/dist/ants-web/assets/secp256k1-B5byVYSZ.js +1 -0
- package/dist/ants-web/assets/secp256k1-Cb4vPU9D.js +1 -0
- package/dist/ants-web/assets/send-DyAisqGO.js +15 -0
- package/dist/ants-web/assets/sign-A7IJEUT5-CGsRnPrd.js +1 -0
- package/dist/ants-web/assets/superposition-HG6MMR2Y-bRkgatRO.js +1 -0
- package/dist/ants-web/assets/swapHorizontal-BfHwXZPT.js +8 -0
- package/dist/ants-web/assets/swapHorizontalBold-FIoCjqnp.js +8 -0
- package/dist/ants-web/assets/swapHorizontalMedium-CzDDCY_G.js +16 -0
- package/dist/ants-web/assets/swapHorizontalRoundedBold-CvMRJeWj.js +8 -0
- package/dist/ants-web/assets/swapVertical-BgSezaow.js +8 -0
- package/dist/ants-web/assets/telegram-CsMNhXCs.js +16 -0
- package/dist/ants-web/assets/th_TH-3ZQCKCQE-BcHUN2Q4.js +1487 -0
- package/dist/ants-web/assets/three-dots-DYf4gmVW.js +5 -0
- package/dist/ants-web/assets/tr_TR-QUPUGMUF-CwpF6ZFn.js +1487 -0
- package/dist/ants-web/assets/twitch-BtBr-NTg.js +18 -0
- package/dist/ants-web/assets/twitterIcon-BmRf6M77.js +6 -0
- package/dist/ants-web/assets/uk_UA-SSN6SV5E-IlYYyRC6.js +1487 -0
- package/dist/ants-web/assets/unichain-C5BWO2ZY-BfguYsnu.js +1 -0
- package/dist/ants-web/assets/verify-cxA8gdP6.js +8 -0
- package/dist/ants-web/assets/verify-filled-DHnnW8EE.js +8 -0
- package/dist/ants-web/assets/vi_VN-7BUVRNYY-CZ9S75qZ.js +1487 -0
- package/dist/ants-web/assets/w3m-modal-D1ucMOAa.js +642 -0
- package/dist/ants-web/assets/wallet-BT4Fue1R.js +8 -0
- package/dist/ants-web/assets/wallet-placeholder-C2J5s6Yp.js +14 -0
- package/dist/ants-web/assets/walletConnectWallet-YHWKVTDY-D3lyiczV.js +1 -0
- package/dist/ants-web/assets/walletconnect-B5k8iJl-.js +30 -0
- package/dist/ants-web/assets/warning-circle-9rNSUSsX.js +12 -0
- package/dist/ants-web/assets/x-CpRc85jR.js +12 -0
- package/dist/ants-web/assets/xdc-KJ3TDBYO-DNV6zchh.js +1 -0
- package/dist/ants-web/assets/zetachain-TLDS5IPW-Udhyw16T.js +1 -0
- package/dist/ants-web/assets/zh_CN-HJBN674C-Baf0GEeT.js +1487 -0
- package/dist/ants-web/assets/zh_HK-JW3WLRKE-VztJKXL5.js +1487 -0
- package/dist/ants-web/assets/zh_TW-VNNRNXY7-aWfg7Qp4.js +1487 -0
- package/dist/ants-web/assets/zksync-DH7HK5U4-Dt4usFw6.js +1 -0
- package/dist/ants-web/assets/zora-FYL5H3IO-iB4wygST.js +1 -0
- package/dist/ants-web/index.html +2 -2
- package/dist/api-types.d.ts +168 -6
- package/dist/browser-signer.d.ts +30 -0
- package/dist/browser-signer.js +189 -0
- package/dist/browser-signer.js.map +1 -0
- package/dist/jobs.d.ts +10 -3
- package/dist/jobs.js +97 -20
- package/dist/jobs.js.map +1 -1
- package/dist/position-actions.d.ts +13 -0
- package/dist/position-actions.js +25 -0
- package/dist/position-actions.js.map +1 -0
- package/dist/routes.d.ts +7 -0
- package/dist/routes.js +63 -5
- package/dist/routes.js.map +1 -1
- package/dist/server.d.ts +8 -0
- package/dist/server.js +157 -12
- package/dist/server.js.map +1 -1
- package/dist/service/context.d.ts +25 -3
- package/dist/service/context.js +56 -5
- package/dist/service/context.js.map +1 -1
- package/dist/service/display-snapshot.d.ts +28 -0
- package/dist/service/display-snapshot.js +144 -0
- package/dist/service/display-snapshot.js.map +1 -0
- package/dist/service/emissions.js +11 -19
- package/dist/service/emissions.js.map +1 -1
- package/dist/service/explorer.js +2 -1
- package/dist/service/explorer.js.map +1 -1
- package/dist/service/format.d.ts +1 -1
- package/dist/service/format.js +2 -0
- package/dist/service/format.js.map +1 -1
- package/dist/service/indexed-wallet.d.ts +7 -0
- package/dist/service/indexed-wallet.js +58 -0
- package/dist/service/indexed-wallet.js.map +1 -0
- package/dist/service/indexer.d.ts +32 -3
- package/dist/service/indexer.js +64 -8
- package/dist/service/indexer.js.map +1 -1
- package/dist/service/legacy-payout.d.ts +3 -0
- package/dist/service/legacy-payout.js +32 -0
- package/dist/service/legacy-payout.js.map +1 -0
- package/dist/service/network.d.ts +5 -0
- package/dist/service/network.js +185 -0
- package/dist/service/network.js.map +1 -0
- package/dist/service/overview-reads.d.ts +30 -0
- package/dist/service/overview-reads.js +69 -0
- package/dist/service/overview-reads.js.map +1 -0
- package/dist/service/overview.js +14 -36
- package/dist/service/overview.js.map +1 -1
- package/dist/service/pool-merge.d.ts +2 -1
- package/dist/service/pool-merge.js +11 -4
- package/dist/service/pool-merge.js.map +1 -1
- package/dist/service/pools.d.ts +22 -1
- package/dist/service/pools.js +257 -98
- package/dist/service/pools.js.map +1 -1
- package/dist/service/position-feed.d.ts +73 -0
- package/dist/service/position-feed.js +173 -0
- package/dist/service/position-feed.js.map +1 -0
- package/dist/service/positions.d.ts +3 -5
- package/dist/service/positions.js +155 -93
- package/dist/service/positions.js.map +1 -1
- package/dist/service/rewards.d.ts +1 -0
- package/dist/service/rewards.js +117 -56
- package/dist/service/rewards.js.map +1 -1
- package/dist/service/rpc-provider.d.ts +4 -0
- package/dist/service/rpc-provider.js +44 -3
- package/dist/service/rpc-provider.js.map +1 -1
- package/dist/service/seller-models.d.ts +2 -0
- package/dist/service/seller-models.js +94 -0
- package/dist/service/seller-models.js.map +1 -0
- package/dist/service/seller.js +33 -30
- package/dist/service/seller.js.map +1 -1
- package/dist/service/stake-eligibility.d.ts +6 -0
- package/dist/service/stake-eligibility.js +68 -0
- package/dist/service/stake-eligibility.js.map +1 -0
- package/dist/service/usage.js +5 -13
- package/dist/service/usage.js.map +1 -1
- package/dist/service/yield.d.ts +3 -0
- package/dist/service/yield.js +12 -0
- package/dist/service/yield.js.map +1 -0
- package/dist/view-cache.d.ts +5 -10
- package/dist/view-cache.js +12 -14
- package/dist/view-cache.js.map +1 -1
- package/dist/wallet-errors.d.ts +9 -0
- package/dist/wallet-errors.js +32 -0
- package/dist/wallet-errors.js.map +1 -0
- package/package.json +8 -3
- package/dist/ants-web/assets/index-BunPfgXh.css +0 -1
- package/dist/ants-web/assets/index-zCPoF694.js +0 -40
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
const rows = (value) => {
|
|
2
|
+
if (!Array.isArray(value) || value.some(row => !row || typeof row !== 'object' || Array.isArray(row)))
|
|
3
|
+
throw new Error('Invalid Antscan response');
|
|
4
|
+
return value;
|
|
5
|
+
};
|
|
6
|
+
const text = (value) => typeof value === 'string' && value.trim() ? value : null;
|
|
7
|
+
const price = (value) => typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : null;
|
|
8
|
+
const timestamp = (value) => typeof value === 'number' && Number.isSafeInteger(value) && value > 0 ? value : null;
|
|
9
|
+
const count = (value) => {
|
|
10
|
+
if (typeof value !== 'string' || !/^\d+$/.test(value))
|
|
11
|
+
throw new Error('Invalid settlement counter');
|
|
12
|
+
return BigInt(value);
|
|
13
|
+
};
|
|
14
|
+
export async function sellerModels(baseUrl, address, fetchImpl = fetch) {
|
|
15
|
+
if (!/^0x[0-9a-fA-F]{40}$/.test(address))
|
|
16
|
+
throw new Error('Seller must be an address.');
|
|
17
|
+
const result = { fetchedAt: Date.now(), catalogStatus: 'unavailable', catalogUpdatedAt: null, offerings: [], usageStatus: 'unavailable', usageError: null, period: null, totals: null, usage: [] };
|
|
18
|
+
if (!baseUrl)
|
|
19
|
+
return result;
|
|
20
|
+
const seller = address.toLowerCase();
|
|
21
|
+
const read = async (path) => {
|
|
22
|
+
const response = await fetchImpl(`${baseUrl.replace(/\/$/, '')}${path}`, { signal: AbortSignal.timeout(8_000) });
|
|
23
|
+
if (!response.ok)
|
|
24
|
+
throw new Error(`Antscan ${response.status}`);
|
|
25
|
+
return await response.json();
|
|
26
|
+
};
|
|
27
|
+
await Promise.all([
|
|
28
|
+
(async () => {
|
|
29
|
+
try {
|
|
30
|
+
const catalog = await read(`/api/marketplace?seller=${seller}&limit=5000`);
|
|
31
|
+
const offerings = rows(catalog.offerings).filter(row => text(row.sellerAddress)?.toLowerCase() === seller).map(row => {
|
|
32
|
+
const id = text(row.id), name = text(row.serviceDisplayName) ?? text(row.service), provider = text(row.provider);
|
|
33
|
+
if (!id || !name || !provider)
|
|
34
|
+
throw new Error('Invalid offering');
|
|
35
|
+
return { id, name, provider, categories: Array.isArray(row.categories) ? row.categories.filter((value) => typeof value === 'string') : [], inputUsdPerMillion: price(row.inputUsdPerMillion), outputUsdPerMillion: price(row.outputUsdPerMillion) };
|
|
36
|
+
});
|
|
37
|
+
result.offerings = offerings;
|
|
38
|
+
result.catalogStatus = catalog.status === 'live' ? 'live' : 'stale';
|
|
39
|
+
result.catalogUpdatedAt = timestamp(catalog.updatedAt);
|
|
40
|
+
}
|
|
41
|
+
catch { }
|
|
42
|
+
})(),
|
|
43
|
+
(async () => {
|
|
44
|
+
try {
|
|
45
|
+
const emissions = await read('/api/emissions');
|
|
46
|
+
const currentEpoch = count(emissions.currentEpoch);
|
|
47
|
+
const genesis = count(emissions.genesis);
|
|
48
|
+
const duration = count(emissions.epochDuration);
|
|
49
|
+
if (currentEpoch < 1n)
|
|
50
|
+
throw new Error('No completed epoch yet.');
|
|
51
|
+
if (duration === 0n || duration > 366n * 86400n)
|
|
52
|
+
throw new Error('Invalid epoch duration.');
|
|
53
|
+
const epoch = Number(currentEpoch - 1n);
|
|
54
|
+
const from = Number(genesis + (currentEpoch - 1n) * duration);
|
|
55
|
+
const to = Number(genesis + currentEpoch * duration);
|
|
56
|
+
if (![epoch, from, to].every(Number.isSafeInteger) || to > Math.floor(Date.now() / 1000))
|
|
57
|
+
throw new Error('Invalid epoch boundaries.');
|
|
58
|
+
result.period = { epoch, from, to };
|
|
59
|
+
const response = await read(`/api/sellers/${seller}/model-usage?from=${from}&to=${to}`);
|
|
60
|
+
const period = response.period;
|
|
61
|
+
const coverage = response.coverage;
|
|
62
|
+
if (text(response.seller)?.toLowerCase() !== seller || period?.from !== from || period?.to !== to || period?.startInclusive !== true || period?.endExclusive !== true || period?.basis !== 'settlement_time' || coverage?.records !== 'all_indexed_records_in_period')
|
|
63
|
+
throw new Error('Invalid model usage period or seller.');
|
|
64
|
+
const totals = response.totals;
|
|
65
|
+
if (!totals)
|
|
66
|
+
throw new Error('Missing model usage totals.');
|
|
67
|
+
const parsedTotals = {
|
|
68
|
+
settledVolumeUsdc: String(count(totals.settledVolumeUsdc)),
|
|
69
|
+
attributedVolumeUsdc: String(count(totals.attributedVolumeUsdc)),
|
|
70
|
+
unattributedVolumeUsdc: totals.unattributedVolumeUsdc === null ? null : String(count(totals.unattributedVolumeUsdc)),
|
|
71
|
+
excessAttributedVolumeUsdc: String(count(totals.excessAttributedVolumeUsdc)),
|
|
72
|
+
};
|
|
73
|
+
const seen = new Set();
|
|
74
|
+
const usage = rows(response.models).map(row => {
|
|
75
|
+
const serviceId = text(row.serviceId);
|
|
76
|
+
if (!serviceId || seen.has(serviceId))
|
|
77
|
+
throw new Error('Invalid model usage identity.');
|
|
78
|
+
seen.add(serviceId);
|
|
79
|
+
return { serviceId, name: text(row.name) ?? serviceId, requests: String(count(row.requestCount)), inputTokens: String(count(row.inputTokens)), outputTokens: String(count(row.outputTokens)), volumeUsdc: String(count(row.volumeUsdc)) };
|
|
80
|
+
});
|
|
81
|
+
result.usage = usage.sort((first, second) => BigInt(first.volumeUsdc) > BigInt(second.volumeUsdc) ? -1 : BigInt(first.volumeUsdc) < BigInt(second.volumeUsdc) ? 1 : first.serviceId.localeCompare(second.serviceId));
|
|
82
|
+
result.totals = parsedTotals;
|
|
83
|
+
result.usageStatus = 'available';
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
result.usageError = error instanceof Error && error.message === 'Antscan 404'
|
|
87
|
+
? 'The configured Antscan server does not expose the model-usage API. The updated API must be deployed to Antscan.'
|
|
88
|
+
: error instanceof Error && error.message === 'No completed epoch yet.' ? error.message : 'Antscan last-epoch usage could not load. Check the configured Antscan service and retry.';
|
|
89
|
+
}
|
|
90
|
+
})(),
|
|
91
|
+
]);
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=seller-models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seller-models.js","sourceRoot":"","sources":["../../src/service/seller-models.ts"],"names":[],"mappings":"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"}
|
package/dist/service/seller.js
CHANGED
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
import { ZeroAddress } from 'ethers';
|
|
2
1
|
import { formatAnts } from './format.js';
|
|
3
2
|
import { toJson } from './json.js';
|
|
4
|
-
import { silentReporter } from './steps.js';
|
|
5
|
-
async function safe(read, fallback) {
|
|
6
|
-
try {
|
|
7
|
-
return await read();
|
|
8
|
-
}
|
|
9
|
-
catch {
|
|
10
|
-
return fallback;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
3
|
+
import { assertAgentId, silentReporter } from './steps.js';
|
|
13
4
|
export async function seller(ctx) {
|
|
14
5
|
const stack = await ctx.stack();
|
|
15
6
|
const identity = ctx.identity();
|
|
@@ -18,22 +9,24 @@ export async function seller(ctx) {
|
|
|
18
9
|
const pools = ctx.pools();
|
|
19
10
|
const init = ctx.positionInit();
|
|
20
11
|
const [identityRegistered, registryAgentId, legacyAgentId, legacyStake, legacyEligible, registryEligible, legacyEligibilityEnabled, minPoolStake] = await Promise.all([
|
|
21
|
-
identity ?
|
|
22
|
-
registry ?
|
|
23
|
-
legacyStaking ?
|
|
24
|
-
legacyStaking ?
|
|
25
|
-
legacyStaking ?
|
|
26
|
-
registry ?
|
|
27
|
-
registry ?
|
|
28
|
-
registry ?
|
|
12
|
+
identity ? identity.isRegistered(ctx.address) : Promise.resolve(false),
|
|
13
|
+
registry ? registry.getAgentId(ctx.address) : Promise.resolve(0),
|
|
14
|
+
legacyStaking ? legacyStaking.getAgentId(ctx.address) : Promise.resolve(0),
|
|
15
|
+
legacyStaking ? legacyStaking.getStake(ctx.address) : Promise.resolve(0n),
|
|
16
|
+
legacyStaking ? legacyStaking.isStakedAboveMin(ctx.address) : Promise.resolve(false),
|
|
17
|
+
registry ? registry.isStakedAboveMin(ctx.address) : Promise.resolve(false),
|
|
18
|
+
registry ? registry.legacyStakeEligibilityEnabled() : Promise.resolve(null),
|
|
19
|
+
registry ? registry.minSellerPoolStake() : Promise.resolve(null),
|
|
29
20
|
]);
|
|
30
21
|
const agentId = registryAgentId || legacyAgentId;
|
|
31
|
-
const
|
|
22
|
+
const registryBound = !!registry && registryAgentId !== 0 &&
|
|
23
|
+
(await registry.agentSeller(registryAgentId)).toLowerCase() === ctx.address.toLowerCase();
|
|
24
|
+
const poolActiveStake = pools && agentId ? await pools.poolActiveStakeAtEpoch(agentId, stack.currentEpoch) : 0n;
|
|
32
25
|
let starter = null;
|
|
33
26
|
if (init && pools) {
|
|
34
27
|
const [initialized, remaining, amount, endEpoch, activationDelay] = await Promise.all([
|
|
35
|
-
agentId ?
|
|
36
|
-
|
|
28
|
+
agentId ? init.agentInitialized(agentId) : Promise.resolve(false),
|
|
29
|
+
init.remainingInits(), init.initAmount(), init.initEndEpoch(), pools.stakeActivationDelay(),
|
|
37
30
|
]);
|
|
38
31
|
const legacyStarterEligible = legacyAgentId !== 0 && legacyEligible;
|
|
39
32
|
const expired = stack.currentEpoch + activationDelay >= endEpoch;
|
|
@@ -46,7 +39,7 @@ export async function seller(ctx) {
|
|
|
46
39
|
address: ctx.address,
|
|
47
40
|
agentId,
|
|
48
41
|
identityRegistered,
|
|
49
|
-
registryBound
|
|
42
|
+
registryBound,
|
|
50
43
|
eligible: stack.phase === 'active' ? registryEligible : legacyEligible,
|
|
51
44
|
legacyStake: legacyStake.toString(),
|
|
52
45
|
legacyEligibilityEnabled,
|
|
@@ -62,17 +55,27 @@ export async function registerBinding(ctx, agentIdInput, report = silentReporter
|
|
|
62
55
|
throw new Error('Seller registry is not configured; use `antseed seller register` on this chain.');
|
|
63
56
|
const stack = await ctx.stack();
|
|
64
57
|
const legacyStaking = ctx.legacyStakingAt(stack.legacyStaking);
|
|
65
|
-
const agentId = agentIdInput ?? (legacyStaking ? await safe(() => legacyStaking.getAgentId(ctx.address), 0) : 0);
|
|
66
|
-
if (!agentId)
|
|
67
|
-
throw new Error('No agent ID known for this wallet. Register an identity first with `antseed seller register`.');
|
|
68
58
|
const identity = ctx.identity();
|
|
69
|
-
if (identity)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
59
|
+
if (!identity)
|
|
60
|
+
throw new Error('The identity registry is not configured for this chain.');
|
|
61
|
+
let agentId = agentIdInput === undefined ? await registry.getAgentId(ctx.address) : assertAgentId(agentIdInput);
|
|
62
|
+
if (!agentId && legacyStaking)
|
|
63
|
+
agentId = await legacyStaking.getAgentId(ctx.address);
|
|
64
|
+
let sent = false;
|
|
65
|
+
if (!agentId) {
|
|
66
|
+
if (await identity.isRegistered(ctx.address)) {
|
|
67
|
+
throw new Error('This wallet already owns an identity. Enter its agent ID to finish binding; check Activity if a previous registration stopped partway through.');
|
|
68
|
+
}
|
|
69
|
+
await report('Creating an ERC-8004 identity');
|
|
70
|
+
agentId = await identity.register(signer);
|
|
71
|
+
sent = true;
|
|
72
|
+
assertAgentId(agentId);
|
|
73
|
+
await report(`Identity created: agent ${agentId}. If binding fails, retry with this agent ID.`);
|
|
73
74
|
}
|
|
75
|
+
const owner = await identity.getAgentWallet(agentId);
|
|
76
|
+
if (owner.toLowerCase() !== ctx.address.toLowerCase())
|
|
77
|
+
throw new Error(`Agent ${agentId} is owned by ${owner}, not this wallet.`);
|
|
74
78
|
await report(`Binding agent ${agentId} to ${ctx.address} in the seller registry`);
|
|
75
|
-
let sent = false;
|
|
76
79
|
await registry.registerSellerBinding(signer, agentId, async (hash) => { sent = true; await report('Registration confirmed', hash); });
|
|
77
80
|
if (!sent)
|
|
78
81
|
await report('Registration already complete; nothing sent');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seller.js","sourceRoot":"","sources":["../../src/service/seller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"seller.js","sourceRoot":"","sources":["../../src/service/seller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Interface, isAddress, ZeroAddress } from 'ethers';
|
|
2
|
+
import { multicallRead } from '@antseed/node/payments';
|
|
3
|
+
const ABI = new Interface([
|
|
4
|
+
'function identityRegistry() view returns (address)',
|
|
5
|
+
'function stakingSource() view returns (address)',
|
|
6
|
+
'function ownerOf(uint256 agentId) view returns (address)',
|
|
7
|
+
'function getAgentId(address owner) view returns (uint256)',
|
|
8
|
+
]);
|
|
9
|
+
function requiredAddress(value, field) {
|
|
10
|
+
if (typeof value !== 'string' || !isAddress(value) || value.toLowerCase() === ZeroAddress) {
|
|
11
|
+
throw new Error(`Unable to verify staking eligibility: ${field} is unavailable. Retry when the RPC is available.`);
|
|
12
|
+
}
|
|
13
|
+
return value.toLowerCase();
|
|
14
|
+
}
|
|
15
|
+
/** Ownership and registration change rarely; a transaction from this dashboard clears the cache. */
|
|
16
|
+
const ELIGIBILITY_TTL_MS = 10 * 60_000;
|
|
17
|
+
const memoKey = (agentId) => `stake-eligibility:${agentId}`;
|
|
18
|
+
export async function stakeEligibility(ctx, agentIds) {
|
|
19
|
+
const result = new Map();
|
|
20
|
+
const missing = [];
|
|
21
|
+
for (const agentId of new Set(agentIds)) {
|
|
22
|
+
const cached = ctx.memoGet?.(memoKey(agentId));
|
|
23
|
+
if (cached)
|
|
24
|
+
result.set(agentId, cached);
|
|
25
|
+
else
|
|
26
|
+
missing.push(agentId);
|
|
27
|
+
}
|
|
28
|
+
for (const [agentId, eligibility] of await readEligibility(ctx, missing)) {
|
|
29
|
+
ctx.memoSet?.(memoKey(agentId), eligibility, ELIGIBILITY_TTL_MS);
|
|
30
|
+
result.set(agentId, eligibility);
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
async function readEligibility(ctx, ids) {
|
|
35
|
+
if (ids.length === 0)
|
|
36
|
+
return new Map();
|
|
37
|
+
const pools = ctx.requirePools();
|
|
38
|
+
const blockTag = await pools.provider.getBlockNumber();
|
|
39
|
+
const pointers = await multicallRead(pools.provider, ['identityRegistry', 'stakingSource'].map(method => ({
|
|
40
|
+
target: pools.contractAddress, iface: ABI, method,
|
|
41
|
+
})), { blockTag });
|
|
42
|
+
const identity = requiredAddress(pointers[0]?.[0], 'identity registry');
|
|
43
|
+
const source = requiredAddress(pointers[1]?.[0], 'staking source');
|
|
44
|
+
const owners = await multicallRead(pools.provider, ids.map(agentId => ({
|
|
45
|
+
target: identity, iface: ABI, method: 'ownerOf', args: [agentId],
|
|
46
|
+
})), { blockTag });
|
|
47
|
+
const byAgent = new Map(ids.map((agentId, index) => {
|
|
48
|
+
const value = owners[index]?.[0];
|
|
49
|
+
const owner = value == null || value === ZeroAddress ? null : requiredAddress(value, `owner of agent ${agentId}`);
|
|
50
|
+
return [agentId, owner];
|
|
51
|
+
}));
|
|
52
|
+
const uniqueOwners = [...new Set([...byAgent.values()].filter((owner) => owner !== null))];
|
|
53
|
+
const registrations = await multicallRead(pools.provider, uniqueOwners.map(owner => ({
|
|
54
|
+
target: source, iface: ABI, method: 'getAgentId', args: [owner],
|
|
55
|
+
})), { blockTag });
|
|
56
|
+
const registered = new Map(uniqueOwners.map((owner, index) => {
|
|
57
|
+
const agentId = registrations[index]?.[0];
|
|
58
|
+
if (typeof agentId !== 'bigint') {
|
|
59
|
+
throw new Error('Unable to verify staking eligibility: seller registration is unavailable. Retry when the RPC is available.');
|
|
60
|
+
}
|
|
61
|
+
return [owner, agentId];
|
|
62
|
+
}));
|
|
63
|
+
return new Map(ids.map(agentId => {
|
|
64
|
+
const owner = byAgent.get(agentId);
|
|
65
|
+
return [agentId, { owner, stakeable: owner !== null && registered.get(owner) === BigInt(agentId) }];
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=stake-eligibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stake-eligibility.js","sourceRoot":"","sources":["../../src/service/stake-eligibility.ts"],"names":[],"mappings":"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"}
|
package/dist/service/usage.js
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
import { ZeroAddress } from 'ethers';
|
|
2
2
|
import { toJson } from './json.js';
|
|
3
3
|
import { IndexerError } from './indexer.js';
|
|
4
|
-
async function safe(read, fallback) {
|
|
5
|
-
try {
|
|
6
|
-
return await read();
|
|
7
|
-
}
|
|
8
|
-
catch {
|
|
9
|
-
return fallback;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
4
|
/**
|
|
13
5
|
* Your buyer and seller usage per epoch with network totals. The per-epoch
|
|
14
6
|
* series comes from the indexer (no per-epoch chain reads); only the
|
|
@@ -53,11 +45,11 @@ export async function usage(ctx, options = {}) {
|
|
|
53
45
|
}
|
|
54
46
|
}
|
|
55
47
|
const [buyerTotal, networkTotal, pointsPolicy, poolWeightPolicy, minimumPower] = await Promise.all([
|
|
56
|
-
accounting ?
|
|
57
|
-
accounting ?
|
|
58
|
-
accounting ?
|
|
59
|
-
accounting ?
|
|
60
|
-
accounting ?
|
|
48
|
+
accounting ? accounting.buyerUsageTotal(ctx.address) : Promise.resolve({ points: 0n, weightedPoints: 0n }),
|
|
49
|
+
accounting ? accounting.totalUsage() : Promise.resolve({ buyers: { points: 0n, weightedPoints: 0n }, sellers: { points: 0n, weightedPoints: 0n } }),
|
|
50
|
+
accounting ? accounting.pointsPolicy() : Promise.resolve(null),
|
|
51
|
+
accounting ? accounting.poolWeightPolicy() : Promise.resolve(null),
|
|
52
|
+
accounting ? accounting.minimumAccountedPoolPower() : Promise.resolve(null),
|
|
61
53
|
]);
|
|
62
54
|
return toJson({
|
|
63
55
|
currentEpoch: stack.currentEpoch,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/service/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/service/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAgB,EAAE,UAA+B,EAAE;IAC7E,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;IAChC,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;IAC7D,IAAI,MAAM,GAAqB,EAAE,CAAC;IAClC,IAAI,MAAM,GAAwB,OAAO,CAAC;IAC1C,IAAI,WAAW,GAAkB,IAAI,CAAC;IACtC,IAAI,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1H,MAAM,GAAG,SAAS,CAAC;YACnB,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC/D,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;gBACrE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;gBACnE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK;oBACL,WAAW,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG;oBACjC,mBAAmB,EAAE,KAAK,EAAE,cAAc,IAAI,GAAG;oBACjD,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,GAAG;oBACnC,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,CAAC;oBAC7B,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,IAAI,GAAG;oBACjD,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,IAAI,GAAG;oBACnD,eAAe,EAAE,MAAM,EAAE,iBAAiB,IAAI,GAAG;oBACjD,uBAAuB,EAAE,MAAM,EAAE,uBAAuB,IAAI,GAAG;iBAChE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,YAAY,CAAC;gBAAE,MAAM,KAAK,CAAC;YAClD,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;YAC5B,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IACD,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;QAC1G,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC;QACnJ,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9D,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QAClE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;KAC5E,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;QACZ,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,kBAAkB,EAAE,KAAK,CAAC,cAAc;QACxC,MAAM;QACN,MAAM,EAAE;YACN,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,mBAAmB,EAAE,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE;YACpG,kBAAkB,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,mBAAmB,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;SACvH;QACD,YAAY,EAAE,YAAY,IAAI,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;QAChF,gBAAgB,EAAE,gBAAgB,IAAI,gBAAgB,KAAK,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI;QAChG,yBAAyB,EAAE,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE;QACjF,MAAM;QACN,WAAW;KACZ,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { PoolYield } from '../api-types.js';
|
|
2
|
+
/** Token-denominated pool average, using the same completed epoch for rewards and principal. */
|
|
3
|
+
export declare function poolYield(reward: bigint | null, principal: bigint | null, epoch: number, duration: number, genesis: number, settled: boolean): PoolYield;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Token-denominated pool average, using the same completed epoch for rewards and principal. */
|
|
2
|
+
export function poolYield(reward, principal, epoch, duration, genesis, settled) {
|
|
3
|
+
const base = { epoch, startsAt: genesis + epoch * duration, endsAt: genesis + (epoch + 1) * duration };
|
|
4
|
+
if (epoch < 0 || duration <= 0 || reward === null || principal === null || principal <= 0n || reward < 0n)
|
|
5
|
+
return { ...base, apr: null, apy: null, status: 'unavailable' };
|
|
6
|
+
const rate = Number(reward * 10n ** 18n / principal) / 1e18;
|
|
7
|
+
const periods = 365 * 86400 / duration;
|
|
8
|
+
const apr = rate * periods * 100;
|
|
9
|
+
const apy = Math.expm1(Math.log1p(rate) * periods) * 100;
|
|
10
|
+
return { ...base, apr: Number.isFinite(apr) ? apr : null, apy: Number.isFinite(apy) ? apy : null, status: settled ? 'settled' : 'estimated' };
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=yield.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yield.js","sourceRoot":"","sources":["../../src/service/yield.ts"],"names":[],"mappings":"AACA,gGAAgG;AAChG,MAAM,UAAU,SAAS,CAAC,MAAqB,EAAE,SAAwB,EAAE,KAAa,EAAE,QAAgB,EAAE,OAAe,EAAE,OAAgB;IAC3I,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC;IACvG,IAAI,KAAK,GAAG,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,MAAM,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,IAAI,EAAE,IAAI,MAAM,GAAG,EAAE;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC3K,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;IAC5D,MAAM,OAAO,GAAG,GAAG,GAAG,KAAK,GAAG,QAAQ,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,GAAG,OAAO,GAAG,GAAG,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC;IACzD,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAChJ,CAAC"}
|
package/dist/view-cache.d.ts
CHANGED
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* the failover provider fans a slow call out to every endpoint, so four tabs
|
|
4
|
-
* loading at once used to turn into minutes of 429 backoff. Reads are run one
|
|
5
|
-
* at a time (each view already batches its own calls), identical concurrent
|
|
6
|
-
* requests share one load, and results stay fresh for `ttlMs` unless a job
|
|
7
|
-
* invalidates them.
|
|
1
|
+
/** Independent views load concurrently; the shared RPC provider paces chain requests.
|
|
2
|
+
* Identical reads share one promise, and completed values expire or invalidate after actions.
|
|
8
3
|
*/
|
|
9
4
|
export declare class ViewCache {
|
|
10
5
|
private readonly ttlMs;
|
|
11
6
|
private readonly entries;
|
|
12
7
|
private readonly inflight;
|
|
13
|
-
private
|
|
8
|
+
private generation;
|
|
14
9
|
constructor(ttlMs?: number);
|
|
15
|
-
read<T>(key: string, load: () => Promise<T
|
|
16
|
-
/**
|
|
10
|
+
read<T>(key: string, load: () => Promise<T>, ttlMs?: number): Promise<T>;
|
|
11
|
+
/** Old reads may finish, but cannot populate the next wallet's cache. */
|
|
17
12
|
invalidate(): void;
|
|
18
13
|
}
|
package/dist/view-cache.js
CHANGED
|
@@ -1,38 +1,36 @@
|
|
|
1
1
|
const DEFAULT_TTL_MS = 20_000;
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
4
|
-
* the failover provider fans a slow call out to every endpoint, so four tabs
|
|
5
|
-
* loading at once used to turn into minutes of 429 backoff. Reads are run one
|
|
6
|
-
* at a time (each view already batches its own calls), identical concurrent
|
|
7
|
-
* requests share one load, and results stay fresh for `ttlMs` unless a job
|
|
8
|
-
* invalidates them.
|
|
2
|
+
/** Independent views load concurrently; the shared RPC provider paces chain requests.
|
|
3
|
+
* Identical reads share one promise, and completed values expire or invalidate after actions.
|
|
9
4
|
*/
|
|
10
5
|
export class ViewCache {
|
|
11
6
|
ttlMs;
|
|
12
7
|
entries = new Map();
|
|
13
8
|
inflight = new Map();
|
|
14
|
-
|
|
9
|
+
generation = 0;
|
|
15
10
|
constructor(ttlMs = DEFAULT_TTL_MS) {
|
|
16
11
|
this.ttlMs = ttlMs;
|
|
17
12
|
}
|
|
18
|
-
read(key, load) {
|
|
13
|
+
read(key, load, ttlMs = this.ttlMs) {
|
|
19
14
|
const hit = this.entries.get(key);
|
|
20
|
-
if (hit && Date.now() - hit.at <
|
|
15
|
+
if (hit && Date.now() - hit.at < ttlMs)
|
|
21
16
|
return Promise.resolve(hit.value);
|
|
22
17
|
const running = this.inflight.get(key);
|
|
23
18
|
if (running)
|
|
24
19
|
return running;
|
|
25
|
-
const
|
|
26
|
-
|
|
20
|
+
const generation = this.generation;
|
|
21
|
+
const task = Promise.resolve().then(load);
|
|
27
22
|
this.inflight.set(key, task);
|
|
28
23
|
// Settle in the first continuation so a caller awaiting `task` never sees a stale in-flight entry.
|
|
29
24
|
const settle = () => { if (this.inflight.get(key) === task)
|
|
30
25
|
this.inflight.delete(key); };
|
|
31
|
-
task.then((value) => {
|
|
26
|
+
task.then((value) => { if (generation === this.generation)
|
|
27
|
+
this.entries.set(key, { at: Date.now(), value }); settle(); }, settle);
|
|
32
28
|
return task;
|
|
33
29
|
}
|
|
34
|
-
/**
|
|
30
|
+
/** Old reads may finish, but cannot populate the next wallet's cache. */
|
|
35
31
|
invalidate() {
|
|
32
|
+
this.generation++;
|
|
33
|
+
this.inflight.clear();
|
|
36
34
|
this.entries.clear();
|
|
37
35
|
}
|
|
38
36
|
}
|
package/dist/view-cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-cache.js","sourceRoot":"","sources":["../src/view-cache.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B
|
|
1
|
+
{"version":3,"file":"view-cache.js","sourceRoot":"","sources":["../src/view-cache.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B;;GAEG;AACH,MAAM,OAAO,SAAS;IAKS;IAJZ,OAAO,GAAG,IAAI,GAAG,EAA0C,CAAC;IAC5D,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;IACxD,UAAU,GAAG,CAAC,CAAC;IAEvB,YAA6B,QAAQ,cAAc;QAAtB,UAAK,GAAL,KAAK,CAAiB;IAAG,CAAC;IAEvD,IAAI,CAAI,GAAW,EAAE,IAAsB,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK;QAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,KAAK;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAU,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,OAAO;YAAE,OAAO,OAAqB,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,mGAAmG;QACnG,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAClI,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yEAAyE;IACzE,UAAU;QACR,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const WALLET_ERRORS: {
|
|
2
|
+
rejected: string;
|
|
3
|
+
disconnected: string;
|
|
4
|
+
network: string;
|
|
5
|
+
reverted: string;
|
|
6
|
+
unknown: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function walletFailure(error: unknown): string;
|
|
9
|
+
export declare function safeWalletFailure(message: string): string;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export const WALLET_ERRORS = {
|
|
2
|
+
rejected: 'You rejected the wallet request. This request was not submitted.',
|
|
3
|
+
disconnected: 'The wallet disconnected or no longer permits this request. Reconnect before retrying.',
|
|
4
|
+
network: 'The wallet is on the wrong network. Switch to the dashboard network before retrying.',
|
|
5
|
+
reverted: 'The contract rejected this transaction during wallet simulation. Refresh the position and review its action restrictions.',
|
|
6
|
+
unknown: 'The wallet could not complete the request. Check its activity before retrying; the submission status is unknown.',
|
|
7
|
+
};
|
|
8
|
+
export function walletFailure(error) {
|
|
9
|
+
const seen = new Set();
|
|
10
|
+
let current = error;
|
|
11
|
+
let fallback = WALLET_ERRORS.unknown;
|
|
12
|
+
while (current && typeof current === 'object' && !seen.has(current)) {
|
|
13
|
+
seen.add(current);
|
|
14
|
+
const detail = current;
|
|
15
|
+
if (detail.code === 4001 || detail.name === 'UserRejectedRequestError')
|
|
16
|
+
return WALLET_ERRORS.rejected;
|
|
17
|
+
if (detail.code === 4100 || detail.code === 4900 || detail.name === 'ProviderDisconnectedError' || detail.name === 'ConnectorNotConnectedError')
|
|
18
|
+
return WALLET_ERRORS.disconnected;
|
|
19
|
+
if (detail.code === 4901)
|
|
20
|
+
return WALLET_ERRORS.network;
|
|
21
|
+
if (detail.name === 'ChainMismatchError' || detail.name === 'SwitchChainError' || detail.name === 'ChainDisconnectedError')
|
|
22
|
+
fallback = WALLET_ERRORS.network;
|
|
23
|
+
if (detail.name === 'ContractFunctionRevertedError' || detail.name === 'ExecutionRevertedError')
|
|
24
|
+
fallback = WALLET_ERRORS.reverted;
|
|
25
|
+
current = detail.cause;
|
|
26
|
+
}
|
|
27
|
+
return fallback;
|
|
28
|
+
}
|
|
29
|
+
export function safeWalletFailure(message) {
|
|
30
|
+
return Object.values(WALLET_ERRORS).includes(message) ? message : WALLET_ERRORS.unknown;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=wallet-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-errors.js","sourceRoot":"","sources":["../src/wallet-errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,QAAQ,EAAE,kEAAkE;IAC5E,YAAY,EAAE,uFAAuF;IACrG,OAAO,EAAE,sFAAsF;IAC/F,QAAQ,EAAE,2HAA2H;IACrI,OAAO,EAAE,kHAAkH;CAC5H,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;IAChC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC;IACrC,OAAO,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,MAAM,MAAM,GAAG,OAA8D,CAAC;QAC9E,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,0BAA0B;YAAE,OAAO,aAAa,CAAC,QAAQ,CAAC;QACtG,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,2BAA2B,IAAI,MAAM,CAAC,IAAI,KAAK,4BAA4B;YAAE,OAAO,aAAa,CAAC,YAAY,CAAC;QACnL,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,aAAa,CAAC,OAAO,CAAC;QACvD,IAAI,MAAM,CAAC,IAAI,KAAK,oBAAoB,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAwB;YAAE,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC;QAC7J,IAAI,MAAM,CAAC,IAAI,KAAK,+BAA+B,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAwB;YAAE,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;QACnI,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;IACzB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC;AAC1F,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antseed/ants",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "ANTS staking dashboard and service layer for the AntSeed CLI",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"@fastify/static": "^9.0.0",
|
|
17
17
|
"ethers": "^6.13.0",
|
|
18
18
|
"fastify": "^5.7.4",
|
|
19
|
-
"@antseed/node": "0.2.
|
|
19
|
+
"@antseed/node": "0.2.124"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/node": "^20.11.0",
|
|
@@ -29,7 +29,12 @@
|
|
|
29
29
|
"sass": "^1.97.3",
|
|
30
30
|
"typescript": "^5.6.0",
|
|
31
31
|
"vite": "^6.0.0",
|
|
32
|
-
"vitest": "^2.1.9"
|
|
32
|
+
"vitest": "^2.1.9",
|
|
33
|
+
"@rainbow-me/rainbowkit": "^2.2.10",
|
|
34
|
+
"@tanstack/react-query": "^5.94.5",
|
|
35
|
+
"wagmi": "^2.14.0",
|
|
36
|
+
"viem": "^2.47.6",
|
|
37
|
+
"@antseed/ui": "0.0.0"
|
|
33
38
|
},
|
|
34
39
|
"scripts": {
|
|
35
40
|
"build": "npm run build:server && npm run build:web",
|