<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Leon Do on Medium]]></title>
        <description><![CDATA[Stories by Leon Do on Medium]]></description>
        <link>https://medium.com/@leondo?source=rss-db6f54120ca6------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*rPgmZYPJQ1gr3vvaJpu8BQ.jpeg</url>
            <title>Stories by Leon Do on Medium</title>
            <link>https://medium.com/@leondo?source=rss-db6f54120ca6------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 06 Jun 2026 03:50:22 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@leondo/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[How to Programmatically Multi-Swap a V3 DEX]]></title>
            <link>https://medium.com/coinmonks/how-to-programmatically-multi-swap-a-v3-dex-dd13a8ce1bbe?source=rss-db6f54120ca6------2</link>
            <guid isPermaLink="false">https://medium.com/p/dd13a8ce1bbe</guid>
            <category><![CDATA[uniswap-v3]]></category>
            <category><![CDATA[decentralized-exchange]]></category>
            <category><![CDATA[decentralized-finance]]></category>
            <category><![CDATA[dex-services]]></category>
            <category><![CDATA[dex]]></category>
            <dc:creator><![CDATA[Leon Do]]></dc:creator>
            <pubDate>Mon, 04 Aug 2025 19:21:59 GMT</pubDate>
            <atom:updated>2025-08-05T05:25:45.436Z</atom:updated>
            <content:encoded><![CDATA[<p>Using Viem</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5MQ7dMnRBbMlKZ-qfPi4Og.png" /></figure><h3>Overview</h3><p>Swaps can be done through a website or programmatically through a standard Uniswap V3 API interface.</p><p>Below are the requirements</p><ul><li>nodejs</li><li>viem</li></ul><p>Below is the full source code:</p><pre>import {http, createWalletClient, encodePacked} from &quot;viem&quot;;<br>import {privateKeyToAccount} from &quot;viem/accounts&quot;;<br>import {sepolia} from &quot;viem/chains&quot;;<br><br>// 0x101010e6Cc358616FB6Cc69e4443Fb54E6582F1f<br>const PRIVATE_KEY = &quot;0x6fd707ca7385cdfb0093be77c37a1d6de57566c48cc7bf6463abbe5f003be464&quot;;<br><br>// https://sepolia.etherscan.io/address/0x3bFA4769FB09eefC5a80d6E87c3B9C650f7Ae48E#code<br>const swapRouter = &quot;0x3bFA4769FB09eefC5a80d6E87c3B9C650f7Ae48E&quot;;<br><br>const walletClient = createWalletClient({<br>  account: privateKeyToAccount(PRIVATE_KEY),<br>  chain: sepolia,<br>  transport: http(),<br>});<br><br>const swapRouterAbi = [{ &quot;inputs&quot;: [ { &quot;components&quot;: [ { &quot;internalType&quot;: &quot;bytes&quot;, &quot;name&quot;: &quot;path&quot;, &quot;type&quot;: &quot;bytes&quot; }, { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;recipient&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountIn&quot;, &quot;type&quot;: &quot;uint256&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountOutMinimum&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;internalType&quot;: &quot;struct IV3SwapRouter.ExactInputParams&quot;, &quot;name&quot;: &quot;params&quot;, &quot;type&quot;: &quot;tuple&quot; } ], &quot;name&quot;: &quot;exactInput&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountOut&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;stateMutability&quot;: &quot;payable&quot;, &quot;type&quot;: &quot;function&quot; }]<br><br>// https://app.uniswap.org/positions/v3/ethereum_sepolia/201908<br>const path = encodePacked(<br>  [&quot;address&quot;, &quot;uint24&quot;, &quot;address&quot;],<br>  [<br>    &quot;0xa652ca947878766bd54813e8e9609ec35dbb2e79&quot;, // token A<br>    3000, // A -&gt; B fee (0.3%)<br>    &quot;0x7832e346ef46a888118800807b2de9240288d40e&quot;, // token B<br>  ]<br>);<br><br>walletClient<br>  .writeContract({<br>    abi: swapRouterAbi,<br>    address: swapRouter,<br>    account: walletClient.account,<br>    functionName: &quot;exactInput&quot;,<br>    args: [<br>      {<br>        path, // encoded bytes path<br>        recipient: walletClient.account.address,<br>        amountIn: 1 * 10 ** 18, // token A<br>        amountOutMinimum: 0n,<br>      },<br>    ],<br>  })<br>  .then((hash) =&gt; console.log({hash}));</pre><h3>Define Variables</h3><ul><li>PRIVATE_KEY of your wallet</li><li><a href="https://sepolia.etherscan.io/address/0x3bFA4769FB09eefC5a80d6E87c3B9C650f7Ae48E#code">swapRouter</a> address</li><li>walletClient to broadcast the transaction</li><li>swapRouterAbi to interface with the smart contract</li></ul><pre>// 0x101010e6Cc358616FB6Cc69e4443Fb54E6582F1f<br>const PRIVATE_KEY = &quot;0x6fd707ca7385cdfb0093be77c37a1d6de57566c48cc7bf6463abbe5f003be464&quot;;<br><br>// https://sepolia.etherscan.io/address/0x3bFA4769FB09eefC5a80d6E87c3B9C650f7Ae48E#code<br>const swapRouter = &quot;0x3bFA4769FB09eefC5a80d6E87c3B9C650f7Ae48E&quot;;<br><br>const walletClient = createWalletClient({<br>  account: privateKeyToAccount(PRIVATE_KEY),<br>  chain: sepolia,<br>  transport: http(),<br>});<br><br>const swapRouterAbi = [{ &quot;inputs&quot;: [ { &quot;components&quot;: [ { &quot;internalType&quot;: &quot;bytes&quot;, &quot;name&quot;: &quot;path&quot;, &quot;type&quot;: &quot;bytes&quot; }, { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;recipient&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountIn&quot;, &quot;type&quot;: &quot;uint256&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountOutMinimum&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;internalType&quot;: &quot;struct IV3SwapRouter.ExactInputParams&quot;, &quot;name&quot;: &quot;params&quot;, &quot;type&quot;: &quot;tuple&quot; } ], &quot;name&quot;: &quot;exactInput&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountOut&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;stateMutability&quot;: &quot;payable&quot;, &quot;type&quot;: &quot;function&quot; }]</pre><h3>Define Paths</h3><p>Paths can be a single hop, or multihop. In the example below, it’s doing a single hop from token A to token B.</p><pre>const path = encodePacked(<br>  [&quot;address&quot;, &quot;uint24&quot;, &quot;address&quot;],<br>  [<br>    &quot;0xa652ca947878766bd54813e8e9609ec35dbb2e79&quot;, // token A<br>    3000, // fee (0.3%)<br>    &quot;0x7832e346ef46a888118800807b2de9240288d40e&quot;, // token B<br>  ]<br>);</pre><p>You can do multihops if there’s no direct route from A → C</p><pre>const path = encodePacked(<br>  [&quot;address&quot;, &quot;uint24&quot;, &quot;address&quot;, &quot;uint24&quot;, &quot;address&quot;],<br>  [<br>    &quot;0xa652ca947878766bd54813e8e9609ec35dbb2e79&quot;, // token A<br>    3000, // A -&gt; B fee<br>    &quot;0x7832e346ef46a888118800807b2de9240288d40e&quot;, // token B<br>    3000, // B -&gt; C fee<br>    &quot;0xdAC17F958D2ee523a2206206994597C13D831ec7&quot;, // token C<br>  ]<br>);</pre><h3>Write “exactInput”</h3><p>To execute the <a href="https://docs.uniswap.org/contracts/v3/guides/swaps/multihop-swaps">multihop swap</a>, call exactInput</p><pre>walletClient<br>  .writeContract({<br>    abi: swapRouterAbi,<br>    address: swapRouter,<br>    account: walletClient.account,<br>    functionName: &quot;exactInput&quot;,<br>    args: [<br>      {<br>        path, // encoded bytes path<br>        recipient: walletClient.account.address,<br>        amountIn: 1 * 10 ** 18, // token A<br>        amountOutMinimum: 0n,<br>      },<br>    ],<br>  })<br>  .then((hash) =&gt; console.log({hash}));</pre><p>output should look like</p><pre>{<br>  hash: &#39;0x993a07efa0994a542206fbebd87674babb1d464e35cdd1a843f7c7609ff3262c&#39;<br>}</pre><h3>Approve Spending (prerequisite)</h3><p>Make sure the wallet has approved spending. This allows the swapRouter to spend token A</p><pre>const erc20Abi = [{ &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;spender&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;value&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;name&quot;: &quot;approve&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;bool&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;bool&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }]<br><br>// allow swapRouter to spend token A<br>const approveHash = await walletClient.writeContract({<br>  abi: erc20Abi,<br>  address: &quot;0xa652ca947878766bd54813e8e9609ec35dbb2e79&quot;, // token A<br>  functionName: &quot;approve&quot;,<br>  args: [swapRouter, BigInt(&quot;0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&quot;)],<br>});<br>console.log({approveHash});</pre><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=dd13a8ce1bbe" width="1" height="1" alt=""><hr><p><a href="https://medium.com/coinmonks/how-to-programmatically-multi-swap-a-v3-dex-dd13a8ce1bbe">How to Programmatically Multi-Swap a V3 DEX</a> was originally published in <a href="https://medium.com/coinmonks">Coinmonks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[0SUM & Zeeve Partner for DEX and dApp Deployment for Rollups]]></title>
            <link>https://medium.com/coinmonks/0sum-zeeve-partner-for-dex-and-dapp-deployment-for-rollups-78e157a19d93?source=rss-db6f54120ca6------2</link>
            <guid isPermaLink="false">https://medium.com/p/78e157a19d93</guid>
            <category><![CDATA[dex-development]]></category>
            <category><![CDATA[dex-development-companies]]></category>
            <category><![CDATA[uniswap-v3]]></category>
            <category><![CDATA[dex-development-services]]></category>
            <category><![CDATA[decentralized-exchange]]></category>
            <dc:creator><![CDATA[Leon Do]]></dc:creator>
            <pubDate>Wed, 26 Mar 2025 02:58:48 GMT</pubDate>
            <atom:updated>2025-03-26T06:47:59.055Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*myde9iv_L3hMlc6P_Fd4pg.png" /></figure><h3><strong>Overview</strong></h3><p><a href="https://0sum.io/">0SUM</a> announced its collaboration with <a href="https://www.zeeve.io/">Zeeve</a> on it’s product <a href="https://leondo.medium.com/dex-as-a-service-for-rollups-0b2d46859236">DEX as a Service (DaaS)</a>. This allows rollup developers to quickly deploy a DEX on any network launched using Zeeve’s <a href="https://www.zeeve.io/integrations/">Rollup as a Service</a> (RaaS).</p><h3>About Zeeve</h3><p>Zeeve builds production-grade Rollups as a Service (RaaS): Low-code, scalable, enterprise-grade infrastructure for ZK Rollups and OP Stack Rollups.</p><p>Zeeve abstracts the challenges of launching your own Blockchain. Zeeve’s Rollups-as-a-Service platform enables launching your Optimistic or zk Rollups with enterprise-grade infrastructure, Enterprise SLA, and security</p><ul><li>Quick build and launch enterprise rollups</li><li>End-to-End rollup infrastructure backed by 24/7 monitoring</li><li>Secured by Zeeve’s <strong>ISO 27001 and SOC 2 Type 2</strong> compliant platform</li></ul><h4>Rollup as a Services</h4><ul><li>OP Stack</li><li>Polygon CDK</li><li>Arbitrum Orbit</li><li>ZKsync ZK stack</li><li>Tezos Smart Rollups</li></ul><h4>Node and APIs</h4><ul><li>RPC Nodes — Deploy dedicated RPC nodes for any supported blockchain in seconds</li><li>Staking Nodes — Zeeve makes it incredibly simple to deploy secure, reliable staking nodes. This inclues Avalanche, Beam L1, Celo, Flow, Near, Polygon, Subsquid, Solana etc.</li><li>Subgraphs — Zeeve’s Traceye supports subgraph networks for the deployment and monitoring of developer or validator nodes over the cloud of your choice.</li></ul><h3>About 0SUM</h3><p>As part of the DEFI ecosystem, 0SUM helps rollups that helps build white labeled DEXs and dApps on top of Zeeve’s rollup infrastructure.</p><ul><li>Concentrated Liquidity DEX (CLMM): Lets users to precisely control the price range where their capital is utilized, optimizing capital allocation and profitability.</li><li>Multi-Fee Tiers: Liquidity Pool providers pick their fee structure based on varying degrees of risk.</li><li>Capital Efficiency: Provide liquidity with up to 4000x capital efficiency relative to older DEXs, earning higher returns.</li><li>Low Slippage: Concentrated liquidity DEXs are designed for stable-coin focused pairs, allowing for low-slippage trades.</li></ul><p>Similar to Zeeve, 0SUM provides a fast service to deploy a production ready service.</p><ul><li>99.99% uptime</li><li>Any EVM chain</li><li>Integrates with Zeeve’s infrastructure</li></ul><h3>Conclusion</h3><p>0SUM is excited to partner with Zeeve’s ecosystem.</p><blockquote>0SUM handles dApp infrastructure so you can focus on growing your chain.</blockquote><ul><li><a href="https://www.zeeve.io/">Home</a></li><li><a href="https://0sum.io/">0SUM</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=78e157a19d93" width="1" height="1" alt=""><hr><p><a href="https://medium.com/coinmonks/0sum-zeeve-partner-for-dex-and-dapp-deployment-for-rollups-78e157a19d93">0SUM &amp; Zeeve Partner for DEX and dApp Deployment for Rollups</a> was originally published in <a href="https://medium.com/coinmonks">Coinmonks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Programmatically Swap a V3 DEX]]></title>
            <link>https://medium.com/coinmonks/how-to-programmatically-swap-a-v3-dex-5a4dc0851b03?source=rss-db6f54120ca6------2</link>
            <guid isPermaLink="false">https://medium.com/p/5a4dc0851b03</guid>
            <category><![CDATA[dex]]></category>
            <category><![CDATA[decentralized-finance]]></category>
            <category><![CDATA[decentralized-exchange]]></category>
            <category><![CDATA[dex-services]]></category>
            <dc:creator><![CDATA[Leon Do]]></dc:creator>
            <pubDate>Mon, 27 Jan 2025 19:19:17 GMT</pubDate>
            <atom:updated>2025-01-28T11:33:49.831Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*g9zBCfYPe-BygfmJoWZVkA.png" /></figure><h3>Overview</h3><p>Swaps can be done through a website or programmatically through a standard Uniswap V3 API interface.</p><p>Below are the requirements</p><ul><li>Nodejs</li><li>ethers</li><li>dotenv</li></ul><p>Below is the full source code:</p><pre>import { ethers } from &quot;ethers&quot;;<br>import &quot;dotenv/config&quot;;<br><br>const QUOTER_CONTRACT_ADDRESS = &quot;0x0880484412B5bAa18B3fa2904a500c08f0fE79D2&quot;;<br>// prettier-ignore<br>const QUOTER_ABI = [ { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;_factory&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;_WETH9&quot;, &quot;type&quot;: &quot;address&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;constructor&quot; }, { &quot;inputs&quot;: [], &quot;name&quot;: &quot;WETH9&quot;, &quot;outputs&quot;: [{ &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;address&quot; }], &quot;stateMutability&quot;: &quot;view&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [], &quot;name&quot;: &quot;factory&quot;, &quot;outputs&quot;: [{ &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;address&quot; }], &quot;stateMutability&quot;: &quot;view&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;bytes&quot;, &quot;name&quot;: &quot;path&quot;, &quot;type&quot;: &quot;bytes&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountIn&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;name&quot;: &quot;quoteExactInput&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountOut&quot;, &quot;type&quot;: &quot;uint256&quot; }, { &quot;internalType&quot;: &quot;uint160[]&quot;, &quot;name&quot;: &quot;sqrtPriceX96AfterList&quot;, &quot;type&quot;: &quot;uint160[]&quot; }, { &quot;internalType&quot;: &quot;uint32[]&quot;, &quot;name&quot;: &quot;initializedTicksCrossedList&quot;, &quot;type&quot;: &quot;uint32[]&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;gasEstimate&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;components&quot;: [ { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;tokenIn&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;tokenOut&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountIn&quot;, &quot;type&quot;: &quot;uint256&quot; }, { &quot;internalType&quot;: &quot;uint24&quot;, &quot;name&quot;: &quot;fee&quot;, &quot;type&quot;: &quot;uint24&quot; }, { &quot;internalType&quot;: &quot;uint160&quot;, &quot;name&quot;: &quot;sqrtPriceLimitX96&quot;, &quot;type&quot;: &quot;uint160&quot; } ], &quot;internalType&quot;: &quot;struct IQuoterV2.QuoteExactInputSingleParams&quot;, &quot;name&quot;: &quot;params&quot;, &quot;type&quot;: &quot;tuple&quot; } ], &quot;name&quot;: &quot;quoteExactInputSingle&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountOut&quot;, &quot;type&quot;: &quot;uint256&quot; }, { &quot;internalType&quot;: &quot;uint160&quot;, &quot;name&quot;: &quot;sqrtPriceX96After&quot;, &quot;type&quot;: &quot;uint160&quot; }, { &quot;internalType&quot;: &quot;uint32&quot;, &quot;name&quot;: &quot;initializedTicksCrossed&quot;, &quot;type&quot;: &quot;uint32&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;gasEstimate&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;bytes&quot;, &quot;name&quot;: &quot;path&quot;, &quot;type&quot;: &quot;bytes&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountOut&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;name&quot;: &quot;quoteExactOutput&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountIn&quot;, &quot;type&quot;: &quot;uint256&quot; }, { &quot;internalType&quot;: &quot;uint160[]&quot;, &quot;name&quot;: &quot;sqrtPriceX96AfterList&quot;, &quot;type&quot;: &quot;uint160[]&quot; }, { &quot;internalType&quot;: &quot;uint32[]&quot;, &quot;name&quot;: &quot;initializedTicksCrossedList&quot;, &quot;type&quot;: &quot;uint32[]&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;gasEstimate&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;components&quot;: [ { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;tokenIn&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;tokenOut&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amount&quot;, &quot;type&quot;: &quot;uint256&quot; }, { &quot;internalType&quot;: &quot;uint24&quot;, &quot;name&quot;: &quot;fee&quot;, &quot;type&quot;: &quot;uint24&quot; }, { &quot;internalType&quot;: &quot;uint160&quot;, &quot;name&quot;: &quot;sqrtPriceLimitX96&quot;, &quot;type&quot;: &quot;uint160&quot; } ], &quot;internalType&quot;: &quot;struct IQuoterV2.QuoteExactOutputSingleParams&quot;, &quot;name&quot;: &quot;params&quot;, &quot;type&quot;: &quot;tuple&quot; } ], &quot;name&quot;: &quot;quoteExactOutputSingle&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountIn&quot;, &quot;type&quot;: &quot;uint256&quot; }, { &quot;internalType&quot;: &quot;uint160&quot;, &quot;name&quot;: &quot;sqrtPriceX96After&quot;, &quot;type&quot;: &quot;uint160&quot; }, { &quot;internalType&quot;: &quot;uint32&quot;, &quot;name&quot;: &quot;initializedTicksCrossed&quot;, &quot;type&quot;: &quot;uint32&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;gasEstimate&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;int256&quot;, &quot;name&quot;: &quot;amount0Delta&quot;, &quot;type&quot;: &quot;int256&quot; }, { &quot;internalType&quot;: &quot;int256&quot;, &quot;name&quot;: &quot;amount1Delta&quot;, &quot;type&quot;: &quot;int256&quot; }, { &quot;internalType&quot;: &quot;bytes&quot;, &quot;name&quot;: &quot;path&quot;, &quot;type&quot;: &quot;bytes&quot; } ], &quot;name&quot;: &quot;uniswapV3SwapCallback&quot;, &quot;outputs&quot;: [], &quot;stateMutability&quot;: &quot;view&quot;, &quot;type&quot;: &quot;function&quot; } ]<br><br>const provider = new ethers.JsonRpcProvider(&quot;https://rpc.o.xyz/&quot;);<br>const quoterContract = new ethers.Contract(<br>  QUOTER_CONTRACT_ADDRESS,<br>  QUOTER_ABI,<br>  provider<br>);<br>const signer = new ethers.Wallet(process.env.PRIVATE_KEY!, provider);<br><br>const params = {<br>  tokenIn: &quot;0xc7C3cff325c6976965edfEB05c024584e4e4BBDD&quot;,<br>  tokenOut: &quot;0x91d70c3adde2f0f0c4fb0b2de69f37a7c7e326df&quot;,<br>  fee: 3000,<br>  recipient: signer.address,<br>  deadline: Math.floor(new Date().getTime() / 1000 + 60 * 10),<br>  amountIn: ethers.parseUnits(&quot;0.01&quot;),<br>  sqrtPriceLimitX96: 0,<br>};<br><br>main();<br>async function main() {<br>  const transaction =<br>    await quoterContract.quoteExactInputSingle.populateTransaction(params);<br>  console.log({ transaction });<br><br>  const receipt = await signer.sendTransaction(transaction);<br>  console.log({ receipt });<br>}</pre><h3>Define Variables</h3><pre>const QUOTER_CONTRACT_ADDRESS = &quot;0x0880484412B5bAa18B3fa2904a500c08f0fE79D2&quot;;<br>// prettier-ignore<br>const QUOTER_ABI = [ { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;_factory&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;_WETH9&quot;, &quot;type&quot;: &quot;address&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;constructor&quot; }, { &quot;inputs&quot;: [], &quot;name&quot;: &quot;WETH9&quot;, &quot;outputs&quot;: [{ &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;address&quot; }], &quot;stateMutability&quot;: &quot;view&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [], &quot;name&quot;: &quot;factory&quot;, &quot;outputs&quot;: [{ &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;address&quot; }], &quot;stateMutability&quot;: &quot;view&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;bytes&quot;, &quot;name&quot;: &quot;path&quot;, &quot;type&quot;: &quot;bytes&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountIn&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;name&quot;: &quot;quoteExactInput&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountOut&quot;, &quot;type&quot;: &quot;uint256&quot; }, { &quot;internalType&quot;: &quot;uint160[]&quot;, &quot;name&quot;: &quot;sqrtPriceX96AfterList&quot;, &quot;type&quot;: &quot;uint160[]&quot; }, { &quot;internalType&quot;: &quot;uint32[]&quot;, &quot;name&quot;: &quot;initializedTicksCrossedList&quot;, &quot;type&quot;: &quot;uint32[]&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;gasEstimate&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;components&quot;: [ { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;tokenIn&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;tokenOut&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountIn&quot;, &quot;type&quot;: &quot;uint256&quot; }, { &quot;internalType&quot;: &quot;uint24&quot;, &quot;name&quot;: &quot;fee&quot;, &quot;type&quot;: &quot;uint24&quot; }, { &quot;internalType&quot;: &quot;uint160&quot;, &quot;name&quot;: &quot;sqrtPriceLimitX96&quot;, &quot;type&quot;: &quot;uint160&quot; } ], &quot;internalType&quot;: &quot;struct IQuoterV2.QuoteExactInputSingleParams&quot;, &quot;name&quot;: &quot;params&quot;, &quot;type&quot;: &quot;tuple&quot; } ], &quot;name&quot;: &quot;quoteExactInputSingle&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountOut&quot;, &quot;type&quot;: &quot;uint256&quot; }, { &quot;internalType&quot;: &quot;uint160&quot;, &quot;name&quot;: &quot;sqrtPriceX96After&quot;, &quot;type&quot;: &quot;uint160&quot; }, { &quot;internalType&quot;: &quot;uint32&quot;, &quot;name&quot;: &quot;initializedTicksCrossed&quot;, &quot;type&quot;: &quot;uint32&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;gasEstimate&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;bytes&quot;, &quot;name&quot;: &quot;path&quot;, &quot;type&quot;: &quot;bytes&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountOut&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;name&quot;: &quot;quoteExactOutput&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountIn&quot;, &quot;type&quot;: &quot;uint256&quot; }, { &quot;internalType&quot;: &quot;uint160[]&quot;, &quot;name&quot;: &quot;sqrtPriceX96AfterList&quot;, &quot;type&quot;: &quot;uint160[]&quot; }, { &quot;internalType&quot;: &quot;uint32[]&quot;, &quot;name&quot;: &quot;initializedTicksCrossedList&quot;, &quot;type&quot;: &quot;uint32[]&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;gasEstimate&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;components&quot;: [ { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;tokenIn&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;address&quot;, &quot;name&quot;: &quot;tokenOut&quot;, &quot;type&quot;: &quot;address&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amount&quot;, &quot;type&quot;: &quot;uint256&quot; }, { &quot;internalType&quot;: &quot;uint24&quot;, &quot;name&quot;: &quot;fee&quot;, &quot;type&quot;: &quot;uint24&quot; }, { &quot;internalType&quot;: &quot;uint160&quot;, &quot;name&quot;: &quot;sqrtPriceLimitX96&quot;, &quot;type&quot;: &quot;uint160&quot; } ], &quot;internalType&quot;: &quot;struct IQuoterV2.QuoteExactOutputSingleParams&quot;, &quot;name&quot;: &quot;params&quot;, &quot;type&quot;: &quot;tuple&quot; } ], &quot;name&quot;: &quot;quoteExactOutputSingle&quot;, &quot;outputs&quot;: [ { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;amountIn&quot;, &quot;type&quot;: &quot;uint256&quot; }, { &quot;internalType&quot;: &quot;uint160&quot;, &quot;name&quot;: &quot;sqrtPriceX96After&quot;, &quot;type&quot;: &quot;uint160&quot; }, { &quot;internalType&quot;: &quot;uint32&quot;, &quot;name&quot;: &quot;initializedTicksCrossed&quot;, &quot;type&quot;: &quot;uint32&quot; }, { &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;gasEstimate&quot;, &quot;type&quot;: &quot;uint256&quot; } ], &quot;stateMutability&quot;: &quot;nonpayable&quot;, &quot;type&quot;: &quot;function&quot; }, { &quot;inputs&quot;: [ { &quot;internalType&quot;: &quot;int256&quot;, &quot;name&quot;: &quot;amount0Delta&quot;, &quot;type&quot;: &quot;int256&quot; }, { &quot;internalType&quot;: &quot;int256&quot;, &quot;name&quot;: &quot;amount1Delta&quot;, &quot;type&quot;: &quot;int256&quot; }, { &quot;internalType&quot;: &quot;bytes&quot;, &quot;name&quot;: &quot;path&quot;, &quot;type&quot;: &quot;bytes&quot; } ], &quot;name&quot;: &quot;uniswapV3SwapCallback&quot;, &quot;outputs&quot;: [], &quot;stateMutability&quot;: &quot;view&quot;, &quot;type&quot;: &quot;function&quot; } ]<br><br>const provider = new ethers.JsonRpcProvider(&quot;https://rpc.o.xyz/&quot;);<br>const quoterContract = new ethers.Contract(<br>  QUOTER_CONTRACT_ADDRESS,<br>  QUOTER_ABI,<br>  provider<br>);<br>const signer = new ethers.Wallet(process.env.PRIVATE_KEY!, provider);</pre><ul><li>QUOTER_CONTRACT_ADDRESS: Is part of the V3 deployment contracts</li><li>QUOTER_ABI: Is the abi of the contract</li><li>provider: Connect to the RPC</li><li>quoterContract: Connect to the quoter contract</li><li>signer: Connect to your wallet</li></ul><h3>Params</h3><pre>const params = {<br>  tokenIn: &quot;0xc7C3cff325c6976965edfEB05c024584e4e4BBDD&quot;,<br>  tokenOut: &quot;0x91d70c3adde2f0f0c4fb0b2de69f37a7c7e326df&quot;,<br>  fee: 3000,<br>  recipient: signer.address,<br>  deadline: Math.floor(new Date().getTime() / 1000 + 60 * 10),<br>  amountIn: ethers.parseUnits(&quot;0.01&quot;),<br>  sqrtPriceLimitX96: 0,<br>};</pre><ul><li>tokenIn: ERC20 contract address you’re spending</li><li>tokenOut: ERC20 contract address you’re receiving</li><li>fee: Are the <a href="https://support.uniswap.org/hc/en-us/articles/20904283758349-What-are-fee-tiers">fee tiers</a> 1%, 0.3%, 0.05%, and 0.01%</li><li>recipient: The receiving address</li><li>deadline: How long the transaction is valid for</li><li>amountIn: Amount (smallest unit) you’re spending</li><li>sqrtPriceLimitX96: No limit</li></ul><h3>Raw Transction</h3><pre>const transaction = await quoterContract.quoteExactInputSingle.populateTransaction(params);</pre><p>Creates a raw transaction to sign.</p><p>Output</p><pre>{<br>  to: &quot;0x0880484412B5bAa18B3fa2904a500c08f0fE79D2&quot;,<br>  data: &quot;0xc6a5026a000000000000000000000000c7c3cff325c6976965edfeb05c024584e4e4bbdd00000000000000000000000091d70c3adde2f0f0c4fb0b2de69f37a7c7e326df000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000000&quot;<br>}</pre><h3>Send Transaction</h3><pre>const receipt = await signer.sendTransaction(transaction);</pre><p>Signs and broadcasts the transaction</p><p>Output</p><pre>{<br>  receipt: TransactionResponse {<br>    provider: JsonRpcProvider {},<br>    blockNumber: null,<br>    blockHash: null,<br>    index: undefined,<br>    hash: &quot;0x58f4da9449ae4a1eca01a05765e1d54c292d0bcf4935b206cf4747073f2bf3b7&quot;,<br>    type: 2,<br>    to: &quot;0x0880484412B5bAa18B3fa2904a500c08f0fE79D2&quot;,<br>    from: &quot;0xa427305648aD5227098812EdA6FF82D980b2DbBD&quot;,<br>    nonce: 51,<br>    gasLimit: 117236n,<br>    gasPrice: undefined,<br>    maxPriorityFeePerGas: 1000000n,<br>    maxFeePerGas: 1000504n,<br>    maxFeePerBlobGas: null,<br>    data: &quot;0xc6a5026a000000000000000000000000c7c3cff325c6976965edfeb05c024584e4e4bbdd00000000000000000000000091d70c3adde2f0f0c4fb0b2de69f37a7c7e326df000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000000&quot;,<br>    value: 0n,<br>    chainId: 84841n,<br>    signature: Signature { r: &quot;0xe485ba3893b0543a77a1bb14f0e2661dc7af3f6b2d0b3b917c8fbf4eaa6103c3&quot;, s: &quot;0x15e605c7e1fd6a64f5ca5d3f519c085367ce1250bf7647a6450bf9aef549c98c&quot;, yParity: 0, networkV: null },<br>    accessList: [],<br>    blobVersionedHashes: null<br>  }<br>}</pre><h3>Approve Spending (prerequisite)</h3><pre>const SWAP_ROUTER_CONTRACT_ADDRESS = &#39;0x660C85710a1cd10e8345BB30C80A49f661486007&#39;<br><br>const approveTransaction = await tokenContract.approve.populateTransaction(<br>  SWAP_ROUTER_CONTRACT_ADDRESS,<br>  ethers.parseEther(amount.toString())<br>);</pre><p>Make sure the wallet has approved spending.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5a4dc0851b03" width="1" height="1" alt=""><hr><p><a href="https://medium.com/coinmonks/how-to-programmatically-swap-a-v3-dex-5a4dc0851b03">How to Programmatically Swap a V3 DEX</a> was originally published in <a href="https://medium.com/coinmonks">Coinmonks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[0SUM & Asphere Partner for Effortless DEX Deployment on Rollups]]></title>
            <link>https://medium.com/coinmonks/0sum-asphere-partner-for-effortless-dex-deployment-on-rollups-b92d2cefca88?source=rss-db6f54120ca6------2</link>
            <guid isPermaLink="false">https://medium.com/p/b92d2cefca88</guid>
            <category><![CDATA[dex-development-services]]></category>
            <category><![CDATA[ankr]]></category>
            <category><![CDATA[dex-development-companies]]></category>
            <category><![CDATA[dex-development]]></category>
            <category><![CDATA[rollup-as-a-service]]></category>
            <dc:creator><![CDATA[Leon Do]]></dc:creator>
            <pubDate>Mon, 02 Dec 2024 14:33:06 GMT</pubDate>
            <atom:updated>2024-12-02T16:04:45.773Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sucUr8ZchWA0BKoD6fg-Jw.png" /></figure><h3>Overview</h3><p><a href="https://0sum.io/">0SUM</a> announced its collaboration with <a href="https://asphere.xyz/">Asphere</a> on it’s product <a href="https://leondo.medium.com/dex-as-a-service-for-rollups-0b2d46859236">DEX as a Service (DaaS)</a>. This allows rollup developers to quickly deploy a DEX on any network launched using Asphere’s <a href="https://www.ankr.com/rollup-as-a-service-raas/">Rollup as a Service</a> (RaaS).</p><h3>New Capabilities Unlocked for Developers</h3><ul><li>Launch a new rollup with no code within minutes</li><li>Quickly deploy a concentrated DEX on top of it with no code</li><li>Works with any rollup stack, including all offered on Asphere RaaS</li><li>Fully audited smart contracts and production-ready DEX interface</li></ul><h3>Asphere’s Fast, Customizable Rollup Deployments</h3><p>Asphere’s RaaS service provides a <a href="https://rollup.asphere.xyz/?_gl=1*121ns7v*_ga*MTAyOTQyMzM5OC4xNzMwOTExMjA1*_ga_0MDHE2B2H8*MTczMjcyNzExMi42OC4xLjE3MzI3MjgyODkuNjAuMC4w">no-code deployer</a> to eliminate the need for deep knowledge in the underlying stack. Asphere’s expertise allows rollups to chose their best tech stack with nearly limitless customization options.</p><h4>Streamlined Launch</h4><p>Have Ankr handle the entire rollup creation process, from engineering to management.</p><h4>Unparalleled Reliability</h4><p>Ensure the highest speed and unwavering uptime with Ankr’s global node network.</p><h4>Unmatched Flexibility</h4><p>Build using your preferred stack, including Arbitrum Orbit, Polygon CDK, OP Stack, ZK Stack, and Fluent.</p><h4>Seamless Integrations</h4><p>Supercharge rollup operations seamlessly with Asphere’s integration partners. Give your chain the best of efficiency, interoperability, UX, and more.</p><ul><li>0SUM</li><li>EigenLayer</li><li>Axelar</li><li>Celer</li><li>Espresso</li><li>Near</li><li>+ Many more</li></ul><h4>Data Availability (DA) solutions</h4><ul><li>Ethereum DA:<strong> </strong>Offers familiar environment and security for rollups, leveraging existing infrastructure.</li><li>Celestia DA: A modular data availability layer, promoting faster transaction processing.</li><li>EigenDA: A restaking platform to reduce the costs of storing and accessing onchain data for Ethereum L2s.</li><li>Avail DA:<strong> U</strong>tilizes light client Data Availability Sampling (DAS) from a peer-to-peer network to scale blockchains.</li><li>NEAR DA: Uses sharding techniques to offer data availability solutions. NEAR has a trajectory of 100% uptime over its lifetime.</li></ul><h3>About 0SUM</h3><p>As part of the DEFI ecosystem, <a href="https://0sum.io/">0SUM</a> helps rollups build their white labeled DEX on top of Asphere’s rollup tech.</p><ul><li>Concentrated Liquidity DEX: Also known as Concentrated Liquidity Automated Market Makers (CLAMM) lets users control their price range to optimize capital allocation.</li><li>Multi-Fee Tiers: Liquidity providers pick their fee structure based their risk profile.</li><li>Capital Efficiency: Earn higher returns by provide liquidity with up to 4000x capital efficiency relative to older DEXs.</li><li>Low Slippage: Concentrated Liquidity DEXs are highly optimized for stable-coin pairs, allowing very low slippage for traders.</li><li>Analytics on every pool, swap and token</li></ul><p>Similar to Asphere and Ankr, 0SUM provides fast enterprise ready solutions:</p><ul><li>99.99% uptime</li><li>Deploy on any EVM tech stack</li><li>Integrate with Asphere and Ankr’s infrastructure</li></ul><h3>Conclusion</h3><p>0SUM’s partnership with Asphere will help chains develop a robust blockchain and decentralized application (dApp) ecosystem where users and interact in a safe and trustless way.</p><blockquote><em>Give your chain the best of efficiency, interoperability, UX, and more.</em></blockquote><ul><li><a href="https://www.ankr.com/">Decentralized Infrastructure to Build and Earn in Web3</a></li><li><a href="https://asphere.xyz/">Asphere</a></li><li><a href="https://0sum.io/">0SUM</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b92d2cefca88" width="1" height="1" alt=""><hr><p><a href="https://medium.com/coinmonks/0sum-asphere-partner-for-effortless-dex-deployment-on-rollups-b92d2cefca88">0SUM &amp; Asphere Partner for Effortless DEX Deployment on Rollups</a> was originally published in <a href="https://medium.com/coinmonks">Coinmonks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[0SUM Partners Ankr With to Help Rollups Deploy DEXs]]></title>
            <link>https://medium.com/coinmonks/0sum-partners-ankr-with-to-help-rollups-deploy-dexs-1a0d116108c2?source=rss-db6f54120ca6------2</link>
            <guid isPermaLink="false">https://medium.com/p/1a0d116108c2</guid>
            <category><![CDATA[uniswap-v3]]></category>
            <category><![CDATA[dex-development-services]]></category>
            <category><![CDATA[dex-development]]></category>
            <category><![CDATA[dex]]></category>
            <category><![CDATA[ankr]]></category>
            <dc:creator><![CDATA[Leon Do]]></dc:creator>
            <pubDate>Mon, 11 Nov 2024 11:04:33 GMT</pubDate>
            <atom:updated>2024-11-11T11:04:33.888Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GX_dvXEKJRfVivzp38U5OA.jpeg" /></figure><h3>Overview</h3><p><a href="https://0sum.io/">0SUM</a> announced its collaboration with <a href="https://www.ankr.com/rollup-as-a-service-raas/integrations/">Ankr</a> on it’s product <a href="https://leondo.medium.com/dex-as-a-service-for-rollups-0b2d46859236">DEX as a Service (DaaS)</a>. This allows rollups to quickly deploy a DEX on Ankr’s rollups service.</p><h3>About Ankr</h3><p>Ankr is one of the leading web3 infrastructure companies. They have a set of different impressive products:</p><ul><li><a href="https://www.ankr.com/web3-api/">RPC</a> Infrastructure with over 55 blockchains at 99.99% uptime</li><li>Developer <a href="https://www.ankr.com/docs/rpc-service/getting-started/intro/">tooling</a> for connecting to any blockchain</li><li><a href="https://www.ankr.com/docs/staking-overview/">Staking</a> to bring DeFi to the masses</li><li><a href="https://mirage.xyz/docs/">Gaming</a> to build and power up web3 games.</li><li><a href="https://www.ankr.com/rollup-as-a-service-raas/">Rollups as a Service</a> to launch blockchain initiatives, scale, and simplify development on the digital frontier</li></ul><p>Ankr’s RaaS service provides a no-code deployer to eliminate the need for deep expertise in the underlying stack:</p><ul><li>Arbitrum Orbit L2 chains leverage the Nitro Tech Stack for enhanced scalability, efficiency, and performance.</li><li>OP Stack: A modular, open-source blueprint for creating highly scalable, highly interoperable ZK or Optimistic rollups.</li><li>Polygon Chain Development Kit (CDK) enables you to build your own ZK-powered Layer 2 custom-fitted to your needs.</li><li>zkSync’s ZK Stack is a modular, open-source framework for building custom ZK-powered L2 and L3’s known as Hyperchains.</li></ul><p>Data Availability (DA) solutions:</p><ul><li>Ethereum DA:<strong> </strong>Offers familiar environment and strong security for rollups, leveraging existing infrastructure.</li><li>Celestia DA: Enables highly scalable rollups with dedicated data availability layer, promoting faster transaction processing.</li><li>EigenDA: Provides efficient data availability for rollups through smart contracts, reducing costs and complexity.</li><li>Avail DA:<strong> </strong>Provides a highly optimized base layer for ensuring reliable and near-immediate data availability guarantees.</li><li>NEAR DA: Offers enhanced data throughput and efficiency by publishing transaction data to the NEAR chain with 100% uptime.</li></ul><h3>About 0SUM</h3><p>As part of the DEFI ecosystem, 0SUM helps rollups that helps build white labeled DEX on top of Ankr’s rollup tech.</p><ul><li>Concentrated Liquidity DEX: Lets users to precisely control the price range where their capital is utilized, optimizing capital allocation and profitability.</li><li>Multi-Fee Tiers: Liquidity Pool providers pick their fee structure based on varying degrees of risk.</li><li>Capital Efficiency: Provide liquidity with up to 4000x capital efficiency relative to older DEXs, earning higher returns.</li><li>Low Slippage: Concentrated liquidity DEXs are designed for stable-coin focused pairs, allowing for low-slippage trades.</li></ul><p>Similar to Ankr, 0SUM provides a fast service to deploy a production ready service.</p><ul><li>99.99% uptime</li><li>Supports any EVM chain</li><li>Integrates with Ankr’s existing infrastructure</li></ul><h3>Conclusion</h3><p>0SUM is excited to partner with Ankr’s ecosystem. We handle basic infrastructure so you can focus on growing your chain.</p><blockquote>Give your chain the best of efficiency, interoperability, UX, and more.</blockquote><ul><li><a href="https://www.ankr.com/rollup-as-a-service-raas/integrations/">Blockchain Rollup Integrations: 8+ Options to Boost Your Chain</a></li><li><a href="https://0sum.io">0SUM</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1a0d116108c2" width="1" height="1" alt=""><hr><p><a href="https://medium.com/coinmonks/0sum-partners-ankr-with-to-help-rollups-deploy-dexs-1a0d116108c2">0SUM Partners Ankr With to Help Rollups Deploy DEXs</a> was originally published in <a href="https://medium.com/coinmonks">Coinmonks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[0SUM Collaborates With AltLayer to Help Deploy DEXs]]></title>
            <link>https://medium.com/coinmonks/0sum-collaborates-with-altlayer-to-help-deploy-dexs-4579fbde5e8f?source=rss-db6f54120ca6------2</link>
            <guid isPermaLink="false">https://medium.com/p/4579fbde5e8f</guid>
            <category><![CDATA[decentralized-exchange]]></category>
            <category><![CDATA[dex]]></category>
            <category><![CDATA[raas]]></category>
            <category><![CDATA[altlayer]]></category>
            <category><![CDATA[uniswap-v3]]></category>
            <dc:creator><![CDATA[Leon Do]]></dc:creator>
            <pubDate>Fri, 08 Nov 2024 21:12:21 GMT</pubDate>
            <atom:updated>2024-11-12T18:12:49.265Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hy8dWlqiHCgHA-gfJH9FfA.jpeg" /></figure><h3>Overview</h3><p><a href="https://0sum.io/">0SUM</a> announced its collaboration with <a href="https://www.altlayer.io/#section-ecosystem">AltLayer</a> on it’s product <a href="https://leondo.medium.com/dex-as-a-service-for-rollups-0b2d46859236">DEX as a Service (DaaS)</a>. This allows anyone to quickly deploy a DEX on any rollup stack. No code needed.</p><h3>About AltLayer</h3><p>AltLayer is a <a href="https://www.altlayer.io/raas">rollup-as-a-service (RaaS)</a>, a talented team that helps projects build customized rollups using major rollups stacks including:</p><ul><li>OP Stack</li><li>Arbitrum Orbit</li><li>Polygon CDK</li><li>zkSync ZK Stack</li></ul><p>Data availability solutions:</p><ul><li>Celestia</li><li>EigenDA</li><li>Avail</li><li>NEAR DA</li></ul><p>AltLayer provides a fast and secure method to customize and deploy in just a few minutes. They also provide a list of benefits:</p><ul><li>No Technical Expertise Required</li><li>Auto Deployment</li><li>Robust DDoS Mitigation</li><li>Infra management</li><li>Auto Scaling</li><li>Auto Deployment</li></ul><p>AltLayer has also partnered with over 100 projects to provide a richer ecosystem</p><ul><li>Bridges</li><li>DAO tooling</li><li>DEFI</li></ul><h3>About 0SUM</h3><p>As part of the DEFI ecosystem, 0SUM helps rollups that helps build white labeled decentralized exchanges on top of the rollup.</p><ul><li>Concentrated Liquidity DEX: Allows individuals to have granular control over what price range their capital is allocated towards.</li><li>Multi-Fee Tiers: Liquidity Pool providers decide their fee structure based on varying degrees of risk.</li><li>Capital Efficiency: Providers can provide liquidity with up to 4000x capital efficiency relative to older DEXs, earning higher returns.</li><li>Low Slippage: Concentrated liquidity DEXs are designed for stable-coin focused pairs, allowing for low-slippage trades.</li></ul><p>Similar to AltLayer, 0SUM provides a fast service to deploy a production ready service. Provide a list of benefits:</p><ul><li>No Technical Expertise Required</li><li>Robust DDoS protection</li><li>Infra management</li><li>Auto Scaling</li><li>Auto Deployment</li></ul><h3>Conclusion</h3><p>0SUM is excited to collaborate with AltLayer.</p><p>AltLayer focuses on the rollup infrastructure while 0SUM focuses on the application (dApp) layer.</p><p>We handle basic infrastructure so you can focus on growing your chain.</p><ul><li><a href="https://www.altlayer.io/#section-ecosystem">AltLayer | Accelerate scaling for Web 3</a></li><li><a href="https://0sum.io/">0SUM</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4579fbde5e8f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/coinmonks/0sum-collaborates-with-altlayer-to-help-deploy-dexs-4579fbde5e8f">0SUM Collaborates With AltLayer to Help Deploy DEXs</a> was originally published in <a href="https://medium.com/coinmonks">Coinmonks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Create a Token List for DEXs]]></title>
            <link>https://medium.com/coinmonks/how-to-create-a-token-list-for-dexs-cdd6bdf6bb51?source=rss-db6f54120ca6------2</link>
            <guid isPermaLink="false">https://medium.com/p/cdd6bdf6bb51</guid>
            <category><![CDATA[decentralized-exchange]]></category>
            <category><![CDATA[dex]]></category>
            <category><![CDATA[tokenlist]]></category>
            <category><![CDATA[token-listing]]></category>
            <category><![CDATA[dex-services]]></category>
            <dc:creator><![CDATA[Leon Do]]></dc:creator>
            <pubDate>Fri, 11 Oct 2024 20:48:46 GMT</pubDate>
            <atom:updated>2024-10-14T08:44:49.038Z</atom:updated>
            <content:encoded><![CDATA[<p>Creating token standards</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vACFAV9KU45wLQv-OfO6SQ.jpeg" /></figure><h3>About</h3><p>As the ecosystem continues to grow, we’re constantly seeing growth in the number tokens being created. This maturation reflects the success of permissionless innovation, a trend we expect will only accelerate in the future.</p><p>As the rate of token issuance increases, it has become difficult for users to filter out high quality, legitimate tokens from scams. Below is how individual DEXs can manage this.</p><h3>Solution</h3><p>Each DEX will maintain a file of whitelisted tokens. The list will have a set of criteria</p><ul><li>Is the project legitimate?</li><li>Is there enough liquidity?</li><li>etc.</li></ul><p>Tokens not included in the list can still be traded <strong>but</strong> will have a warning.</p><blockquote>This token isn’t traded on leading centralized exchanges or frequently swapped. Always conduct your own research before trading.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lpj99WHB0XbNLzGw3StIxQ.png" /></figure><h3>Create</h3><p>Create a public <a href="https://github.com/">repository</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3scIRbHfTqOBzbODd5vUJw.png" /></figure><p>Create a file chain.json</p><p>Below is an example.</p><pre>{<br>  &quot;name&quot;: &quot;Token List&quot;,<br>  &quot;timestamp&quot;: &quot;2077-01-01T11:11:11.111Z&quot;,<br>  &quot;version&quot;: {<br>    &quot;major&quot;: 1,<br>    &quot;minor&quot;: 0,<br>    &quot;patch&quot;: 0<br>  },<br>  &quot;tags&quot;: {},<br>  &quot;logoURI&quot;: &quot;&quot;,<br>  &quot;keywords&quot;: [],<br>  &quot;tokens&quot;: [<br>    {<br>      &quot;name&quot;: &quot;Wrapped Ether&quot;,<br>      &quot;address&quot;: &quot;0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&quot;,<br>      &quot;symbol&quot;: &quot;WETH&quot;,<br>      &quot;decimals&quot;: 18,<br>      &quot;chainId&quot;: 1,<br>      &quot;logoURI&quot;: &quot;https://ipfs.io/ipfs/QmVwvpK3UdPAB9nA1VXWwHWaTQXeTeYkmwMPGbfQiAmUgU&quot;<br>    },<br>    {<br>      &quot;name&quot;: &quot;Tether USD&quot;,<br>      &quot;address&quot;: &quot;0xdac17f958d2ee523a2206206994597c13d831ec7&quot;,<br>      &quot;symbol&quot;: &quot;USDT&quot;,<br>      &quot;decimals&quot;: 6,<br>      &quot;chainId&quot;: 1,<br>      &quot;logoURI&quot;: &quot;https://ipfs.io/ipfs/QmdJtEuYmo6o5GMwQ1FVWedqzSHWHEkYHBuChAbgYsWd4U&quot;<br>    }<br>  ]<br>}</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NnHVtjFC15eZUOwsGkK0CA.png" /></figure><p>The DEX will pull from this JSON to display token info.</p><h3>Update</h3><p>Every time a token is added, deleted or updated, bump the version number.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6wqt_oSuJpe-Jmo1rIpx2Q.png" /></figure><h3>DEX as a Service</h3><p>0SUM.io provides a software service to deploy a DEX and white label user interface (website). Smart contracts are audited and interface is production ready. This can all be done with no code.</p><p>For more info:</p><p><a href="https://0sum.io">0SUM</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cdd6bdf6bb51" width="1" height="1" alt=""><hr><p><a href="https://medium.com/coinmonks/how-to-create-a-token-list-for-dexs-cdd6bdf6bb51">How to Create a Token List for DEXs</a> was originally published in <a href="https://medium.com/coinmonks">Coinmonks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[DEX as a Service For Rollups]]></title>
            <link>https://leondo.medium.com/dex-as-a-service-for-rollups-0b2d46859236?source=rss-db6f54120ca6------2</link>
            <guid isPermaLink="false">https://medium.com/p/0b2d46859236</guid>
            <category><![CDATA[rollup-as-a-service]]></category>
            <category><![CDATA[decentralized-apps]]></category>
            <category><![CDATA[decentralized-exchange]]></category>
            <category><![CDATA[uniswap-v3]]></category>
            <category><![CDATA[dex]]></category>
            <dc:creator><![CDATA[Leon Do]]></dc:creator>
            <pubDate>Wed, 01 May 2024 12:01:32 GMT</pubDate>
            <atom:updated>2024-05-01T12:01:32.289Z</atom:updated>
            <content:encoded><![CDATA[<p>Blockchains are getting cheaper. Decentralized Exchanges should too.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aYGO_W-N02kSUWzLdV4JZQ.png" /></figure><h3>What is DEX as a Service (DaaS)</h3><p>Let’s define some terms</p><p><strong>Software as a Service (SaaS)</strong>:<strong> </strong>Is a software licensing and delivery model in which software is licensed on a subscription basis and is centrally hosted. The goal of SaaS is to simplify the process of building and maintaining centrally hosted applications.</p><p><strong>Rollup as a Service (RaaS)</strong>: Rollups as a Service simplifies the process of building and deploying custom blockchains by offering a set of tools and services. Some of these tools and services include:</p><ul><li>Sequencers</li><li>Validators</li><li>RPC Nodes</li><li>Block Explorer</li><li>Bridge</li></ul><blockquote>RaaS provides blockchain infrastructure.</blockquote><blockquote>RaaS does <strong>not</strong> provide applications.</blockquote><p><strong>DEX as a Service (DaaS)</strong>: DEX as a Service simplifies the deployment of decentralized applications. DaaS deploys a set of production ready smart contracts and UI interface to any rollup blockchain. Some of these tools and services include:</p><ul><li>Audited smart contracts</li><li>Interface to swap ERC-20 tokens</li><li>Interface to create liquidity pools (LP)</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gdCnMsuGdzgPIrvYBOUUMg.png" /></figure><h3>Why DEX as a Service</h3><p>With the growth of modular tech stack, the future will be hundreds if not thousands of blockchains. And with the multitude of chains, the standard decentralized applications (dApps) should scale at the same rate.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*r6T9KiSZ-BpctwX5DG5bFw.png" /></figure><p>Each blockchain should come with a set of standard applications. Below are some examples:</p><p><a href="https://github.com/makerdao/multicall">Multicall</a>: A dApp to aggregate results from multiple contract constant function calls.</p><p><a href="https://weth.io/">WETH</a>: A dApp to make ETH compatible with the ERC-20 standard.</p><p><a href="https://safe.global/">Multi-Signature Wallet</a>: A dApp designed to require two or more wallets to transfer funds.</p><p><a href="https://0sum.io/">DEX</a>: A peer-to-peer marketplace dApp where transactions occur directly between traders.</p><p>DEX as a Service provides one component to the application stack. It should be prebuilt, audited, deployed and ready in one click.</p><p>Instead of focusing on standard infrastructure like DEXs, rollup teams should focus on their chain specific use case.</p><h3>Where DEX as a Service</h3><p>0SUM.io provides a software service to deploy a DEX and white label user interface (website). Smart contracts are audited and interface is production ready. This can all be done with no code.</p><p>For more info:</p><p><a href="https://0sum.io/">0SUM</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0b2d46859236" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Deploy a DEX in 10 minutes]]></title>
            <link>https://medium.com/coinmonks/how-to-deploy-a-dex-in-10-minutes-8cd2e7859c01?source=rss-db6f54120ca6------2</link>
            <guid isPermaLink="false">https://medium.com/p/8cd2e7859c01</guid>
            <category><![CDATA[rollup-as-a-service]]></category>
            <category><![CDATA[uniswap-v3]]></category>
            <category><![CDATA[dex]]></category>
            <category><![CDATA[decentralized-exchange]]></category>
            <dc:creator><![CDATA[Leon Do]]></dc:creator>
            <pubDate>Tue, 30 Apr 2024 19:37:32 GMT</pubDate>
            <atom:updated>2024-05-01T06:40:56.210Z</atom:updated>
            <content:encoded><![CDATA[<p>Deploy a Uniswap V3 Decentralized Exchange to any Rollup EVM</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7Gzam0jayPZ3D3OiyX8Crw.png" /></figure><h3>Overview</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F6Ymq4yTt63M%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D6Ymq4yTt63M&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F6Ymq4yTt63M%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/454ec9a7d49337ab55560554b8dd061e/href">https://medium.com/media/454ec9a7d49337ab55560554b8dd061e/href</a></iframe><p>This guide will explain how to deploy a production ready Uniswap V3 decentralized exchange (DEX) for any rollup EVM. This includes</p><ul><li>Deploy WETH</li><li>Deploy Uniswap V3 Contracts</li><li>Deploy PERMIT2</li><li>Deploy Universal Router</li><li>Adding values to the UI interface</li><li>Deploying the UI interface</li></ul><h3>Deploy WETH</h3><p>Wrapped ETH (WETH) is used to give ETH the same functionality as an ERC-20 token. This deployment is needed for new chains.</p><p><a href="https://etherscan.io/token/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2#code">Wrapped Ether (WETH) Token Tracker | Etherscan</a></p><h3>Deploy V3</h3><p>Most tutorials provide a <strong>simple</strong> smart contract DEX as a proof of concept. But this tutorial will deploy a Uniswap V3 a battle tested production ready DEX.</p><p>This deploys:</p><ul><li>V3 Factory Contract: The contract is responsible for the creation of V3 pools.</li><li>Multicall Contract: Responsible for aggregating multiple contract constant function calls</li><li>NFT Contract: Is the token minted after creating an LP position.</li></ul><pre>git clone git@github.com:Uniswap/deploy-v3.git<br><br>yarn &amp;&amp; yarn build<br><br>node dist/index.js \<br>--private-key $PRIVATE_KEY \<br>--json-rpc $RPC_URL \<br>--weth9-address $WETH9_ADDRESS \<br>--native-currency-label $NATIVE_CURRENCY_LABEL</pre><p>Deploying V3 is the core of the application. The rest of the steps make the core deployment easier to interface with.</p><h3>Deploy Permit2</h3><p>Permit2 is an easier way to permit the sending of tokens.</p><p>The normal way is</p><ul><li>User sets approval for 0xContractA to permit spending</li><li>User calls function for 0xContractA to spend</li><li>This requires 2 steps.</li><li>If user sets approval 0xContractB, then it’s another 2 steps</li></ul><p>With Permit2</p><ul><li>User sets approval for Permit2 address to permit spending</li><li>User calls function with signed message for 0xContractA to spend</li><li>This requires 1 step and can be use for any contract A, B, C etc…</li></ul><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F4Sh504r7Pyo&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D4Sh504r7Pyo&amp;image=http%3A%2F%2Fi.ytimg.com%2Fvi%2F4Sh504r7Pyo%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/91661e60e93edf511d72ccf00501744f/href">https://medium.com/media/91661e60e93edf511d72ccf00501744f/href</a></iframe><pre>git clone https://github.com/Uniswap/permit2.git<br>forge install<br><br>forge script --broadcast script/DeployPermit2.s.sol:DeployPermit2 \<br>--rpc-url $RPC_URL \<br>--private-key $PRIVATE_KEY \<br>--verifier-url $VERIFIER_URL \<br>--verifier blockscout</pre><h3>Deploy Universal Router</h3><p>The Universal Router is an ETH, ERC20, and NFT swap router, that can aggregate trades across protocols to give users access flexible transactions. This is used in the UI interface deployed below.</p><pre>git clone git@github.com:Uniswap/universal-router.git<br>git submodule update --init --recursive<br>yarn &amp;&amp; yarn symlink<br><br>forge script --broadcast \<br>--rpc-url $RPC_URL \<br>--private-key $PRIVATE_KEY \<br>--sig &#39;run()&#39; \<br>script/deployParameters/Deploy&lt;network&gt;.s.sol:Deploy&lt;network&gt;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*hcRjcdADxfnUGhwD" /><figcaption>Photo by <a href="https://unsplash.com/@martinirc?utm_source=medium&amp;utm_medium=referral">José Martín Ramírez Carrasco</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h3>Add Environment Variables to UI Interface</h3><p>Now that all of the contracts are deployed, it’s time to connect this to an interface.</p><p><a href="https://github.com/Uniswap/interface">GitHub - Uniswap/interface: 🦄 Open source interfaces for the Uniswap protocol</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1f6Ey6Iwv8BBq63DQipu5w.png" /></figure><h3>Deploying the UI Interface</h3><p>The interface has a mix of client side and server side logic. Luckily all of the swap and pool logic can be done on the client side. There is no critical backend dependency.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rrJDa0aqXZFotpUeGOzFqg.png" /></figure><h3>DEX as a Service</h3><p>With the growth of modular blockchains, it’s becoming faster and cheaper to deploy a blockchain. Rollup as a service (RaaS) has made deploying blockchains as <a href="https://cointelegraph.com/news/celestia-launching-a-blockchain-to-be-as-easy-as-deploying-a-smart-contract">easy</a> as deploying a smart contract.</p><blockquote>Deploying a blockchain is an order of magnitude cheaper and faster than before. It’s only natural to provide cheaper and faster decentralized applications.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5_0dsH1hX_KrytjlAJYvQQ.png" /></figure><p>Deploying a DEX requires a lot of specialized knowledge that’ll take months for a team to understand and build. For a one click solution visit</p><p><a href="https://0sum.io">0SUM</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8cd2e7859c01" width="1" height="1" alt=""><hr><p><a href="https://medium.com/coinmonks/how-to-deploy-a-dex-in-10-minutes-8cd2e7859c01">How to Deploy a DEX in 10 minutes</a> was originally published in <a href="https://medium.com/coinmonks">Coinmonks</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[For Developers: How to Integrate Circle’s Developer Controlled Wallet]]></title>
            <link>https://medium.com/g7-dao/circles-developer-controlled-wallets-f214c56ce213?source=rss-db6f54120ca6------2</link>
            <guid isPermaLink="false">https://medium.com/p/f214c56ce213</guid>
            <category><![CDATA[sdk]]></category>
            <category><![CDATA[game-7]]></category>
            <category><![CDATA[web3-development]]></category>
            <category><![CDATA[web3-wallet]]></category>
            <category><![CDATA[web3-game]]></category>
            <dc:creator><![CDATA[Leon Do]]></dc:creator>
            <pubDate>Thu, 24 Aug 2023 20:37:14 GMT</pubDate>
            <atom:updated>2023-08-25T19:57:17.091Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oS3KnT5jsg9eyWdA43OOeA.png" /></figure><h3>Overview</h3><p>Circle’s wallet is a developer option for storing, sending and spending cryptocurrencies and/or NFTs. It’s built on top of multiple-party computation (MPC) technology. This means the private key is split, encrypted and shared among multiple parties. This allows for a secure key management system without a single point of failure, making it ideal for consumer-focused wallets.</p><p><strong>Circle has two MPC custodial models</strong></p><ol><li>User Controlled Wallets where the user has full control of their wallet.</li><li>Developer Controlled Wallets where the developer controls the user’s wallet.</li></ol><p>In this tutorial, we’ll go over how to create a Developer Controlled Wallet. This type of wallet allows developers to retain control over the user’s wallet. The advantage is a frictionless user experience which is important for consumer-focused industries, like Web3 gaming. With Developer Controlled wallets, developers can manage blockchain interactions for users, like sending and receiving digital assets or minting NFTs; and users don’t need to be concerned with some of the complexities of Web3, like the repercussions of losing a seed phrase.</p><h3>Tip</h3><p>Circle’s roadmap will include an SDK to manage cipher texts (explained below) easily. The current tutorial will explain with curl commands. This can be translated to any language.</p><h3>Create Circle Account</h3><p><a href="https://console.circle.com/api-keys">Sign In - Circle Developer Experience</a></p><p>Visit API Keys and generate a new key</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8JGRAC1OF-Gho6LL2fI1og.png" /></figure><p>The API key should look like</p><pre>TEST_API_KEY:3c49129618c3348dc7ceb4659b752df4:ed5a10f941af042f67b272433ad78d1a</pre><p>To test, curl</p><pre>curl --request GET \<br>     --url https://api.circle.com/v1/w3s/wallets \<br>     --header &#39;accept: application/json&#39; \<br>     --header &#39;authorization: Bearer TEST_API_KEY:3c49129618c3348dc7ceb4659b752df4:ed5a10f941af042f67b272433ad78d1a&#39;</pre><p>Response should be</p><pre>{&quot;data&quot;:{&quot;wallets&quot;:[]}}</pre><h3>Register Developer Controlled Wallet</h3><blockquote>For critical API requests like create wallet and create transaction in developer-controlled wallet, an entity secret cipher text is required to be appended to the API request parameter.</blockquote><p><a href="https://console.circle.com/wallets/dev/configurator">Sign In - Circle Developer Experience</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Mr0m7FfdyTij9kaQbNKLzw.png" /></figure><p>To generate an secret cipher text</p><pre>curl --request GET \<br>     --url &#39;https://api.circle.com/v1/w3s/config/entity/publicKey&#39; \<br>     --header &#39;accept: application/json&#39; \<br>     --header &#39;authorization: Bearer TEST_API_KEY:3c49129618c3348dc7ceb4659b752df4:ed5a10f941af042f67b272433ad78d1a&#39;</pre><p>RSA response</p><pre>{<br>  &quot;data&quot;: {<br>    &quot;publicKey&quot;: &quot;-----BEGIN RSA PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA14m3HFbISuOdSKsMrRgV\nK971vBzzqqw+OlhQIIZK2DByoiNXwB00Zrnn2o2w5rCz/Ez1otStpYNK7QyzEtzd\nnCAx6kG24CegieJbRVCc2yRpEyHXnmTCudBtcb9LrgGdhrwjqyTt1u2e4faT/rCf\n3l7BAsy5m5BoLy+lurYgnYaYTXcx2SYRVSe/Ju9WKFag/oXxM8L/ItYgcylXKEaw\ntErY+W5aEbkHsBelgF5tO3AOHUBK19xSlgUneT/T/ygdjWS7t5TLWU0GtEaBYTMJ\nUhRlRGdgK1Xx6Gwejj0tJsIgLcTDvVRbEKl6kIFokslyD5R2c9h4YmzoxDhEMVpk\nTO+AvyN3nUmlm4S9QaPmqMiFuEJqYtpQoyBNpqcjnnZTO1Y/eMA6eENN4D1nFdHG\nSAtY3lDt1rgKmVxkdJfsVJ+ucMbbTJqeedHPBPqI3vzk+jqHW64/Q80mgs074dsN\nosJ5avNjwfByUX7jV22NLALMr3KTqyXMWwyHGMs1Je/77T9V4Oy8MrPAv92A/v4s\nZltBuS34KteX9sYIX8zZ9I5L0s5lYo6naXaOaKFGAg0Iht5jdLhHMZSAdGDK+tDr\n2Mse0GBzC2JPGtG8gV8NSmilJ9sZYiSsc+E9fK7dK4tLob4n1SpyhPqMzVo2mmf1\ndkJaB5v822zrjCpg2tpy2fcCAwEAAQ==\n-----END RSA PUBLIC KEY-----\n&quot;<br>  }<br>}</pre><p>Clone this repo</p><p><a href="https://github.com/circlefin/w3s-entity-secret-sample-code">GitHub - circlefin/w3s-entity-secret-sample-code</a></p><p>Run</p><pre>python python/generate_hex_encoded_entity_secret.py</pre><p>Entity secret response</p><pre>Hex encoded entity secret: 364ba801bab96e6daa7ef824842f27c08d81e73fea5276c76e5822e8a5e2b556</pre><p>Edit the python/generate_entity_secret_ciphertext.py</p><pre># Paste your entity public key here.<br>public_key_string = &#39;-----BEGIN RSA PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA14m3HFbISuOdSKsMrRgV\nK971vBzzqqw+OlhQIIZK2DByoiNXwB00Zrnn2o2w5rCz/Ez1otStpYNK7QyzEtzd\nnCAx6kG24CegieJbRVCc2yRpEyHXnmTCudBtcb9LrgGdhrwjqyTt1u2e4faT/rCf\n3l7BAsy5m5BoLy+lurYgnYaYTXcx2SYRVSe/Ju9WKFag/oXxM8L/ItYgcylXKEaw\ntErY+W5aEbkHsBelgF5tO3AOHUBK19xSlgUneT/T/ygdjWS7t5TLWU0GtEaBYTMJ\nUhRlRGdgK1Xx6Gwejj0tJsIgLcTDvVRbEKl6kIFokslyD5R2c9h4YmzoxDhEMVpk\nTO+AvyN3nUmlm4S9QaPmqMiFuEJqYtpQoyBNpqcjnnZTO1Y/eMA6eENN4D1nFdHG\nSAtY3lDt1rgKmVxkdJfsVJ+ucMbbTJqeedHPBPqI3vzk+jqHW64/Q80mgs074dsN\nosJ5avNjwfByUX7jV22NLALMr3KTqyXMWwyHGMs1Je/77T9V4Oy8MrPAv92A/v4s\nZltBuS34KteX9sYIX8zZ9I5L0s5lYo6naXaOaKFGAg0Iht5jdLhHMZSAdGDK+tDr\n2Mse0GBzC2JPGtG8gV8NSmilJ9sZYiSsc+E9fK7dK4tLob4n1SpyhPqMzVo2mmf1\ndkJaB5v822zrjCpg2tpy2fcCAwEAAQ==\n-----END RSA PUBLIC KEY-----\n&#39;<br><br># If you already have a hex encoded entity secret, you can paste it here. the length of the hex string should be 64.<br>hex_encoded_entity_secret = &#39;364ba801bab96e6daa7ef824842f27c08d81e73fea5276c76e5822e8a5e2b556&#39;</pre><p>Run the script to get</p><pre>Hex encoded entity secret: f976dfefeab13d8c706c8553b5eb0c54a4ca2d168dfd77835dcc8a806abc2b6f<br>Entity secret ciphertext: X3SmZsKFMaxvHyRozJwcjocgENO3kv6eq9tZqrdW4i+6dzWwHeQ7Jas7O4nBrf8bCnKMOke3omcuAdprJm+5ZYH+z7BYCgIZuUlrR3idJsMhmO2+poxUL/PvMF7M+z2bzGEBPZPif/beQUlQ8b1g2JAi7VcOddfTq9LRw8HWq9GHuwV4wjhnSoIZdklp84Gmv8N+jzDjEQbinyy4mlIHZlpfYmY2CO+Flkqdu/FGIz/YZUkITcGQ+xMxwL3NZ+adOOohFL+8q52zWIqQt/7Arw2wO9Cu5vo441tY0QnRsbxF6MybsJ/gGVP8S9NxOmYshVcpS8V0Ux5N5W8v9bBMB8Bsezlhb3I6VpHY3hElQseYwzNDAp3eA6hKBkveKmkJQW5Q5vbiRApIRBlpwlc4HtBNRFAE7pU7BLGViRcDoptAs0AKrloUOIO74iy3pqAYj3hjeFVCs+q9zftcmQ3kClD3rChWFDw95wlVlN8XKAj8WDBd2cYhCmFkqZzWRQU3Qmg1Z3Rub4VcNpGrLDsHIoLBrp72rkI08g/FaXJujnhdPM6ppTY9rBo51TjapHK33yIQyNsbYM0q/LdnH0kbTD07GHYF3qfMUqUiKAYC3Zh8B0tXJXNY/jR4qP7kcAUlsj/iYcAcFm3tJBfIOIqshjLcv5S8pXKKFJL3aM7xKPw=</pre><p>Register</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FwahwlIcOGi9ml0JkqAx0A.png" /></figure><h3>Create a Wallet Set</h3><p>A wallet set is contains one or many wallets.</p><pre>curl --request POST \<br>     --url &#39;https://api.circle.com/v1/w3s/developer/walletSets&#39; \<br>     --header &#39;accept: application/json&#39; \<br>     --header &#39;content-type: application/json&#39; \<br>     --header &#39;authorization: Bearer TEST_API_KEY:3c49129618c3348dc7ceb4659b752df4:ed5a10f941af042f67b272433ad78d1a&#39; \<br>     --data &#39;{<br>        &quot;idempotencyKey&quot;: &quot;4e56ca1f-8ad8-4cd0-b9d5-3837539125f5&quot;,<br>        &quot;name&quot;: &quot;My Wallet Set&quot;,<br>        &quot;entitySecretCiphertext&quot;: &quot;X3SmZsKFMaxvHyRozJwcjocgENO3kv6eq9tZqrdW4i+6dzWwHeQ7Jas7O4nBrf8bCnKMOke3omcuAdprJm+5ZYH+z7BYCgIZuUlrR3idJsMhmO2+poxUL/PvMF7M+z2bzGEBPZPif/beQUlQ8b1g2JAi7VcOddfTq9LRw8HWq9GHuwV4wjhnSoIZdklp84Gmv8N+jzDjEQbinyy4mlIHZlpfYmY2CO+Flkqdu/FGIz/YZUkITcGQ+xMxwL3NZ+adOOohFL+8q52zWIqQt/7Arw2wO9Cu5vo441tY0QnRsbxF6MybsJ/gGVP8S9NxOmYshVcpS8V0Ux5N5W8v9bBMB8Bsezlhb3I6VpHY3hElQseYwzNDAp3eA6hKBkveKmkJQW5Q5vbiRApIRBlpwlc4HtBNRFAE7pU7BLGViRcDoptAs0AKrloUOIO74iy3pqAYj3hjeFVCs+q9zftcmQ3kClD3rChWFDw95wlVlN8XKAj8WDBd2cYhCmFkqZzWRQU3Qmg1Z3Rub4VcNpGrLDsHIoLBrp72rkI08g/FaXJujnhdPM6ppTY9rBo51TjapHK33yIQyNsbYM0q/LdnH0kbTD07GHYF3qfMUqUiKAYC3Zh8B0tXJXNY/jR4qP7kcAUlsj/iYcAcFm3tJBfIOIqshjLcv5S8pXKKFJL3aM7xKPw=&quot;<br>    }&#39;</pre><p>Response</p><pre>{<br>  &quot;data&quot;: {<br>    &quot;walletSet&quot;: {<br>      &quot;id&quot;: &quot;0189f75a-6439-7a29-a3d4-ffc28c4411da&quot;,<br>      &quot;custodyType&quot;: &quot;DEVELOPER&quot;,<br>      &quot;name&quot;: &quot;My Wallet Set&quot;,<br>      &quot;updateDate&quot;: &quot;2023-08-15T04:00:42Z&quot;,<br>      &quot;createDate&quot;: &quot;2023-08-15T04:00:42Z&quot;<br>    }<br>  }<br>}</pre><h3>Create a Wallet</h3><p>Create a wallet inside the wallet set using the walletSet.id above</p><pre>curl --request POST \<br>     --url &#39;https://api.circle.com/v1/w3s/developer/wallets&#39; \<br>     --header &#39;accept: application/json&#39; \<br>     --header &#39;content-type: application/json&#39; \<br>     --header &#39;authorization: Bearer TEST_API_KEY:3c49129618c3348dc7ceb4659b752df4:ed5a10f941af042f67b272433ad78d1a&#39; \<br>     --data &#39;{<br>        &quot;idempotencyKey&quot;: &quot;e8105afa-29cf-46cf-802f-76d67a5a9adc&quot;,<br>        &quot;blockchains&quot;: [<br>          &quot;MATIC-MUMBAI&quot;<br>        ],<br>        &quot;count&quot;: 1,<br>        &quot;entitySecretCiphertext&quot;: &quot;X3SmZsKFMaxvHyRozJwcjocgENO3kv6eq9tZqrdW4i+6dzWwHeQ7Jas7O4nBrf8bCnKMOke3omcuAdprJm+5ZYH+z7BYCgIZuUlrR3idJsMhmO2+poxUL/PvMF7M+z2bzGEBPZPif/beQUlQ8b1g2JAi7VcOddfTq9LRw8HWq9GHuwV4wjhnSoIZdklp84Gmv8N+jzDjEQbinyy4mlIHZlpfYmY2CO+Flkqdu/FGIz/YZUkITcGQ+xMxwL3NZ+adOOohFL+8q52zWIqQt/7Arw2wO9Cu5vo441tY0QnRsbxF6MybsJ/gGVP8S9NxOmYshVcpS8V0Ux5N5W8v9bBMB8Bsezlhb3I6VpHY3hElQseYwzNDAp3eA6hKBkveKmkJQW5Q5vbiRApIRBlpwlc4HtBNRFAE7pU7BLGViRcDoptAs0AKrloUOIO74iy3pqAYj3hjeFVCs+q9zftcmQ3kClD3rChWFDw95wlVlN8XKAj8WDBd2cYhCmFkqZzWRQU3Qmg1Z3Rub4VcNpGrLDsHIoLBrp72rkI08g/FaXJujnhdPM6ppTY9rBo51TjapHK33yIQyNsbYM0q/LdnH0kbTD07GHYF3qfMUqUiKAYC3Zh8B0tXJXNY/jR4qP7kcAUlsj/iYcAcFm3tJBfIOIqshjLcv5S8pXKKFJL3aM7xKPw=&quot;,<br>        &quot;walletSetId&quot;: &quot;0189f75a-6439-7a29-a3d4-ffc28c4411da&quot;<br>      }&#39;</pre><p>Response</p><pre>{<br>  &quot;data&quot;: {<br>    &quot;wallets&quot;: [<br>      {<br>        &quot;id&quot;: &quot;74f423b5-0c14-47ee-bdf6-d1a87b6fb06f&quot;,<br>        &quot;state&quot;: &quot;LIVE&quot;,<br>        &quot;walletSetId&quot;: &quot;0189f75a-6439-7a29-a3d4-ffc28c4411da&quot;,<br>        &quot;custodyType&quot;: &quot;DEVELOPER&quot;,<br>        &quot;address&quot;: &quot;0xe5c73198f9bcdef8d995b377b5108c271799e692&quot;,<br>        &quot;addressIndex&quot;: 0,<br>        &quot;blockchain&quot;: &quot;MATIC-MUMBAI&quot;,<br>        &quot;accountType&quot;: &quot;EOA&quot;,<br>        &quot;updateDate&quot;: &quot;2023-08-15T04:16:01Z&quot;,<br>        &quot;createDate&quot;: &quot;2023-08-15T04:16:01Z&quot;<br>      }<br>    ]<br>  }<br>}</pre><p>Verify</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*f-mrnLVh-PbU0oXezjm2Tg.png" /></figure><p>Fund the wallet</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AkwaTpyA2FGMsre82JMxtw.png" /></figure><h3>Transfer Tokens</h3><pre>curl --request POST \<br>     --url &#39;https://api.circle.com/v1/w3s/developer/transactions/transfer&#39; \<br>     --header &#39;accept: application/json&#39; \<br>     --header &#39;content-type: application/json&#39; \<br>     --header &#39;authorization: Bearer TEST_API_KEY:3c49129618c3348dc7ceb4659b752df4:ed5a10f941af042f67b272433ad78d1a&#39; \<br>     --data &#39;{<br>        &quot;idempotencyKey&quot;: &quot;1033769d-9592-440f-aa92-982c6e0077ff&quot;,<br>        &quot;walletId&quot;: &quot;74f423b5-0c14-47ee-bdf6-d1a87b6fb06f&quot;,<br>        &quot;tokenId&quot;: &quot;e4f549f9-a910-59b1-b5cd-8f972871f5db&quot;,<br>        &quot;destinationAddress&quot;: &quot;0xdD4c825203f97984e7867F11eeCc813A036089D1&quot;,<br>        &quot;amounts&quot;: [<br>          &quot;.01&quot;<br>        ],<br>        &quot;feeLevel&quot;: &quot;MEDIUM&quot;,<br>        &quot;entitySecretCiphertext&quot;: &quot;X3SmZsKFMaxvHyRozJwcjocgENO3kv6eq9tZqrdW4i+6dzWwHeQ7Jas7O4nBrf8bCnKMOke3omcuAdprJm+5ZYH+z7BYCgIZuUlrR3idJsMhmO2+poxUL/PvMF7M+z2bzGEBPZPif/beQUlQ8b1g2JAi7VcOddfTq9LRw8HWq9GHuwV4wjhnSoIZdklp84Gmv8N+jzDjEQbinyy4mlIHZlpfYmY2CO+Flkqdu/FGIz/YZUkITcGQ+xMxwL3NZ+adOOohFL+8q52zWIqQt/7Arw2wO9Cu5vo441tY0QnRsbxF6MybsJ/gGVP8S9NxOmYshVcpS8V0Ux5N5W8v9bBMB8Bsezlhb3I6VpHY3hElQseYwzNDAp3eA6hKBkveKmkJQW5Q5vbiRApIRBlpwlc4HtBNRFAE7pU7BLGViRcDoptAs0AKrloUOIO74iy3pqAYj3hjeFVCs+q9zftcmQ3kClD3rChWFDw95wlVlN8XKAj8WDBd2cYhCmFkqZzWRQU3Qmg1Z3Rub4VcNpGrLDsHIoLBrp72rkI08g/FaXJujnhdPM6ppTY9rBo51TjapHK33yIQyNsbYM0q/LdnH0kbTD07GHYF3qfMUqUiKAYC3Zh8B0tXJXNY/jR4qP7kcAUlsj/iYcAcFm3tJBfIOIqshjLcv5S8pXKKFJL3aM7xKPw=&quot;<br>      }&#39;</pre><p>Response</p><pre>{<br>  &quot;data&quot;: {<br>    &quot;id&quot;: &quot;f84f811d-a433-54ef-b300-027ee79adbab&quot;,<br>    &quot;state&quot;: &quot;INITIATED&quot;<br>  }<br>}</pre><p>Check Transfer State</p><pre>curl --request GET \<br>     --url &#39;https://api.circle.com/v1/w3s/transactions/f84f811d-a433-54ef-b300-027ee79adbab&#39; \<br>     --header &#39;accept: application/json&#39; \<br>     --header &#39;authorization: Bearer TEST_API_KEY:3c49129618c3348dc7ceb4659b752df4:ed5a10f941af042f67b272433ad78d1a&#39;</pre><p>Response</p><pre>{<br>  &quot;data&quot;: {<br>    &quot;transaction&quot;: {<br>      &quot;id&quot;: &quot;f84f811d-a433-54ef-b300-027ee79adbab&quot;,<br>      &quot;blockchain&quot;: &quot;MATIC-MUMBAI&quot;,<br>      &quot;tokenId&quot;: &quot;e4f549f9-a910-59b1-b5cd-8f972871f5db&quot;,<br>      &quot;walletId&quot;: &quot;74f423b5-0c14-47ee-bdf6-d1a87b6fb06f&quot;,<br>      &quot;sourceAddress&quot;: &quot;0xe5c73198f9bcdef8d995b377b5108c271799e692&quot;,<br>      &quot;destinationAddress&quot;: &quot;0xc90e058234d4b2db799d787a855ec68d801a53a3&quot;,<br>      &quot;transactionType&quot;: &quot;OUTBOUND&quot;,<br>      &quot;custodyType&quot;: &quot;DEVELOPER&quot;,<br>      &quot;state&quot;: &quot;COMPLETE&quot;,<br>      &quot;amounts&quot;: [&quot;0.01&quot;],<br>      &quot;nfts&quot;: null,<br>      &quot;txHash&quot;: &quot;0x6804311addbfe75de2fe5a58186dd0ce19c5c9f51b82d7247c4d4bf67967d7f2&quot;,<br>      &quot;blockHash&quot;: &quot;0xac05f40184fe4bbd0c22b285b972bf0b6a86b56deccc05b4a102c0f699163d0f&quot;,<br>      &quot;blockHeight&quot;: 39026255,<br>      &quot;networkFee&quot;: &quot;0.000087493544775&quot;,<br>      &quot;firstConfirmDate&quot;: &quot;2023-08-15T16:11:14Z&quot;,<br>      &quot;operation&quot;: &quot;TRANSFER&quot;,<br>      &quot;feeLevel&quot;: &quot;MEDIUM&quot;,<br>      &quot;estimatedFee&quot;: { &quot;gasLimit&quot;: &quot;21000&quot;, &quot;baseFee&quot;: &quot;0.000000015&quot;, &quot;priorityFee&quot;: &quot;4.16635926&quot;, &quot;maxFee&quot;: &quot;4.16635929&quot; },<br>      &quot;refId&quot;: &quot;&quot;,<br>      &quot;abiParameters&quot;: null,<br>      &quot;createDate&quot;: &quot;2023-08-15T16:11:08Z&quot;,<br>      &quot;updateDate&quot;: &quot;2023-08-15T16:12:02Z&quot;<br>    }<br>  }<br>}</pre><p>Wallets can also do contract execution</p><p><a href="https://developers.circle.com/w3s/reference/createdevelopertransactioncontractexecution">Create a contract execution transaction</a></p><h3>Conclusion</h3><p>Once a Developer Controlled Wallet is registered and created, the user flow can be.</p><ul><li>User signs up with OAuth or any web2 login</li><li>Once signed up, the developer can create a new wallet and fund it</li><li>For every user action, the developer can send transactions on the user’s behalf.</li></ul><p>This allows the user to have a familiar experience and the developer is able to manage and track user activity in one dashboard.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*w6Xs07LkXJVi05sqj4n9YQ.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f214c56ce213" width="1" height="1" alt=""><hr><p><a href="https://medium.com/g7-dao/circles-developer-controlled-wallets-f214c56ce213">For Developers: How to Integrate Circle’s Developer Controlled Wallet</a> was originally published in <a href="https://medium.com/g7-dao">G7_DAO</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>