Update Vaults.fyi provider - #883

Merged
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider
Dec 12, 2025
Merged

Update Vaults.fyi provider#883
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider

Conversation

@pawelpolak2

Copy link
Copy Markdown
Contributor

Description

Updates the Vaults.fyi provider to use it's new v2 API which updates old action schemas and adds new actions, now using the Vaults.fyi SDK for better type safety.

Tests

Chatbot: langchain-cdp-smart-wallet-chatbot
Network: base
Setup: topped up with USDC and ETH

Prompt: "find me the best APY vault on base" (vaults)

The best APY vault on the Base network is the "40acres USDC Vault" with a 7-day APY of 13.24%. It offers yield from interest paid by borrowers who take USDC loans against Aerodrome veNFT position collateral. The vault currently has about $9.75 million TVL.
You can check it out here: https://app.vaults.fyi/opportunity/base/0xB99B6dF96d4d5448cC0a5B3e0ef7896df9507Cf5

Prompt: "what are my current positions" (positions)

You currently have a position in the "40acres USDC Vault" on the Base network. Here are the details:
- Asset: USDC
- Position value in asset: Approximately 19.9983 USDC
- Vault token balance: 10,960 VAULT tokens
- APY: 13.23%
If you want to know more details or take any action, please let me know.

Prompt: "can you withdraw half of my position?" (transaction_context, execute_step)

To proceed with withdrawing half of your position from the 40acres USDC Vault, I need to calculate the amount to withdraw.
Your vault token balance is 10,960 VAULT tokens. Half of this would be 5,480 VAULT tokens.
I will now check the withdrawal steps and then execute the withdrawal for half the position.
-------------------
I have withdrawn half of your position from the 40acres USDC Vault. If you need anything else, please let me know.

Prompt: "What was this vaults tvl like throughout october 2025? Prepare a table" (vault_historical_data)

Here is the TVL of the 40acres USDC Vault on the Base network for each day in October 2025 (values are in USD):
| Date | TVL (USD) |
|------------|---------------|
| 2025-10-01 | 8,866,510 |
| 2025-10-02 | 8,361,328 |
| 2025-10-03 | 8,811,696 |
| 2025-10-04 | 9,068,609 |
| 2025-10-05 | 9,118,786 |
| 2025-10-06 | 9,472,685 |
| 2025-10-07 | 9,537,216 |
| 2025-10-08 | 10,378,223 |
| 2025-10-09 | 10,065,999 |
| 2025-10-10 | 10,460,026 |
| 2025-10-11 | 9,226,108 |
| 2025-10-12 | 7,968,612 |
| 2025-10-13 | 9,077,846 |
| 2025-10-14 | 9,033,714 |
| 2025-10-15 | 9,343,940 |
| 2025-10-16 | 9,675,426 |
| 2025-10-17 | 9,053,392 |
| 2025-10-18 | 9,809,080 |
| 2025-10-19 | 9,627,220 |
| 2025-10-20 | 9,657,997 |
| 2025-10-21 | 9,369,515 |
| 2025-10-22 | 9,283,646 |
| 2025-10-25 | 10,591,750 |
| 2025-10-26 | 10,718,594 |
| 2025-10-27 | 10,813,673 |
| 2025-10-28 | 10,901,582 |
| 2025-10-29 | 10,702,289 |
| 2025-10-30 | 10,000,230 |
| 2025-10-31 | 11,592,661 |
Let me know if you want the data in a different format or if you'd like further details.

Prompt: "how does its apy compare to the benchmarks?" (historical_benchmark_apy)

During October 2025, the 40acres USDC Vault had a 7-day interval APY ranging approximately from 13.45% to 16.77%.
For the same period, the benchmark APY on the Base network (USD benchmark) ranged approximately from 5.67% to 6.19%.
In summary, the vault's APY significantly outperformed the benchmark for October 2025, offering more than double the returns compared to the benchmark average. If you want, I can provide daily detailed comparison data as well.

Prompt: "what is the benchmark apy currently?" (benchmark_apy)

The current benchmark APY on the Base network (USD benchmark) is approximately:
- 1-day APY: 4.73%
- 7-day APY: 4.87%
- 30-day APY: 5.12%
If you want any further information or assistance, please let me know.

Prompt: "do i have any rewards to claim?" (rewards_context)

You have claimable rewards of IPOR Fusion Points (about 417.42 x 10^-12 tokens) on the Gnosis network. If you'd like, I can help you claim them. Let me know!

Prompt: "yeah sure lets claim them!" (claim_rewards) (couldn't claim because I only had some on gnosis but payload was generated properly)

It seems there was an issue with claiming the rewards on the Gnosis network due to network limitations of my current wallet connection. I am unable to claim rewards on that network directly at this time.
You may need to claim these rewards using a wallet connected to the Gnosis network yourself. If you want, I can provide details or guide you through the process.
Let me know how you'd like to proceed.

Prompt: "what assets do i have?" (idle_assets)

You currently have the following assets in your wallet:
1. USD Coin (USDC) - Approximately 9.999 USDC
2. Ether (ETH) - Approximately 0.0005 ETH
If you want to manage any of these assets or need more information, feel free to ask.

Prompt: "can you check 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 returns on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on arbitrum?" (total_returns)

The returns for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum are approximately 1.806459 USDC. If you want more details or need help with something else, just let me know.

Prompt: "can you check its action history on the vault?" (user_events)

The action history for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum includes:
- A deposit on June 3, 2025, at block 343572914
- Asset amount deposited: 48.549609 USDC
- LP token amount received: 40.675498 dUSDC
- Share price at the time: 1.1936
- Transaction hash: 0x2920d82b96757e42784661671468f8bd22aa3d7842128a9e19fc7c67be45cb7e
If you need more information or want to check something else, just let me know.

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Nov 27, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Nov 27, 2025
@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/constants.ts Outdated
Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/schemas.ts Outdated
@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the update @pawelpolak2, looks good to me!

Could you please also update the typescript/agentkit README accordingly?

@phdargen

Copy link
Copy Markdown
Contributor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

@phdargen

Copy link
Copy Markdown
Contributor

In vaultsfyiActionProvider.ts , the constructor has a default value, but the factory function requires the config.
Suggest changing to:

export const vaultsfyiActionProvider = (config: VaultsfyiActionProviderConfig = {}) =>
new VaultsfyiActionProvider(config);

@phdargen

Copy link
Copy Markdown
Contributor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

@phdargen

Copy link
Copy Markdown
Contributor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units.
I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

I think that would make sense for the transaction endpoints but most are readonly and are going to be used for analytics across all chains and i think making network optional might confuse the agent more than help as it actually is required for vault identification.

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units. I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

I crafted the prompts so the agent understands that its all in atomic units and i found that it actually does really well with parsing those! I tried to avoid parsing them for it since it requires me to know the decimal of asset/LP token which would require additional calls and also i found that atomic units works better for the agent when LP tokens are scaled. Anyway I would keep it in atomic if you don't mind. lmk what you think 😁

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

I gave Carson a new key. The other one was in fact invalid, my bad.

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @pawelpolak2, I tested it out and the actions all work smoothly! Indeed, the prompts make a good job at guiding the LLM how to deal with the units, so we can leave it as is.

Let's get this in @CarsonRoscoe

@CarsonRoscoe
CarsonRoscoe merged commit 02f9291 into coinbase:mainDec 12, 2025
27 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

4 participants

@pawelpolak2@cb-heimdall@phdargen@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Update Vaults.fyi provider - #883

Merged
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider
Dec 12, 2025
Merged

Update Vaults.fyi provider#883
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider

Conversation

@pawelpolak2

Copy link
Copy Markdown
Contributor

Description

Updates the Vaults.fyi provider to use it's new v2 API which updates old action schemas and adds new actions, now using the Vaults.fyi SDK for better type safety.

Tests

Chatbot: langchain-cdp-smart-wallet-chatbot
Network: base
Setup: topped up with USDC and ETH

Prompt: "find me the best APY vault on base" (vaults)

The best APY vault on the Base network is the "40acres USDC Vault" with a 7-day APY of 13.24%. It offers yield from interest paid by borrowers who take USDC loans against Aerodrome veNFT position collateral. The vault currently has about $9.75 million TVL.
You can check it out here: https://app.vaults.fyi/opportunity/base/0xB99B6dF96d4d5448cC0a5B3e0ef7896df9507Cf5

Prompt: "what are my current positions" (positions)

You currently have a position in the "40acres USDC Vault" on the Base network. Here are the details:
- Asset: USDC
- Position value in asset: Approximately 19.9983 USDC
- Vault token balance: 10,960 VAULT tokens
- APY: 13.23%
If you want to know more details or take any action, please let me know.

Prompt: "can you withdraw half of my position?" (transaction_context, execute_step)

To proceed with withdrawing half of your position from the 40acres USDC Vault, I need to calculate the amount to withdraw.
Your vault token balance is 10,960 VAULT tokens. Half of this would be 5,480 VAULT tokens.
I will now check the withdrawal steps and then execute the withdrawal for half the position.
-------------------
I have withdrawn half of your position from the 40acres USDC Vault. If you need anything else, please let me know.

Prompt: "What was this vaults tvl like throughout october 2025? Prepare a table" (vault_historical_data)

Here is the TVL of the 40acres USDC Vault on the Base network for each day in October 2025 (values are in USD):
| Date | TVL (USD) |
|------------|---------------|
| 2025-10-01 | 8,866,510 |
| 2025-10-02 | 8,361,328 |
| 2025-10-03 | 8,811,696 |
| 2025-10-04 | 9,068,609 |
| 2025-10-05 | 9,118,786 |
| 2025-10-06 | 9,472,685 |
| 2025-10-07 | 9,537,216 |
| 2025-10-08 | 10,378,223 |
| 2025-10-09 | 10,065,999 |
| 2025-10-10 | 10,460,026 |
| 2025-10-11 | 9,226,108 |
| 2025-10-12 | 7,968,612 |
| 2025-10-13 | 9,077,846 |
| 2025-10-14 | 9,033,714 |
| 2025-10-15 | 9,343,940 |
| 2025-10-16 | 9,675,426 |
| 2025-10-17 | 9,053,392 |
| 2025-10-18 | 9,809,080 |
| 2025-10-19 | 9,627,220 |
| 2025-10-20 | 9,657,997 |
| 2025-10-21 | 9,369,515 |
| 2025-10-22 | 9,283,646 |
| 2025-10-25 | 10,591,750 |
| 2025-10-26 | 10,718,594 |
| 2025-10-27 | 10,813,673 |
| 2025-10-28 | 10,901,582 |
| 2025-10-29 | 10,702,289 |
| 2025-10-30 | 10,000,230 |
| 2025-10-31 | 11,592,661 |
Let me know if you want the data in a different format or if you'd like further details.

Prompt: "how does its apy compare to the benchmarks?" (historical_benchmark_apy)

During October 2025, the 40acres USDC Vault had a 7-day interval APY ranging approximately from 13.45% to 16.77%.
For the same period, the benchmark APY on the Base network (USD benchmark) ranged approximately from 5.67% to 6.19%.
In summary, the vault's APY significantly outperformed the benchmark for October 2025, offering more than double the returns compared to the benchmark average. If you want, I can provide daily detailed comparison data as well.

Prompt: "what is the benchmark apy currently?" (benchmark_apy)

The current benchmark APY on the Base network (USD benchmark) is approximately:
- 1-day APY: 4.73%
- 7-day APY: 4.87%
- 30-day APY: 5.12%
If you want any further information or assistance, please let me know.

Prompt: "do i have any rewards to claim?" (rewards_context)

You have claimable rewards of IPOR Fusion Points (about 417.42 x 10^-12 tokens) on the Gnosis network. If you'd like, I can help you claim them. Let me know!

Prompt: "yeah sure lets claim them!" (claim_rewards) (couldn't claim because I only had some on gnosis but payload was generated properly)

It seems there was an issue with claiming the rewards on the Gnosis network due to network limitations of my current wallet connection. I am unable to claim rewards on that network directly at this time.
You may need to claim these rewards using a wallet connected to the Gnosis network yourself. If you want, I can provide details or guide you through the process.
Let me know how you'd like to proceed.

Prompt: "what assets do i have?" (idle_assets)

You currently have the following assets in your wallet:
1. USD Coin (USDC) - Approximately 9.999 USDC
2. Ether (ETH) - Approximately 0.0005 ETH
If you want to manage any of these assets or need more information, feel free to ask.

Prompt: "can you check 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 returns on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on arbitrum?" (total_returns)

The returns for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum are approximately 1.806459 USDC. If you want more details or need help with something else, just let me know.

Prompt: "can you check its action history on the vault?" (user_events)

The action history for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum includes:
- A deposit on June 3, 2025, at block 343572914
- Asset amount deposited: 48.549609 USDC
- LP token amount received: 40.675498 dUSDC
- Share price at the time: 1.1936
- Transaction hash: 0x2920d82b96757e42784661671468f8bd22aa3d7842128a9e19fc7c67be45cb7e
If you need more information or want to check something else, just let me know.

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Nov 27, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Nov 27, 2025
@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/constants.ts Outdated
Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/schemas.ts Outdated
@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the update @pawelpolak2, looks good to me!

Could you please also update the typescript/agentkit README accordingly?

@phdargen

Copy link
Copy Markdown
Contributor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

@phdargen

Copy link
Copy Markdown
Contributor

In vaultsfyiActionProvider.ts , the constructor has a default value, but the factory function requires the config.
Suggest changing to:

export const vaultsfyiActionProvider = (config: VaultsfyiActionProviderConfig = {}) =>
new VaultsfyiActionProvider(config);

@phdargen

Copy link
Copy Markdown
Contributor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

@phdargen

Copy link
Copy Markdown
Contributor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units.
I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

I think that would make sense for the transaction endpoints but most are readonly and are going to be used for analytics across all chains and i think making network optional might confuse the agent more than help as it actually is required for vault identification.

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units. I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

I crafted the prompts so the agent understands that its all in atomic units and i found that it actually does really well with parsing those! I tried to avoid parsing them for it since it requires me to know the decimal of asset/LP token which would require additional calls and also i found that atomic units works better for the agent when LP tokens are scaled. Anyway I would keep it in atomic if you don't mind. lmk what you think 😁

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

I gave Carson a new key. The other one was in fact invalid, my bad.

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @pawelpolak2, I tested it out and the actions all work smoothly! Indeed, the prompts make a good job at guiding the LLM how to deal with the units, so we can leave it as is.

Let's get this in @CarsonRoscoe

@CarsonRoscoe
CarsonRoscoe merged commit 02f9291 into coinbase:mainDec 12, 2025
27 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

4 participants

@pawelpolak2@cb-heimdall@phdargen@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update Vaults.fyi provider - #883

Merged
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider
Dec 12, 2025
Merged

Update Vaults.fyi provider#883
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider

Conversation

@pawelpolak2

Copy link
Copy Markdown
Contributor

Description

Updates the Vaults.fyi provider to use it's new v2 API which updates old action schemas and adds new actions, now using the Vaults.fyi SDK for better type safety.

Tests

Chatbot: langchain-cdp-smart-wallet-chatbot
Network: base
Setup: topped up with USDC and ETH

Prompt: "find me the best APY vault on base" (vaults)

The best APY vault on the Base network is the "40acres USDC Vault" with a 7-day APY of 13.24%. It offers yield from interest paid by borrowers who take USDC loans against Aerodrome veNFT position collateral. The vault currently has about $9.75 million TVL.
You can check it out here: https://app.vaults.fyi/opportunity/base/0xB99B6dF96d4d5448cC0a5B3e0ef7896df9507Cf5

Prompt: "what are my current positions" (positions)

You currently have a position in the "40acres USDC Vault" on the Base network. Here are the details:
- Asset: USDC
- Position value in asset: Approximately 19.9983 USDC
- Vault token balance: 10,960 VAULT tokens
- APY: 13.23%
If you want to know more details or take any action, please let me know.

Prompt: "can you withdraw half of my position?" (transaction_context, execute_step)

To proceed with withdrawing half of your position from the 40acres USDC Vault, I need to calculate the amount to withdraw.
Your vault token balance is 10,960 VAULT tokens. Half of this would be 5,480 VAULT tokens.
I will now check the withdrawal steps and then execute the withdrawal for half the position.
-------------------
I have withdrawn half of your position from the 40acres USDC Vault. If you need anything else, please let me know.

Prompt: "What was this vaults tvl like throughout october 2025? Prepare a table" (vault_historical_data)

Here is the TVL of the 40acres USDC Vault on the Base network for each day in October 2025 (values are in USD):
| Date | TVL (USD) |
|------------|---------------|
| 2025-10-01 | 8,866,510 |
| 2025-10-02 | 8,361,328 |
| 2025-10-03 | 8,811,696 |
| 2025-10-04 | 9,068,609 |
| 2025-10-05 | 9,118,786 |
| 2025-10-06 | 9,472,685 |
| 2025-10-07 | 9,537,216 |
| 2025-10-08 | 10,378,223 |
| 2025-10-09 | 10,065,999 |
| 2025-10-10 | 10,460,026 |
| 2025-10-11 | 9,226,108 |
| 2025-10-12 | 7,968,612 |
| 2025-10-13 | 9,077,846 |
| 2025-10-14 | 9,033,714 |
| 2025-10-15 | 9,343,940 |
| 2025-10-16 | 9,675,426 |
| 2025-10-17 | 9,053,392 |
| 2025-10-18 | 9,809,080 |
| 2025-10-19 | 9,627,220 |
| 2025-10-20 | 9,657,997 |
| 2025-10-21 | 9,369,515 |
| 2025-10-22 | 9,283,646 |
| 2025-10-25 | 10,591,750 |
| 2025-10-26 | 10,718,594 |
| 2025-10-27 | 10,813,673 |
| 2025-10-28 | 10,901,582 |
| 2025-10-29 | 10,702,289 |
| 2025-10-30 | 10,000,230 |
| 2025-10-31 | 11,592,661 |
Let me know if you want the data in a different format or if you'd like further details.

Prompt: "how does its apy compare to the benchmarks?" (historical_benchmark_apy)

During October 2025, the 40acres USDC Vault had a 7-day interval APY ranging approximately from 13.45% to 16.77%.
For the same period, the benchmark APY on the Base network (USD benchmark) ranged approximately from 5.67% to 6.19%.
In summary, the vault's APY significantly outperformed the benchmark for October 2025, offering more than double the returns compared to the benchmark average. If you want, I can provide daily detailed comparison data as well.

Prompt: "what is the benchmark apy currently?" (benchmark_apy)

The current benchmark APY on the Base network (USD benchmark) is approximately:
- 1-day APY: 4.73%
- 7-day APY: 4.87%
- 30-day APY: 5.12%
If you want any further information or assistance, please let me know.

Prompt: "do i have any rewards to claim?" (rewards_context)

You have claimable rewards of IPOR Fusion Points (about 417.42 x 10^-12 tokens) on the Gnosis network. If you'd like, I can help you claim them. Let me know!

Prompt: "yeah sure lets claim them!" (claim_rewards) (couldn't claim because I only had some on gnosis but payload was generated properly)

It seems there was an issue with claiming the rewards on the Gnosis network due to network limitations of my current wallet connection. I am unable to claim rewards on that network directly at this time.
You may need to claim these rewards using a wallet connected to the Gnosis network yourself. If you want, I can provide details or guide you through the process.
Let me know how you'd like to proceed.

Prompt: "what assets do i have?" (idle_assets)

You currently have the following assets in your wallet:
1. USD Coin (USDC) - Approximately 9.999 USDC
2. Ether (ETH) - Approximately 0.0005 ETH
If you want to manage any of these assets or need more information, feel free to ask.

Prompt: "can you check 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 returns on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on arbitrum?" (total_returns)

The returns for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum are approximately 1.806459 USDC. If you want more details or need help with something else, just let me know.

Prompt: "can you check its action history on the vault?" (user_events)

The action history for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum includes:
- A deposit on June 3, 2025, at block 343572914
- Asset amount deposited: 48.549609 USDC
- LP token amount received: 40.675498 dUSDC
- Share price at the time: 1.1936
- Transaction hash: 0x2920d82b96757e42784661671468f8bd22aa3d7842128a9e19fc7c67be45cb7e
If you need more information or want to check something else, just let me know.

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Nov 27, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Nov 27, 2025
@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/constants.ts Outdated
Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/schemas.ts Outdated
@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the update @pawelpolak2, looks good to me!

Could you please also update the typescript/agentkit README accordingly?

@phdargen

Copy link
Copy Markdown
Contributor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

@phdargen

Copy link
Copy Markdown
Contributor

In vaultsfyiActionProvider.ts , the constructor has a default value, but the factory function requires the config.
Suggest changing to:

export const vaultsfyiActionProvider = (config: VaultsfyiActionProviderConfig = {}) =>
new VaultsfyiActionProvider(config);

@phdargen

Copy link
Copy Markdown
Contributor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

@phdargen

Copy link
Copy Markdown
Contributor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units.
I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

I think that would make sense for the transaction endpoints but most are readonly and are going to be used for analytics across all chains and i think making network optional might confuse the agent more than help as it actually is required for vault identification.

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units. I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

I crafted the prompts so the agent understands that its all in atomic units and i found that it actually does really well with parsing those! I tried to avoid parsing them for it since it requires me to know the decimal of asset/LP token which would require additional calls and also i found that atomic units works better for the agent when LP tokens are scaled. Anyway I would keep it in atomic if you don't mind. lmk what you think 😁

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

I gave Carson a new key. The other one was in fact invalid, my bad.

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @pawelpolak2, I tested it out and the actions all work smoothly! Indeed, the prompts make a good job at guiding the LLM how to deal with the units, so we can leave it as is.

Let's get this in @CarsonRoscoe

@CarsonRoscoe
CarsonRoscoe merged commit 02f9291 into coinbase:mainDec 12, 2025
27 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

4 participants

@pawelpolak2@cb-heimdall@phdargen@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update Vaults.fyi provider - #883

Merged
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider
Dec 12, 2025
Merged

Update Vaults.fyi provider#883
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider

Conversation

@pawelpolak2

Copy link
Copy Markdown
Contributor

Description

Updates the Vaults.fyi provider to use it's new v2 API which updates old action schemas and adds new actions, now using the Vaults.fyi SDK for better type safety.

Tests

Chatbot: langchain-cdp-smart-wallet-chatbot
Network: base
Setup: topped up with USDC and ETH

Prompt: "find me the best APY vault on base" (vaults)

The best APY vault on the Base network is the "40acres USDC Vault" with a 7-day APY of 13.24%. It offers yield from interest paid by borrowers who take USDC loans against Aerodrome veNFT position collateral. The vault currently has about $9.75 million TVL.
You can check it out here: https://app.vaults.fyi/opportunity/base/0xB99B6dF96d4d5448cC0a5B3e0ef7896df9507Cf5

Prompt: "what are my current positions" (positions)

You currently have a position in the "40acres USDC Vault" on the Base network. Here are the details:
- Asset: USDC
- Position value in asset: Approximately 19.9983 USDC
- Vault token balance: 10,960 VAULT tokens
- APY: 13.23%
If you want to know more details or take any action, please let me know.

Prompt: "can you withdraw half of my position?" (transaction_context, execute_step)

To proceed with withdrawing half of your position from the 40acres USDC Vault, I need to calculate the amount to withdraw.
Your vault token balance is 10,960 VAULT tokens. Half of this would be 5,480 VAULT tokens.
I will now check the withdrawal steps and then execute the withdrawal for half the position.
-------------------
I have withdrawn half of your position from the 40acres USDC Vault. If you need anything else, please let me know.

Prompt: "What was this vaults tvl like throughout october 2025? Prepare a table" (vault_historical_data)

Here is the TVL of the 40acres USDC Vault on the Base network for each day in October 2025 (values are in USD):
| Date | TVL (USD) |
|------------|---------------|
| 2025-10-01 | 8,866,510 |
| 2025-10-02 | 8,361,328 |
| 2025-10-03 | 8,811,696 |
| 2025-10-04 | 9,068,609 |
| 2025-10-05 | 9,118,786 |
| 2025-10-06 | 9,472,685 |
| 2025-10-07 | 9,537,216 |
| 2025-10-08 | 10,378,223 |
| 2025-10-09 | 10,065,999 |
| 2025-10-10 | 10,460,026 |
| 2025-10-11 | 9,226,108 |
| 2025-10-12 | 7,968,612 |
| 2025-10-13 | 9,077,846 |
| 2025-10-14 | 9,033,714 |
| 2025-10-15 | 9,343,940 |
| 2025-10-16 | 9,675,426 |
| 2025-10-17 | 9,053,392 |
| 2025-10-18 | 9,809,080 |
| 2025-10-19 | 9,627,220 |
| 2025-10-20 | 9,657,997 |
| 2025-10-21 | 9,369,515 |
| 2025-10-22 | 9,283,646 |
| 2025-10-25 | 10,591,750 |
| 2025-10-26 | 10,718,594 |
| 2025-10-27 | 10,813,673 |
| 2025-10-28 | 10,901,582 |
| 2025-10-29 | 10,702,289 |
| 2025-10-30 | 10,000,230 |
| 2025-10-31 | 11,592,661 |
Let me know if you want the data in a different format or if you'd like further details.

Prompt: "how does its apy compare to the benchmarks?" (historical_benchmark_apy)

During October 2025, the 40acres USDC Vault had a 7-day interval APY ranging approximately from 13.45% to 16.77%.
For the same period, the benchmark APY on the Base network (USD benchmark) ranged approximately from 5.67% to 6.19%.
In summary, the vault's APY significantly outperformed the benchmark for October 2025, offering more than double the returns compared to the benchmark average. If you want, I can provide daily detailed comparison data as well.

Prompt: "what is the benchmark apy currently?" (benchmark_apy)

The current benchmark APY on the Base network (USD benchmark) is approximately:
- 1-day APY: 4.73%
- 7-day APY: 4.87%
- 30-day APY: 5.12%
If you want any further information or assistance, please let me know.

Prompt: "do i have any rewards to claim?" (rewards_context)

You have claimable rewards of IPOR Fusion Points (about 417.42 x 10^-12 tokens) on the Gnosis network. If you'd like, I can help you claim them. Let me know!

Prompt: "yeah sure lets claim them!" (claim_rewards) (couldn't claim because I only had some on gnosis but payload was generated properly)

It seems there was an issue with claiming the rewards on the Gnosis network due to network limitations of my current wallet connection. I am unable to claim rewards on that network directly at this time.
You may need to claim these rewards using a wallet connected to the Gnosis network yourself. If you want, I can provide details or guide you through the process.
Let me know how you'd like to proceed.

Prompt: "what assets do i have?" (idle_assets)

You currently have the following assets in your wallet:
1. USD Coin (USDC) - Approximately 9.999 USDC
2. Ether (ETH) - Approximately 0.0005 ETH
If you want to manage any of these assets or need more information, feel free to ask.

Prompt: "can you check 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 returns on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on arbitrum?" (total_returns)

The returns for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum are approximately 1.806459 USDC. If you want more details or need help with something else, just let me know.

Prompt: "can you check its action history on the vault?" (user_events)

The action history for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum includes:
- A deposit on June 3, 2025, at block 343572914
- Asset amount deposited: 48.549609 USDC
- LP token amount received: 40.675498 dUSDC
- Share price at the time: 1.1936
- Transaction hash: 0x2920d82b96757e42784661671468f8bd22aa3d7842128a9e19fc7c67be45cb7e
If you need more information or want to check something else, just let me know.

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Nov 27, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Nov 27, 2025
@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/constants.ts Outdated
Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/schemas.ts Outdated
@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the update @pawelpolak2, looks good to me!

Could you please also update the typescript/agentkit README accordingly?

@phdargen

Copy link
Copy Markdown
Contributor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

@phdargen

Copy link
Copy Markdown
Contributor

In vaultsfyiActionProvider.ts , the constructor has a default value, but the factory function requires the config.
Suggest changing to:

export const vaultsfyiActionProvider = (config: VaultsfyiActionProviderConfig = {}) =>
new VaultsfyiActionProvider(config);

@phdargen

Copy link
Copy Markdown
Contributor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

@phdargen

Copy link
Copy Markdown
Contributor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units.
I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

I think that would make sense for the transaction endpoints but most are readonly and are going to be used for analytics across all chains and i think making network optional might confuse the agent more than help as it actually is required for vault identification.

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units. I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

I crafted the prompts so the agent understands that its all in atomic units and i found that it actually does really well with parsing those! I tried to avoid parsing them for it since it requires me to know the decimal of asset/LP token which would require additional calls and also i found that atomic units works better for the agent when LP tokens are scaled. Anyway I would keep it in atomic if you don't mind. lmk what you think 😁

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

I gave Carson a new key. The other one was in fact invalid, my bad.

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @pawelpolak2, I tested it out and the actions all work smoothly! Indeed, the prompts make a good job at guiding the LLM how to deal with the units, so we can leave it as is.

Let's get this in @CarsonRoscoe

@CarsonRoscoe
CarsonRoscoe merged commit 02f9291 into coinbase:mainDec 12, 2025
27 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

4 participants

@pawelpolak2@cb-heimdall@phdargen@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Update Vaults.fyi provider - #883

Merged
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider
Dec 12, 2025
Merged

Update Vaults.fyi provider#883
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider

Conversation

@pawelpolak2

Copy link
Copy Markdown
Contributor

Description

Updates the Vaults.fyi provider to use it's new v2 API which updates old action schemas and adds new actions, now using the Vaults.fyi SDK for better type safety.

Tests

Chatbot: langchain-cdp-smart-wallet-chatbot
Network: base
Setup: topped up with USDC and ETH

Prompt: "find me the best APY vault on base" (vaults)

The best APY vault on the Base network is the "40acres USDC Vault" with a 7-day APY of 13.24%. It offers yield from interest paid by borrowers who take USDC loans against Aerodrome veNFT position collateral. The vault currently has about $9.75 million TVL.
You can check it out here: https://app.vaults.fyi/opportunity/base/0xB99B6dF96d4d5448cC0a5B3e0ef7896df9507Cf5

Prompt: "what are my current positions" (positions)

You currently have a position in the "40acres USDC Vault" on the Base network. Here are the details:
- Asset: USDC
- Position value in asset: Approximately 19.9983 USDC
- Vault token balance: 10,960 VAULT tokens
- APY: 13.23%
If you want to know more details or take any action, please let me know.

Prompt: "can you withdraw half of my position?" (transaction_context, execute_step)

To proceed with withdrawing half of your position from the 40acres USDC Vault, I need to calculate the amount to withdraw.
Your vault token balance is 10,960 VAULT tokens. Half of this would be 5,480 VAULT tokens.
I will now check the withdrawal steps and then execute the withdrawal for half the position.
-------------------
I have withdrawn half of your position from the 40acres USDC Vault. If you need anything else, please let me know.

Prompt: "What was this vaults tvl like throughout october 2025? Prepare a table" (vault_historical_data)

Here is the TVL of the 40acres USDC Vault on the Base network for each day in October 2025 (values are in USD):
| Date | TVL (USD) |
|------------|---------------|
| 2025-10-01 | 8,866,510 |
| 2025-10-02 | 8,361,328 |
| 2025-10-03 | 8,811,696 |
| 2025-10-04 | 9,068,609 |
| 2025-10-05 | 9,118,786 |
| 2025-10-06 | 9,472,685 |
| 2025-10-07 | 9,537,216 |
| 2025-10-08 | 10,378,223 |
| 2025-10-09 | 10,065,999 |
| 2025-10-10 | 10,460,026 |
| 2025-10-11 | 9,226,108 |
| 2025-10-12 | 7,968,612 |
| 2025-10-13 | 9,077,846 |
| 2025-10-14 | 9,033,714 |
| 2025-10-15 | 9,343,940 |
| 2025-10-16 | 9,675,426 |
| 2025-10-17 | 9,053,392 |
| 2025-10-18 | 9,809,080 |
| 2025-10-19 | 9,627,220 |
| 2025-10-20 | 9,657,997 |
| 2025-10-21 | 9,369,515 |
| 2025-10-22 | 9,283,646 |
| 2025-10-25 | 10,591,750 |
| 2025-10-26 | 10,718,594 |
| 2025-10-27 | 10,813,673 |
| 2025-10-28 | 10,901,582 |
| 2025-10-29 | 10,702,289 |
| 2025-10-30 | 10,000,230 |
| 2025-10-31 | 11,592,661 |
Let me know if you want the data in a different format or if you'd like further details.

Prompt: "how does its apy compare to the benchmarks?" (historical_benchmark_apy)

During October 2025, the 40acres USDC Vault had a 7-day interval APY ranging approximately from 13.45% to 16.77%.
For the same period, the benchmark APY on the Base network (USD benchmark) ranged approximately from 5.67% to 6.19%.
In summary, the vault's APY significantly outperformed the benchmark for October 2025, offering more than double the returns compared to the benchmark average. If you want, I can provide daily detailed comparison data as well.

Prompt: "what is the benchmark apy currently?" (benchmark_apy)

The current benchmark APY on the Base network (USD benchmark) is approximately:
- 1-day APY: 4.73%
- 7-day APY: 4.87%
- 30-day APY: 5.12%
If you want any further information or assistance, please let me know.

Prompt: "do i have any rewards to claim?" (rewards_context)

You have claimable rewards of IPOR Fusion Points (about 417.42 x 10^-12 tokens) on the Gnosis network. If you'd like, I can help you claim them. Let me know!

Prompt: "yeah sure lets claim them!" (claim_rewards) (couldn't claim because I only had some on gnosis but payload was generated properly)

It seems there was an issue with claiming the rewards on the Gnosis network due to network limitations of my current wallet connection. I am unable to claim rewards on that network directly at this time.
You may need to claim these rewards using a wallet connected to the Gnosis network yourself. If you want, I can provide details or guide you through the process.
Let me know how you'd like to proceed.

Prompt: "what assets do i have?" (idle_assets)

You currently have the following assets in your wallet:
1. USD Coin (USDC) - Approximately 9.999 USDC
2. Ether (ETH) - Approximately 0.0005 ETH
If you want to manage any of these assets or need more information, feel free to ask.

Prompt: "can you check 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 returns on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on arbitrum?" (total_returns)

The returns for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum are approximately 1.806459 USDC. If you want more details or need help with something else, just let me know.

Prompt: "can you check its action history on the vault?" (user_events)

The action history for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum includes:
- A deposit on June 3, 2025, at block 343572914
- Asset amount deposited: 48.549609 USDC
- LP token amount received: 40.675498 dUSDC
- Share price at the time: 1.1936
- Transaction hash: 0x2920d82b96757e42784661671468f8bd22aa3d7842128a9e19fc7c67be45cb7e
If you need more information or want to check something else, just let me know.

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Nov 27, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Nov 27, 2025
@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/constants.ts Outdated
Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/schemas.ts Outdated
@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the update @pawelpolak2, looks good to me!

Could you please also update the typescript/agentkit README accordingly?

@phdargen

Copy link
Copy Markdown
Contributor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

@phdargen

Copy link
Copy Markdown
Contributor

In vaultsfyiActionProvider.ts , the constructor has a default value, but the factory function requires the config.
Suggest changing to:

export const vaultsfyiActionProvider = (config: VaultsfyiActionProviderConfig = {}) =>
new VaultsfyiActionProvider(config);

@phdargen

Copy link
Copy Markdown
Contributor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

@phdargen

Copy link
Copy Markdown
Contributor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units.
I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

I think that would make sense for the transaction endpoints but most are readonly and are going to be used for analytics across all chains and i think making network optional might confuse the agent more than help as it actually is required for vault identification.

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units. I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

I crafted the prompts so the agent understands that its all in atomic units and i found that it actually does really well with parsing those! I tried to avoid parsing them for it since it requires me to know the decimal of asset/LP token which would require additional calls and also i found that atomic units works better for the agent when LP tokens are scaled. Anyway I would keep it in atomic if you don't mind. lmk what you think 😁

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

I gave Carson a new key. The other one was in fact invalid, my bad.

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @pawelpolak2, I tested it out and the actions all work smoothly! Indeed, the prompts make a good job at guiding the LLM how to deal with the units, so we can leave it as is.

Let's get this in @CarsonRoscoe

@CarsonRoscoe
CarsonRoscoe merged commit 02f9291 into coinbase:mainDec 12, 2025
27 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

4 participants

@pawelpolak2@cb-heimdall@phdargen@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update Vaults.fyi provider - #883

Merged
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider
Dec 12, 2025
Merged

Update Vaults.fyi provider#883
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider

Conversation

@pawelpolak2

Copy link
Copy Markdown
Contributor

Description

Updates the Vaults.fyi provider to use it's new v2 API which updates old action schemas and adds new actions, now using the Vaults.fyi SDK for better type safety.

Tests

Chatbot: langchain-cdp-smart-wallet-chatbot
Network: base
Setup: topped up with USDC and ETH

Prompt: "find me the best APY vault on base" (vaults)

The best APY vault on the Base network is the "40acres USDC Vault" with a 7-day APY of 13.24%. It offers yield from interest paid by borrowers who take USDC loans against Aerodrome veNFT position collateral. The vault currently has about $9.75 million TVL.
You can check it out here: https://app.vaults.fyi/opportunity/base/0xB99B6dF96d4d5448cC0a5B3e0ef7896df9507Cf5

Prompt: "what are my current positions" (positions)

You currently have a position in the "40acres USDC Vault" on the Base network. Here are the details:
- Asset: USDC
- Position value in asset: Approximately 19.9983 USDC
- Vault token balance: 10,960 VAULT tokens
- APY: 13.23%
If you want to know more details or take any action, please let me know.

Prompt: "can you withdraw half of my position?" (transaction_context, execute_step)

To proceed with withdrawing half of your position from the 40acres USDC Vault, I need to calculate the amount to withdraw.
Your vault token balance is 10,960 VAULT tokens. Half of this would be 5,480 VAULT tokens.
I will now check the withdrawal steps and then execute the withdrawal for half the position.
-------------------
I have withdrawn half of your position from the 40acres USDC Vault. If you need anything else, please let me know.

Prompt: "What was this vaults tvl like throughout october 2025? Prepare a table" (vault_historical_data)

Here is the TVL of the 40acres USDC Vault on the Base network for each day in October 2025 (values are in USD):
| Date | TVL (USD) |
|------------|---------------|
| 2025-10-01 | 8,866,510 |
| 2025-10-02 | 8,361,328 |
| 2025-10-03 | 8,811,696 |
| 2025-10-04 | 9,068,609 |
| 2025-10-05 | 9,118,786 |
| 2025-10-06 | 9,472,685 |
| 2025-10-07 | 9,537,216 |
| 2025-10-08 | 10,378,223 |
| 2025-10-09 | 10,065,999 |
| 2025-10-10 | 10,460,026 |
| 2025-10-11 | 9,226,108 |
| 2025-10-12 | 7,968,612 |
| 2025-10-13 | 9,077,846 |
| 2025-10-14 | 9,033,714 |
| 2025-10-15 | 9,343,940 |
| 2025-10-16 | 9,675,426 |
| 2025-10-17 | 9,053,392 |
| 2025-10-18 | 9,809,080 |
| 2025-10-19 | 9,627,220 |
| 2025-10-20 | 9,657,997 |
| 2025-10-21 | 9,369,515 |
| 2025-10-22 | 9,283,646 |
| 2025-10-25 | 10,591,750 |
| 2025-10-26 | 10,718,594 |
| 2025-10-27 | 10,813,673 |
| 2025-10-28 | 10,901,582 |
| 2025-10-29 | 10,702,289 |
| 2025-10-30 | 10,000,230 |
| 2025-10-31 | 11,592,661 |
Let me know if you want the data in a different format or if you'd like further details.

Prompt: "how does its apy compare to the benchmarks?" (historical_benchmark_apy)

During October 2025, the 40acres USDC Vault had a 7-day interval APY ranging approximately from 13.45% to 16.77%.
For the same period, the benchmark APY on the Base network (USD benchmark) ranged approximately from 5.67% to 6.19%.
In summary, the vault's APY significantly outperformed the benchmark for October 2025, offering more than double the returns compared to the benchmark average. If you want, I can provide daily detailed comparison data as well.

Prompt: "what is the benchmark apy currently?" (benchmark_apy)

The current benchmark APY on the Base network (USD benchmark) is approximately:
- 1-day APY: 4.73%
- 7-day APY: 4.87%
- 30-day APY: 5.12%
If you want any further information or assistance, please let me know.

Prompt: "do i have any rewards to claim?" (rewards_context)

You have claimable rewards of IPOR Fusion Points (about 417.42 x 10^-12 tokens) on the Gnosis network. If you'd like, I can help you claim them. Let me know!

Prompt: "yeah sure lets claim them!" (claim_rewards) (couldn't claim because I only had some on gnosis but payload was generated properly)

It seems there was an issue with claiming the rewards on the Gnosis network due to network limitations of my current wallet connection. I am unable to claim rewards on that network directly at this time.
You may need to claim these rewards using a wallet connected to the Gnosis network yourself. If you want, I can provide details or guide you through the process.
Let me know how you'd like to proceed.

Prompt: "what assets do i have?" (idle_assets)

You currently have the following assets in your wallet:
1. USD Coin (USDC) - Approximately 9.999 USDC
2. Ether (ETH) - Approximately 0.0005 ETH
If you want to manage any of these assets or need more information, feel free to ask.

Prompt: "can you check 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 returns on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on arbitrum?" (total_returns)

The returns for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum are approximately 1.806459 USDC. If you want more details or need help with something else, just let me know.

Prompt: "can you check its action history on the vault?" (user_events)

The action history for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum includes:
- A deposit on June 3, 2025, at block 343572914
- Asset amount deposited: 48.549609 USDC
- LP token amount received: 40.675498 dUSDC
- Share price at the time: 1.1936
- Transaction hash: 0x2920d82b96757e42784661671468f8bd22aa3d7842128a9e19fc7c67be45cb7e
If you need more information or want to check something else, just let me know.

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Nov 27, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Nov 27, 2025
@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/constants.ts Outdated
Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/schemas.ts Outdated
@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the update @pawelpolak2, looks good to me!

Could you please also update the typescript/agentkit README accordingly?

@phdargen

Copy link
Copy Markdown
Contributor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

@phdargen

Copy link
Copy Markdown
Contributor

In vaultsfyiActionProvider.ts , the constructor has a default value, but the factory function requires the config.
Suggest changing to:

export const vaultsfyiActionProvider = (config: VaultsfyiActionProviderConfig = {}) =>
new VaultsfyiActionProvider(config);

@phdargen

Copy link
Copy Markdown
Contributor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

@phdargen

Copy link
Copy Markdown
Contributor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units.
I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

I think that would make sense for the transaction endpoints but most are readonly and are going to be used for analytics across all chains and i think making network optional might confuse the agent more than help as it actually is required for vault identification.

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units. I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

I crafted the prompts so the agent understands that its all in atomic units and i found that it actually does really well with parsing those! I tried to avoid parsing them for it since it requires me to know the decimal of asset/LP token which would require additional calls and also i found that atomic units works better for the agent when LP tokens are scaled. Anyway I would keep it in atomic if you don't mind. lmk what you think 😁

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

I gave Carson a new key. The other one was in fact invalid, my bad.

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @pawelpolak2, I tested it out and the actions all work smoothly! Indeed, the prompts make a good job at guiding the LLM how to deal with the units, so we can leave it as is.

Let's get this in @CarsonRoscoe

@CarsonRoscoe
CarsonRoscoe merged commit 02f9291 into coinbase:mainDec 12, 2025
27 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

4 participants

@pawelpolak2@cb-heimdall@phdargen@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update Vaults.fyi provider - #883

Merged
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider
Dec 12, 2025
Merged

Update Vaults.fyi provider#883
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider

Conversation

@pawelpolak2

Copy link
Copy Markdown
Contributor

Description

Updates the Vaults.fyi provider to use it's new v2 API which updates old action schemas and adds new actions, now using the Vaults.fyi SDK for better type safety.

Tests

Chatbot: langchain-cdp-smart-wallet-chatbot
Network: base
Setup: topped up with USDC and ETH

Prompt: "find me the best APY vault on base" (vaults)

The best APY vault on the Base network is the "40acres USDC Vault" with a 7-day APY of 13.24%. It offers yield from interest paid by borrowers who take USDC loans against Aerodrome veNFT position collateral. The vault currently has about $9.75 million TVL.
You can check it out here: https://app.vaults.fyi/opportunity/base/0xB99B6dF96d4d5448cC0a5B3e0ef7896df9507Cf5

Prompt: "what are my current positions" (positions)

You currently have a position in the "40acres USDC Vault" on the Base network. Here are the details:
- Asset: USDC
- Position value in asset: Approximately 19.9983 USDC
- Vault token balance: 10,960 VAULT tokens
- APY: 13.23%
If you want to know more details or take any action, please let me know.

Prompt: "can you withdraw half of my position?" (transaction_context, execute_step)

To proceed with withdrawing half of your position from the 40acres USDC Vault, I need to calculate the amount to withdraw.
Your vault token balance is 10,960 VAULT tokens. Half of this would be 5,480 VAULT tokens.
I will now check the withdrawal steps and then execute the withdrawal for half the position.
-------------------
I have withdrawn half of your position from the 40acres USDC Vault. If you need anything else, please let me know.

Prompt: "What was this vaults tvl like throughout october 2025? Prepare a table" (vault_historical_data)

Here is the TVL of the 40acres USDC Vault on the Base network for each day in October 2025 (values are in USD):
| Date | TVL (USD) |
|------------|---------------|
| 2025-10-01 | 8,866,510 |
| 2025-10-02 | 8,361,328 |
| 2025-10-03 | 8,811,696 |
| 2025-10-04 | 9,068,609 |
| 2025-10-05 | 9,118,786 |
| 2025-10-06 | 9,472,685 |
| 2025-10-07 | 9,537,216 |
| 2025-10-08 | 10,378,223 |
| 2025-10-09 | 10,065,999 |
| 2025-10-10 | 10,460,026 |
| 2025-10-11 | 9,226,108 |
| 2025-10-12 | 7,968,612 |
| 2025-10-13 | 9,077,846 |
| 2025-10-14 | 9,033,714 |
| 2025-10-15 | 9,343,940 |
| 2025-10-16 | 9,675,426 |
| 2025-10-17 | 9,053,392 |
| 2025-10-18 | 9,809,080 |
| 2025-10-19 | 9,627,220 |
| 2025-10-20 | 9,657,997 |
| 2025-10-21 | 9,369,515 |
| 2025-10-22 | 9,283,646 |
| 2025-10-25 | 10,591,750 |
| 2025-10-26 | 10,718,594 |
| 2025-10-27 | 10,813,673 |
| 2025-10-28 | 10,901,582 |
| 2025-10-29 | 10,702,289 |
| 2025-10-30 | 10,000,230 |
| 2025-10-31 | 11,592,661 |
Let me know if you want the data in a different format or if you'd like further details.

Prompt: "how does its apy compare to the benchmarks?" (historical_benchmark_apy)

During October 2025, the 40acres USDC Vault had a 7-day interval APY ranging approximately from 13.45% to 16.77%.
For the same period, the benchmark APY on the Base network (USD benchmark) ranged approximately from 5.67% to 6.19%.
In summary, the vault's APY significantly outperformed the benchmark for October 2025, offering more than double the returns compared to the benchmark average. If you want, I can provide daily detailed comparison data as well.

Prompt: "what is the benchmark apy currently?" (benchmark_apy)

The current benchmark APY on the Base network (USD benchmark) is approximately:
- 1-day APY: 4.73%
- 7-day APY: 4.87%
- 30-day APY: 5.12%
If you want any further information or assistance, please let me know.

Prompt: "do i have any rewards to claim?" (rewards_context)

You have claimable rewards of IPOR Fusion Points (about 417.42 x 10^-12 tokens) on the Gnosis network. If you'd like, I can help you claim them. Let me know!

Prompt: "yeah sure lets claim them!" (claim_rewards) (couldn't claim because I only had some on gnosis but payload was generated properly)

It seems there was an issue with claiming the rewards on the Gnosis network due to network limitations of my current wallet connection. I am unable to claim rewards on that network directly at this time.
You may need to claim these rewards using a wallet connected to the Gnosis network yourself. If you want, I can provide details or guide you through the process.
Let me know how you'd like to proceed.

Prompt: "what assets do i have?" (idle_assets)

You currently have the following assets in your wallet:
1. USD Coin (USDC) - Approximately 9.999 USDC
2. Ether (ETH) - Approximately 0.0005 ETH
If you want to manage any of these assets or need more information, feel free to ask.

Prompt: "can you check 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 returns on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on arbitrum?" (total_returns)

The returns for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum are approximately 1.806459 USDC. If you want more details or need help with something else, just let me know.

Prompt: "can you check its action history on the vault?" (user_events)

The action history for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum includes:
- A deposit on June 3, 2025, at block 343572914
- Asset amount deposited: 48.549609 USDC
- LP token amount received: 40.675498 dUSDC
- Share price at the time: 1.1936
- Transaction hash: 0x2920d82b96757e42784661671468f8bd22aa3d7842128a9e19fc7c67be45cb7e
If you need more information or want to check something else, just let me know.

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Nov 27, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Nov 27, 2025
@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/constants.ts Outdated
Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/schemas.ts Outdated
@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the update @pawelpolak2, looks good to me!

Could you please also update the typescript/agentkit README accordingly?

@phdargen

Copy link
Copy Markdown
Contributor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

@phdargen

Copy link
Copy Markdown
Contributor

In vaultsfyiActionProvider.ts , the constructor has a default value, but the factory function requires the config.
Suggest changing to:

export const vaultsfyiActionProvider = (config: VaultsfyiActionProviderConfig = {}) =>
new VaultsfyiActionProvider(config);

@phdargen

Copy link
Copy Markdown
Contributor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

@phdargen

Copy link
Copy Markdown
Contributor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units.
I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

I think that would make sense for the transaction endpoints but most are readonly and are going to be used for analytics across all chains and i think making network optional might confuse the agent more than help as it actually is required for vault identification.

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units. I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

I crafted the prompts so the agent understands that its all in atomic units and i found that it actually does really well with parsing those! I tried to avoid parsing them for it since it requires me to know the decimal of asset/LP token which would require additional calls and also i found that atomic units works better for the agent when LP tokens are scaled. Anyway I would keep it in atomic if you don't mind. lmk what you think 😁

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

I gave Carson a new key. The other one was in fact invalid, my bad.

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @pawelpolak2, I tested it out and the actions all work smoothly! Indeed, the prompts make a good job at guiding the LLM how to deal with the units, so we can leave it as is.

Let's get this in @CarsonRoscoe

@CarsonRoscoe
CarsonRoscoe merged commit 02f9291 into coinbase:mainDec 12, 2025
27 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

4 participants

@pawelpolak2@cb-heimdall@phdargen@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Update Vaults.fyi provider - #883

Merged
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider
Dec 12, 2025
Merged

Update Vaults.fyi provider#883
CarsonRoscoe merged 8 commits into
coinbase:mainfrom
pawelpolak2:11-27-update_vaults.fyi_provider

Conversation

@pawelpolak2

Copy link
Copy Markdown
Contributor

Description

Updates the Vaults.fyi provider to use it's new v2 API which updates old action schemas and adds new actions, now using the Vaults.fyi SDK for better type safety.

Tests

Chatbot: langchain-cdp-smart-wallet-chatbot
Network: base
Setup: topped up with USDC and ETH

Prompt: "find me the best APY vault on base" (vaults)

The best APY vault on the Base network is the "40acres USDC Vault" with a 7-day APY of 13.24%. It offers yield from interest paid by borrowers who take USDC loans against Aerodrome veNFT position collateral. The vault currently has about $9.75 million TVL.
You can check it out here: https://app.vaults.fyi/opportunity/base/0xB99B6dF96d4d5448cC0a5B3e0ef7896df9507Cf5

Prompt: "what are my current positions" (positions)

You currently have a position in the "40acres USDC Vault" on the Base network. Here are the details:
- Asset: USDC
- Position value in asset: Approximately 19.9983 USDC
- Vault token balance: 10,960 VAULT tokens
- APY: 13.23%
If you want to know more details or take any action, please let me know.

Prompt: "can you withdraw half of my position?" (transaction_context, execute_step)

To proceed with withdrawing half of your position from the 40acres USDC Vault, I need to calculate the amount to withdraw.
Your vault token balance is 10,960 VAULT tokens. Half of this would be 5,480 VAULT tokens.
I will now check the withdrawal steps and then execute the withdrawal for half the position.
-------------------
I have withdrawn half of your position from the 40acres USDC Vault. If you need anything else, please let me know.

Prompt: "What was this vaults tvl like throughout october 2025? Prepare a table" (vault_historical_data)

Here is the TVL of the 40acres USDC Vault on the Base network for each day in October 2025 (values are in USD):
| Date | TVL (USD) |
|------------|---------------|
| 2025-10-01 | 8,866,510 |
| 2025-10-02 | 8,361,328 |
| 2025-10-03 | 8,811,696 |
| 2025-10-04 | 9,068,609 |
| 2025-10-05 | 9,118,786 |
| 2025-10-06 | 9,472,685 |
| 2025-10-07 | 9,537,216 |
| 2025-10-08 | 10,378,223 |
| 2025-10-09 | 10,065,999 |
| 2025-10-10 | 10,460,026 |
| 2025-10-11 | 9,226,108 |
| 2025-10-12 | 7,968,612 |
| 2025-10-13 | 9,077,846 |
| 2025-10-14 | 9,033,714 |
| 2025-10-15 | 9,343,940 |
| 2025-10-16 | 9,675,426 |
| 2025-10-17 | 9,053,392 |
| 2025-10-18 | 9,809,080 |
| 2025-10-19 | 9,627,220 |
| 2025-10-20 | 9,657,997 |
| 2025-10-21 | 9,369,515 |
| 2025-10-22 | 9,283,646 |
| 2025-10-25 | 10,591,750 |
| 2025-10-26 | 10,718,594 |
| 2025-10-27 | 10,813,673 |
| 2025-10-28 | 10,901,582 |
| 2025-10-29 | 10,702,289 |
| 2025-10-30 | 10,000,230 |
| 2025-10-31 | 11,592,661 |
Let me know if you want the data in a different format or if you'd like further details.

Prompt: "how does its apy compare to the benchmarks?" (historical_benchmark_apy)

During October 2025, the 40acres USDC Vault had a 7-day interval APY ranging approximately from 13.45% to 16.77%.
For the same period, the benchmark APY on the Base network (USD benchmark) ranged approximately from 5.67% to 6.19%.
In summary, the vault's APY significantly outperformed the benchmark for October 2025, offering more than double the returns compared to the benchmark average. If you want, I can provide daily detailed comparison data as well.

Prompt: "what is the benchmark apy currently?" (benchmark_apy)

The current benchmark APY on the Base network (USD benchmark) is approximately:
- 1-day APY: 4.73%
- 7-day APY: 4.87%
- 30-day APY: 5.12%
If you want any further information or assistance, please let me know.

Prompt: "do i have any rewards to claim?" (rewards_context)

You have claimable rewards of IPOR Fusion Points (about 417.42 x 10^-12 tokens) on the Gnosis network. If you'd like, I can help you claim them. Let me know!

Prompt: "yeah sure lets claim them!" (claim_rewards) (couldn't claim because I only had some on gnosis but payload was generated properly)

It seems there was an issue with claiming the rewards on the Gnosis network due to network limitations of my current wallet connection. I am unable to claim rewards on that network directly at this time.
You may need to claim these rewards using a wallet connected to the Gnosis network yourself. If you want, I can provide details or guide you through the process.
Let me know how you'd like to proceed.

Prompt: "what assets do i have?" (idle_assets)

You currently have the following assets in your wallet:
1. USD Coin (USDC) - Approximately 9.999 USDC
2. Ether (ETH) - Approximately 0.0005 ETH
If you want to manage any of these assets or need more information, feel free to ask.

Prompt: "can you check 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 returns on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on arbitrum?" (total_returns)

The returns for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum are approximately 1.806459 USDC. If you want more details or need help with something else, just let me know.

Prompt: "can you check its action history on the vault?" (user_events)

The action history for the address 0x047e7CFA2702f95DE867A86a74CaF60E2DdBFF72 on the vault 0x444868B6e8079ac2c55eea115250f92C2b2c4D14 on Arbitrum includes:
- A deposit on June 3, 2025, at block 343572914
- Asset amount deposited: 48.549609 USDC
- LP token amount received: 40.675498 dUSDC
- Share price at the time: 1.1936
- Transaction hash: 0x2920d82b96757e42784661671468f8bd22aa3d7842128a9e19fc7c67be45cb7e
If you need more information or want to check something else, just let me know.

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Nov 27, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Nov 27, 2025
@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/constants.ts Outdated
Comment threadtypescript/agentkit/src/action-providers/vaultsfyi/schemas.ts Outdated
@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the update @pawelpolak2, looks good to me!

Could you please also update the typescript/agentkit README accordingly?

@phdargen

Copy link
Copy Markdown
Contributor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

@phdargen

Copy link
Copy Markdown
Contributor

In vaultsfyiActionProvider.ts , the constructor has a default value, but the factory function requires the config.
Suggest changing to:

export const vaultsfyiActionProvider = (config: VaultsfyiActionProviderConfig = {}) =>
new VaultsfyiActionProvider(config);

@phdargen

Copy link
Copy Markdown
Contributor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

@phdargen

Copy link
Copy Markdown
Contributor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units.
I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Most actions require network as a mandatory schema parameter, would suggest to make it optional and default to connected network

I think that would make sense for the transaction endpoints but most are readonly and are going to be used for analytics across all chains and i think making network optional might confuse the agent more than help as it actually is required for vault identification.

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

Token amounts are in atomic units. In my experience this often doesn't work well and the LLM wrongly converts the units. I'd suggest to have token amounts in human-readable format for both tool input and output and convert internally from/to atomic units as needed.

There is already a (currently unused) parseAssetAmount function implemented in utils that might be useful

I crafted the prompts so the agent understands that its all in atomic units and i found that it actually does really well with parsing those! I tried to avoid parsing them for it since it requires me to know the decimal of asset/LP token which would require additional calls and also i found that atomic units works better for the agent when LP tokens are scaled. Anyway I would keep it in atomic if you don't mind. lmk what you think 😁

@pawelpolak2

Copy link
Copy Markdown
ContributorAuthor

If a reviewer needs an API key for review I'm happy to share one.

Carson gave me an API key but it doesnt seem to work

I gave Carson a new key. The other one was in fact invalid, my bad.

@phdargen

Copy link
Copy Markdown
Contributor

Thanks for the updates @pawelpolak2, I tested it out and the actions all work smoothly! Indeed, the prompts make a good job at guiding the LLM how to deal with the units, so we can leave it as is.

Let's get this in @CarsonRoscoe

@CarsonRoscoe
CarsonRoscoe merged commit 02f9291 into coinbase:mainDec 12, 2025
27 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

4 participants

@pawelpolak2@cb-heimdall@phdargen@CarsonRoscoe