51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

用程序创建Web3掘金机器人实现自动化挣钱

在这篇教程中,将探讨创建一个简单的机器人,用于在去中心加密货币交易所Uniswap v2上寻找三向套利机会。首先,让我们简单了解一些关键概念: * **Uniswap v2:一种去中心化的加密货币交易所,允许用户直接交换不同的代币。** * **三向套利:这是一种策略,涉及三个不同的货币交换,目的是从价格差异中获利。** * **ETH、DAI、USDC:这些是加密货币的类型。ETH是以太坊,DAI和USDC是稳定币,价值通常与美元挂钩。** * ![](https://img1.51tbox.com/static/2024-03-12/col/eeb89165f546eca75993db63586761ac/c540d8d7d6a24a28875dd074b0234d87.jpg) 我们将追踪以下货币对的套利机会: 1. 以太币 (ETH) / (DAI) 2. (DAI) / USDC 3. 美元 (USDC) / 以太坊 (ETH) 我们的套利循环如下: 1. 将1 ETH兑换为DAI 2. 将DAI兑换为USDC 3. 将USDC兑换为ETH 我们创建的套利逻辑如下 ![](https://img1.51tbox.com/static/2024-03-12/col/eeb89165f546eca75993db63586761ac/6dfdeefd9208460b9dd850be59589dae.jpg) 1. 将 1 ETH 兑换为 DAI 2. 将 DAI 兑换为 USDC 3. 将 USDC 兑换为 ETH 代码设计思想及要点...... =============== 1. 设置:导入所需的库(以太) 2. 合约和提供商:我们在Uniswap v2 路由器地址和 ABI案例中定义路由器地址,并设置我们的提供商 URL *(我们将如何连接到 ETH 主网)。* 3. 定义交换金额(1 Eth)并定义代币地址和想要执行的交换路径。 4. 获取交换报价:代码使用"router.getAmountsOut"函数获取给定路径的交换报价。然后它将结果格式化为人类可读的值。 5. 费用: Uniswap 每次交换收取 0.3% 的费用,该费用由他们自动计算。因此,当您使用.getamountsout函数获取掉期报价时,报价已根据 0.3% 的费用进行了调整。 6. 显示价格和利润:然后代码记录价格和利润。它显示以 ETH 为单位的交易。然后计算 ETH 利润以及利润百分比。 ![](https://img1.51tbox.com/static/2024-03-12/col/eeb89165f546eca75993db63586761ac/caffdf15229d4f1690e1873c834e3b36.jpg) 环境设置及程序执行 ========= ‍ ![](https://img1.51tbox.com/static/2024-03-12/col/eeb89165f546eca75993db63586761ac/c64467caa85f43819054b88637ab1241.jpg) 第 1 步 --- 设置 在终端中输入以下提示 ``` mkdir arbitrageswapbot cd arbitrageswapbot ``` 安装库 ``` npm install ethers@5.4.4 ``` 初始化 ``` npm init -y ``` 创建程序 ``` touch uniswapbot.js ```
第 2 步 --- 代码 打开文本编辑器 - 使用Visual Studio Code并打开名为"uniswapbot.js"的文件 粘贴以下代码 ``` // Importing ether's Js const ethers = require('ethers'); // Initialize the router 2 contract const router2Address = '0x7a250d5630b4cf539739df2c5dacb4c659f2488d'; const routerAbi = [     'function getAmountsOut(uint amountIn, address[] memory path) public view returns (uint[] memory amounts)' ]; // Initialize provider with Infura URL const provider = new ethers.providers.JsonRpcProvider('REPLACE WITH YOUR HTTP ENDPOINT'); // Initialize the router contract const router = new ethers.Contract(router2Address, routerAbi, provider); // Define the swap amount and paths const amountIn = ethers.utils.parseEther('1'); const ethAddress = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'; const daiAddress = '0x6B175474E89094C44Da98b954EedeAC495271d0F'; const usdcAddress = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'; const pathETH_DAI = [ethAddress, daiAddress]; const pathDAI_USDC = [daiAddress, usdcAddress]; const pathUSDC_ETH = [usdcAddress, ethAddress]; // Main function to get the swap quotes async function main() {     try {         const currentDate = new Date();         const formattedDate = `${currentDate.toLocaleDateString()} ${currentDate.toLocaleTimeString()}`;         const amountsOutETH_DAI = await router.getAmountsOut(amountIn, pathETH_DAI);         const humanReadableAmountETH_DAI = ethers.utils.formatUnits(amountsOutETH_DAI[1].toString(), 18);         const amountsOutDAI_USDC = await router.getAmountsOut(amountsOutETH_DAI[1], pathDAI_USDC);         const humanReadableAmountDAI_USDC = ethers.utils.formatUnits(amountsOutDAI_USDC[1].toString(), 6);         const amountsOutUSDC_ETH = await router.getAmountsOut(ethers.utils.parseUnits('1', 6), pathUSDC_ETH); // 1 USDC         const humanReadableAmountUSDC_ETH = ethers.utils.formatEther(amountsOutUSDC_ETH[1].toString());        const arbitrageOpportunity = parseFloat(humanReadableAmountETH_DAI) * parseFloat(humanReadableAmountDAI_USDC) * parseFloat(humanReadableAmountUSDC_ETH) ; // Terminal outputs / logs         console.log('PRICES ON UNISWAP V2 WITH 1 ETH @ ' + formattedDate);         console.log(`ETH -> DAI = ${humanReadableAmountETH_DAI} dai`);         console.log(`DAI -> USDC = ${humanReadableAmountDAI_USDC} usdc`);         const ethprofit = (arbitrageOpportunity * humanReadableAmountUSDC_ETH);         const profit = ethprofit <= 0 ? "" : "-";         console.log(`USDC -> ETH = ${(ethprofit).toFixed(6)} eth`);         console.log(`PROFIT = ${profit}${(1 - ethprofit)*100 .toFixed(6)}% `);          } catch (error) {         console.error('Error:', error);     } } // Call the main function main(); ``` 现在您需要做的就是将\*"替换为您的 HTTP 端点"\* 替换为您自己的 http 端点 - 这实质上将我们连接到以太坊主网 ``` constprovider = new ethers.providers.JsonRpcProvider( '替换为您的 HTTP 端点'); ``` 可以通过在QuickNode上注册免费帐户来获得此信息-。 ![](https://img1.51tbox.com/static/2024-03-12/col/eeb89165f546eca75993db63586761ac/a7cd7e633ec9436ea2cbc8efa142824b.jpg) 更新后 单击"保存"即可,代码完成...... 第 3 步 --- 运行代码 要运行代码,请在终端中输入以下内容 ``` node uniswapbot.js ``` 该代码只会执行一次,当然,可以定时自动执行代码, 如果代码成功您将看到以下内容 -------------- ![](https://img1.51tbox.com/static/2024-03-12/col/eeb89165f546eca75993db63586761ac/55283c8b8e744e52b1923094b42a8311.jpg) 你可以看到这种交换不会有利可图...... 注意------这不考虑滑点和gas费 =================== 如果互换变得有利可图,策略可能是使用 Furucombo 上的 Aave 闪贷组合来执行此操作。


赞(10)
未经允许不得转载:工具盒子 » 用程序创建Web3掘金机器人实现自动化挣钱