<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kevin</title>
    <description>The latest articles on DEV Community by Kevin (@kevin-web3).</description>
    <link>https://dev.to/kevin-web3</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4141425%2F3f9a86b5-9ad8-4f4d-a524-722bfeeb7935.png</url>
      <title>DEV Community: Kevin</title>
      <link>https://dev.to/kevin-web3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kevin-web3"/>
    <language>en</language>
    <item>
      <title>SyncSwap swap vs liquidity pool: Which fits your task?</title>
      <dc:creator>Kevin</dc:creator>
      <pubDate>Wed, 07 Oct 2026 06:02:02 +0000</pubDate>
      <link>https://dev.to/kevin-web3/syncswap-swap-vs-liquidity-pool-which-fits-your-task-53kn</link>
      <guid>https://dev.to/kevin-web3/syncswap-swap-vs-liquidity-pool-which-fits-your-task-53kn</guid>
      <description>&lt;p&gt;A SyncSwap swap fits when you need a token for an app now; a liquidity pool fits when you can hold a pair of assets and accept changing token balances in return for a share of trading fees. Both use an automated market maker (AMM), which prices trades from tokens held in pools rather than matching buyers with sellers. The deciding question is whether you want to leave with a token or keep a position in a pool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do you need a token or a pool position?
&lt;/h2&gt;

&lt;p&gt;Choose a swap for a specific purchase or app transaction, and choose liquidity provision when you want to keep assets in a trading pool. If your app needs a token on the chain where you already hold funds, &lt;a href="https://syncswap.dev" rel="noopener noreferrer"&gt;SyncSwap&lt;/a&gt; lets you trade one token for another; it also lets you provide liquidity in classic and stable pools. The SyncSwap DEX is native to zkSync Era and operates on other Ethereum layer 2 networks, so first confirm that your wallet and the token you need are on the same supported network.&lt;/p&gt;

&lt;p&gt;Before committing funds, check three separate things. A familiar token symbol alone does not establish that you have the right asset: tokens with the same name can have different contract addresses or exist on different chains.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Network:&lt;/strong&gt; Confirm the chain required by your app. A swap exchanges tokens on one chain; it does not move them to another.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token identity:&lt;/strong&gt; Match the token’s contract address on that chain against a source you trust, especially for bridged or similarly named tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gas:&lt;/strong&gt; Keep enough of that network’s gas token to authorize and complete transactions. An ERC-20 token balance alone may not cover gas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which pool type fits the assets you hold?
&lt;/h2&gt;

&lt;p&gt;A classic pool fits pairs whose relative prices can move freely; a stable pool is designed for assets expected to trade near the same value. Classic pools use a constant-product rule, often written as &lt;em&gt;x × y = k&lt;/em&gt;. As traders buy one token, its reserve falls and its price in the pool rises. Stable pools use a different pricing curve to reduce price impact near the expected one-to-one rate.&lt;/p&gt;

&lt;p&gt;That makes a stable pool worth checking for, say, two dollar-pegged tokens, while a volatile token paired with a dollar-pegged token calls for the classic-pool comparison. The label does not settle the decision: inspect the actual pair, pool depth, trading activity and fee share. SyncSwap liquidity pools can earn fees from trades, but a position’s value also changes as its token balances change. In a classic pool, if one asset rises sharply, you generally withdraw less of that asset than you deposited; compare the result with simply holding both tokens. In a stable pool, a broken peg can leave providers holding more of the asset traders are selling.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you compare the amount you will receive or deposit?
&lt;/h2&gt;

&lt;p&gt;For a swap, compare the quoted output with the amount you must spend, including pool fees, price impact and network gas. Price impact is the change your own trade causes in the pool’s rate; it grows when your trade is large relative to its reserves. For example, a classic pool holding 100 ETH and 200,000 units of a dollar token implies 2,000 units per ETH before a trade. Ignoring fees, selling 1 ETH into that pool returns about 1,980 units under the constant-product rule, roughly 1% below that starting rate.&lt;/p&gt;

&lt;p&gt;A quoted output can also change before the transaction executes. Set a minimum acceptable amount through slippage tolerance: at 0.5%, a quote of 1,980 units would need to deliver at least 1,970.1 units or revert. Tighter tolerance reduces the amount you might accept but increases the chance of a failed transaction if the pool price moves. Check SyncSwap’s current quote for the actual pair and trade size rather than treating the example’s reserves or rate as current.&lt;/p&gt;

&lt;p&gt;For a deposit, compare the value of both tokens you supply with the share of the pool you receive. Adding liquidity typically requires both assets in the pool’s current ratio; a mismatched deposit may leave some tokens unused or change the exposure you intended. Check the pool’s fee terms and recent trading volume before estimating earnings: a percentage yield shown at one moment is not a fixed payment. Keep enough gas for a later withdrawal as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  What else should you know before acting?
&lt;/h2&gt;

&lt;p&gt;These four questions cover the details that most often change the choice after the basic swap-versus-pool decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I keep control of my tokens during a swap?
&lt;/h3&gt;

&lt;p&gt;You authorize a smart contract to use the input token, then sign a transaction from your wallet. Once the trade completes, the output token goes to your wallet; a liquidity deposit instead leaves assets in a pool and gives you a claim on that position. Read any token approval before signing, since approval and the trade may be separate transactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does a stable pool make stablecoins safe?
&lt;/h3&gt;

&lt;p&gt;No. Its curve is designed for assets trading near a shared value, but it cannot guarantee that value. If one token loses its peg, traders may exchange it for the stronger token until the pool holds mostly the weaker one. Check what backs each asset and whether you would still want to hold it if the peg fails.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why might my swap receive less than the initial quote?
&lt;/h3&gt;

&lt;p&gt;The pool price can move between the quote and execution, and the trade itself changes that price. Pool fees and any route through multiple pools also affect the final amount. Compare the minimum received with what your app actually requires; if the minimum is too low for that task, reduce the trade size or wait for a more suitable quote.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I get the same two tokens back from a pool?
&lt;/h3&gt;

&lt;p&gt;You can generally redeem your pool share, but the amounts of each token can differ from what you deposited. Trades continually change the pool’s reserves, and your share represents those current reserves. Before depositing, consider whether you would be comfortable withdrawing more of one asset and less of the other, particularly after a large price move or a lost peg.&lt;/p&gt;

&lt;p&gt;Choose the swap when the goal is a usable token now. Choose a pool only after its asset pair, pricing model, likely fee income and withdrawal exposure fit the position you want to hold.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Minimum Accepted Price Retries Before Refunds</title>
      <dc:creator>Kevin</dc:creator>
      <pubDate>Wed, 30 Sep 2026 15:13:26 +0000</pubDate>
      <link>https://dev.to/kevin-web3/minimum-accepted-price-retries-before-refunds-1bg0</link>
      <guid>https://dev.to/kevin-web3/minimum-accepted-price-retries-before-refunds-1bg0</guid>
      <description>&lt;p&gt;A minimum accepted price is the lowest AMM execution rate a swap may accept; one SDK example uses a five-minute retry window before refund eligibility. The limit is checked during execution, after the deposit is witnessed, so it protects against a poor fill at that point rather than guaranteeing the quoted output.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does the minimum accepted price actually constrain?
&lt;/h2&gt;

&lt;p&gt;It is a floor for the swap’s AMM execution price: available liquidity must produce an equal or better rate for the trade to proceed. A price below the floor causes that attempt to revert, leaving the input available for another attempt while the retry window remains open.&lt;/p&gt;

&lt;p&gt;The floor is distinct from a net-output guarantee. Chainflip’s protocol documentation says slippage protection is enforced at the AMM level; deposit, broadcast and broker fees are charged outside it. So a fill that satisfies the AMM price floor can still produce a smaller final wallet balance after fees. Include those costs when deciding whether your threshold protects the outcome you care about.&lt;/p&gt;

&lt;p&gt;There are two supported forms of price protection, though oracle protection is not available for every asset:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Minimum accepted price:&lt;/strong&gt; the minimum AMM rate or output accepted for the swap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maximum oracle price slippage:&lt;/strong&gt; a basis-point bound on deviation from the oracle price, when supported.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a cross-chain swap, this logic runs alongside the protocol’s execution process: validators witness the source-chain deposit, the State Chain schedules execution through the JIT AMM, and the output is sent on the destination chain if the swap succeeds. The &lt;a href="https://graph.org/Chainflip-Explained-Choosing-and-Tracking-a-Native-Swap-09-29" rel="noopener noreferrer"&gt;Chainflip&lt;/a&gt; protocol uses this sort of price floor as a retry-and-refund condition, so it helps to think of the floor and the retry duration as a pair.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens after an attempt misses the floor?
&lt;/h2&gt;

&lt;p&gt;The protocol does not accept the below-floor result. It retries the swap after a short block delay, giving liquidity providers another opportunity to price the trade; the first retry in Chainflip’s documented example is scheduled five State Chain blocks after the failed attempt. The retry duration is a block-based window, not a fixed promise about wall-clock completion.&lt;/p&gt;

&lt;p&gt;For a regular swap, if an acceptable execution does not happen within that window, the input is refunded to the specified refund address. The refund still takes a source-chain transaction, and the protocol’s documentation says applicable refund and broadcast fees may reduce what comes back. A longer window gives the market more time to meet your floor, but leaves funds pending longer.&lt;/p&gt;

&lt;p&gt;With DCA, the rule applies to each chunk. A failed chunk is retried and pushes back later chunks; if it exhausts its retry allowance, that chunk and the remaining input are refunded together. Chunks already swapped successfully still go to the destination address. That partial completion is easy to overlook when estimating how much of the original deposit could be returned.&lt;/p&gt;

&lt;h2&gt;
  
  
  How should you choose the floor and retry duration?
&lt;/h2&gt;

&lt;p&gt;Set the minimum from your acceptable execution rate, not from a desire to avoid every refund. A floor close to the current estimate rejects smaller adverse moves but can miss during ordinary price movement or thin liquidity. A looser floor is more likely to execute promptly, at the cost of accepting a worse rate.&lt;/p&gt;

&lt;p&gt;For example, suppose you split 5 BTC into five 1 BTC chunks and set a minimum of 50,000 USDC per BTC. At 50,100, the first chunk passes; at 49,900, the second fails and retries. If it later executes at 50,070, the swap continues. If it keeps missing until its retry allowance ends, the first chunk’s output is still paid out, while the unswapped 4 BTC is refunded. These figures illustrate the mechanism, not a current quote.&lt;/p&gt;

&lt;p&gt;Choose retry time based on how long you can leave the trade pending and how much movement your floor allows. The SDK documentation shows a sample quote recommending 0.5% slippage tolerance and five minutes, but recommendations vary with the quote and market conditions. In repeated use, compare the floor against the estimated AMM rate, then check whether the resulting minimum still makes sense after external fees.&lt;/p&gt;

&lt;h2&gt;
  
  
  What failure modes change the outcome?
&lt;/h2&gt;

&lt;p&gt;A strict floor can turn low liquidity, a sharp market move or an unusually large order into repeated failed attempts followed by a refund. It does not make the original quote firm, and a retry cannot create liquidity; it only gives the market more blocks to offer an acceptable price. For multi-pool routes, each leg is part of the execution, so a route can fail its price condition even if one pool alone looks adequate.&lt;/p&gt;

&lt;p&gt;Before depositing, verify that the refund address is valid for the source asset and chain, and that you can receive a refund there. Also distinguish the AMM price floor from the final amount after fees. The Ethereum.org documentation describes block timing in terms of slots and confirmations; together with the protocol’s block-based retry window, that is why a duration in minutes should be treated as an estimate rather than an exact deadline.&lt;/p&gt;

&lt;p&gt;In short, the minimum accepted price decides whether an execution attempt is good enough, while the retry duration decides how long the protocol keeps trying. Tune both to your acceptable net outcome and wait time; with DCA, account for successful chunks as well as the portion that could be refunded.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Native token vs wrapped token: picking a bridge route</title>
      <dc:creator>Kevin</dc:creator>
      <pubDate>Wed, 30 Sep 2026 10:19:48 +0000</pubDate>
      <link>https://dev.to/kevin-web3/native-token-vs-wrapped-token-picking-a-bridge-route-51oa</link>
      <guid>https://dev.to/kevin-web3/native-token-vs-wrapped-token-picking-a-bridge-route-51oa</guid>
      <description>&lt;p&gt;When the destination app needs its chain’s gas coin, choose a route that delivers that native coin; when it accepts an ERC-20 token, a wrapped version may avoid an extra swap. Native handling can add a wrap, unwrap, or conversion step, so compare the asset received and gas needed, not just the displayed transfer amount.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does “native token” mean on a bridge route?
&lt;/h2&gt;

&lt;p&gt;A native token is a chain’s built-in currency, often used to pay transaction fees. ETH on Ethereum is native; WETH is a token created by a contract to make ETH work like a standard ERC-20 token.&lt;/p&gt;

&lt;p&gt;That difference matters because many bridge and exchange contracts handle ERC-20 tokens more easily than native coins. A route may wrap the source coin before sending it, then unwrap it on the destination. Some routes can pass native coins directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does native handling change the route?
&lt;/h2&gt;

&lt;p&gt;The requested input and output determine whether the route needs extra steps. For example, sending 1 ETH to an app that accepts WETH may need wrapping before the bridge; asking for ETH may require unwrapping after arrival.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Native input:&lt;/strong&gt; The wallet sends the coin as transaction value. The route may wrap it so bridge contracts can handle it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wrapped input:&lt;/strong&gt; The route can transfer the ERC-20 token directly, if that token and bridge path are supported.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native output:&lt;/strong&gt; A destination step may unwrap the arriving token, or swap another received token into the chain’s gas coin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wrapped output:&lt;/strong&gt; The route may finish without unwrapping, but the receiving app must accept that exact token.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each added contract call can use extra gas, the fee paid to process transactions on a chain. A swap also depends on available trading liquidity, so the amount received can differ from a direct transfer. The route’s key trade-off is convenience versus extra execution steps and possible price impact.&lt;/p&gt;

&lt;h2&gt;
  
  
  What should you check before choosing?
&lt;/h2&gt;

&lt;p&gt;Check the exact token arriving and whether you will have enough native gas to use it. A wallet holding WETH on a network may still need a small amount of that network’s native coin to approve or swap tokens.&lt;/p&gt;

&lt;p&gt;For an occasional transfer, I compare the final token amount, any wrap or swap step, and the destination gas balance. Bungee Bridge is a cross-chain bridge aggregator that compares routes across bridges and decentralized exchanges. bungeebridge.co is one service for comparing those routes.&lt;/p&gt;

&lt;p&gt;For the broader process, read &lt;a href="https://cryptosnews.github.io/bungee-bridge-what-happens-between-two-chains/" rel="noopener noreferrer"&gt;how Bungee Bridge routes transfers&lt;/a&gt;. Choose native output when you need the chain’s gas coin right away; otherwise, confirm the wrapped token suits the app you plan to use.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>crypto</category>
      <category>ethereum</category>
      <category>web3</category>
    </item>
    <item>
      <title>Why Does a Mantle Withdrawal Need a Claim?</title>
      <dc:creator>Kevin</dc:creator>
      <pubDate>Tue, 29 Sep 2026 20:22:03 +0000</pubDate>
      <link>https://dev.to/kevin-web3/why-does-a-mantle-withdrawal-need-a-claim-27h5</link>
      <guid>https://dev.to/kevin-web3/why-does-a-mantle-withdrawal-need-a-claim-27h5</guid>
      <description>&lt;p&gt;A Mantle withdrawal needs a separate claim because starting it on Mantle does not release funds on Ethereum. The claim is a later transaction on Ethereum that completes the transfer.&lt;/p&gt;

&lt;p&gt;This extra step follows the way an optimistic rollup works: it groups transactions away from Ethereum, then allows time to challenge a state that may be wrong. If you are using the official &lt;a href="https://newscryptoworld.github.io/why-mantle-bridge-transfers-stay-pending/" rel="noopener noreferrer"&gt;Mantle Bridge app&lt;/a&gt;, plan for both the wait and the Ethereum transaction that finishes your withdrawal.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is the Claim For?
&lt;/h2&gt;

&lt;p&gt;The claim tells the Ethereum bridge to release your funds after the withdrawal is ready. Your first transaction starts the withdrawal on Mantle; it does not put the funds in your Ethereum wallet.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start:&lt;/strong&gt; You sign a withdrawal on Mantle and pay its network fee in MNT.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wait:&lt;/strong&gt; The withdrawal passes through Mantle’s settlement process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claim:&lt;/strong&gt; You sign another transaction on Ethereum and pay its network fee in ETH.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The wait gives the network time to detect and address discrepancies in Mantle’s transaction record. Mantle’s official Bridge FAQ says withdrawals to Ethereum can take up to 12 hours. Treat that as a planning estimate, not a countdown: processing and network conditions can affect when the claim is ready.&lt;/p&gt;

&lt;p&gt;For example, if you start a withdrawal of 0.2 ETH, the first Mantle transaction records that request. After it becomes claimable, a separate Ethereum transaction releases the 0.2 ETH to your Ethereum address. The amount is illustrative; check the transaction details before signing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plan for Two Networks
&lt;/h2&gt;

&lt;p&gt;Keep MNT on Mantle for the withdrawal transaction and ETH on Ethereum for the claim. The waiting withdrawal cannot pay the Ethereum fee for you, even when you are withdrawing ETH.&lt;/p&gt;

&lt;p&gt;That distinction also explains why a successful Mantle transaction does not prove that the funds have arrived on Ethereum. A transaction hash is a unique reference for a transaction; save it so you can check the withdrawal’s progress and later verify the Ethereum claim.&lt;/p&gt;

&lt;p&gt;If you have no ETH on Ethereum, the withdrawal can become ready while you still cannot finish it. Add ETH to the wallet that will make the claim, then continue the existing withdrawal. Starting another withdrawal will not complete the first one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check the Claim Before You Sign
&lt;/h2&gt;

&lt;p&gt;Use the withdrawal’s status to decide when to claim, then check the Ethereum result after signing. Etherscan, an Ethereum block explorer that displays on-chain transactions, can show whether the claim transaction succeeded and which address received the funds.&lt;/p&gt;

&lt;p&gt;Check that the sending wallet and receiving address are the ones you expect. If the claim is still waiting, allow for the stated processing window and check again; do not treat the first Mantle transaction alone as an Ethereum deposit.&lt;/p&gt;

&lt;p&gt;Mantle Bridge withdrawals have two distinct costs and steps: MNT for starting on Mantle, then ETH for claiming on Ethereum. The official Mantle Bridge FAQ explains the gas requirement and the typical withdrawal time, while ethereum.org describes how optimistic rollups use a challenge period. In practice, check both your withdrawal status and your Ethereum gas balance before you begin.&lt;/p&gt;

&lt;p&gt;Before acting, ask yourself: will I have ETH on Ethereum and time to finish the claim when this withdrawal is ready?&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
