feat(typescript): add ListSpendPermissions and UseSpendPermissions - #818

Merged
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329
Aug 9, 2025
Merged

feat(typescript): add ListSpendPermissions and UseSpendPermissions#818
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329

Conversation

@0xRAG

@0xRAG0xRAG commented Aug 8, 2025

Copy link
Copy Markdown
Contributor

Description

This PR implements two Spend Permissions actions in both EvmWallet and SmartWallet:

  • list_spend_permissions
  • use_spend_permissions

Tests

Setup:

  1. Used the createSpendPermission example script to create a spend permission for my Agent's wallet.

Transcript of chat with Vercel AI Chatbot

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_smart_wallet_provider
- **Address:** 0xe1D1D37231799d5784b12b0b53bB2866a99e8C18
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.005** tokens. If you need any further assistance, feel free to ask!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000 tokens
- **Period:** 2,592,000 seconds (30 days)
- **Start:** 1754666025 (Unix timestamp)
- **End:** 281474976710655 (Unix timestamp)
If you need further assistance, let me know!
-------------------
Prompt: use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Successfully spent **5000 tokens** using the spend permission granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction status is currently broadcast. If you need any further assistance, feel free to ask!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.01 tokens**. If you need any further assistance, let me know!
-------------------

Transcript of chat with Vercel AI Chatbot modified to use EVM Server Wallet

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_evm_wallet_provider
- **Address:** 0x81791fddB6fC4397DcE3E1031A159c2636A487Df
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000
- **Period:** 2,592,000 seconds (30 days)
- **Start Time:** 1754687882
- **End Time:** 281474976710655
If you need further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0**. If you need any further assistance, let me know!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
-------------------
Prompt: faucet some eth
faucet some eth
I have successfully received ETH from the faucet. The transaction hash is: **0x390b1ce76cc346dfa5a0fd39ce13d03559567b835e8806eea6ae0b3be956fd09**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
I have successfully used 5000 tokens from the spend permission granted by `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction hash is: **0x8262653528f58176910163e21a8dddf94d7b040b42485fba6f052d628af603e4**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0.005**. If you need any further assistance, let me know!
-------------------

Note: There was a slight hiccup where the agent seemed to not respond after the first time requesting to use the spend permission. This is because it didn't have funds to cover gas. The reason it didn't print anything is because the action was throwing an error instead of returning a string – this has since been fixed.

Checklist

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

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

@linear

linearBot commented Aug 8, 2025

Copy link
Copy Markdown

@cb-heimdall

cb-heimdall commented Aug 8, 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 action provider New action provider wallet provider New wallet provider example New example agent typescript labels Aug 8, 2025
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Aug 8, 2025
@0xRAG
0xRAGforce-pushed the AGENT-329 branch 3 times, most recently from b8a30ca to 280d0c3CompareAugust 8, 2025 21:47
@0xRAG
0xRAG marked this pull request as ready for review August 8, 2025 21:51
@0xRAG
0xRAG requested a review from murrlincoln as a code ownerAugust 8, 2025 21:51
* A wallet provider that uses the Coinbase CDP SDK smart wallets.
*/
export class CdpSmartWalletProvider extends EvmWalletProvider implements WalletProviderWithClient {
public smartAccount: EvmSmartAccount;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Personally I think this is fine because the smartAccount provides lots of convenience methods, in particular .useSpendPermission which is used in this PR. Other convenience methods may be used in future actions (like .swap – cc @phdargen re: fix: swap api)

/**
* Lists spend permissions for a smart account.
*
* @param walletProvider - The server wallet provider to use for listing permissions.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

maybe we add context on how these spend permissions can be created?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Agreed. Will follow up with Ryan and fast-follow with the info

@CarsonRoscoe
CarsonRoscoe merged commit bc3d1d5 into mainAug 9, 2025
30 checks passed
@CarsonRoscoe
CarsonRoscoe deleted the AGENT-329 branch August 9, 2025 15:27
@phdargenphdargen mentioned this pull request Aug 12, 2025
12 tasks
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 documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

5 participants

@0xRAG@cb-heimdall@CarsonRoscoe@murrlincoln@jazz-cb
, '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

feat(typescript): add ListSpendPermissions and UseSpendPermissions - #818

Merged
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329
Aug 9, 2025
Merged

feat(typescript): add ListSpendPermissions and UseSpendPermissions#818
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329

Conversation

@0xRAG

@0xRAG0xRAG commented Aug 8, 2025

Copy link
Copy Markdown
Contributor

Description

This PR implements two Spend Permissions actions in both EvmWallet and SmartWallet:

  • list_spend_permissions
  • use_spend_permissions

Tests

Setup:

  1. Used the createSpendPermission example script to create a spend permission for my Agent's wallet.

Transcript of chat with Vercel AI Chatbot

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_smart_wallet_provider
- **Address:** 0xe1D1D37231799d5784b12b0b53bB2866a99e8C18
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.005** tokens. If you need any further assistance, feel free to ask!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000 tokens
- **Period:** 2,592,000 seconds (30 days)
- **Start:** 1754666025 (Unix timestamp)
- **End:** 281474976710655 (Unix timestamp)
If you need further assistance, let me know!
-------------------
Prompt: use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Successfully spent **5000 tokens** using the spend permission granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction status is currently broadcast. If you need any further assistance, feel free to ask!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.01 tokens**. If you need any further assistance, let me know!
-------------------

Transcript of chat with Vercel AI Chatbot modified to use EVM Server Wallet

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_evm_wallet_provider
- **Address:** 0x81791fddB6fC4397DcE3E1031A159c2636A487Df
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000
- **Period:** 2,592,000 seconds (30 days)
- **Start Time:** 1754687882
- **End Time:** 281474976710655
If you need further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0**. If you need any further assistance, let me know!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
-------------------
Prompt: faucet some eth
faucet some eth
I have successfully received ETH from the faucet. The transaction hash is: **0x390b1ce76cc346dfa5a0fd39ce13d03559567b835e8806eea6ae0b3be956fd09**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
I have successfully used 5000 tokens from the spend permission granted by `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction hash is: **0x8262653528f58176910163e21a8dddf94d7b040b42485fba6f052d628af603e4**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0.005**. If you need any further assistance, let me know!
-------------------

Note: There was a slight hiccup where the agent seemed to not respond after the first time requesting to use the spend permission. This is because it didn't have funds to cover gas. The reason it didn't print anything is because the action was throwing an error instead of returning a string – this has since been fixed.

Checklist

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

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

@linear

linearBot commented Aug 8, 2025

Copy link
Copy Markdown

@cb-heimdall

cb-heimdall commented Aug 8, 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 action provider New action provider wallet provider New wallet provider example New example agent typescript labels Aug 8, 2025
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Aug 8, 2025
@0xRAG
0xRAGforce-pushed the AGENT-329 branch 3 times, most recently from b8a30ca to 280d0c3CompareAugust 8, 2025 21:47
@0xRAG
0xRAG marked this pull request as ready for review August 8, 2025 21:51
@0xRAG
0xRAG requested a review from murrlincoln as a code ownerAugust 8, 2025 21:51
* A wallet provider that uses the Coinbase CDP SDK smart wallets.
*/
export class CdpSmartWalletProvider extends EvmWalletProvider implements WalletProviderWithClient {
public smartAccount: EvmSmartAccount;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Personally I think this is fine because the smartAccount provides lots of convenience methods, in particular .useSpendPermission which is used in this PR. Other convenience methods may be used in future actions (like .swap – cc @phdargen re: fix: swap api)

/**
* Lists spend permissions for a smart account.
*
* @param walletProvider - The server wallet provider to use for listing permissions.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

maybe we add context on how these spend permissions can be created?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Agreed. Will follow up with Ryan and fast-follow with the info

@CarsonRoscoe
CarsonRoscoe merged commit bc3d1d5 into mainAug 9, 2025
30 checks passed
@CarsonRoscoe
CarsonRoscoe deleted the AGENT-329 branch August 9, 2025 15:27
@phdargenphdargen mentioned this pull request Aug 12, 2025
12 tasks
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 documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

5 participants

@0xRAG@cb-heimdall@CarsonRoscoe@murrlincoln@jazz-cb
, '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

feat(typescript): add ListSpendPermissions and UseSpendPermissions - #818

Merged
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329
Aug 9, 2025
Merged

feat(typescript): add ListSpendPermissions and UseSpendPermissions#818
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329

Conversation

@0xRAG

@0xRAG0xRAG commented Aug 8, 2025

Copy link
Copy Markdown
Contributor

Description

This PR implements two Spend Permissions actions in both EvmWallet and SmartWallet:

  • list_spend_permissions
  • use_spend_permissions

Tests

Setup:

  1. Used the createSpendPermission example script to create a spend permission for my Agent's wallet.

Transcript of chat with Vercel AI Chatbot

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_smart_wallet_provider
- **Address:** 0xe1D1D37231799d5784b12b0b53bB2866a99e8C18
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.005** tokens. If you need any further assistance, feel free to ask!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000 tokens
- **Period:** 2,592,000 seconds (30 days)
- **Start:** 1754666025 (Unix timestamp)
- **End:** 281474976710655 (Unix timestamp)
If you need further assistance, let me know!
-------------------
Prompt: use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Successfully spent **5000 tokens** using the spend permission granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction status is currently broadcast. If you need any further assistance, feel free to ask!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.01 tokens**. If you need any further assistance, let me know!
-------------------

Transcript of chat with Vercel AI Chatbot modified to use EVM Server Wallet

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_evm_wallet_provider
- **Address:** 0x81791fddB6fC4397DcE3E1031A159c2636A487Df
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000
- **Period:** 2,592,000 seconds (30 days)
- **Start Time:** 1754687882
- **End Time:** 281474976710655
If you need further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0**. If you need any further assistance, let me know!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
-------------------
Prompt: faucet some eth
faucet some eth
I have successfully received ETH from the faucet. The transaction hash is: **0x390b1ce76cc346dfa5a0fd39ce13d03559567b835e8806eea6ae0b3be956fd09**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
I have successfully used 5000 tokens from the spend permission granted by `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction hash is: **0x8262653528f58176910163e21a8dddf94d7b040b42485fba6f052d628af603e4**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0.005**. If you need any further assistance, let me know!
-------------------

Note: There was a slight hiccup where the agent seemed to not respond after the first time requesting to use the spend permission. This is because it didn't have funds to cover gas. The reason it didn't print anything is because the action was throwing an error instead of returning a string – this has since been fixed.

Checklist

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

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

@linear

linearBot commented Aug 8, 2025

Copy link
Copy Markdown

@cb-heimdall

cb-heimdall commented Aug 8, 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 action provider New action provider wallet provider New wallet provider example New example agent typescript labels Aug 8, 2025
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Aug 8, 2025
@0xRAG
0xRAGforce-pushed the AGENT-329 branch 3 times, most recently from b8a30ca to 280d0c3CompareAugust 8, 2025 21:47
@0xRAG
0xRAG marked this pull request as ready for review August 8, 2025 21:51
@0xRAG
0xRAG requested a review from murrlincoln as a code ownerAugust 8, 2025 21:51
* A wallet provider that uses the Coinbase CDP SDK smart wallets.
*/
export class CdpSmartWalletProvider extends EvmWalletProvider implements WalletProviderWithClient {
public smartAccount: EvmSmartAccount;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Personally I think this is fine because the smartAccount provides lots of convenience methods, in particular .useSpendPermission which is used in this PR. Other convenience methods may be used in future actions (like .swap – cc @phdargen re: fix: swap api)

/**
* Lists spend permissions for a smart account.
*
* @param walletProvider - The server wallet provider to use for listing permissions.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

maybe we add context on how these spend permissions can be created?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Agreed. Will follow up with Ryan and fast-follow with the info

@CarsonRoscoe
CarsonRoscoe merged commit bc3d1d5 into mainAug 9, 2025
30 checks passed
@CarsonRoscoe
CarsonRoscoe deleted the AGENT-329 branch August 9, 2025 15:27
@phdargenphdargen mentioned this pull request Aug 12, 2025
12 tasks
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 documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

5 participants

@0xRAG@cb-heimdall@CarsonRoscoe@murrlincoln@jazz-cb
, '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

feat(typescript): add ListSpendPermissions and UseSpendPermissions - #818

Merged
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329
Aug 9, 2025
Merged

feat(typescript): add ListSpendPermissions and UseSpendPermissions#818
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329

Conversation

@0xRAG

@0xRAG0xRAG commented Aug 8, 2025

Copy link
Copy Markdown
Contributor

Description

This PR implements two Spend Permissions actions in both EvmWallet and SmartWallet:

  • list_spend_permissions
  • use_spend_permissions

Tests

Setup:

  1. Used the createSpendPermission example script to create a spend permission for my Agent's wallet.

Transcript of chat with Vercel AI Chatbot

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_smart_wallet_provider
- **Address:** 0xe1D1D37231799d5784b12b0b53bB2866a99e8C18
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.005** tokens. If you need any further assistance, feel free to ask!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000 tokens
- **Period:** 2,592,000 seconds (30 days)
- **Start:** 1754666025 (Unix timestamp)
- **End:** 281474976710655 (Unix timestamp)
If you need further assistance, let me know!
-------------------
Prompt: use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Successfully spent **5000 tokens** using the spend permission granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction status is currently broadcast. If you need any further assistance, feel free to ask!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.01 tokens**. If you need any further assistance, let me know!
-------------------

Transcript of chat with Vercel AI Chatbot modified to use EVM Server Wallet

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_evm_wallet_provider
- **Address:** 0x81791fddB6fC4397DcE3E1031A159c2636A487Df
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000
- **Period:** 2,592,000 seconds (30 days)
- **Start Time:** 1754687882
- **End Time:** 281474976710655
If you need further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0**. If you need any further assistance, let me know!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
-------------------
Prompt: faucet some eth
faucet some eth
I have successfully received ETH from the faucet. The transaction hash is: **0x390b1ce76cc346dfa5a0fd39ce13d03559567b835e8806eea6ae0b3be956fd09**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
I have successfully used 5000 tokens from the spend permission granted by `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction hash is: **0x8262653528f58176910163e21a8dddf94d7b040b42485fba6f052d628af603e4**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0.005**. If you need any further assistance, let me know!
-------------------

Note: There was a slight hiccup where the agent seemed to not respond after the first time requesting to use the spend permission. This is because it didn't have funds to cover gas. The reason it didn't print anything is because the action was throwing an error instead of returning a string – this has since been fixed.

Checklist

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

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

@linear

linearBot commented Aug 8, 2025

Copy link
Copy Markdown

@cb-heimdall

cb-heimdall commented Aug 8, 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 action provider New action provider wallet provider New wallet provider example New example agent typescript labels Aug 8, 2025
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Aug 8, 2025
@0xRAG
0xRAGforce-pushed the AGENT-329 branch 3 times, most recently from b8a30ca to 280d0c3CompareAugust 8, 2025 21:47
@0xRAG
0xRAG marked this pull request as ready for review August 8, 2025 21:51
@0xRAG
0xRAG requested a review from murrlincoln as a code ownerAugust 8, 2025 21:51
* A wallet provider that uses the Coinbase CDP SDK smart wallets.
*/
export class CdpSmartWalletProvider extends EvmWalletProvider implements WalletProviderWithClient {
public smartAccount: EvmSmartAccount;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Personally I think this is fine because the smartAccount provides lots of convenience methods, in particular .useSpendPermission which is used in this PR. Other convenience methods may be used in future actions (like .swap – cc @phdargen re: fix: swap api)

/**
* Lists spend permissions for a smart account.
*
* @param walletProvider - The server wallet provider to use for listing permissions.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

maybe we add context on how these spend permissions can be created?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Agreed. Will follow up with Ryan and fast-follow with the info

@CarsonRoscoe
CarsonRoscoe merged commit bc3d1d5 into mainAug 9, 2025
30 checks passed
@CarsonRoscoe
CarsonRoscoe deleted the AGENT-329 branch August 9, 2025 15:27
@phdargenphdargen mentioned this pull request Aug 12, 2025
12 tasks
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 documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

5 participants

@0xRAG@cb-heimdall@CarsonRoscoe@murrlincoln@jazz-cb
, '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

feat(typescript): add ListSpendPermissions and UseSpendPermissions - #818

Merged
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329
Aug 9, 2025
Merged

feat(typescript): add ListSpendPermissions and UseSpendPermissions#818
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329

Conversation

@0xRAG

@0xRAG0xRAG commented Aug 8, 2025

Copy link
Copy Markdown
Contributor

Description

This PR implements two Spend Permissions actions in both EvmWallet and SmartWallet:

  • list_spend_permissions
  • use_spend_permissions

Tests

Setup:

  1. Used the createSpendPermission example script to create a spend permission for my Agent's wallet.

Transcript of chat with Vercel AI Chatbot

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_smart_wallet_provider
- **Address:** 0xe1D1D37231799d5784b12b0b53bB2866a99e8C18
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.005** tokens. If you need any further assistance, feel free to ask!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000 tokens
- **Period:** 2,592,000 seconds (30 days)
- **Start:** 1754666025 (Unix timestamp)
- **End:** 281474976710655 (Unix timestamp)
If you need further assistance, let me know!
-------------------
Prompt: use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Successfully spent **5000 tokens** using the spend permission granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction status is currently broadcast. If you need any further assistance, feel free to ask!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.01 tokens**. If you need any further assistance, let me know!
-------------------

Transcript of chat with Vercel AI Chatbot modified to use EVM Server Wallet

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_evm_wallet_provider
- **Address:** 0x81791fddB6fC4397DcE3E1031A159c2636A487Df
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000
- **Period:** 2,592,000 seconds (30 days)
- **Start Time:** 1754687882
- **End Time:** 281474976710655
If you need further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0**. If you need any further assistance, let me know!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
-------------------
Prompt: faucet some eth
faucet some eth
I have successfully received ETH from the faucet. The transaction hash is: **0x390b1ce76cc346dfa5a0fd39ce13d03559567b835e8806eea6ae0b3be956fd09**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
I have successfully used 5000 tokens from the spend permission granted by `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction hash is: **0x8262653528f58176910163e21a8dddf94d7b040b42485fba6f052d628af603e4**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0.005**. If you need any further assistance, let me know!
-------------------

Note: There was a slight hiccup where the agent seemed to not respond after the first time requesting to use the spend permission. This is because it didn't have funds to cover gas. The reason it didn't print anything is because the action was throwing an error instead of returning a string – this has since been fixed.

Checklist

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

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

@linear

linearBot commented Aug 8, 2025

Copy link
Copy Markdown

@cb-heimdall

cb-heimdall commented Aug 8, 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 action provider New action provider wallet provider New wallet provider example New example agent typescript labels Aug 8, 2025
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Aug 8, 2025
@0xRAG
0xRAGforce-pushed the AGENT-329 branch 3 times, most recently from b8a30ca to 280d0c3CompareAugust 8, 2025 21:47
@0xRAG
0xRAG marked this pull request as ready for review August 8, 2025 21:51
@0xRAG
0xRAG requested a review from murrlincoln as a code ownerAugust 8, 2025 21:51
* A wallet provider that uses the Coinbase CDP SDK smart wallets.
*/
export class CdpSmartWalletProvider extends EvmWalletProvider implements WalletProviderWithClient {
public smartAccount: EvmSmartAccount;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Personally I think this is fine because the smartAccount provides lots of convenience methods, in particular .useSpendPermission which is used in this PR. Other convenience methods may be used in future actions (like .swap – cc @phdargen re: fix: swap api)

/**
* Lists spend permissions for a smart account.
*
* @param walletProvider - The server wallet provider to use for listing permissions.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

maybe we add context on how these spend permissions can be created?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Agreed. Will follow up with Ryan and fast-follow with the info

@CarsonRoscoe
CarsonRoscoe merged commit bc3d1d5 into mainAug 9, 2025
30 checks passed
@CarsonRoscoe
CarsonRoscoe deleted the AGENT-329 branch August 9, 2025 15:27
@phdargenphdargen mentioned this pull request Aug 12, 2025
12 tasks
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 documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

5 participants

@0xRAG@cb-heimdall@CarsonRoscoe@murrlincoln@jazz-cb
, '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

feat(typescript): add ListSpendPermissions and UseSpendPermissions - #818

Merged
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329
Aug 9, 2025
Merged

feat(typescript): add ListSpendPermissions and UseSpendPermissions#818
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329

Conversation

@0xRAG

@0xRAG0xRAG commented Aug 8, 2025

Copy link
Copy Markdown
Contributor

Description

This PR implements two Spend Permissions actions in both EvmWallet and SmartWallet:

  • list_spend_permissions
  • use_spend_permissions

Tests

Setup:

  1. Used the createSpendPermission example script to create a spend permission for my Agent's wallet.

Transcript of chat with Vercel AI Chatbot

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_smart_wallet_provider
- **Address:** 0xe1D1D37231799d5784b12b0b53bB2866a99e8C18
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.005** tokens. If you need any further assistance, feel free to ask!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000 tokens
- **Period:** 2,592,000 seconds (30 days)
- **Start:** 1754666025 (Unix timestamp)
- **End:** 281474976710655 (Unix timestamp)
If you need further assistance, let me know!
-------------------
Prompt: use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Successfully spent **5000 tokens** using the spend permission granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction status is currently broadcast. If you need any further assistance, feel free to ask!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.01 tokens**. If you need any further assistance, let me know!
-------------------

Transcript of chat with Vercel AI Chatbot modified to use EVM Server Wallet

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_evm_wallet_provider
- **Address:** 0x81791fddB6fC4397DcE3E1031A159c2636A487Df
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000
- **Period:** 2,592,000 seconds (30 days)
- **Start Time:** 1754687882
- **End Time:** 281474976710655
If you need further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0**. If you need any further assistance, let me know!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
-------------------
Prompt: faucet some eth
faucet some eth
I have successfully received ETH from the faucet. The transaction hash is: **0x390b1ce76cc346dfa5a0fd39ce13d03559567b835e8806eea6ae0b3be956fd09**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
I have successfully used 5000 tokens from the spend permission granted by `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction hash is: **0x8262653528f58176910163e21a8dddf94d7b040b42485fba6f052d628af603e4**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0.005**. If you need any further assistance, let me know!
-------------------

Note: There was a slight hiccup where the agent seemed to not respond after the first time requesting to use the spend permission. This is because it didn't have funds to cover gas. The reason it didn't print anything is because the action was throwing an error instead of returning a string – this has since been fixed.

Checklist

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

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

@linear

linearBot commented Aug 8, 2025

Copy link
Copy Markdown

@cb-heimdall

cb-heimdall commented Aug 8, 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 action provider New action provider wallet provider New wallet provider example New example agent typescript labels Aug 8, 2025
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Aug 8, 2025
@0xRAG
0xRAGforce-pushed the AGENT-329 branch 3 times, most recently from b8a30ca to 280d0c3CompareAugust 8, 2025 21:47
@0xRAG
0xRAG marked this pull request as ready for review August 8, 2025 21:51
@0xRAG
0xRAG requested a review from murrlincoln as a code ownerAugust 8, 2025 21:51
* A wallet provider that uses the Coinbase CDP SDK smart wallets.
*/
export class CdpSmartWalletProvider extends EvmWalletProvider implements WalletProviderWithClient {
public smartAccount: EvmSmartAccount;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Personally I think this is fine because the smartAccount provides lots of convenience methods, in particular .useSpendPermission which is used in this PR. Other convenience methods may be used in future actions (like .swap – cc @phdargen re: fix: swap api)

/**
* Lists spend permissions for a smart account.
*
* @param walletProvider - The server wallet provider to use for listing permissions.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

maybe we add context on how these spend permissions can be created?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Agreed. Will follow up with Ryan and fast-follow with the info

@CarsonRoscoe
CarsonRoscoe merged commit bc3d1d5 into mainAug 9, 2025
30 checks passed
@CarsonRoscoe
CarsonRoscoe deleted the AGENT-329 branch August 9, 2025 15:27
@phdargenphdargen mentioned this pull request Aug 12, 2025
12 tasks
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 documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

5 participants

@0xRAG@cb-heimdall@CarsonRoscoe@murrlincoln@jazz-cb
, '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

feat(typescript): add ListSpendPermissions and UseSpendPermissions - #818

Merged
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329
Aug 9, 2025
Merged

feat(typescript): add ListSpendPermissions and UseSpendPermissions#818
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329

Conversation

@0xRAG

@0xRAG0xRAG commented Aug 8, 2025

Copy link
Copy Markdown
Contributor

Description

This PR implements two Spend Permissions actions in both EvmWallet and SmartWallet:

  • list_spend_permissions
  • use_spend_permissions

Tests

Setup:

  1. Used the createSpendPermission example script to create a spend permission for my Agent's wallet.

Transcript of chat with Vercel AI Chatbot

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_smart_wallet_provider
- **Address:** 0xe1D1D37231799d5784b12b0b53bB2866a99e8C18
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.005** tokens. If you need any further assistance, feel free to ask!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000 tokens
- **Period:** 2,592,000 seconds (30 days)
- **Start:** 1754666025 (Unix timestamp)
- **End:** 281474976710655 (Unix timestamp)
If you need further assistance, let me know!
-------------------
Prompt: use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Successfully spent **5000 tokens** using the spend permission granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction status is currently broadcast. If you need any further assistance, feel free to ask!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.01 tokens**. If you need any further assistance, let me know!
-------------------

Transcript of chat with Vercel AI Chatbot modified to use EVM Server Wallet

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_evm_wallet_provider
- **Address:** 0x81791fddB6fC4397DcE3E1031A159c2636A487Df
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000
- **Period:** 2,592,000 seconds (30 days)
- **Start Time:** 1754687882
- **End Time:** 281474976710655
If you need further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0**. If you need any further assistance, let me know!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
-------------------
Prompt: faucet some eth
faucet some eth
I have successfully received ETH from the faucet. The transaction hash is: **0x390b1ce76cc346dfa5a0fd39ce13d03559567b835e8806eea6ae0b3be956fd09**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
I have successfully used 5000 tokens from the spend permission granted by `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction hash is: **0x8262653528f58176910163e21a8dddf94d7b040b42485fba6f052d628af603e4**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0.005**. If you need any further assistance, let me know!
-------------------

Note: There was a slight hiccup where the agent seemed to not respond after the first time requesting to use the spend permission. This is because it didn't have funds to cover gas. The reason it didn't print anything is because the action was throwing an error instead of returning a string – this has since been fixed.

Checklist

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

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

@linear

linearBot commented Aug 8, 2025

Copy link
Copy Markdown

@cb-heimdall

cb-heimdall commented Aug 8, 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 action provider New action provider wallet provider New wallet provider example New example agent typescript labels Aug 8, 2025
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Aug 8, 2025
@0xRAG
0xRAGforce-pushed the AGENT-329 branch 3 times, most recently from b8a30ca to 280d0c3CompareAugust 8, 2025 21:47
@0xRAG
0xRAG marked this pull request as ready for review August 8, 2025 21:51
@0xRAG
0xRAG requested a review from murrlincoln as a code ownerAugust 8, 2025 21:51
* A wallet provider that uses the Coinbase CDP SDK smart wallets.
*/
export class CdpSmartWalletProvider extends EvmWalletProvider implements WalletProviderWithClient {
public smartAccount: EvmSmartAccount;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Personally I think this is fine because the smartAccount provides lots of convenience methods, in particular .useSpendPermission which is used in this PR. Other convenience methods may be used in future actions (like .swap – cc @phdargen re: fix: swap api)

/**
* Lists spend permissions for a smart account.
*
* @param walletProvider - The server wallet provider to use for listing permissions.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

maybe we add context on how these spend permissions can be created?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Agreed. Will follow up with Ryan and fast-follow with the info

@CarsonRoscoe
CarsonRoscoe merged commit bc3d1d5 into mainAug 9, 2025
30 checks passed
@CarsonRoscoe
CarsonRoscoe deleted the AGENT-329 branch August 9, 2025 15:27
@phdargenphdargen mentioned this pull request Aug 12, 2025
12 tasks
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 documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

5 participants

@0xRAG@cb-heimdall@CarsonRoscoe@murrlincoln@jazz-cb
, '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

feat(typescript): add ListSpendPermissions and UseSpendPermissions - #818

Merged
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329
Aug 9, 2025
Merged

feat(typescript): add ListSpendPermissions and UseSpendPermissions#818
CarsonRoscoe merged 1 commit into
mainfrom
AGENT-329

Conversation

@0xRAG

@0xRAG0xRAG commented Aug 8, 2025

Copy link
Copy Markdown
Contributor

Description

This PR implements two Spend Permissions actions in both EvmWallet and SmartWallet:

  • list_spend_permissions
  • use_spend_permissions

Tests

Setup:

  1. Used the createSpendPermission example script to create a spend permission for my Agent's wallet.

Transcript of chat with Vercel AI Chatbot

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_smart_wallet_provider
- **Address:** 0xe1D1D37231799d5784b12b0b53bB2866a99e8C18
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.005** tokens. If you need any further assistance, feel free to ask!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000 tokens
- **Period:** 2,592,000 seconds (30 days)
- **Start:** 1754666025 (Unix timestamp)
- **End:** 281474976710655 (Unix timestamp)
If you need further assistance, let me know!
-------------------
Prompt: use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of the spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Successfully spent **5000 tokens** using the spend permission granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction status is currently broadcast. If you need any further assistance, feel free to ask!
-------------------
Prompt: print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
print balance of erc20 token with address 0x036CbD53842c5426634e7929541eC2318f3dCF7e
The balance of the ERC20 token with address `0x036CbD53842c5426634e7929541eC2318f3dCF7e` is **0.01 tokens**. If you need any further assistance, let me know!
-------------------

Transcript of chat with Vercel AI Chatbot modified to use EVM Server Wallet

Prompt: print wallet details
print wallet details
Here are your wallet details:
- **Provider:** cdp_evm_wallet_provider
- **Address:** 0x81791fddB6fC4397DcE3E1031A159c2636A487Df
- **Network:**
- **Protocol Family:** EVM
- **Network ID:** base-sepolia
- **Chain ID:** 84532
- **Native Balance:** 0 WEI
If you need any further assistance, let me know!
-------------------
Prompt: list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
list spend permissions granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
Here are the spend permissions granted by the smart account `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`:
1. **Token:** `0x036cbd53842c5426634e7929541ec2318f3dcf7e`
- **Allowance:** 10,000
- **Period:** 2,592,000 seconds (30 days)
- **Start Time:** 1754687882
- **End Time:** 281474976710655
If you need further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0**. If you need any further assistance, let me know!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
-------------------
Prompt: faucet some eth
faucet some eth
I have successfully received ETH from the faucet. The transaction hash is: **0x390b1ce76cc346dfa5a0fd39ce13d03559567b835e8806eea6ae0b3be956fd09**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
use 5000 of spend permission granted by 0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28
I have successfully used 5000 tokens from the spend permission granted by `0x2017C472CeB2f9A8Bb3d909B0E2ADD46805dDd28`. The transaction hash is: **0x8262653528f58176910163e21a8dddf94d7b040b42485fba6f052d628af603e4**.
If you need any further assistance, feel free to ask!
-------------------
Prompt: print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
print erc20 balance of token 0x036cbd53842c5426634e7929541ec2318f3dcf7e
The ERC20 balance of the token `0x036cbd53842c5426634e7929541ec2318f3dcf7e` is **0.005**. If you need any further assistance, let me know!
-------------------

Note: There was a slight hiccup where the agent seemed to not respond after the first time requesting to use the spend permission. This is because it didn't have funds to cover gas. The reason it didn't print anything is because the action was throwing an error instead of returning a string – this has since been fixed.

Checklist

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

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

@linear

linearBot commented Aug 8, 2025

Copy link
Copy Markdown

@cb-heimdall

cb-heimdall commented Aug 8, 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 action provider New action provider wallet provider New wallet provider example New example agent typescript labels Aug 8, 2025
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Aug 8, 2025
@0xRAG
0xRAGforce-pushed the AGENT-329 branch 3 times, most recently from b8a30ca to 280d0c3CompareAugust 8, 2025 21:47
@0xRAG
0xRAG marked this pull request as ready for review August 8, 2025 21:51
@0xRAG
0xRAG requested a review from murrlincoln as a code ownerAugust 8, 2025 21:51
* A wallet provider that uses the Coinbase CDP SDK smart wallets.
*/
export class CdpSmartWalletProvider extends EvmWalletProvider implements WalletProviderWithClient {
public smartAccount: EvmSmartAccount;

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Personally I think this is fine because the smartAccount provides lots of convenience methods, in particular .useSpendPermission which is used in this PR. Other convenience methods may be used in future actions (like .swap – cc @phdargen re: fix: swap api)

/**
* Lists spend permissions for a smart account.
*
* @param walletProvider - The server wallet provider to use for listing permissions.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

maybe we add context on how these spend permissions can be created?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Agreed. Will follow up with Ryan and fast-follow with the info

@CarsonRoscoe
CarsonRoscoe merged commit bc3d1d5 into mainAug 9, 2025
30 checks passed
@CarsonRoscoe
CarsonRoscoe deleted the AGENT-329 branch August 9, 2025 15:27
@phdargenphdargen mentioned this pull request Aug 12, 2025
12 tasks
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 documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

5 participants

@0xRAG@cb-heimdall@CarsonRoscoe@murrlincoln@jazz-cb