Skip to content

Add maxshot yield adaptor.#2333

Merged
0xkr3p merged 7 commits intoDefiLlama:masterfrom
MaxShotLab:feature-maxshot
Feb 14, 2026
Merged

Add maxshot yield adaptor.#2333
0xkr3p merged 7 commits intoDefiLlama:masterfrom
MaxShotLab:feature-maxshot

Conversation

@Skyge
Copy link
Copy Markdown
Contributor

@Skyge Skyge commented Feb 2, 2026

Summary by CodeRabbit

  • New Features
    • Integrated MaxShot vaults: per-vault APY and per-chain TVL now displayed.
    • Supports single-chain and multi-chain vaults with resolved underlying assets and symbols.
    • Accurate TVL and APY calculations for multi-chain setups.
    • Each pool includes a direct link to the MaxShot app for quick access.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Feb 2, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a new MaxShot adaptor at src/adaptors/maxshot/index.js that fetches vault data from the MaxShot API, resolves underlying assets and totals on-chain via the DefiLlama SDK, expands multi-chain vaults per chain, and computes per-chain TVL and APY; exports apy, timetravel = false, and url.

Changes

Cohort / File(s) Summary
MaxShot Adaptor
src/adaptors/maxshot/index.js
New adaptor module. Fetches vault list from MaxShot API, defines chain ID→name map and multi-chain vault set, expands multi-chain vaults per chain, calls asset() (and totalSupply() for multi-chain) via DefiLlama SDK, computes TVL (from totalValue or totalSupply+exchangeRate+decimals) and APY (from netApy24h scaled to %), and returns pool objects with pool, chain, project, symbol, tvlUsd, apyBase, underlyingTokens, and url. Exports apy, timetravel = false, and url = 'https://app.maxshot.ai'.

Sequence Diagram(s)

sequenceDiagram
    participant Adaptor as MaxShot Adaptor
    participant API as MaxShot API
    participant SDK as DefiLlama SDK
    participant Contract as Vault Contract

    Adaptor->>API: GET /vaults (vaults with netApy24h, totalValue, multi-chain info)
    API-->>Adaptor: vaults payload

    loop For each vault and chain
        Adaptor->>SDK: getContract(vaultAddress, chain) / call asset()
        SDK->>Contract: asset()
        Contract-->>SDK: underlying token address
        SDK-->>Adaptor: underlying token

        alt multi-chain
            Adaptor->>SDK: call totalSupply()
            SDK-->>Adaptor: totalSupply
            Adaptor->>Adaptor: compute TVL using totalSupply, exchangeRate, assetDecimals
        else single-chain
            Adaptor->>Adaptor: use totalValue from API as TVL
        end

        Adaptor->>Adaptor: compute APY from netApy24h (scale 1e18 → %)
        Adaptor-->>Adaptor: build pool object
    end

    Adaptor-->>Adaptor: return array of pool objects
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐇 I hopped through API fields at dawn,
Found vaults on chains from dusk to yawn,
I fetched assets, scaled APY with care,
Counted TVL with a twitching ear,
A rabbit sings — pools found everywhere!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title 'Add maxshot yield adaptor.' directly and clearly summarizes the main change: introducing a new MaxShot yield adaptor module.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@llamatester
Copy link
Copy Markdown

The maxshot adapter exports pools:

Test Suites: 1 passed, 1 total
Tests: 70 passed, 70 total
Snapshots: 0 total
Time: 0.305 s
Ran all test suites.

Nb of pools: 11
 

Sample pools:
┌─────────┬───────────────────────────────────────────────────────┬────────────┬───────────┬──────────────┬────────────────────┬────────────────────┬──────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────┐
│ (index) │ pool                                                  │ chain      │ project   │ symbol       │ tvlUsd             │ apy                │ underlyingTokens                                 │ url                                                                        │
├─────────┼───────────────────────────────────────────────────────┼────────────┼───────────┼──────────────┼────────────────────┼────────────────────┼──────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┤
│ 0       │ '0x5579e27129110bbc9c0ec1388acbf7ad04771b76-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'DFORCEUSDC' │ 3071659.109018     │ 4.362957914805559  │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0x5579e27129110bBC9c0eC1388aCBf7ad04771b76' │
│ 1       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-ethereum' │ 'Ethereum' │ 'maxshot' │ 'OUSDC'      │ 1860855.6345970002 │ 3.048077663743656  │ [ '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │
│ 2       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-optimism' │ 'Optimism' │ 'maxshot' │ 'OUSDC'      │ 1860855.6345970002 │ 3.048077663743656  │ [ '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │
│ 3       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-base'     │ 'Base'     │ 'maxshot' │ 'OUSDC'      │ 1860855.6345970002 │ 3.048077663743656  │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │
│ 4       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'OUSDC'      │ 1860855.6345970002 │ 3.048077663743656  │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │
│ 5       │ '0xc2007a9c48eecb36868cf9d1da5d8566e90bf042-ethereum' │ 'Ethereum' │ 'maxshot' │ 'DFORCEUSDT' │ 1503881.548791     │ 3.40329353724974   │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0xc2007A9c48Eecb36868Cf9D1da5D8566e90bf042' │
│ 6       │ '0xd507d9d4f356b84e3eeec33eedef85bb57f59cfb-ethereum' │ 'Ethereum' │ 'maxshot' │ 'OUSDT0'     │ 110288.574648      │ 3.239316896293228  │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0x3663f023FE98DA4dF2f6A4925A050d7edDF49722' │
│ 7       │ '0xd507d9d4f356b84e3eeec33eedef85bb57f59cfb-plasma'   │ 'Plasma'   │ 'maxshot' │ 'OUSDT0'     │ 110288.574648      │ 3.239316896293228  │ [ '0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb' ] │ 'https://app.maxshot.ai/#/earn/0x3663f023FE98DA4dF2f6A4925A050d7edDF49722' │
│ 8       │ '0xd507d9d4f356b84e3eeec33eedef85bb57f59cfb-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'OUSDT0'     │ 110288.574648      │ 3.239316896293228  │ [ '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9' ] │ 'https://app.maxshot.ai/#/earn/0x3663f023FE98DA4dF2f6A4925A050d7edDF49722' │
│ 9       │ '0xfc8a325a2403cd940649b48ffcdfc250e084a27c-base'     │ 'Base'     │ 'maxshot' │ 'DFORCEUSDC' │ 76225.091532       │ 3.8494805485436636 │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0xfc8a325A2403CD940649B48ffcDfC250e084A27C' │
└─────────┴───────────────────────────────────────────────────────┴────────────┴───────────┴──────────────┴────────────────────┴────────────────────┴──────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┘
This adapter contains some pools with <10k TVL, these pools won't be shown in DefiLlama

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Fix all issues with AI agents
In `@src/adaptors/maxshot/index.js`:
- Around line 27-67: The TVL for multi-chain vaults is being duplicated because
tvlUsd is pushed for every chain; update the logic in the vaults loop to split
TVL across chains by computing a per-chain value (e.g., const perChainTvl =
isMultiChain ? tvlUsd / chainIds.length : tvlUsd) and use perChainTvl instead of
tvlUsd in the object pushed to pools (inside the for (const chainId of chainIds)
loop where pools.push is called). Ensure the rest of the fields (poolAddress
resolution, underlyingToken lookup via sdk.api.abi.call, url) remain unchanged.
- Around line 34-35: The code assumes vault.chainIds exists before calling
.split(), causing a crash if it's null/undefined; update the logic around the
chainIds constant in src/adaptors/maxshot/index.js so you validate
vault.chainIds first (e.g., guard and treat missing value as an empty
string/array or skip the vault) before doing
vault.chainIds.split(',').map(Number), and ensure downstream code that uses the
constant chainIds handles the empty-array case appropriately.
- Around line 49-55: The sequential awaits for sdk.api.abi.call when resolving
asset() per pool (the assetResult and underlyingToken assignment using
poolAddress) create a performance bottleneck; refactor the loop that calls
sdk.api.abi.call to collect all poolAddress/chainName inputs and run the calls
in parallel with Promise.all (or batch the RPC requests) then map results back
to set underlyingToken for each pool, ensuring you preserve chainName and
poolAddress association and handle errors per-call (e.g., default/skip on
failure).
🧹 Nitpick comments (1)
src/adaptors/maxshot/index.js (1)

55-55: Use const instead of let for underlyingToken.

The variable is never reassigned.

♻️ Proposed fix
-      let underlyingToken = assetResult.output;
+      const underlyingToken = assetResult.output;

Comment on lines +27 to +67
for (const vault of vaults) {
// Convert netApy24h from 1e18 to percentage (e.g., 30480776637436565 -> 3.0480776637436565%)
const apyValue = (Number(vault.netApy24h) / 1e18) * 100;

// Convert totalValue from 1e18 to USD (e.g., 1860856671194000000000000 -> 1860856.671194)
const tvlUsd = Number(vault.totalValue) / 1e18;

// Get all chain IDs from chainIds string (e.g., "1,10,8453,42161")
const chainIds = vault.chainIds.split(',').map(Number);
const isMultiChain = chainIds.length > 1;

// Create a pool for each chain
for (const chainId of chainIds) {
const chainName = CHAIN_ID_TO_NAME[chainId];
if (!chainName) continue; // Skip unknown chain IDs

// Determine pool address: use multi-chain address if chainIds > 1
let poolAddress = vault.address;
if (isMultiChain && MULTI_CHAIN_VAULT_ADDRESSES[vault.symbol]) {
poolAddress = MULTI_CHAIN_VAULT_ADDRESSES[vault.symbol];
}

// Get underlying asset address by calling asset() function
const assetResult = await sdk.api.abi.call({
target: poolAddress,
abi: "function asset() public view returns (address)",
chain: chainName,
});
let underlyingToken = assetResult.output;

pools.push({
pool: `${poolAddress.toLowerCase()}-${chainName}`,
chain: utils.formatChain(chainName),
project: 'maxshot',
symbol: utils.formatSymbol(vault.symbol),
tvlUsd,
apy: apyValue,
underlyingTokens: [underlyingToken],
url: `https://app.maxshot.ai/#/earn/${vault.address}`,
});
}
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

TVL is duplicated across chains for multi-chain vaults.

When a vault has multiple chain IDs, the same tvlUsd value is pushed for each chain. This inflates the total TVL by a factor of chainIds.length. The TVL should either be divided among chains or only reported once for the primary chain.

🐛 Proposed fix to split TVL across chains
     // Get all chain IDs from chainIds string (e.g., "1,10,8453,42161")
     const chainIds = vault.chainIds.split(',').map(Number);
     const isMultiChain = chainIds.length > 1;
+    
+    // Split TVL evenly across chains for multi-chain vaults
+    const chainTvlUsd = tvlUsd / chainIds.length;

     // Create a pool for each chain
     for (const chainId of chainIds) {
       // ...
       pools.push({
         pool: `${poolAddress.toLowerCase()}-${chainName}`,
         chain: utils.formatChain(chainName),
         project: 'maxshot',
         symbol: utils.formatSymbol(vault.symbol),
-        tvlUsd,
+        tvlUsd: chainTvlUsd,
         apy: apyValue,
         underlyingTokens: [underlyingToken],
         url: `https://app.maxshot.ai/#/earn/${vault.address}`,
       });
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
for (const vault of vaults) {
// Convert netApy24h from 1e18 to percentage (e.g., 30480776637436565 -> 3.0480776637436565%)
const apyValue = (Number(vault.netApy24h) / 1e18) * 100;
// Convert totalValue from 1e18 to USD (e.g., 1860856671194000000000000 -> 1860856.671194)
const tvlUsd = Number(vault.totalValue) / 1e18;
// Get all chain IDs from chainIds string (e.g., "1,10,8453,42161")
const chainIds = vault.chainIds.split(',').map(Number);
const isMultiChain = chainIds.length > 1;
// Create a pool for each chain
for (const chainId of chainIds) {
const chainName = CHAIN_ID_TO_NAME[chainId];
if (!chainName) continue; // Skip unknown chain IDs
// Determine pool address: use multi-chain address if chainIds > 1
let poolAddress = vault.address;
if (isMultiChain && MULTI_CHAIN_VAULT_ADDRESSES[vault.symbol]) {
poolAddress = MULTI_CHAIN_VAULT_ADDRESSES[vault.symbol];
}
// Get underlying asset address by calling asset() function
const assetResult = await sdk.api.abi.call({
target: poolAddress,
abi: "function asset() public view returns (address)",
chain: chainName,
});
let underlyingToken = assetResult.output;
pools.push({
pool: `${poolAddress.toLowerCase()}-${chainName}`,
chain: utils.formatChain(chainName),
project: 'maxshot',
symbol: utils.formatSymbol(vault.symbol),
tvlUsd,
apy: apyValue,
underlyingTokens: [underlyingToken],
url: `https://app.maxshot.ai/#/earn/${vault.address}`,
});
}
for (const vault of vaults) {
// Convert netApy24h from 1e18 to percentage (e.g., 30480776637436565 -> 3.0480776637436565%)
const apyValue = (Number(vault.netApy24h) / 1e18) * 100;
// Convert totalValue from 1e18 to USD (e.g., 1860856671194000000000000 -> 1860856.671194)
const tvlUsd = Number(vault.totalValue) / 1e18;
// Get all chain IDs from chainIds string (e.g., "1,10,8453,42161")
const chainIds = vault.chainIds.split(',').map(Number);
const isMultiChain = chainIds.length > 1;
// Split TVL evenly across chains for multi-chain vaults
const chainTvlUsd = tvlUsd / chainIds.length;
// Create a pool for each chain
for (const chainId of chainIds) {
const chainName = CHAIN_ID_TO_NAME[chainId];
if (!chainName) continue; // Skip unknown chain IDs
// Determine pool address: use multi-chain address if chainIds > 1
let poolAddress = vault.address;
if (isMultiChain && MULTI_CHAIN_VAULT_ADDRESSES[vault.symbol]) {
poolAddress = MULTI_CHAIN_VAULT_ADDRESSES[vault.symbol];
}
// Get underlying asset address by calling asset() function
const assetResult = await sdk.api.abi.call({
target: poolAddress,
abi: "function asset() public view returns (address)",
chain: chainName,
});
let underlyingToken = assetResult.output;
pools.push({
pool: `${poolAddress.toLowerCase()}-${chainName}`,
chain: utils.formatChain(chainName),
project: 'maxshot',
symbol: utils.formatSymbol(vault.symbol),
tvlUsd: chainTvlUsd,
apy: apyValue,
underlyingTokens: [underlyingToken],
url: `https://app.maxshot.ai/#/earn/${vault.address}`,
});
}
🤖 Prompt for AI Agents
In `@src/adaptors/maxshot/index.js` around lines 27 - 67, The TVL for multi-chain
vaults is being duplicated because tvlUsd is pushed for every chain; update the
logic in the vaults loop to split TVL across chains by computing a per-chain
value (e.g., const perChainTvl = isMultiChain ? tvlUsd / chainIds.length :
tvlUsd) and use perChainTvl instead of tvlUsd in the object pushed to pools
(inside the for (const chainId of chainIds) loop where pools.push is called).
Ensure the rest of the fields (poolAddress resolution, underlyingToken lookup
via sdk.api.abi.call, url) remain unchanged.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you double check this to ensure we aren't double counting tvl across chains @Skyge

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

Comment thread src/adaptors/maxshot/index.js Outdated
Comment on lines +34 to +35
// Get all chain IDs from chainIds string (e.g., "1,10,8453,42161")
const chainIds = vault.chainIds.split(',').map(Number);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Missing null check on vault.chainIds before calling .split().

If a vault has a missing or undefined chainIds property, calling .split() will throw a TypeError and crash the adaptor.

🛡️ Proposed fix to add validation
     // Get all chain IDs from chainIds string (e.g., "1,10,8453,42161")
+    if (!vault.chainIds) continue;
     const chainIds = vault.chainIds.split(',').map(Number);
🤖 Prompt for AI Agents
In `@src/adaptors/maxshot/index.js` around lines 34 - 35, The code assumes
vault.chainIds exists before calling .split(), causing a crash if it's
null/undefined; update the logic around the chainIds constant in
src/adaptors/maxshot/index.js so you validate vault.chainIds first (e.g., guard
and treat missing value as an empty string/array or skip the vault) before doing
vault.chainIds.split(',').map(Number), and ensure downstream code that uses the
constant chainIds handles the empty-array case appropriately.

Comment thread src/adaptors/maxshot/index.js Outdated
@llamatester
Copy link
Copy Markdown

The maxshot adapter exports pools:

Test Suites: 1 passed, 1 total
Tests: 70 passed, 70 total
Snapshots: 0 total
Time: 0.262 s
Ran all test suites.

Nb of pools: 11
 

Sample pools:
┌─────────┬───────────────────────────────────────────────────────┬────────────┬───────────┬──────────────┬────────────────────┬────────────────────┬──────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────┐
│ (index) │ pool                                                  │ chain      │ project   │ symbol       │ tvlUsd             │ apy                │ underlyingTokens                                 │ url                                                                        │
├─────────┼───────────────────────────────────────────────────────┼────────────┼───────────┼──────────────┼────────────────────┼────────────────────┼──────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┤
│ 0       │ '0xc2007a9c48eecb36868cf9d1da5d8566e90bf042-ethereum' │ 'Ethereum' │ 'maxshot' │ 'DFORCEUSDT' │ 1503961.3939840002 │ 3.2365513597664743 │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0xc2007A9c48Eecb36868Cf9D1da5D8566e90bf042' │
│ 1       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'OUSDC'      │ 1355572.660322013  │ 3.198323696718244  │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │
│ 2       │ '0x5579e27129110bbc9c0ec1388acbf7ad04771b76-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'DFORCEUSDC' │ 1211775.343539     │ 2.992176135031147  │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0x5579e27129110bBC9c0eC1388aCBf7ad04771b76' │
│ 3       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-base'     │ 'Base'     │ 'maxshot' │ 'OUSDC'      │ 439304.20318110875 │ 3.198323696718244  │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │
│ 4       │ '0xd507d9d4f356b84e3eeec33eedef85bb57f59cfb-ethereum' │ 'Ethereum' │ 'maxshot' │ 'OUSDT0'     │ 110290.60216568422 │ 3.216367096881793  │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0x3663f023FE98DA4dF2f6A4925A050d7edDF49722' │
│ 5       │ '0xfc8a325a2403cd940649b48ffcdfc250e084a27c-base'     │ 'Base'     │ 'maxshot' │ 'DFORCEUSDC' │ 76231.016509       │ 3.8312409809585555 │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0xfc8a325A2403CD940649B48ffcDfC250e084A27C' │
│ 6       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-ethereum' │ 'Ethereum' │ 'maxshot' │ 'OUSDC'      │ 58151.92730797936  │ 3.198323696718244  │ [ '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │
│ 7       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-optimism' │ 'Optimism' │ 'maxshot' │ 'OUSDC'      │ 7995.710981319241  │ 3.198323696718244  │ [ '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │
│ 8       │ '0xdcd35020c5bb97016358578131f012baa9f53cf3-ethereum' │ 'Ethereum' │ 'maxshot' │ 'DFORCEUSDC' │ 23.084895          │ 3.300725388020198  │ [ '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' ] │ 'https://app.maxshot.ai/#/earn/0xDCD35020c5bB97016358578131f012Baa9F53cf3' │
│ 9       │ '0xd507d9d4f356b84e3eeec33eedef85bb57f59cfb-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'OUSDT0'     │ 12.161997003454784 │ 3.216367096881793  │ [ '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9' ] │ 'https://app.maxshot.ai/#/earn/0x3663f023FE98DA4dF2f6A4925A050d7edDF49722' │
└─────────┴───────────────────────────────────────────────────────┴────────────┴───────────┴──────────────┴────────────────────┴────────────────────┴──────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┘
This adapter contains some pools with <10k TVL, these pools won't be shown in DefiLlama

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@src/adaptors/maxshot/index.js`:
- Around line 95-100: The TVL calculation currently casts large uint256 values
to Number (totalSupply, vault.exchangeRate) which can overflow; update the
isMultiChain branch to perform the arithmetic using BigInt for totalSupply and
exchangeRate, account for scaling factors (1e18 and 10**vault.assetDecimals) as
BigInt, compute the division using BigInt arithmetic, then convert the final
result to Number only when assigning tvlUsd; leave the else branch using
Number(vault.totalValue)/1e18 unchanged and reference the symbols isMultiChain,
totalSupply, vault.exchangeRate, vault.assetDecimals, vault.totalValue, and
tvlUsd when making the change.

Comment thread src/adaptors/maxshot/index.js
@llamatester
Copy link
Copy Markdown

The maxshot adapter exports pools:

Test Suites: 1 passed, 1 total
Tests: 100 passed, 100 total
Snapshots: 0 total
Time: 0.258 s
Ran all test suites.

Nb of pools: 16
 

Sample pools:
┌─────────┬───────────────────────────────────────────────────────┬────────────┬───────────┬──────────────┬────────────────────┬────────────────────┬──────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────┐
│ (index) │ pool                                                  │ chain      │ project   │ symbol       │ tvlUsd             │ apy                │ underlyingTokens                                 │ url                                                                        │
├─────────┼───────────────────────────────────────────────────────┼────────────┼───────────┼──────────────┼────────────────────┼────────────────────┼──────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┤
│ 0       │ '0xc2007a9c48eecb36868cf9d1da5d8566e90bf042-ethereum' │ 'Ethereum' │ 'maxshot' │ 'DFORCEUSDT' │ 1503977.350382     │ 3.2297920484167206 │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0xc2007A9c48Eecb36868Cf9D1da5D8566e90bf042' │
│ 1       │ '0x827f945f10fe304877f1bb567bc1c7f565e25bf7-ethereum' │ 'Ethereum' │ 'maxshot' │ 'MUSDT0'     │ 1502502.457936     │ 3.637144946205613  │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0x827F945F10fE304877f1bB567BC1c7F565E25bf7' │
│ 2       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'OUSDC'      │ 1355572            │ 3.198323696718244  │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │
│ 3       │ '0x5579e27129110bbc9c0ec1388acbf7ad04771b76-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'DFORCEUSDC' │ 1211793.9033879999 │ 2.736249360467725  │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0x5579e27129110bBC9c0eC1388aCBf7ad04771b76' │
│ 4       │ '0x707e4a3454977365e39139d1256fb0ccb4be5d41-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'MUSDC'      │ 1209893.800898     │ 3.7667934781430676 │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0x707e4A3454977365e39139D1256fb0cCb4bE5D41' │
│ 5       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-base'     │ 'Base'     │ 'maxshot' │ 'OUSDC'      │ 439304             │ 3.198323696718244  │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │
│ 6       │ '0xd507d9d4f356b84e3eeec33eedef85bb57f59cfb-ethereum' │ 'Ethereum' │ 'maxshot' │ 'OUSDT0'     │ 110290             │ 3.216367096881793  │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0x3663f023FE98DA4dF2f6A4925A050d7edDF49722' │
│ 7       │ '0xfc8a325a2403cd940649b48ffcdfc250e084a27c-base'     │ 'Base'     │ 'maxshot' │ 'DFORCEUSDC' │ 76228.82791899999  │ 3.833867263837545  │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0xfc8a325A2403CD940649B48ffcDfC250e084A27C' │
│ 8       │ '0x6963b0872d67a8795e6513bdbf1f2203c933d221-base'     │ 'Base'     │ 'maxshot' │ 'MUSDC'      │ 76195.788063       │ 3.825739962582032  │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0x6963B0872d67A8795E6513bdBF1f2203c933d221' │
│ 9       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-ethereum' │ 'Ethereum' │ 'maxshot' │ 'OUSDC'      │ 58151              │ 3.198323696718244  │ [ '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │
└─────────┴───────────────────────────────────────────────────────┴────────────┴───────────┴──────────────┴────────────────────┴────────────────────┴──────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┘
This adapter contains some pools with <10k TVL, these pools won't be shown in DefiLlama

@Skyge
Copy link
Copy Markdown
Contributor Author

Skyge commented Feb 11, 2026

@0xkr3p I've finished implementing the changes from the AI code review. My updates are ready for the next round of review. What's the best way to proceed—should I ping a specific reviewer or just mark the PR as ready?

@0xkr3p
Copy link
Copy Markdown
Contributor

0xkr3p commented Feb 11, 2026

@0xkr3p I've finished implementing the changes from the AI code review. My updates are ready for the next round of review. What's the best way to proceed—should I ping a specific reviewer or just mark the PR as ready?

hey @Skyge, thanks for the PR, I will test and take a look today

@0xkr3p 0xkr3p self-assigned this Feb 11, 2026
Comment thread src/adaptors/maxshot/index.js Outdated
Comment thread src/adaptors/maxshot/index.js Outdated
Comment thread src/adaptors/maxshot/index.js
Comment thread src/adaptors/maxshot/index.js
Copy link
Copy Markdown
Contributor

@0xkr3p 0xkr3p left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks for the PR @Skyge - I've added some comments

@llamatester
Copy link
Copy Markdown

The maxshot adapter exports pools:

Test Suites: 1 passed, 1 total
Tests: 100 passed, 100 total
Snapshots: 0 total
Time: 0.273 s
Ran all test suites.

Nb of pools: 16
 

Sample pools:
┌─────────┬───────────────────────────────────────────────────────┬────────────┬───────────┬──────────────┬───────────────┬────────────────────┬──────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────┐
│ (index) │ pool                                                  │ chain      │ project   │ symbol       │ tvlUsd        │ apyBase            │ underlyingTokens                                 │ url                                                                        │
├─────────┼───────────────────────────────────────────────────────┼────────────┼───────────┼──────────────┼───────────────┼────────────────────┼──────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┤
│ 0       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'OUSDC'      │ 1056641       │ 3.1956770498872444 │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │
│ 1       │ '0xc2007a9c48eecb36868cf9d1da5d8566e90bf042-ethereum' │ 'Ethereum' │ 'maxshot' │ 'DFORCEUSDT' │ 562521.651704 │ 3.3877080259420387 │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0xc2007A9c48Eecb36868Cf9D1da5D8566e90bf042' │
│ 2       │ '0x827f945f10fe304877f1bb567bc1c7f565e25bf7-ethereum' │ 'Ethereum' │ 'maxshot' │ 'MUSDT0'     │ 561018.455541 │ 3.630249204327364  │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0x827F945F10fE304877f1bB567BC1c7F565E25bf7' │
│ 3       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-base'     │ 'Base'     │ 'maxshot' │ 'OUSDC'      │ 439713        │ 3.1956770498872444 │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │
│ 4       │ '0x5579e27129110bbc9c0ec1388acbf7ad04771b76-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'DFORCEUSDC' │ 211112.880656 │ 2.749020820259705  │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0x5579e27129110bBC9c0eC1388aCBf7ad04771b76' │
│ 5       │ '0x707e4a3454977365e39139d1256fb0ccb4be5d41-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'MUSDC'      │ 209175.273767 │ 2.7582335703907983 │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0x707e4A3454977365e39139D1256fb0cCb4bE5D41' │
│ 6       │ '0xb16f63bb4346d6099286bb855f51478d58f155f9-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'MUSDT0'     │ 111392.034729 │ 3.1035802372582766 │ [ '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9' ] │ 'https://app.maxshot.ai/#/earn/0xB16F63bB4346d6099286Bb855f51478D58f155F9' │
│ 7       │ '0xd507d9d4f356b84e3eeec33eedef85bb57f59cfb-ethereum' │ 'Ethereum' │ 'maxshot' │ 'OUSDT0'     │ 110369        │ 2.7981469032772375 │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0x3663f023FE98DA4dF2f6A4925A050d7edDF49722' │
│ 8       │ '0xfc8a325a2403cd940649b48ffcdfc250e084a27c-base'     │ 'Base'     │ 'maxshot' │ 'DFORCEUSDC' │ 76294.450944  │ 3.124101847925305  │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0xfc8a325A2403CD940649B48ffcDfC250e084A27C' │
│ 9       │ '0x6963b0872d67a8795e6513bdbf1f2203c933d221-base'     │ 'Base'     │ 'maxshot' │ 'MUSDC'      │ 76255.052105  │ 3.122877705338219  │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0x6963B0872d67A8795E6513bdBF1f2203c933d221' │
└─────────┴───────────────────────────────────────────────────────┴────────────┴───────────┴──────────────┴───────────────┴────────────────────┴──────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┘
This adapter contains some pools with <10k TVL, these pools won't be shown in DefiLlama

@llamatester
Copy link
Copy Markdown

The maxshot adapter exports pools:

Test Suites: 1 passed, 1 total
Tests: 100 passed, 100 total
Snapshots: 0 total
Time: 0.277 s
Ran all test suites.

Nb of pools: 16
 

Sample pools:
┌─────────┬───────────────────────────────────────────────────────┬────────────┬───────────┬──────────────┬───────────────────┬────────────────────┬──────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────┬───────────┐
│ (index) │ pool                                                  │ chain      │ project   │ symbol       │ tvlUsd            │ apyBase            │ underlyingTokens                                 │ url                                                                        │ poolMeta  │
├─────────┼───────────────────────────────────────────────────────┼────────────┼───────────┼──────────────┼───────────────────┼────────────────────┼──────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────┤
│ 0       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'OUSDC'      │ 1056641           │ 3.1956770498872444 │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │ 'Fee: 5%' │
│ 1       │ '0xc2007a9c48eecb36868cf9d1da5d8566e90bf042-ethereum' │ 'Ethereum' │ 'maxshot' │ 'DFORCEUSDT' │ 562523.3092210001 │ 3.3824984839834196 │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0xc2007A9c48Eecb36868Cf9D1da5D8566e90bf042' │ 'Fee: 5%' │
│ 2       │ '0x827f945f10fe304877f1bb567bc1c7f565e25bf7-ethereum' │ 'Ethereum' │ 'maxshot' │ 'MUSDT0'     │ 561020.025363     │ 3.6325251292686067 │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0x827F945F10fE304877f1bB567BC1c7F565E25bf7' │ 'Fee: 0%' │
│ 3       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-base'     │ 'Base'     │ 'maxshot' │ 'OUSDC'      │ 439713            │ 3.1956770498872444 │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │ 'Fee: 5%' │
│ 4       │ '0x5579e27129110bbc9c0ec1388acbf7ad04771b76-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'DFORCEUSDC' │ 211113.163077     │ 2.6688274185987106 │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0x5579e27129110bBC9c0eC1388aCBf7ad04771b76' │ 'Fee: 5%' │
│ 5       │ '0x707e4a3454977365e39139d1256fb0ccb4be5d41-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'MUSDC'      │ 209175.527141     │ 2.758233609726027  │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0x707e4A3454977365e39139D1256fb0cCb4bE5D41' │ 'Fee: 0%' │
│ 6       │ '0xb16f63bb4346d6099286bb855f51478d58f155f9-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'MUSDT0'     │ 111392.354237     │ 3.1035802372582766 │ [ '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9' ] │ 'https://app.maxshot.ai/#/earn/0xB16F63bB4346d6099286Bb855f51478D58f155F9' │ 'Fee: 0%' │
│ 7       │ '0xd507d9d4f356b84e3eeec33eedef85bb57f59cfb-ethereum' │ 'Ethereum' │ 'maxshot' │ 'OUSDT0'     │ 110369            │ 2.7981469032772375 │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0x3663f023FE98DA4dF2f6A4925A050d7edDF49722' │ 'Fee: 5%' │
│ 8       │ '0xfc8a325a2403cd940649b48ffcdfc250e084a27c-base'     │ 'Base'     │ 'maxshot' │ 'DFORCEUSDC' │ 76294.733714      │ 3.1242721782593263 │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0xfc8a325A2403CD940649B48ffcDfC250e084A27C' │ 'Fee: 5%' │
│ 9       │ '0x6963b0872d67a8795e6513bdbf1f2203c933d221-base'     │ 'Base'     │ 'maxshot' │ 'MUSDC'      │ 76255.330021      │ 3.122877705338219  │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0x6963B0872d67A8795E6513bdBF1f2203c933d221' │ 'Fee: 0%' │
└─────────┴───────────────────────────────────────────────────────┴────────────┴───────────┴──────────────┴───────────────────┴────────────────────┴──────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┴───────────┘
This adapter contains some pools with <10k TVL, these pools won't be shown in DefiLlama

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@src/adaptors/maxshot/index.js`:
- Around line 52-83: The per-vault RPC work inside rpcPromises (mapping
poolInfos and calling sdk.api.abi.call) lacks error handling so one failed call
rejects the whole Promise.all; wrap the async callback for poolInfos (the
function creating assetPromise/totalSupplyPromise and awaiting Promise.all) in a
try/catch that returns null on error, and ensure rpcResults (and subsequent
mapping that builds pools) filters out null entries (e.g., skip entries where
rpcResults[index] is falsy) so a single bad vault is skipped instead of crashing
the adaptor.
- Line 91: The computation of apyValue can produce NaN when vault.netApy24h is
undefined (Number(undefined) === NaN); update the expression that sets apyValue
in src/adaptors/maxshot/index.js to defensively default vault.netApy24h to 0
(e.g., use vault.netApy24h || 0 or vault.netApy24h ?? 0) so apyValue calculation
always yields a numeric value; adjust the single place where apyValue is
computed to reference the corrected expression.

Comment thread src/adaptors/maxshot/index.js
Comment thread src/adaptors/maxshot/index.js Outdated
const { underlyingToken, totalSupply } = rpcResults[index];

// Convert netApy24h from 1e18 to percentage
const apyValue = (Number(vault.netApy24h) / 1e18) * 100;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Potential NaN if vault.netApy24h is null or undefined.

Number(null) is 0 and Number(undefined) is NaN. If a vault has no APY data, this will propagate NaN into the pool object. A defensive default would help:

const apyValue = (Number(vault.netApy24h || 0) / 1e18) * 100;
🤖 Prompt for AI Agents
In `@src/adaptors/maxshot/index.js` at line 91, The computation of apyValue can
produce NaN when vault.netApy24h is undefined (Number(undefined) === NaN);
update the expression that sets apyValue in src/adaptors/maxshot/index.js to
defensively default vault.netApy24h to 0 (e.g., use vault.netApy24h || 0 or
vault.netApy24h ?? 0) so apyValue calculation always yields a numeric value;
adjust the single place where apyValue is computed to reference the corrected
expression.

@llamatester
Copy link
Copy Markdown

The maxshot adapter exports pools:

Test Suites: 1 passed, 1 total
Tests: 100 passed, 100 total
Snapshots: 0 total
Time: 0.278 s
Ran all test suites.

Nb of pools: 16
 

Sample pools:
┌─────────┬───────────────────────────────────────────────────────┬────────────┬───────────┬──────────────┬────────────────────┬────────────────────┬──────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────┬───────────┐
│ (index) │ pool                                                  │ chain      │ project   │ symbol       │ tvlUsd             │ apyBase            │ underlyingTokens                                 │ url                                                                        │ poolMeta  │
├─────────┼───────────────────────────────────────────────────────┼────────────┼───────────┼──────────────┼────────────────────┼────────────────────┼──────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────┤
│ 0       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'OUSDC'      │ 1056732            │ 3.044193223611073  │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │ 'Fee: 5%' │
│ 1       │ '0xc2007a9c48eecb36868cf9d1da5d8566e90bf042-ethereum' │ 'Ethereum' │ 'maxshot' │ 'DFORCEUSDT' │ 562560.9225560001  │ 2.9709317008176788 │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0xc2007A9c48Eecb36868Cf9D1da5D8566e90bf042' │ 'Fee: 5%' │
│ 2       │ '0x827f945f10fe304877f1bb567bc1c7f565e25bf7-ethereum' │ 'Ethereum' │ 'maxshot' │ 'MUSDT0'     │ 561055.679675      │ 3.2286433315683203 │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0x827F945F10fE304877f1bB567BC1c7F565E25bf7' │ 'Fee: 0%' │
│ 3       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-base'     │ 'Base'     │ 'maxshot' │ 'OUSDC'      │ 439751             │ 3.044193223611073  │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │ 'Fee: 5%' │
│ 4       │ '0x5579e27129110bbc9c0ec1388acbf7ad04771b76-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'DFORCEUSDC' │ 211128.302534      │ 2.92466817197339   │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0x5579e27129110bBC9c0eC1388aCBf7ad04771b76' │ 'Fee: 5%' │
│ 5       │ '0x707e4a3454977365e39139d1256fb0ccb4be5d41-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'MUSDC'      │ 209189.813863      │ 2.923002225754397  │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0x707e4A3454977365e39139D1256fb0cCb4bE5D41' │ 'Fee: 0%' │
│ 6       │ '0xb16f63bb4346d6099286bb855f51478d58f155f9-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'MUSDT0'     │ 111399.56936299999 │ 2.4997677030877634 │ [ '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9' ] │ 'https://app.maxshot.ai/#/earn/0xB16F63bB4346d6099286Bb855f51478D58f155F9' │ 'Fee: 0%' │
│ 7       │ '0xd507d9d4f356b84e3eeec33eedef85bb57f59cfb-ethereum' │ 'Ethereum' │ 'maxshot' │ 'OUSDT0'     │ 110376             │ 2.254606132877541  │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0x3663f023FE98DA4dF2f6A4925A050d7edDF49722' │ 'Fee: 5%' │
│ 8       │ '0xfc8a325a2403cd940649b48ffcdfc250e084a27c-base'     │ 'Base'     │ 'maxshot' │ 'DFORCEUSDC' │ 76301.22161600001  │ 3.1274270761863927 │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0xfc8a325A2403CD940649B48ffcDfC250e084A27C' │ 'Fee: 5%' │
│ 9       │ '0x6963b0872d67a8795e6513bdbf1f2203c933d221-base'     │ 'Base'     │ 'maxshot' │ 'MUSDC'      │ 76261.481444       │ 3.124840407552382  │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0x6963B0872d67A8795E6513bdBF1f2203c933d221' │ 'Fee: 0%' │
└─────────┴───────────────────────────────────────────────────────┴────────────┴───────────┴──────────────┴────────────────────┴────────────────────┴──────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┴───────────┘
This adapter contains some pools with <10k TVL, these pools won't be shown in DefiLlama

@Skyge Skyge requested a review from 0xkr3p February 13, 2026 23:38
@llamatester
Copy link
Copy Markdown

The maxshot adapter exports pools:

Test Suites: 1 passed, 1 total
Tests: 100 passed, 100 total
Snapshots: 0 total
Time: 0.271 s
Ran all test suites.

Nb of pools: 16
 

Sample pools:
┌─────────┬───────────────────────────────────────────────────────┬────────────┬───────────┬──────────────┬────────────────────┬────────────────────┬──────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────┬───────────┐
│ (index) │ pool                                                  │ chain      │ project   │ symbol       │ tvlUsd             │ apyBase            │ underlyingTokens                                 │ url                                                                        │ poolMeta  │
├─────────┼───────────────────────────────────────────────────────┼────────────┼───────────┼──────────────┼────────────────────┼────────────────────┼──────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────┼───────────┤
│ 0       │ '0xfc8a325a2403cd940649b48ffcdfc250e084a27c-base'     │ 'Base'     │ 'maxshot' │ 'DFORCEUSDC' │ 1629456.606052     │ 3.7978277577633306 │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0xfc8a325A2403CD940649B48ffcDfC250e084A27C' │ 'Fee: 5%' │
│ 1       │ '0x6963b0872d67a8795e6513bdbf1f2203c933d221-base'     │ 'Base'     │ 'maxshot' │ 'MUSDC'      │ 1629408.084656     │ 3.7248656343358166 │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0x6963B0872d67A8795E6513bdBF1f2203c933d221' │           │
│ 2       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'OUSDC'      │ 1056833            │ 3.3737547121579996 │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │ 'Fee: 5%' │
│ 3       │ '0xc2007a9c48eecb36868cf9d1da5d8566e90bf042-ethereum' │ 'Ethereum' │ 'maxshot' │ 'DFORCEUSDT' │ 562622.857099      │ 3.041116221177435  │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0xc2007A9c48Eecb36868Cf9D1da5D8566e90bf042' │ 'Fee: 5%' │
│ 4       │ '0x827f945f10fe304877f1bb567bc1c7f565e25bf7-ethereum' │ 'Ethereum' │ 'maxshot' │ 'MUSDT0'     │ 561114.386317      │ 3.357960969868551  │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0x827F945F10fE304877f1bB567BC1c7F565E25bf7' │           │
│ 5       │ '0xce0f05f19845cde36058ccfb53c755ab8739b880-base'     │ 'Base'     │ 'maxshot' │ 'OUSDC'      │ 437793             │ 3.3737547121579996 │ [ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' ] │ 'https://app.maxshot.ai/#/earn/0xA7654FcbDe81999fB215Ec4b007b3746257D513c' │ 'Fee: 5%' │
│ 6       │ '0x5579e27129110bbc9c0ec1388acbf7ad04771b76-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'DFORCEUSDC' │ 211159.71954400002 │ 3.6527752216199993 │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0x5579e27129110bBC9c0eC1388aCBf7ad04771b76' │ 'Fee: 5%' │
│ 7       │ '0x707e4a3454977365e39139d1256fb0ccb4be5d41-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'MUSDC'      │ 209219.008761      │ 3.2042197810036392 │ [ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' ] │ 'https://app.maxshot.ai/#/earn/0x707e4A3454977365e39139D1256fb0cCb4bE5D41' │           │
│ 8       │ '0xb16f63bb4346d6099286bb855f51478d58f155f9-arbitrum' │ 'Arbitrum' │ 'maxshot' │ 'MUSDT0'     │ 111408.578537      │ 2.1892777522899936 │ [ '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9' ] │ 'https://app.maxshot.ai/#/earn/0xB16F63bB4346d6099286Bb855f51478D58f155F9' │           │
│ 9       │ '0xd507d9d4f356b84e3eeec33eedef85bb57f59cfb-ethereum' │ 'Ethereum' │ 'maxshot' │ 'OUSDT0'     │ 110382             │ 1.9753845274848298 │ [ '0xdAC17F958D2ee523a2206206994597C13D831ec7' ] │ 'https://app.maxshot.ai/#/earn/0x3663f023FE98DA4dF2f6A4925A050d7edDF49722' │ 'Fee: 5%' │
└─────────┴───────────────────────────────────────────────────────┴────────────┴───────────┴──────────────┴────────────────────┴────────────────────┴──────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┴───────────┘
This adapter contains some pools with <10k TVL, these pools won't be shown in DefiLlama

@0xkr3p 0xkr3p merged commit c35fed9 into DefiLlama:master Feb 14, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants