Circle’s Smart Contract Platform Enables Seamless ETH to USDC Swaps
Circle’s
Smart
Contract
Platform
now
offers
a
streamlined
method
for
swapping
Ethereum
(ETH)
to
USD
Coin
(USDC)
via
a
smart
contract.
This
development
simplifies
the
process
of
deploying
and
interacting
with
smart
contracts,
leveraging
an
SDK
that
includes
wallet
and
gas
abstraction
infrastructure,
according
to
Circle.com.
Prerequisites
To
use
Circle’s
platform
for
ETH
to
USDC
swaps,
ensure
you
have:
-
Remix
IDE
for
writing
and
compiling
smart
contracts. -
Circle
Web3
Services
Account
for
managing
smart
contract
interactions. -
Developer
Controlled
Wallet
for
deploying
and
executing
contract
functions.
Writing
the
Smart
Contract
The
smart
contract
interacts
with
Uniswap
to
perform
token
swaps.
When
ETH
is
deposited,
it
is
converted
to
Wrapped
ETH
(WETH),
which
can
be
swapped
for
USDC
using
Uniswap’s
protocol.
Below
is
the
contract
code:
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity ^0.8.20;
import '@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol';
import '@uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol'; contract SwapExamples { ISwapRouter public immutable swapRouter; address public constant WETH9 = 0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619; address public constant USDC = 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359; uint24 public constant poolFee = 3000; constructor(ISwapRouter _swapRouter) { swapRouter = _swapRouter; } function swapExactInputSingle(uint256 amountIn) external returns (uint256 amountOut) { TransferHelper.safeTransferFrom(WETH9, msg.sender, address(this), amountIn); TransferHelper.safeApprove(WETH9, address(swapRouter), amountIn); ISwapRouter.ExactInputSingleParams memory params = ISwapRouter.ExactInputSingleParams({ tokenIn: WETH9, tokenOut: USDC, fee: poolFee, recipient: msg.sender, deadline: block.timestamp, amountIn: amountIn, amountOutMinimum: 0, sqrtPriceLimitX96: 0 }); amountOut = swapRouter.exactInputSingle(params); } function swapExactOutputSingle(uint256 amountOut, uint256 amountInMaximum) external returns (uint256 amountIn) { TransferHelper.safeTransferFrom(WETH9, msg.sender, address(this), amountInMaximum); TransferHelper.safeApprove(WETH9, address(swapRouter), amountInMaximum); ISwapRouter.ExactOutputSingleParams memory params = ISwapRouter.ExactOutputSingleParams({ tokenIn: WETH9, tokenOut: USDC, fee: poolFee, recipient: msg.sender, deadline: block.timestamp, amountOut: amountOut, amountInMaximum: amountInMaximum, sqrtPriceLimitX96: 0 }); amountIn = swapRouter.exactOutputSingle(params); if (amountIn < amountInMaximum) { TransferHelper.safeApprove(WETH9, address(swapRouter), 0); TransferHelper.safeTransfer(WETH9, msg.sender, amountInMaximum - amountIn); } }
}
Compiling
the
Smart
Contract
Use
Remix
IDE
to
compile
the
contract
to
obtain
the
ABI
(Application
Binary
Interface)
and
bytecode:
-
Create
a
new
file
in
Remix
IDE
and
paste
the
smart
contract
code. -
Select
the
appropriate
Solidity
compiler
version
(0.8.20)
and
compile
the
contract. -
Copy
the
ABI
JSON
and
bytecode
from
the “Compilation
Details”
section.
Deploying
the
Smart
Contract
Deploy
the
compiled
contract
using
Circle’s
SDK:
npm install @circle-fin/smart-contract-platform @circle-fin/developer-controlled-wallets --save
const circleContractSdk = require('@circle-fin/smart-contract-platform');
const developerControlledWallets = require('@circle-fin/developer-controlled-wallets'); const response = await circleContractSdk.deployContract({ name: 'Swap Contract', description: 'Contract for swapping WETH9 to USDC using Uniswap', walletId: '046b6c7f-0b8a-43b9-b35d-6489e6daee91', blockchain: 'MATIC-AMOY', fee: { type: 'level', config: { feeLevel: 'MEDIUM' } }, constructorParameters: ['0xYourWalletAddress'], entitySecretCiphertext: '0NtD3d3+nmgb4GqYQXzAjKF8h5Zq6sHM2k/...', abiJSON: '[...]', bytecode: '0x...'
});
Upon
successful
deployment,
you
will
receive
a
contractId
and
transactionId
for
reference.
Interacting
with
the
Deployed
Contract
To
perform
token
swaps
using
the
deployed
contract:
const response = await circleDeveloperSdk.createContractExecutionTransaction({ walletId: 'ce714f5b-0d8e-4062-9454-61aa1154869b', contractAddress: '0x2f3A40A3db8a7e3D09B0adfEfbCe4f6F81927557', abiFunctionSignature: 'swapExactInputSingle(uint256)', abiParameters: [1000], fee: { type: 'level', config: { feeLevel: 'MEDIUM' } }
});
Conclusion
Circle’s
Smart
Contract
Platform
provides
an
efficient
solution
for
deploying
and
managing
smart
contracts
to
swap
ETH
to
USDC.
By
leveraging
Circle’s
SDK,
developers
can
easily
execute
transactions
on
the
blockchain.
Image
source:
Shutterstock
Comments are closed.