feat:trades via 0x - #681

Merged
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts
Sep 2, 2025
Merged

feat:trades via 0x#681
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts

Conversation

@phdargen

Copy link
Copy Markdown
Contributor

Description

Added 0x Protocol support for token swaps on EVM networks

New ZeroXActionProvider:

  • get_swap_price_quote_from_0x: fetches price quote for token swaps
  • execute_swap_on_0x: executes token swaps with automatic permit2 approvals if needed
  • Supports native ETH and ERC20 tokens
  • requires 0x API key: https://0x.org/docs/

Tests

Chatbot: typescript/examples/langchain-cdp-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: get quote for swapping 0.001 ETH (0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee) to USDC (0x833589fcd6edb6e08f4c7c32d4f71b54bda02913) -------------------
{"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.589364","minBuyAmount":"1.573522","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.000007152843753845","issues":{"allowance":null,"balance":null,"simulationIncomplete":false,"invalidSourcesPassed":[]},"liquidityAvailable":true,"priceOfBuyTokenInSellToken":"0.0006291824906063054","priceOfSellTokenInBuyToken":"1589.364"}
-------------------
The quote for swapping 0.001 ETH to USDC is as follows:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.589364 USDC
- **Minimum Buy Amount**: 1.573522 USDC
- **Total Network Fee**: 0.000007152843753845 ETH
- **Price of USDC in ETH**: 0.0006291824906063054 ETH per USDC
- **Price of ETH in USDC**: 1589.364 USDC per ETH
Liquidity is available for this swap. Would you like to proceed with the swap?
-------------------
Prompt: yes swap it
-------------------
{"success":true,"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.590409","minBuyAmount":"1.574577","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.0000031379987515","priceOfBuyTokenInSellToken":"0.0006287690776397769","priceOfSellTokenInBuyToken":"1590.4089999999999","permit2ApprovalTxHash":null,"swapTxHash":"0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.590409 USDC
- **Minimum Buy Amount**: 1.574577 USDC
- **Total Network Fee**: 0.0000031379987515 ETH
- **Price of USDC in ETH**: 0.0006287690776397769 ETH per USDC
- **Price of ETH in USDC**: 1590.409 USDC per ETH
- **Transaction Hash**: [0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb](https://basescan.org//tx/0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb)
If you need anything else, feel free to ask!
-------------------
Prompt: swap 1 USDC to ETH
-------------------
{"success":true,"sellAmount":"1","sellToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","buyAmount":"0.000626747268589479","minBuyAmount":"0.0006204797958942","buyToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","totalNetworkFeeInETH":"0.000003327900437011","priceOfBuyTokenInSellToken":"1595.5394624224562","priceOfSellTokenInBuyToken":"0.000626747268589479","permit2ApprovalTxHash":"0x379e20d8d582c5b093c12e645df7fcfdc0052daf398d791cd287e92731581d18","swapTxHash":"0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 1 USDC
- **Estimated Buy Amount**: 0.000626747268589479 ETH
- **Minimum Buy Amount**: 0.0006204797958942 ETH
- **Total Network Fee**: 0.000003327900437011 ETH
- **Price of ETH in USDC**: 1595.5394624224562 USDC per ETH
- **Price of USDC in ETH**: 0.000626747268589479 ETH per USDC
- **Transaction Hash**: [0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440](https://basescan.org//tx/0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440)

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 Apr 18, 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 example New example agent typescript labels Apr 18, 2025
@phdargenphdargen changed the title feat:swaps via 0xfeat:trades via 0xApr 18, 2025
@github-actionsgithub-actionsBot removed the example New example agent label Apr 18, 2025
@phdargen
phdargenforce-pushed the zeroX-ts branch 3 times, most recently from 4b80b89 to 6d632a8CompareAugust 20, 2025 19:43
@CarsonRoscoe
CarsonRoscoe merged commit 88f6177 into coinbase:mainSep 2, 2025
26 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.

3 participants

@phdargen@cb-heimdall@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

feat:trades via 0x - #681

Merged
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts
Sep 2, 2025
Merged

feat:trades via 0x#681
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts

Conversation

@phdargen

Copy link
Copy Markdown
Contributor

Description

Added 0x Protocol support for token swaps on EVM networks

New ZeroXActionProvider:

  • get_swap_price_quote_from_0x: fetches price quote for token swaps
  • execute_swap_on_0x: executes token swaps with automatic permit2 approvals if needed
  • Supports native ETH and ERC20 tokens
  • requires 0x API key: https://0x.org/docs/

Tests

Chatbot: typescript/examples/langchain-cdp-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: get quote for swapping 0.001 ETH (0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee) to USDC (0x833589fcd6edb6e08f4c7c32d4f71b54bda02913) -------------------
{"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.589364","minBuyAmount":"1.573522","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.000007152843753845","issues":{"allowance":null,"balance":null,"simulationIncomplete":false,"invalidSourcesPassed":[]},"liquidityAvailable":true,"priceOfBuyTokenInSellToken":"0.0006291824906063054","priceOfSellTokenInBuyToken":"1589.364"}
-------------------
The quote for swapping 0.001 ETH to USDC is as follows:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.589364 USDC
- **Minimum Buy Amount**: 1.573522 USDC
- **Total Network Fee**: 0.000007152843753845 ETH
- **Price of USDC in ETH**: 0.0006291824906063054 ETH per USDC
- **Price of ETH in USDC**: 1589.364 USDC per ETH
Liquidity is available for this swap. Would you like to proceed with the swap?
-------------------
Prompt: yes swap it
-------------------
{"success":true,"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.590409","minBuyAmount":"1.574577","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.0000031379987515","priceOfBuyTokenInSellToken":"0.0006287690776397769","priceOfSellTokenInBuyToken":"1590.4089999999999","permit2ApprovalTxHash":null,"swapTxHash":"0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.590409 USDC
- **Minimum Buy Amount**: 1.574577 USDC
- **Total Network Fee**: 0.0000031379987515 ETH
- **Price of USDC in ETH**: 0.0006287690776397769 ETH per USDC
- **Price of ETH in USDC**: 1590.409 USDC per ETH
- **Transaction Hash**: [0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb](https://basescan.org//tx/0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb)
If you need anything else, feel free to ask!
-------------------
Prompt: swap 1 USDC to ETH
-------------------
{"success":true,"sellAmount":"1","sellToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","buyAmount":"0.000626747268589479","minBuyAmount":"0.0006204797958942","buyToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","totalNetworkFeeInETH":"0.000003327900437011","priceOfBuyTokenInSellToken":"1595.5394624224562","priceOfSellTokenInBuyToken":"0.000626747268589479","permit2ApprovalTxHash":"0x379e20d8d582c5b093c12e645df7fcfdc0052daf398d791cd287e92731581d18","swapTxHash":"0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 1 USDC
- **Estimated Buy Amount**: 0.000626747268589479 ETH
- **Minimum Buy Amount**: 0.0006204797958942 ETH
- **Total Network Fee**: 0.000003327900437011 ETH
- **Price of ETH in USDC**: 1595.5394624224562 USDC per ETH
- **Price of USDC in ETH**: 0.000626747268589479 ETH per USDC
- **Transaction Hash**: [0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440](https://basescan.org//tx/0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440)

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 Apr 18, 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 example New example agent typescript labels Apr 18, 2025
@phdargenphdargen changed the title feat:swaps via 0xfeat:trades via 0xApr 18, 2025
@github-actionsgithub-actionsBot removed the example New example agent label Apr 18, 2025
@phdargen
phdargenforce-pushed the zeroX-ts branch 3 times, most recently from 4b80b89 to 6d632a8CompareAugust 20, 2025 19:43
@CarsonRoscoe
CarsonRoscoe merged commit 88f6177 into coinbase:mainSep 2, 2025
26 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.

3 participants

@phdargen@cb-heimdall@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

feat:trades via 0x - #681

Merged
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts
Sep 2, 2025
Merged

feat:trades via 0x#681
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts

Conversation

@phdargen

Copy link
Copy Markdown
Contributor

Description

Added 0x Protocol support for token swaps on EVM networks

New ZeroXActionProvider:

  • get_swap_price_quote_from_0x: fetches price quote for token swaps
  • execute_swap_on_0x: executes token swaps with automatic permit2 approvals if needed
  • Supports native ETH and ERC20 tokens
  • requires 0x API key: https://0x.org/docs/

Tests

Chatbot: typescript/examples/langchain-cdp-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: get quote for swapping 0.001 ETH (0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee) to USDC (0x833589fcd6edb6e08f4c7c32d4f71b54bda02913) -------------------
{"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.589364","minBuyAmount":"1.573522","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.000007152843753845","issues":{"allowance":null,"balance":null,"simulationIncomplete":false,"invalidSourcesPassed":[]},"liquidityAvailable":true,"priceOfBuyTokenInSellToken":"0.0006291824906063054","priceOfSellTokenInBuyToken":"1589.364"}
-------------------
The quote for swapping 0.001 ETH to USDC is as follows:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.589364 USDC
- **Minimum Buy Amount**: 1.573522 USDC
- **Total Network Fee**: 0.000007152843753845 ETH
- **Price of USDC in ETH**: 0.0006291824906063054 ETH per USDC
- **Price of ETH in USDC**: 1589.364 USDC per ETH
Liquidity is available for this swap. Would you like to proceed with the swap?
-------------------
Prompt: yes swap it
-------------------
{"success":true,"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.590409","minBuyAmount":"1.574577","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.0000031379987515","priceOfBuyTokenInSellToken":"0.0006287690776397769","priceOfSellTokenInBuyToken":"1590.4089999999999","permit2ApprovalTxHash":null,"swapTxHash":"0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.590409 USDC
- **Minimum Buy Amount**: 1.574577 USDC
- **Total Network Fee**: 0.0000031379987515 ETH
- **Price of USDC in ETH**: 0.0006287690776397769 ETH per USDC
- **Price of ETH in USDC**: 1590.409 USDC per ETH
- **Transaction Hash**: [0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb](https://basescan.org//tx/0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb)
If you need anything else, feel free to ask!
-------------------
Prompt: swap 1 USDC to ETH
-------------------
{"success":true,"sellAmount":"1","sellToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","buyAmount":"0.000626747268589479","minBuyAmount":"0.0006204797958942","buyToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","totalNetworkFeeInETH":"0.000003327900437011","priceOfBuyTokenInSellToken":"1595.5394624224562","priceOfSellTokenInBuyToken":"0.000626747268589479","permit2ApprovalTxHash":"0x379e20d8d582c5b093c12e645df7fcfdc0052daf398d791cd287e92731581d18","swapTxHash":"0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 1 USDC
- **Estimated Buy Amount**: 0.000626747268589479 ETH
- **Minimum Buy Amount**: 0.0006204797958942 ETH
- **Total Network Fee**: 0.000003327900437011 ETH
- **Price of ETH in USDC**: 1595.5394624224562 USDC per ETH
- **Price of USDC in ETH**: 0.000626747268589479 ETH per USDC
- **Transaction Hash**: [0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440](https://basescan.org//tx/0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440)

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 Apr 18, 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 example New example agent typescript labels Apr 18, 2025
@phdargenphdargen changed the title feat:swaps via 0xfeat:trades via 0xApr 18, 2025
@github-actionsgithub-actionsBot removed the example New example agent label Apr 18, 2025
@phdargen
phdargenforce-pushed the zeroX-ts branch 3 times, most recently from 4b80b89 to 6d632a8CompareAugust 20, 2025 19:43
@CarsonRoscoe
CarsonRoscoe merged commit 88f6177 into coinbase:mainSep 2, 2025
26 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.

3 participants

@phdargen@cb-heimdall@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

feat:trades via 0x - #681

Merged
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts
Sep 2, 2025
Merged

feat:trades via 0x#681
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts

Conversation

@phdargen

Copy link
Copy Markdown
Contributor

Description

Added 0x Protocol support for token swaps on EVM networks

New ZeroXActionProvider:

  • get_swap_price_quote_from_0x: fetches price quote for token swaps
  • execute_swap_on_0x: executes token swaps with automatic permit2 approvals if needed
  • Supports native ETH and ERC20 tokens
  • requires 0x API key: https://0x.org/docs/

Tests

Chatbot: typescript/examples/langchain-cdp-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: get quote for swapping 0.001 ETH (0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee) to USDC (0x833589fcd6edb6e08f4c7c32d4f71b54bda02913) -------------------
{"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.589364","minBuyAmount":"1.573522","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.000007152843753845","issues":{"allowance":null,"balance":null,"simulationIncomplete":false,"invalidSourcesPassed":[]},"liquidityAvailable":true,"priceOfBuyTokenInSellToken":"0.0006291824906063054","priceOfSellTokenInBuyToken":"1589.364"}
-------------------
The quote for swapping 0.001 ETH to USDC is as follows:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.589364 USDC
- **Minimum Buy Amount**: 1.573522 USDC
- **Total Network Fee**: 0.000007152843753845 ETH
- **Price of USDC in ETH**: 0.0006291824906063054 ETH per USDC
- **Price of ETH in USDC**: 1589.364 USDC per ETH
Liquidity is available for this swap. Would you like to proceed with the swap?
-------------------
Prompt: yes swap it
-------------------
{"success":true,"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.590409","minBuyAmount":"1.574577","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.0000031379987515","priceOfBuyTokenInSellToken":"0.0006287690776397769","priceOfSellTokenInBuyToken":"1590.4089999999999","permit2ApprovalTxHash":null,"swapTxHash":"0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.590409 USDC
- **Minimum Buy Amount**: 1.574577 USDC
- **Total Network Fee**: 0.0000031379987515 ETH
- **Price of USDC in ETH**: 0.0006287690776397769 ETH per USDC
- **Price of ETH in USDC**: 1590.409 USDC per ETH
- **Transaction Hash**: [0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb](https://basescan.org//tx/0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb)
If you need anything else, feel free to ask!
-------------------
Prompt: swap 1 USDC to ETH
-------------------
{"success":true,"sellAmount":"1","sellToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","buyAmount":"0.000626747268589479","minBuyAmount":"0.0006204797958942","buyToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","totalNetworkFeeInETH":"0.000003327900437011","priceOfBuyTokenInSellToken":"1595.5394624224562","priceOfSellTokenInBuyToken":"0.000626747268589479","permit2ApprovalTxHash":"0x379e20d8d582c5b093c12e645df7fcfdc0052daf398d791cd287e92731581d18","swapTxHash":"0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 1 USDC
- **Estimated Buy Amount**: 0.000626747268589479 ETH
- **Minimum Buy Amount**: 0.0006204797958942 ETH
- **Total Network Fee**: 0.000003327900437011 ETH
- **Price of ETH in USDC**: 1595.5394624224562 USDC per ETH
- **Price of USDC in ETH**: 0.000626747268589479 ETH per USDC
- **Transaction Hash**: [0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440](https://basescan.org//tx/0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440)

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 Apr 18, 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 example New example agent typescript labels Apr 18, 2025
@phdargenphdargen changed the title feat:swaps via 0xfeat:trades via 0xApr 18, 2025
@github-actionsgithub-actionsBot removed the example New example agent label Apr 18, 2025
@phdargen
phdargenforce-pushed the zeroX-ts branch 3 times, most recently from 4b80b89 to 6d632a8CompareAugust 20, 2025 19:43
@CarsonRoscoe
CarsonRoscoe merged commit 88f6177 into coinbase:mainSep 2, 2025
26 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.

3 participants

@phdargen@cb-heimdall@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

feat:trades via 0x - #681

Merged
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts
Sep 2, 2025
Merged

feat:trades via 0x#681
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts

Conversation

@phdargen

Copy link
Copy Markdown
Contributor

Description

Added 0x Protocol support for token swaps on EVM networks

New ZeroXActionProvider:

  • get_swap_price_quote_from_0x: fetches price quote for token swaps
  • execute_swap_on_0x: executes token swaps with automatic permit2 approvals if needed
  • Supports native ETH and ERC20 tokens
  • requires 0x API key: https://0x.org/docs/

Tests

Chatbot: typescript/examples/langchain-cdp-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: get quote for swapping 0.001 ETH (0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee) to USDC (0x833589fcd6edb6e08f4c7c32d4f71b54bda02913) -------------------
{"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.589364","minBuyAmount":"1.573522","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.000007152843753845","issues":{"allowance":null,"balance":null,"simulationIncomplete":false,"invalidSourcesPassed":[]},"liquidityAvailable":true,"priceOfBuyTokenInSellToken":"0.0006291824906063054","priceOfSellTokenInBuyToken":"1589.364"}
-------------------
The quote for swapping 0.001 ETH to USDC is as follows:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.589364 USDC
- **Minimum Buy Amount**: 1.573522 USDC
- **Total Network Fee**: 0.000007152843753845 ETH
- **Price of USDC in ETH**: 0.0006291824906063054 ETH per USDC
- **Price of ETH in USDC**: 1589.364 USDC per ETH
Liquidity is available for this swap. Would you like to proceed with the swap?
-------------------
Prompt: yes swap it
-------------------
{"success":true,"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.590409","minBuyAmount":"1.574577","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.0000031379987515","priceOfBuyTokenInSellToken":"0.0006287690776397769","priceOfSellTokenInBuyToken":"1590.4089999999999","permit2ApprovalTxHash":null,"swapTxHash":"0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.590409 USDC
- **Minimum Buy Amount**: 1.574577 USDC
- **Total Network Fee**: 0.0000031379987515 ETH
- **Price of USDC in ETH**: 0.0006287690776397769 ETH per USDC
- **Price of ETH in USDC**: 1590.409 USDC per ETH
- **Transaction Hash**: [0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb](https://basescan.org//tx/0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb)
If you need anything else, feel free to ask!
-------------------
Prompt: swap 1 USDC to ETH
-------------------
{"success":true,"sellAmount":"1","sellToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","buyAmount":"0.000626747268589479","minBuyAmount":"0.0006204797958942","buyToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","totalNetworkFeeInETH":"0.000003327900437011","priceOfBuyTokenInSellToken":"1595.5394624224562","priceOfSellTokenInBuyToken":"0.000626747268589479","permit2ApprovalTxHash":"0x379e20d8d582c5b093c12e645df7fcfdc0052daf398d791cd287e92731581d18","swapTxHash":"0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 1 USDC
- **Estimated Buy Amount**: 0.000626747268589479 ETH
- **Minimum Buy Amount**: 0.0006204797958942 ETH
- **Total Network Fee**: 0.000003327900437011 ETH
- **Price of ETH in USDC**: 1595.5394624224562 USDC per ETH
- **Price of USDC in ETH**: 0.000626747268589479 ETH per USDC
- **Transaction Hash**: [0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440](https://basescan.org//tx/0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440)

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 Apr 18, 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 example New example agent typescript labels Apr 18, 2025
@phdargenphdargen changed the title feat:swaps via 0xfeat:trades via 0xApr 18, 2025
@github-actionsgithub-actionsBot removed the example New example agent label Apr 18, 2025
@phdargen
phdargenforce-pushed the zeroX-ts branch 3 times, most recently from 4b80b89 to 6d632a8CompareAugust 20, 2025 19:43
@CarsonRoscoe
CarsonRoscoe merged commit 88f6177 into coinbase:mainSep 2, 2025
26 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.

3 participants

@phdargen@cb-heimdall@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

feat:trades via 0x - #681

Merged
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts
Sep 2, 2025
Merged

feat:trades via 0x#681
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts

Conversation

@phdargen

Copy link
Copy Markdown
Contributor

Description

Added 0x Protocol support for token swaps on EVM networks

New ZeroXActionProvider:

  • get_swap_price_quote_from_0x: fetches price quote for token swaps
  • execute_swap_on_0x: executes token swaps with automatic permit2 approvals if needed
  • Supports native ETH and ERC20 tokens
  • requires 0x API key: https://0x.org/docs/

Tests

Chatbot: typescript/examples/langchain-cdp-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: get quote for swapping 0.001 ETH (0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee) to USDC (0x833589fcd6edb6e08f4c7c32d4f71b54bda02913) -------------------
{"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.589364","minBuyAmount":"1.573522","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.000007152843753845","issues":{"allowance":null,"balance":null,"simulationIncomplete":false,"invalidSourcesPassed":[]},"liquidityAvailable":true,"priceOfBuyTokenInSellToken":"0.0006291824906063054","priceOfSellTokenInBuyToken":"1589.364"}
-------------------
The quote for swapping 0.001 ETH to USDC is as follows:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.589364 USDC
- **Minimum Buy Amount**: 1.573522 USDC
- **Total Network Fee**: 0.000007152843753845 ETH
- **Price of USDC in ETH**: 0.0006291824906063054 ETH per USDC
- **Price of ETH in USDC**: 1589.364 USDC per ETH
Liquidity is available for this swap. Would you like to proceed with the swap?
-------------------
Prompt: yes swap it
-------------------
{"success":true,"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.590409","minBuyAmount":"1.574577","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.0000031379987515","priceOfBuyTokenInSellToken":"0.0006287690776397769","priceOfSellTokenInBuyToken":"1590.4089999999999","permit2ApprovalTxHash":null,"swapTxHash":"0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.590409 USDC
- **Minimum Buy Amount**: 1.574577 USDC
- **Total Network Fee**: 0.0000031379987515 ETH
- **Price of USDC in ETH**: 0.0006287690776397769 ETH per USDC
- **Price of ETH in USDC**: 1590.409 USDC per ETH
- **Transaction Hash**: [0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb](https://basescan.org//tx/0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb)
If you need anything else, feel free to ask!
-------------------
Prompt: swap 1 USDC to ETH
-------------------
{"success":true,"sellAmount":"1","sellToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","buyAmount":"0.000626747268589479","minBuyAmount":"0.0006204797958942","buyToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","totalNetworkFeeInETH":"0.000003327900437011","priceOfBuyTokenInSellToken":"1595.5394624224562","priceOfSellTokenInBuyToken":"0.000626747268589479","permit2ApprovalTxHash":"0x379e20d8d582c5b093c12e645df7fcfdc0052daf398d791cd287e92731581d18","swapTxHash":"0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 1 USDC
- **Estimated Buy Amount**: 0.000626747268589479 ETH
- **Minimum Buy Amount**: 0.0006204797958942 ETH
- **Total Network Fee**: 0.000003327900437011 ETH
- **Price of ETH in USDC**: 1595.5394624224562 USDC per ETH
- **Price of USDC in ETH**: 0.000626747268589479 ETH per USDC
- **Transaction Hash**: [0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440](https://basescan.org//tx/0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440)

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 Apr 18, 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 example New example agent typescript labels Apr 18, 2025
@phdargenphdargen changed the title feat:swaps via 0xfeat:trades via 0xApr 18, 2025
@github-actionsgithub-actionsBot removed the example New example agent label Apr 18, 2025
@phdargen
phdargenforce-pushed the zeroX-ts branch 3 times, most recently from 4b80b89 to 6d632a8CompareAugust 20, 2025 19:43
@CarsonRoscoe
CarsonRoscoe merged commit 88f6177 into coinbase:mainSep 2, 2025
26 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.

3 participants

@phdargen@cb-heimdall@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

feat:trades via 0x - #681

Merged
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts
Sep 2, 2025
Merged

feat:trades via 0x#681
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts

Conversation

@phdargen

Copy link
Copy Markdown
Contributor

Description

Added 0x Protocol support for token swaps on EVM networks

New ZeroXActionProvider:

  • get_swap_price_quote_from_0x: fetches price quote for token swaps
  • execute_swap_on_0x: executes token swaps with automatic permit2 approvals if needed
  • Supports native ETH and ERC20 tokens
  • requires 0x API key: https://0x.org/docs/

Tests

Chatbot: typescript/examples/langchain-cdp-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: get quote for swapping 0.001 ETH (0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee) to USDC (0x833589fcd6edb6e08f4c7c32d4f71b54bda02913) -------------------
{"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.589364","minBuyAmount":"1.573522","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.000007152843753845","issues":{"allowance":null,"balance":null,"simulationIncomplete":false,"invalidSourcesPassed":[]},"liquidityAvailable":true,"priceOfBuyTokenInSellToken":"0.0006291824906063054","priceOfSellTokenInBuyToken":"1589.364"}
-------------------
The quote for swapping 0.001 ETH to USDC is as follows:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.589364 USDC
- **Minimum Buy Amount**: 1.573522 USDC
- **Total Network Fee**: 0.000007152843753845 ETH
- **Price of USDC in ETH**: 0.0006291824906063054 ETH per USDC
- **Price of ETH in USDC**: 1589.364 USDC per ETH
Liquidity is available for this swap. Would you like to proceed with the swap?
-------------------
Prompt: yes swap it
-------------------
{"success":true,"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.590409","minBuyAmount":"1.574577","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.0000031379987515","priceOfBuyTokenInSellToken":"0.0006287690776397769","priceOfSellTokenInBuyToken":"1590.4089999999999","permit2ApprovalTxHash":null,"swapTxHash":"0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.590409 USDC
- **Minimum Buy Amount**: 1.574577 USDC
- **Total Network Fee**: 0.0000031379987515 ETH
- **Price of USDC in ETH**: 0.0006287690776397769 ETH per USDC
- **Price of ETH in USDC**: 1590.409 USDC per ETH
- **Transaction Hash**: [0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb](https://basescan.org//tx/0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb)
If you need anything else, feel free to ask!
-------------------
Prompt: swap 1 USDC to ETH
-------------------
{"success":true,"sellAmount":"1","sellToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","buyAmount":"0.000626747268589479","minBuyAmount":"0.0006204797958942","buyToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","totalNetworkFeeInETH":"0.000003327900437011","priceOfBuyTokenInSellToken":"1595.5394624224562","priceOfSellTokenInBuyToken":"0.000626747268589479","permit2ApprovalTxHash":"0x379e20d8d582c5b093c12e645df7fcfdc0052daf398d791cd287e92731581d18","swapTxHash":"0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 1 USDC
- **Estimated Buy Amount**: 0.000626747268589479 ETH
- **Minimum Buy Amount**: 0.0006204797958942 ETH
- **Total Network Fee**: 0.000003327900437011 ETH
- **Price of ETH in USDC**: 1595.5394624224562 USDC per ETH
- **Price of USDC in ETH**: 0.000626747268589479 ETH per USDC
- **Transaction Hash**: [0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440](https://basescan.org//tx/0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440)

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 Apr 18, 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 example New example agent typescript labels Apr 18, 2025
@phdargenphdargen changed the title feat:swaps via 0xfeat:trades via 0xApr 18, 2025
@github-actionsgithub-actionsBot removed the example New example agent label Apr 18, 2025
@phdargen
phdargenforce-pushed the zeroX-ts branch 3 times, most recently from 4b80b89 to 6d632a8CompareAugust 20, 2025 19:43
@CarsonRoscoe
CarsonRoscoe merged commit 88f6177 into coinbase:mainSep 2, 2025
26 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.

3 participants

@phdargen@cb-heimdall@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

feat:trades via 0x - #681

Merged
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts
Sep 2, 2025
Merged

feat:trades via 0x#681
CarsonRoscoe merged 5 commits into
coinbase:mainfrom
phdargen:zeroX-ts

Conversation

@phdargen

Copy link
Copy Markdown
Contributor

Description

Added 0x Protocol support for token swaps on EVM networks

New ZeroXActionProvider:

  • get_swap_price_quote_from_0x: fetches price quote for token swaps
  • execute_swap_on_0x: executes token swaps with automatic permit2 approvals if needed
  • Supports native ETH and ERC20 tokens
  • requires 0x API key: https://0x.org/docs/

Tests

Chatbot: typescript/examples/langchain-cdp-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: get quote for swapping 0.001 ETH (0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee) to USDC (0x833589fcd6edb6e08f4c7c32d4f71b54bda02913) -------------------
{"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.589364","minBuyAmount":"1.573522","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.000007152843753845","issues":{"allowance":null,"balance":null,"simulationIncomplete":false,"invalidSourcesPassed":[]},"liquidityAvailable":true,"priceOfBuyTokenInSellToken":"0.0006291824906063054","priceOfSellTokenInBuyToken":"1589.364"}
-------------------
The quote for swapping 0.001 ETH to USDC is as follows:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.589364 USDC
- **Minimum Buy Amount**: 1.573522 USDC
- **Total Network Fee**: 0.000007152843753845 ETH
- **Price of USDC in ETH**: 0.0006291824906063054 ETH per USDC
- **Price of ETH in USDC**: 1589.364 USDC per ETH
Liquidity is available for this swap. Would you like to proceed with the swap?
-------------------
Prompt: yes swap it
-------------------
{"success":true,"sellAmount":"0.001","sellToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","buyAmount":"1.590409","minBuyAmount":"1.574577","buyToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","totalNetworkFeeInETH":"0.0000031379987515","priceOfBuyTokenInSellToken":"0.0006287690776397769","priceOfSellTokenInBuyToken":"1590.4089999999999","permit2ApprovalTxHash":null,"swapTxHash":"0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 0.001 ETH
- **Estimated Buy Amount**: 1.590409 USDC
- **Minimum Buy Amount**: 1.574577 USDC
- **Total Network Fee**: 0.0000031379987515 ETH
- **Price of USDC in ETH**: 0.0006287690776397769 ETH per USDC
- **Price of ETH in USDC**: 1590.409 USDC per ETH
- **Transaction Hash**: [0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb](https://basescan.org//tx/0xce83863f396bd893324b61147a875ad1e2ea157e50638a12854aa3b87b2f3acb)
If you need anything else, feel free to ask!
-------------------
Prompt: swap 1 USDC to ETH
-------------------
{"success":true,"sellAmount":"1","sellToken":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","buyAmount":"0.000626747268589479","minBuyAmount":"0.0006204797958942","buyToken":"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","totalNetworkFeeInETH":"0.000003327900437011","priceOfBuyTokenInSellToken":"1595.5394624224562","priceOfSellTokenInBuyToken":"0.000626747268589479","permit2ApprovalTxHash":"0x379e20d8d582c5b093c12e645df7fcfdc0052daf398d791cd287e92731581d18","swapTxHash":"0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440"}
-------------------
The swap was successful! Here are the details:
- **Sell Amount**: 1 USDC
- **Estimated Buy Amount**: 0.000626747268589479 ETH
- **Minimum Buy Amount**: 0.0006204797958942 ETH
- **Total Network Fee**: 0.000003327900437011 ETH
- **Price of ETH in USDC**: 1595.5394624224562 USDC per ETH
- **Price of USDC in ETH**: 0.000626747268589479 ETH per USDC
- **Transaction Hash**: [0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440](https://basescan.org//tx/0xeddf6ba025ac81de2fe23fcb9856242527b51a001bf51643c40ecad40ef49440)

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 Apr 18, 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 example New example agent typescript labels Apr 18, 2025
@phdargenphdargen changed the title feat:swaps via 0xfeat:trades via 0xApr 18, 2025
@github-actionsgithub-actionsBot removed the example New example agent label Apr 18, 2025
@phdargen
phdargenforce-pushed the zeroX-ts branch 3 times, most recently from 4b80b89 to 6d632a8CompareAugust 20, 2025 19:43
@CarsonRoscoe
CarsonRoscoe merged commit 88f6177 into coinbase:mainSep 2, 2025
26 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.

3 participants

@phdargen@cb-heimdall@CarsonRoscoe