去中心化交易所套利夹子机器人开发技术 - 知乎切换模式写文章登录/注册去中心化交易所套利夹子机器人开发技术软件开发技术猿 通过布署在UNISWAP(以太坊去中心化交易所)、PANCAKESWAP(币安智能链薄饼去中心化交易所)、SUNSWAP(波场链去中心化交易所)DEX中的抢单机器人,通过监控链上交易数据实现毫秒级高频抢单响应 具体工作原理: 通过检测sawp所有交易兑寻找滑点利润,当机器人检测到有大户挂单后通过提高gas费和燃烧区块提前买入当真实用户买入后价格已经抬高,机器人再陆续出货从而实现盈利! 本属于计算机技术领域,尤其涉及一种去中心化交易所激励方法、设备及储存介质。 背景技术: 2.在去中心化自动做市商交易所中,合约交易手续费是针对两种不同状态收取——taker(也称主动成交)和maker(被动成交) 3.maker,就是深度制造者。很简单,如果你下一个委托单,因为价格高或低,不能和已有的委托马上成交,那么你的委托就会被加入到交易所的深度里。这样你就为交易所提供了深度,即通俗意义上的挂单,也可以理解为“在深度区里挂住了的单子的一方”,不过这里需要提醒下有些单子虽然挂住了,但前台并不显示,那么这个单子还处于排队状态。 4.taker,就是拿走深度的一方。也很简单,如果你的委托单和已有的委托马上成交,那么你的委托会“拿走”深度,也就是通俗意义上的吃单,可以理解为“吃掉深度区单子的一方”。 5.从流动性角度来看,挂单一方能够增加交易系统的流动性而吃单一方则会提取交易系统的流动性,为了保证交易系统的流动性,目前很多去中心化交易系统会为提供流动性的订单发放激励,来增加交易系统的流动性,最普遍的是采用固定收益的方法进行激励,但是,目前的去中心化交易系统还会存在无常损失的问题,因为有这样的损失,引起系统必须要有大量的激励,才能覆盖无常损失的成本,这样日常的手续费,可能都无法覆盖提供流动性带来的损失。 6.另一方面,并非所有时候都需要增加系统的流动性,当订单量满足一定量时,流动性较好,则无需进行流动性激励,只有在流动性较差时增加流动性的意义会更大,另一方面,价格偏离较大的订单虽然也提供了流动性,但是因为偏离价格太远,短期内无法成交,这样的订单其价值远不及订单价格与最近成交价格接近的订单。 技术实现要素: 7.为了解决上述问题,提供了去中心化交易所激励方、设备及储存介质,能够根据交易系统的流动性情况和订单的实际贡献进行激励。 8.采用以下技术方案。 9.第一方面,提供一种去中心化交易所激励方法,包括如下内容: 10.去中心化交易所系统,底层为区块链网络; 11.系统通证,由去中心化交易所系统发行,定期由去中心化交易所系统采用手续费进行回购; 12.taker,交易的吃单方,交易时承担交易的手续费; 13.maker,交易的挂单方,交易时获取部分手续费并奖励所述系统通证; 14.激励周期; 15.基础激励率,固定激励; 16.动态激励率,根据流动性变化而增减的激励; 17.所述方法适用于调整maker所获得的系统通证奖励,所述方法用于整体激励率调整,所述方法包括: 18.获取激励周期内订单的最近成交价接近率,所述最近成交价接近率满足如下公式: 19.r=abs(p-p1)/p1 20.其中,r为最近成交价接近率,p为当前订单成交价,p1为成交顺序在当前订单前一位的订单的成交价; 21.判断订单最近成交价接近率是否小于等于设定阈值,若是则该订单为有效订单; 22.统计得到激励周期内的有效订单数量; 23.流动性判定规则根据第一成交总量和激励周期内的有效订单数量判定所述激励周期的流动性;发布于 2022-06-20 15:02去中心化机器人去中心化交易所(DEX)赞同 7添加评论分享喜欢收藏申请
基于UniswapV2闪电贷的OneSwap套利指南 - 掘金
首页 首页
沸点
课程
直播
活动
竞赛
商城
APP
插件 搜索历史
清空
创作者中心
写文章 发沸点 写笔记 写代码 草稿箱 创作灵感
查看更多
会员
登录
注册
基于UniswapV2闪电贷的OneSwap套利指南
OneSwap中文社区
2020-09-30
5,587
Oneswap项目在恒定函数做市商(Constant Function Market Maker,CFMM)模型的基础之上引入链上订单簿来改善自动做市商(Automated Market Maker,AMM)的交易体验。用户可以像中心化交易所那样进行挂单和撤单,链上的订单撮合逻辑会按照用户的挂单需求交替与交易池和订单簿中的对手单进行撮合,从而为用户提供最理想的平均成交价格。
UniswapV2版本上线了闪电贷FlashSwap的功能,该功能允许任何人在调用任意pair合约的swap方法时,可以先从Uniswap的交易池中借出一定数量的代币,从其他合约中进行套利,随后给pair返还足够的代币,最终实现近乎0成本的套利行为。
为了帮助用户更好地利用Uniswap的闪电贷功能从OneSwap的订单簿中套利,抹平Uniswap和Oneswap项目之间的价格差,我们提供了这份套利指南,并且部署好了所需的套利合约,用户只需在发现有套利空间的时候执行一次Uniswap的swap调用,即可从中获利。
1. 套利发现
假设UniswapV2的ABC/USDT交易对目前的交易池状态为(100ABC,40000USDT),同时Oneswap的ABC/USDT交易池状态为(100ABC,43000USDT),同时还存在其他无法与交易池成交的买卖单,即不高于430=43000/100价格的买单,和不低于430的卖单。此时,Uniswap的ABC/USDT交易对和Oneswap的ABC/USDT交易对之间存在较大价差,也就存在相应的套利空间。
2. swap
在发现了套利空间的存在之后,用户需要在链下自行计算本次需要借贷的代币种类和数量。
在本例中,用户需要从UniswapV2的ABC/USDT交易池中借出ABC,拿到Oneswap的ABC/USDT交易对市场中卖出,并将换回的USDT的一部分返还给Uniswap的ABC/USDT交易池,剩余的USDT即为本次交易的套利收益。假设用户经过计算后,决定从Uniswap的ABC/USDT交易池中借出10个ABC,然后按照如下参数调用UniswapV2Pair合约实例的swap方法:
// 假设在uniswap的ABC/USDT交易对中,ABC对应token0,USDT对应token1.
// 此处表示需要从pair中借出10个ABC,0个USDT
swap(10,0,flashSwapAddr,data)
这里的flashSwapAddr为部署好的套利合约的地址,data为传给套利合约的参数,套利合约的介绍参见下一小节。
3. 套利合约
套利合约是事先部署好的帮助用户进行闪电贷套利的合约实现,它实现了UniswapV2所定义的如下接口,以供UniswapV2Pair在进行swap时对外部合约进行调用:
interface IUniswapV2Callee {
function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;
}
对于普通用户而言,需要了解的仅仅是在第二步中调用swap方法时传入的后两个参数:该合约的地址,以及data字段。data字节数组中编码了两个布尔类型的值(token0IsStock,isOnlySwap)。由于oneswap的工厂合约在创建交易对实例时,针对(ABC,USDT)代币对可以创建出四个交易对市场:(stock=ABC,money=USDT,不支持订单簿)、(stock=ABC,money=USDT,支持订单簿)、(stock=USDT,money=ABC,不支持订单簿)、(stock=USDT,money=ABC,支持订单簿),因此用户需要通过设定这两个布尔变量来指定自己的oneswap目标套利市场是哪个。
在拿到了这两个输入之后,套利合约就会尝试在目标市场进行市价交易,并计算交易后得到的token是否足以返还给UniswapV2的交易对。如果不够的话,整笔交易就会失败,反之,如果足够,则会将需要返还的token数量返还给UniswapV2的pair,剩余的token转给用户。
在此例中,假设用户给定的输入是(true,false)并且uniswap ABC/USDT 交易对的token0为ABC。套利合约将尝试从(stock=ABC,money=USDT,支持订单簿)的oneswap 交易对市场中添加出售10个ABC的市价单。由于订单簿市场的存在,在此无法预估10个ABC能够兑换出的USDT数量,但只要该数量能够超过需要返还给UniswapV2Pair ABC/USDT 合约实例的USDT数量,用户就可以从中获利。
最后,附上套利合约的源码以及发送swap交易的示例脚本,相关源码存储在目录下,供用户参考。
合约源码
套利合约源码如下,在ETH主网上的部署地址为(TODO):
pragma solidity 0.6.12;
import './libraries/UniswapV2Library.sol';
import './interfaces/IUniswapV2Pair.sol';
import './interfaces/IOneswapPair.sol';
import './interfaces/IERC20.sol';
import './interfaces/IUniswapV2Factory.sol';
import './interfaces/IOneSwapFactory.sol';
import './interfaces/IWETH.sol';
struct PairInfo{
address token0;
address token1;
address token0ForOneswap;
address token1ForOneswap;
bool token0IsStock;
bool isOnlySwap;
}
contract FlashSwap {
// uniswap 工厂合约地址
address public immutable uniswapFactory;
// oneswap 工厂合约地址
address public immutable oneswapFactory;
// weth 地址
address public immutable weth;
event AmountReturn(address,address,uint256);
constructor(address _factory, address _oneswapFactory, address _weth) public {
uniswapFactory = _factory;
oneswapFactory = _oneswapFactory;
weth = _weth;
}
receive() external payable { }
function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external{
PairInfo memory pairInfo;
pairInfo.token0 = IUniswapV2Pair(msg.sender).token0();
pairInfo.token1 = IUniswapV2Pair(msg.sender).token1();
pairInfo.token0ForOneswap = (pairInfo.token0 == weth) ? address(0) : pairInfo.token0;
pairInfo.token1ForOneswap = (pairInfo.token1 == weth) ? address(0) : pairInfo.token1;
address uniswapPair = IUniswapV2Factory(uniswapFactory).getPair(pairInfo.token0,pairInfo.token1);
{
// 该调用必须由uniswap pair发起
assert(msg.sender == uniswapPair);
require(amount0 == 0 || amount1 == 0,'Either amount0 or amount1 should be zero'); // this strategy is unidirectional
}
address pairAddress;
{
// data参数用来帮助合约寻找用户套利的oneswap pair目标
(pairInfo.token0IsStock, pairInfo.isOnlySwap) = abi.decode(data,(bool,bool));
address stock = pairInfo.token0IsStock ? pairInfo.token0ForOneswap: pairInfo.token1ForOneswap;
address money = pairInfo.token0IsStock ? pairInfo.token1ForOneswap: pairInfo.token0ForOneswap;
pairAddress = IOneSwapFactory(oneswapFactory).tokensToPair(stock,money,pairInfo.isOnlySwap);
require(pairAddress != address(0), 'OneSwap Pair does not exist!');
}
IOneSwapPair pair = IOneSwapPair(pairAddress);
(uint reserve0,uint reserve1,) = IUniswapV2Pair(uniswapPair).getReserves();
if (amount0 > 0) {
// 如果借出的是token0,则在oneswap pair中添加市价单,将amount0数量的token0卖出,
// 并计算需要返还给uniswap pair的token1的最小数目
// 如果通过在oneswap pair出售token0获得的token1的数量大于以上计算的最小数目,
// 则将向uniswap pair返还该最小数目的token1,并将剩余数量的token1转给用户
_safeTransferWETHToETH(pairInfo.token0, pairAddress, amount0);
uint amountReceived = pair.addMarketOrder(pairInfo.token0ForOneswap,address(this),uint112(amount0));
uint amountRequired = UniswapV2Library.getAmountIn(amount0, reserve1, reserve0);
require(amountReceived > amountRequired,'No profit to earn');
_safeTransferETHToWETH(pairInfo.token1,msg.sender,amountRequired);
_safeTransfer(pairInfo.token1, sender,amountReceived - amountRequired);
emit AmountReturn(pairInfo.token1, sender, amountReceived - amountRequired);
} else {
// 如果借出的是token1,则在oneswap pair中添加市价单,将amount1数量的token1卖出,
// 并计算需要返还给uniswap pair的token0的最小数目
// 如果通过在oneswap pair出售token1获得的token0的数量大于以上计算的最小数目,
// 则将向uniswap pair返还该最小数目的token0,并将剩余数量的token0转给用户
_safeTransferWETHToETH(pairInfo.token1, pairAddress, amount1);
uint amountReceived = pair.addMarketOrder(pairInfo.token1ForOneswap,address(this),uint112(amount1));
uint amountRequired = UniswapV2Library.getAmountIn(amount1, reserve0, reserve1);
require(amountReceived > amountRequired,'No profit to earn');
_safeTransferETHToWETH(pairInfo.token0,msg.sender,amountRequired);
_safeTransfer(pairInfo.token0, sender, amountReceived - amountRequired);
emit AmountReturn(pairInfo.token0, sender, amountReceived - amountRequired);
}
}
function _safeTransferWETHToETH(address token, address to, uint amount) internal {
if (token == weth){
IWETH(weth).withdraw(amount);
_safeTransferETH(to,amount);
}else{
require(IERC20(token).transfer(to,amount),'ERC20 transfer failed');
}
}
function _safeTransferETHToWETH(address token, address to, uint amount) internal {
if (token == weth){
IWETH(weth).deposit{value:amount}();
require(IWETH(weth).transfer(to, amount),'WETH transfer failed');
}else{
require(IERC20(token).transfer(to,amount),'ERC20 transfer failed');
}
}
function _safeTransfer(address token, address to, uint amount) internal {
if (token == weth){
_safeTransferETH(to, amount);
}else{
require(IERC20(token).transfer(to,amount),'ERC20 transfer failed');
}
}
function _safeTransferETH(address to, uint value) internal {
(bool success,) = to.call{value:value}(new bytes(0));
require(success, 'ETH transfer failed');
}
}
Web3脚本
发送swap交易的示例脚本如下:
const uniswapPair = artifacts.require('UniSwapV2Pair');
// 在使用时,用户需要替换为eth主网上相应的合约地址
const flashSwapAddr = '0x82c102D3f260216F8E57C161A8f6B9996Ca5B6d2';
const uniswapPairAddr = '0x5F6E9Ce32ab4821cB62B315361E7307Fb80EDc2a';
async function flashSwap(){
pair = await uniswapPair.at(uniswapPairAddr);
bytes = web3.eth.abi.encodeParameters(['bool','bool'],[true,false]);
result = await pair.swap(100,0,flashSwapAddr,bytes);
console.log(result.logs);
}
async function exit(){
process.exit(1);
}
module.exports = async function(){
await flashSwap();
await exit();
}
原文:OneSwap Series 2 - How to configure smart contracts》
链接:medium.com/@OneSwap/ho…
翻译:OneSwap中文社区
OneSwap中文社区
14
文章
17k
阅读
30
粉丝 目录 收起
1. 套利发现
2. swap
3. 套利合约
合约源码
Web3脚本
相关推荐 BRC-20标准与铭文 Ordi 技术原理解析 251阅读 · 3点赞加密钱包助记词丢失后的一天 1.5k阅读 · 10点赞Axie Infinity 之后,Ronin 的潜力何在? 1.0k阅读 · 0点赞Solidity 数组删除指定位置元素及指定位置新增元素 864阅读 · 1点赞Python脚本自动化篆刻雪崩链Avalanche铭文$AVAL 2.2k阅读 · 2点赞 友情链接:
男主请离我远点咸鱼火锅
满级大佬她又在装傻
主角秦怀道穿越大唐
龙传秘宝小说在线阅读免费
裴少的甜宠妻
吹雪神医
以太坊的核心在于, 利用其灵活的智能合约允许开发者探索无需许可应用程序的新领域。建立在以太坊上的去中心化金融协议 (DeFi) 正爆炸性增长,我们从中瞥见未来该创新可以给我们带来什么。
正如第一次互联网革命中的编程库一样,DeFi 作为“金钱乐高”允许开发者通过组合与混用简单的区块来构建出复杂的系统。这种复杂性也会带来新的风险。风险之一就是矿工可提取价值 (Miner Extractable Value, 简称MEV)。
矿工可提取价值
矿工可提取价值 这一概念由 Phil Daian 在文章 Flash Boys 2.0 中首先提出。最近,我的搭档 Dan Robinson、Georgios Konstantopoulos 以及 samczsun 在文章 《以太坊是一片黑暗森林》和《逃离黑暗森林》中再次科普了 MEV 这一概念。
MEV 已然成为加密经济学的一个基本概念,但究竟何为 MEV?它会给无需许可的区块链带来什么影响?
MEV 是什么?
矿工 (或验证者、序列器) 在其生产的区块中通过其能力任意打包、排除或重新排序交易可以获得一定的利润,而 MEV 便是衡量该利润的一种度量。
假设在 Uniswap 上有一笔大宗交易产生滑点之后,出现了一个价值一万美元的套利机会。这时,套利机器人注意到了这个套利机会并提交一笔交易以捕捉机会,提供给矿工的交易费为 10 美元。那么可能会出现以下情况:
矿工会复制和审查套利者的交易以便自己捕捉此次套利机会;
其他机器人也会注意到该次套利机会并提供更高的交易费报价,因此导致大家竞价以争取捕捉套利机会的权力。这种竞拍模式被称为“优先 Gas 拍卖” (Priority Gas Auction, PGA)。
上面提到的一万美元潜在收益便是 MEV。如果矿工没有捕捉这个套利机会,但是发生了 PGA,那么获胜交易者所获得的利润为:MEV 总值 - gas竞拍结算价。(e.g. 如果付 7000 美元给矿工,那么剩下的 3000 美元就是交易者利润)。
这个例子让我们得以窥探 MEV 涵义,但并没有描述出其全貌。MEV 并非罕见。这种金融小游戏带来的激励,会产生一系列因果连锁反应,必须密切追踪才能看到其中的关联。本文将探讨这个话题并解释为什么 MEV 可能会危害以太坊及其用户。
DeFi 的成功带来最直接的影响便是:以太坊 MEV 的已知下限正呈指数增长。按照这个速度,相信 MEV 在接下来一年会产生实际性的问题。
MEV 的状况
我们不可能判断以太坊上的 MEV 总共有多少。我们目前知道的所有 MEV 仅为下限值。
这是因为 MEV 可以在用户与区块链交互的任意时间被创建,并且智能合约允许实现无限数量的潜在交互。因此,无法通过单纯的计算得出区块链上潜在的 MEV 总值。
然而,我们可以通过相加已知被利用的 MEV (即上图所示的 “已实现的 MEV”) 来建立基线。然后,我们便可以使用启发式的方法来推断真实的下限值比我们的基线高出多少,以及未被利用的 MEV 会如何影响区块链的环境。
当前的 MEV
目前以太坊上的状况是,大部分矿工 (还) 没有尝试过自己捕获 MEV。几乎所有当前的链上活动都是由非矿工交易者推动的。然而,一些 MEV 只能由矿工捕获,因为他们有权任意排序 (或排除) 交易。非矿工交易者可以捕获“简单”的 MEV;而较为“复杂”的 MEV 无法通过 PGA 捕获。
这意味着我们目前看到的大多数是 PGA 类型的 MEV。就像上面提到的例子一样,Uniswap 套利是最常见的 MEV 实现方式。
另一种常见的 MEV 类型便是从易受攻击的智能合约中进行盗窃。Dan 等人在文章 《黑暗森林》中描述了一个例子。他们发现了一个有漏洞的智能合约,允许任何人从中盗取资金;Dan 计划在黑客之前利用漏洞追回资金。然而,一个套利机器人自动识别并复制了 Dan 的交易,用自己的地址代替了 Dan 的地址并提供更高的交易费。套利机器人的交易在 Dan 之前被执行,从而挪走了他们的资金。
未来的 MEV
当以太坊上的矿工开始大量地捕获 MEV 时,MEV 的下一个时代便来临了。然而,目前为止,社区共同的假设为:矿工遵循利他主义,会主动放弃 MEV 利润并继续运行默认的节点软件。比特币矿工根据经验没有选择自私挖矿策略,因此前者所作的假设是有例子可循的。
然而根据过去三个月的观察,我们认为这种“矿工利他主义”假设是行不通的。我们发现网络上有一小部分但值得注意的哈希率正在捕获 MEV,刮分非矿工交易者的部分利润,而不是允许无须许可的费用竞拍,还有把准入许可卖给私人交易池。
相反,我们相信 MEV 正逐渐突破矿工的心理防线。首先,狂热的非挖矿交易者在链上的频繁活动给矿工带来了更加客观的 MEV 捕获机会。再者,非挖矿交易者所不能捕获的 MEV 类型是完全未受挖掘的金库;而这个金库比目前为止我们所知道的 MEV 要大得多。在某种程度上,更令人惊讶的是,矿工花了这么长时间才参与进来。
大坝很可能已经决堤:矿工们会更加深入该领域,探索更加独特的 MEV 和合谋形式。以太坊及其用户可能会面临巨大的风险。
接下来的部分会详细解释将来可能会带来什么,从我们提到的 MEV 的潜在“风险”开始。
MEV Can Harm Users MEV 会危害用户
MEV 可以看作是矿工对用户收取的税 (无形的)。
在上面提到的 Uniswap 例子中,一笔大宗交易会导致价格滑点,产生价值一万美元的套利机会 (MEV)。套利机器人通过套利行为使得市场价与真实价格持平,这使 Uniswap 市场在不伤害原始交易者的同时变得更加高效。这个 MEV 交易例子是良性的。
然而,同样是这笔交易的另一个版本将会是这样:一个套利机器人在执行之前就识别到用户的交易,然后将用户的交易夹在自己的买卖订单中间。最终的结果便是,MEV 向用户征收了一种无形的税:他们的订单被人为抬高而导致无法执行,然后套利机器人立即出售订单以获取利润。当然,矿工可以零成本做到这一点。这种 MEV 交易就是恶性的。
MEV 会危害以太坊
MEV 本质上助长了共识的不稳定性。
假设有两名矿工 Sam 和 Dan,他们生产每一个区块都能获取 100 美元的报酬。Sam 生成了 3 个区块,而第一个就包括 Uniswap 上价值一万美元的套利机会。
现在,Dan 需做出选择:要么接着 Sam 的区块往后面挖,也可以尝试重新挖第一个区块以抢夺 Uniswap 上的套利机会。一万美元比一百美元的区块奖励要诱人,理性上 Dan会倾向后者。
由于目前最长链为区块高度 3,Dan 也要重挖第二和第三个区块 (并捕获这些区块中的任何 MEV)。在重组后,Dan 拥有最长链,他和 Sam 就可以从第三个区块继续挖了。
这被称为“时间盗贼”攻击:如果区块奖励比 MEV 小得多时,矿工足以合理地破环共识。
我们的例子只基于两方来假设。而在一个真实的多玩家游戏世界中,很有可能每一个矿工都会遵循理性而尝试重组第三个区块,从而从根本上停止进程。然而,这会摧毁矿工的哈希率投资价值。如果我们看到这种行为,那么这很有可能会以更加频繁、更加快速的重组形式出现,尽管这些重组不会完全使得网络停止发展。
MEV 是以太坊独有的吗?
MEV 并非以太坊所独有的,理论上比特币网络上也会有 MEV。审查闪电网络通道或者双花染色币所获得的激励就属于 MEV。[1] 然而,我们假设比特币本质上比以太坊这样的区块链更少出现 MEV 的可能性。
原因在于两种区块链的”复杂性“和”状态性“
MEV 在给定区块链上积累的速率通常与其应用层行为的复杂性成正比。
像以太坊这样任意性和灵活性较强的协议,无法逃离这种复杂性,并且趋于复杂是其本质所然。
如果不改变以太坊的用户体验,就无法轻易减少 MEV 激励。
这就是为什么我们说"以太坊所固有的复杂性可能是一个诅咒"。
MEV 与复杂性相伴
从纯理论的角度来看,即使是比特币也无法限制其中出现潜在的 MEV。然而,比特币本身的设计使得意外的高-MEV 案例较少出现,实际上,几乎很少见到。这种情况未来似乎不会改变,因此我们认为 MEV 不会成为比特币较大的威胁 (通胀是另一个问题 [2])。
对比之下,我们可以观察到以太坊上的 MEV 正呈指数增长,这是由于 DeFi 应用带来的巨大价值流。那些看起来如此有前途的金融基元,同时也可以被视作以太坊的寄生虫:它们正编织着一张巨大的 MEV 网络,而该网络会日益变大、变复杂。
以太坊无法限制复杂性
如果闪电网络在比特币上创造了 MEV (实际上威胁着比特币的共识稳定性),我们可以以相对简单的方式,从比特币的有限规则集 (脚本) 中删除掉创建支付通道所需的操作码。
另一方面,如果我们发现一些应用模式 (如DEX、借贷、代币化的托管资产等) 对以太坊造成了类似的风险,那么我们不可能在 EVM 上排查所有可能的实现方式。个别的实现方式可能会分叉,但是如果我们不允许合约部署或者不严格限制 EVM,我们就无法阻止一般的行为。无论是哪种情况,以太坊都无法实现”无需许可智能合约“。
难以解决
最后,人们自然会问,以太坊上是否可以构建一种机制来抵消协议中 MEV 的影响。简而言之,不可以,至少在不影响以太坊开发者或用户体验的前提下,是无法办到的。
任何阻止矿工从 MEV 中获益的尝试都可能催生协议外的市场。比如,如果所有交易都仅允许按照一个固定的费率支付,我们可以预想到矿工可能会和交易者合谋,接受带外的 (out-of-hand) 交易优先级交易。同样,如果所有交易费都被销毁或支付给一个公共接收方,那么矿工就会单独地收取交易费。
这就是为什么无法轻易缓解 MEV 问题。当然现在存在着潜在的缓解措施,但是需要进行结构性的改变,如改变以太坊应用的架构和用户与其交互的方式。
总结
如果比特币的激励安全机制失败了,至少在区块链奖励归零之前,难以想象任何无需许可的区块链不会遭受类似的命运。比特币的简洁性不仅美观优雅,而且还最大限度地减少其协议外的激励面。
相比之下我们更加担心以太坊。以太坊的应用层复杂性和 MEV 继续呈指数增长。而已知的 MEV 收益最低值可能比该年度的矿工维持网络安全所获得激励的 ETH 总值。
大规模、有效的 MEV 捕获会使得对以太坊用户征”税“这种模式难以维持。以太坊可能会变得拥挤不堪,应用层上的交易费更加昂贵。平台的用户体验受到损害,这一切都会阻碍以太坊的网络效应和发展势头。
当然,一个主要的未知点是,以太坊矿工是否会开始大量地捕获 MEV。矿工可以获得本属于非挖矿交易者的 MEV,并以最大的效率捕获其所有值,因此这对于成本和用户体验来说是灾难性的。
”时间盗贼“攻击也有可能出现,虽然矿工不太可能通过大规模重组来损害他们在以太坊上的长期利益。另一个简易的攻击版本,矿工可能故意打包叔块或者重组一小部分利润丰厚的区块,这种方式仍然十分有害。
无论如何,我们是时候认真考虑如果情况恶化,该采取什么方式应对了。
缓解 MEV 问题
一个理想的解决方案将减少以太坊上的 MEV,或者在不增加通货膨胀的情况下提高矿工维护网络安全的激励:
更佳的应用设计:每个应用程序都可以自己设计,以最小化其能够创造的 MEV。这一方案可能很有竞争优势,因为用户将需要支付更低的成本和享受更好的用户体验。然而,协议不能强制应用程序这样做,并且可避免的 MEV 非常有限。
额外的安全性激励:除了区块奖励之外 (如 EIP-1559 提议销毁的 BASEFEEs[3],或状态租金),稳定的矿工收入来源是对协议安全的补充,并可以帮助缓解 MEV 问题。
如果不考虑上面的两个方案,大多数研究就会集中于如何提高破坏共识 (时间盗贼攻击) 的难度和成本,而不是从根源上解决 MEV 问题:
分离打包和排序:矿工 (或验证者) 只能负责打包交易,而将优先交易排序的权利单独竞拍。理论上,这防止重组激励。然而,这使得用户总是需要承受优先交易竞拍带来的 MEV 损失,这等同于多区块时间盗贼攻击带来的影响。
最终确定性 (Finality):中本聪的工作量证明 (PoS) 只有概率上的最终确定性。而基于拜占庭容错的算法更能保证最终确定性,并且仅仅重组单个被敲定的区块就需要程度更深的合谋,该算法使得时间盗贼攻击更加困难。然而,如果 MEV 的激励足够高,那么即使合谋的难度较高也值得尝试了。再者,参与者对于其提议的区块,仍然有权任意排序交易,因此仅凭最终确定性无法解决“一般”的抢跑交易问题。
权益证明 (Proof-of-Stake):基于 PoS 的区块链中,尝试重组的验证者会遭受罚没惩罚,因此使得时间盗贼攻击成本更高,尤其是与最终确定性结合时。然而,只要 MEV 的激励足够高,即使在罚没惩罚的警示下也可能会捕获 MEV。
以上所有方法对以太坊生态都会产生重要的影响。许多涉及核心协议的改变需要数年的时间来实现。那些只能在应用层完成的操作仍需要开发者重新架构,并且将大部分生态迁移到其他环境中。
希望接下来的一年会有更加明朗的方案以解决 MEV 问题,以太坊的发展路线将更清晰。Paradigm 的一些投资组合公司正努力解决 MEV 以及相关问题,如果大家感兴趣,可以关注一下。
Rollup
Rollups 已然成为以太坊主要的二层扩容解决方案。虽然有不同的 rollup 解决方案,但总的来说就是,允许一个聚合器在链下执行应用,然后向以太坊广播证明欺诈 (或除欺诈以外) 所需要的最低限度的信息。Rollup 在保证安全的情况下实现低延迟和高吞吐量。
除了提供扩容解决方案,rollups 还可以使得交易排序和执行分离 (参见 Optimism 的“MEV 竞拍”提议)。Vitalik Buterin 最近提出,以太坊可以主要成为 rollups 的数据可用性层,而 rollups 负责处理所有交易执行,将 MEV 捕获集中到 rollup 的序列器中 (“ETH 1.5”)。
这将与以太坊当前设计大相径庭,并且需要权衡取舍。例如,rollup 之间以及 rollup 与主链之间互操作性会破坏同步性,可能需要在实践中进行不同的假设 (尤其是在一个多 rollup 的环境中)。Paradigm 的投资组合公司正研发两种类型的 rollup 解决方案:
StarkWare
StarkWare 正研发 ZK-Rollup (ZKRU),即主动打包有效的可验证的证明进区块,而不是乐观地假设证明有效但可以提供欺诈证明。
虽然这最初不是为了分离交易执行和排序所提出的方案,但 ZKRU 可以实现这一点。这个证明引擎还可以用于对排序施加额外的约束 (如果基于 VDF 的优先级排序和其他确定性排序机制可用)。
Optimism
Optimism 所研发的是 Optimistic Rollup (ORU),即乐观假设证明的有效性但允许被挑战,并向以太坊广播检查欺诈证明所需的最小限度的数据。这将导致相对较长的敲定窗口期,但是这个方案允许使用与以太坊 Layer1 EVM 相同的执行环境 (这意味着现有的合约可以实现无缝迁移)。
Optimism 是 MEVA 和 ETH 1.5 的最初提出者。
Flashbots
Flashbots 是一个研发阻止,旨在缓解以太坊上由 MEV 带来的负面外部效应和存在的风险。他们已经建立了工具以量化 MEV 并且减少生态中的信息不对称性。他们正在实现一种无需许可 MEV 提取的概念证明,称为 MEV-Geth。这是种密封投标 (sealed-bid) 的区块空间竞拍机制,用于实现交易顺序偏好通讯。
Flashbots 的目标是确保 MEV 的激励不会失去透明性和民主性。希望他们的基础架构将允许应用开发者更好地了解如何更大程度地解决 MEV 问题,并释放一些压力,否则累积后会带来更加具有危害性的外部效应 (如时间盗贼攻击)。
Cosmos
Cosmos 是无需许可、可进行互操作应用的另一种替代模型。虽然没有与以太坊上的 MEV 直接相关,但是 Cosmos可以在不采用以太坊的“统一安全”范式的情况下,在其应用生态上实现类似以太坊的复杂性。
可以想象 Cosmos 区块链将基本上实现“应用相对独立性”,并在默认情况下不会与其他应用共享安全性。这一设置允许其避免在共享平台上出现的有害外部效应。如果以太坊朝着 ETH1.5的方向发展,看起来将类似于 Cosmos (事实上 LazyLedger 就是 Cosmos 版的 ETH1.5)
致谢
非常感谢我的同事Arjun Balaji、Dan Robinson、Georgios Konstantopoulos、以及Matt Huang,还有Hasu跟我一起讨论,并给我这篇文章提供反馈与信息。
免责声明
本文仅供参考,并不构成购买与出售任何投资的投资建议或推荐或招揽,也不应被用于评估任何投资决定依据。本文不应作为会计、法律或税务建议或投资建议的依据。本文反映了作者当前的观点,并不代表Paradigm、其关联公司、或与Paradigm相关的人员。本文表达的观点可能会发生变化而随之更新。
注解
文章《论比特币没有区块奖励所带来的不稳定性》可以说是首次对 MEV 进行了清晰的定性,表明“正常的”比特币交易费是矿工收益的非常规来源,并且助长共识不稳定性 (激励对费用高的区块进行重组,而不是挖费用少的区块)。
我的意思是,独立于 BTC 通胀率的,比特币 MEV 不太可能随着时间增长。对于通胀率下降的担忧,应截然不同于我们担心 MEV 是否会恶化。↩
EIP-1559把交易费拆分为两个部分:基本费用和小费竞卖。基本费用决定了所有交易里都要销毁的ETH数。小费竞卖基本上只是一个PGA。尽管基本费用销毁会提高协议安全性 (因为它们不是一个非常规矿工收益流),任何有MEV的交易仍然需要在小费拍卖中竞争。当然,交易费肯定需要竞卖部分以在协议内反映需求。如果没有这个部分,矿工和交易者可能会在协议外的市场里合谋。因此,只有销毁了基本费用才有助于协议安全。
ECN的翻译工作旨在为中国以太坊社区传递优质资讯和学习资源,文章版权归原作者所有,转载须注明原文出处以及ethereum.cn,若需长期转载,请联系eth@ecn.co进行授权。Ethereum Community Network以太坊社区网络 订阅 Ethereum Community Network以太坊社区网络 订阅
Uniswap交易量揭秘:机器人撑起70%的交易活动|交易所|货币市场|uniswap_网易订阅
网易首页
应用
网易新闻
网易公开课
网易高考智愿
网易红彩
网易严选
邮箱大师
网易云课堂
快速导航
新闻
国内
国际
评论
军事
王三三
体育
NBA
CBA
综合
中超
国际足球
英超
西甲
意甲
娱乐
明星
图片
电影
电视
音乐
稿事编辑部
娱乐FOCUS
财经
股票
行情
新股
金融
基金
商业
理财
汽车
购车
行情
车型库
新能源
行业
科技
通信
IT
互联网
特别策划
网易智能
家电
时尚
亲子
艺术
手机
/
数码
移动互联网
惊奇科技
易评机
房产
/
家居
北京房产
上海房产
广州房产
全部分站
楼盘库
家具
卫浴
旅游
自驾露营
美食
教育
移民
留学
外语
高考
查看网易地图
登录
注册免费邮箱
注册VIP邮箱(特权邮箱,付费)
免费下载网易官方手机邮箱应用
安全退出
移动端
网易公开课
TED
中国大学视频公开课
国际名校公开课
赏课·纪录片
付费精品课程
北京大学公开课
英语课程学习
网易严选
新人特价
9.9专区
新品热卖
人气好物
居家生活
服饰鞋包
母婴亲子
美食酒水
支付
一卡通充值
一卡通购买
我的网易支付
网易跨境支付
邮箱
免费邮箱
VIP邮箱
企业邮箱
免费注册
客户端下载
网易首页 > 网易号 > 正文
申请入驻
Uniswap交易量揭秘:机器人撑起70%的交易活动
2023-09-15 15:08:17 来源: 加密姐阿寒
浙江
举报
0
分享至
用微信扫码二维码
分享至好友和朋友圈
链上分析公司Glassnode的最新周报提供了有关Uniswap的关键指标的研究,特别关注了不同类型交易者在该平台上的活动分布。其中最引人注目的发现之一是他们对DEX(去中心化交易所)的交易量进行了区分,将交易者分为人类和机器人两类。在这里,机器人指的是自动化程序,它们通过监控区块链以发现潜在的利润机会并执行相关的交易。这些机器人可以分为多种类型,但在此研究中,主要关注了两种类型,即套利(Arbitrage)机器人和三明治(Sandwich)机器人。这种分类可以帮助了解Uniswap上的交易活动的本质,以及不同类型的参与者如何影响市场的流动性和价格发现。套利机器人通常旨在从价格差异中获利,而三明治机器人则可能试图操纵市场价格以获得利润。这些发现有助于更深入地理解去中心化交易所中的市场动态。下面是一张图表,显示了这两种机器人以及人类交易者在过去几个月中的Uniswap交易量占比:从图中可以看出,套利机器人的交易量份额在今年年初曾达到20%,但如今已降至10%。而人类交易员的份额则有所上升,目前接近30%。根据Glassnode的数据,过去一年中,大部分Uniswap DEX的交易量都来自三明治机器人。然而,最近,人类交易员扩大了其在交易量中的主导地位,导致三明治机器人的份额下降到约60%。这意味着在Uniswap DEX中,机器人仍然占据了相当大的比例,约占总交易量的70%。然而,需要注意的是,交易量可能不是衡量交易活动的最准确标准,因为不同类型的机器人可能会在单个交易行为中执行不同数量的交易,这可能导致它们的交易量显得较高。为了更全面地了解交易活动,Glassnode还研究了每种类型的交易数量,这将提供有关不同类型参与者在Uniswap市场中的行为的更多信息。在这项比较中,尽管两类机器人的总和似乎仍然超过了人类交易者,但它们之间的优势差距显然要小得多。这表明Uniswap市场上机器人和人类交易者之间的竞争正在加剧,并且机器人不再占据压倒性的地位。Uniswap作为一个去中心化的加密货币交易所,没有中央实体控制平台,交易是通过智能合约进行的。为了实现治理,Uniswap引入了特殊的治理代币UNI,任何用户都可以持有并参与平台的决策制定。尽管Uniswap的代码是开源的,但最新版本Uniswap V4附带的许可证引发了开源社区的争议。这个许可证规定,在四年的期限内,任何人都不得将Uniswap V4的代码用于商业或生产目的,尽管可以查看和复制代码。这引发了一些开源社区成员的担忧,因为他们认为这种限制可能会限制代码的自由使用和创新。这个问题在开源软件社区中是一个长期存在的辩论点,涉及了代码的知识产权和开源原则之间的权衡。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.
/阅读下一篇/
返回网易首页
下载网易新闻客户端
相关推荐
热点推荐
ETF再这么买下去,六个月后比特币就“卖光”了
华尔街见闻官方 2024-03-15 12:27:10
23
跟贴 23
给ChatGPT小费真的好使!10块或10万效果拔群,但给1毛不升反降
量子位 2024-02-01 14:46:45
87
跟贴 87
比特币砸破7万美元,美银知名分析师Hartnett:市场呈现泡沫特征
华尔街见闻官方 2024-03-16 06:36:18
0
跟贴 0
全世界机器人共用一个大脑,谷歌DeepMind已经完成了第一步
机器之心Pro 2024-01-25 15:59:20
209
跟贴 209
头皮发麻,这电影脑洞也太大了!
尚文强强笑口组 2024-03-16 00:19:29
3
跟贴 3
改变战争规则!乌克兰已经开始大规模生产机器人
老马拉车莫少装 2024-03-13 12:14:33
10
跟贴 10
极致“肉”与“燃”,只有OVA年代才有的震撼美!
动漫艺术家 2024-03-15 20:48:18
29
跟贴 29
雷克萨斯4S店提车加价10万:公司致歉 客服经理被开除
极目新闻 2024-03-15 13:53:50
15843
跟贴 15843
董宇辉又开创历史!微博为他特意修改了规则,老俞估计是又爱又恨
徐帅爱音乐 2024-03-15 13:24:06
27
跟贴 27
时速4000英里,美国SR-72“黑鸟之子”来了!
乐学观天下 2024-03-15 16:22:11
1
跟贴 1
媒体:中广核为英国政府雪中送炭后 却被踢出英国市场
澎湃新闻 2024-03-15 12:45:13
5839
跟贴 5839
美国多用途海神号正在黑海上空盘旋
迷乱浮生 2024-03-11 14:58:21
0
跟贴 0
315曝光宝马:新车传动轴频繁出现异响 车主投诉不断
央视财经 2024-03-15 21:23:45
17753
跟贴 17753
地产债多数下跌 “22万科06”跌超4%
财联社 2024-03-15 15:43:15
0
跟贴 0
央视315速览!有这些企业被点名(实时更新)
小萝卜丝 2024-03-15 20:31:39
3763
跟贴 3763
曾经卖7000元的顶配商务本,现在成了闲鱼上最火的洋垃圾
雷科技 2023-12-20 17:03:55
612
跟贴 612
中年人看不懂的交易,闲鱼每天有10个亿
虎嗅APP 2024-03-13 23:08:31
329
跟贴 329
“离谱的AI扩图”火了!张张那叫一个出其不意
量子位 2023-12-05 13:17:05
311
跟贴 311
奇葩女乘客上车找“活”干 出租司机:你可拉倒吧
青梦白话 2024-03-15 18:19:34
6178
跟贴 6178
突然不退钱了!大量上海老人数百万积蓄或拿不回来
新闻坊 2024-03-16 07:50:28
1
跟贴 1
OpenAI机器人亮相,大模型有了“肉身”,英伟达微软都有投资
36氪 2024-03-14 17:10:14
12
跟贴 12
Deepfake假CFO骗走公司1.8个亿,员工:视频会议每个人都很真实啊
量子位 2024-02-11 13:35:56
232
跟贴 232
华为OD员工自嘲:做了一个违背祖宗的决定,堂堂211本硕去了OD
闲醉山人 2024-03-12 13:35:35
231
跟贴 231
法媒:法国瞄准中国品牌希音(Shein),议会通过打击快时尚法
周观环宇 2024-03-15 15:43:07
198
跟贴 198
常州市一个占地78亩的大型工厂4469万起拍卖,拍出6147万高价
天天话事 2024-03-13 17:49:35
6
跟贴 6
浦东到苏州,25分钟300元,你要坐吗?“空中出租车”火了,上海起了个大早!
上观新闻 2024-03-15 13:22:22
1691
跟贴 1691
假牛肉、假五粮液、八两秤,这届315拼夕夕收获满满啊
基本常识 2024-03-15 20:07:16
1176
跟贴 1176
中国快递协会:新规不是要求必须上门投递
新华社 2024-03-15 16:01:23
8791
跟贴 8791
上港核心提前跟俱乐部摊牌拒签新合同?本人首次回应,让球迷意外
评球论事 2024-03-15 23:37:34
5
跟贴 5
欧洲:汽车报废后电池必须送回生产地,决心与电动汽车死磕到底!
妖麟 2024-03-15 16:57:44
3081
跟贴 3081
海贼王1110话情报更新,“天哪!他做到了!”,索隆成功击败路奇
醉爱动漫君 2024-03-12 14:32:00
217
跟贴 217
美国想简单地把中国的TikTok给“没收”?那可不是那么容易的事!
天马体育 2024-03-15 10:13:28
6
跟贴 6
投了1600亿,中国SaaS没赚到认知以外的钱
钛媒体APP 2023-09-19 14:19:16
156
跟贴 156
中国产品正在席卷德国市场,第一批德国输家已经确定
土澳的故事 2024-03-14 23:52:14
0
跟贴 0
深国资真金白银力挺万科 第一大股东出手就是10个亿
南方都市报 2024-03-15 21:12:41
507
跟贴 507
中国驻美国大使谢锋:欢迎更多美国企业投资中国、深耕中国市场
人民资讯 2024-03-15 10:45:31
8344
跟贴 8344
程序员接了个上位机开发项目,结果忙活了十几天,还没收到全款!
程序员古耕 2024-03-11 21:31:10
118
跟贴 118
乌克兰开始量产第一批军用机器人,其副总理称:敌人将被撕碎
探索星空 2024-03-13 11:18:10
80
跟贴 80
清华教授曾断言:人工智能将使中国教育优势荡然无存!
老郭播报 2024-03-15 20:24:27
2524
跟贴 2524
海贼王1110话:路飞未能打断萨坦传送阵,五老星兽形态全员曝光
进击的新次元 2024-03-12 23:07:25
71
跟贴 71
阳台爆改功能区,邻居看完立马照着装!
装修设计案例精选
2024-03-11 17:14:01
对印反击战前夕,我军内部出现严重分歧,刘伯承用三句话镇住场子
春去花还在
2024-03-14 10:35:20
拉好窗帘 拉好窗帘!网友:对面窗帘没拉紧,看见在客厅做了!
兰妮搞笑分享
2024-03-15 15:03:20
追问|华东师大团队《细胞》子刊发布降解致病蛋白新技术
澎湃新闻
2024-03-15 07:36:29
供侄子读四年大学,我生病住院侄子却没探望,后来我收到一条短信
肖庭庭爱音乐
2024-03-15 07:33:58
3大不可思议!广东25分大胜,杜锋2处妙手,沃特斯太稳,贝尔服气
刘哥谈体育
2024-03-16 08:01:02
马琳:女队从新加坡大满贯开始,连续4站将采用输外战要扣分机制
直播吧
2024-03-15 15:51:15
身材好、长相甜、又白又辣!网友:真心喜欢
傲娇的马甲线
2024-03-15 17:55:03
燕郊爆炸事故原因初步查明,该担责的一个也跑不了
Mr王的饭后茶
2024-03-14 19:28:02
F4年轻时的合影,看后严重怀疑当年自己的审美!
静静时光
2024-03-14 16:28:17
《欢乐颂5》今晚首播!原班人马回归,正午阳光这回该赢回一局了
肥罗大电影
2024-03-16 02:07:21
3·15打假!美妆乱象大曝光!
言安堂
2024-03-15 07:37:01
“黑天鹅”出现!日本突然加息?这一次,人民币和美元怎么办?
户外阿崭
2024-03-16 00:05:52
恭喜穆帅!或空降英超豪门,2000万年薪,钦点廉价神锋抗旧主
条条爱侃球
2024-03-15 20:41:53
央视3·15晚会曝光后,郑州金水区有关部门立即前往珍爱网郑州分公司开展检查
辉哥说动漫
2024-03-16 00:00:39
书记和市长想我贪,我不贪就举报我,妻子回省任职让他们直接落马
叶天辰故事会
2024-03-14 10:50:03
凯特事件升级,哈里透露威廉有暴力倾向,14岁就打过戴安娜?
阿桥侃娱乐
2024-03-15 11:12:36
武契奇用2秒说清台湾问题:台湾是中国的,塞尔维亚永远支持中国
通文知史
2024-03-15 08:00:03
贾平凹曾说:混得差的男人爱谈政治,雌雄同体的女人是人中龙凤
小白兔趣闻
2024-03-13 23:03:54
广州11区统一拆违开始,将拆约20万平方米!直击启动现场
南方都市报
2024-03-15 22:47:13
2024-03-16 09:12:49
加密姐阿寒
加密的一切,阿寒帮你解密!关注我持续更新!
89文章数
3关注度
往期回顾 全部
科技要闻
央行:同意财付通增加注册资本至153亿元
奔驰决定向现实低头
马斯克一大步:最大火箭成功发射 星舰失联
星舰再创多项成就,还有这些要改进,马斯克:今年至少飞6次
华为“中国合作伙伴大会”:2023年全球收入超过7000亿元
头条要闻
听花酒回应被央视点名:生产工艺并非向酒中添加薄荷
国企原总裁被双开:隐瞒入党前严重错误 侵吞国有资产
江西"花炮之乡"过期4年烟花仍在卖 万响鞭炮实际357响
美媒:法令遭否决 米莱的"第一剂休克疗法濒临崩溃"
合肥女子"李梅"在长沙的87套住宅被查封 预估价达亿元
头条要闻
听花酒回应被央视点名:生产工艺并非向酒中添加薄荷
国企原总裁被双开:隐瞒入党前严重错误 侵吞国有资产
江西"花炮之乡"过期4年烟花仍在卖 万响鞭炮实际357响
美媒:法令遭否决 米莱的"第一剂休克疗法濒临崩溃"
合肥女子"李梅"在长沙的87套住宅被查封 预估价达亿元
体育要闻
足疗店赞助中超,有什么不可以?
1-0!利雅得胜利近3轮首胜距榜首9分,C罗点射制胜:轰赛季第30球
惊险!C罗两次激动庆祝被对手球迷投掷杂物袭击,2位队友“挡枪”
欧冠1/4决赛抽签:曼城大战皇马 阿森纳遭遇拜仁
欧联1/4决赛抽签:利物浦上上签,勒沃库森战西汉姆,米兰PK罗马
娱乐要闻
孙怡与滕光正恋情官宣分手:让他滚了
贝克汉姆次子罗密欧与女友分手20天后再度复合,十指紧扣超甜蜜
滕光正回应来了:孙怡不是三,自己也没劈腿,与沛从没在一起过
李诞cos孟宴臣?“诈骗式爆改”真的够了
E句话 | 这两天真的看够“知三当三”了
财经要闻
5.86万听花酒上榜 315晚会点名这些企业
突发爆雷!巨头一夜蒸发2500亿!她警告:英伟达或暴跌50%!
娃哈哈被野性消费,多款产品卖断货,直播间停播专注发货
值得注意的趋势!
“晚会”之外的315:小到一件快递,大到一个房子
汽车要闻
新蓝鲸,这局要如何打动最苛刻的消费者
配激光雷达 换装Hi4混动系统 新款魏牌蓝山申报
东风奕派eπ007上市售15.96万起 还可选装剪刀门
华为享界S9官图曝光 北京车展亮相/售价或50万起
降价4000+新配色 海鸥荣耀版掀房顶了?
态度原创
艺术
游戏
手机
公开课
军事航空
艺术要闻
陈丹青:艺术需要那股傻劲
丹麦画家保罗·古斯塔夫带你走近百年前的欧洲
探索法国古堡中的当代艺术,“飞行的眼睛”上海展出
Art Club | 6位年轻艺术家,游历中思考自然、人、科技和文化现象
2024当代女性艺术·长三角邀请展:看她们“不息的涌动”
无畏契约:EDG 2-1战胜PRX,就在今天EDG突破“心魔”!
RNG真回来了?2-0横扫OMG取得两连胜,Lwx复刻圣经语录!
FPX零封iG拿赛季第九胜,小银河打爆乐言,小老虎公屏打字收徒!
暴雪游戏公众号复活,IP浙江,魔兽世界国服四月将至?
手机要闻
即使Pixel 8手机处于关机状态 Android 15也能让你找到它
小米首款竖折旗舰!曝小米MIX Flip卫星通信功能取消:更便宜了
315晚会刚刚曝光!这种「神机」彻底凉了
苹果野心“昭然若揭”,原来开发新款iPhone SE别有用途
公开课
张雪峰:想多挣钱,得学理工科
白岩松谈人口老龄化:社会要降低老年人门槛
韩国50万年轻人躺平
最好的睡姿vs最差的睡姿
李彦宏:百度离破产30天
军事要闻
中伊俄联演海上演习阶段结束 细节披露
俄国防部:至少13387名外国雇佣兵为乌克兰作战
马克龙:俄如果赢得战争 将不会停止其在领土上的野心
突然宣布要召回50多名大使 波兰总理总统矛盾尖锐
© 1997-2024 网易公司版权所有
About NetEase |
公司简介 |
联系方法 |
招聘信息 |
客户服务 |
隐私政策 |
广告服务 |
不良信息举报 Complaint Center |
廉正举报
无障碍浏览
进入关怀版
MEV 机器人:它是什么以及它如何套利赚钱?|搞钱源码 - 知乎切换模式写文章登录/注册MEV 机器人:它是什么以及它如何套利赚钱?|搞钱源码永赚大师点击领取加密银行卡吧~MEV机器人的概念MEV 机器人是一个术语,指的是一种软件程序,可以通过操纵区块中的交易顺序来检测和利用以太坊区块链上的盈利机会。MEV 代表最大可提取价值,它是可以影响区块结果的参与者可以捕获的最大价值。MEV 机器人通常设计用于执行套利、抢先交易、夹心贷款和闪电贷等策略。这些策略涉及利用 Uniswap 和 PancakeSwap 等去中心化交易所 (DEX) 上的价格差异、交易排序和临时流动性。在本文中,我们将解释什么是 MEV、MEV 机器人如何运行、使用 MEV 机器人的好处和风险是什么,以及 MEV 机器人的一些实际示例。什么是MEV?MEV 是一个概念,描述了可以影响区块结果的参与者可以从区块中提取的价值。例如,矿工可以重新排序、包含或排除区块中的交易,以最大化其收入。同样,交易者可以向内存池(待处理交易池)提交交易,以影响区块中其他交易的执行。MEV 的产生是因为以太坊交易不是立即执行,而是批量执行,称为区块。每个区块的大小有限,只能包含一定数量的交易。因此,用户之间存在竞争以将其交易包含在下一个区块中。用户可以通过向矿工支付更高的费用(称为天然气)来增加交易得到确认的机会。然而,这也为其他用户观察内存池中待处理的交易并尝试利用它们谋取利益创造了机会。例如,如果用户在DEX(Uniswap)上看到某个代币的大额买入订单,他们可以尝试在原始订单执行之前购买相同的代币,然后在原始订单拉动需求后以更高的价格卖回和代币的价格。这称为抢先交易,是 MEV 最常见的形式之一。MEV 机器人如何运作?MEV 机器人是运行算法来检测和执行以太坊区块链上有利可图的 MEV 机会的软件程序。他们通常使用 web3 库和 API 与以太坊节点、DEX 和其他智能合约进行交互。MEV 机器人可以根据其策略和目标以不同的方式运行。MEV 机器人的一些常见类型是:套利机器人:这些机器人寻找不同市场上相同资产之间的价格差异并执行交易以从中获利。例如,如果 Uniswap 上的代币比 Sushiswap 上的价格便宜,则套利机器人可以在 Uniswap 上购买该代币,然后在 Sushiswap 上出售该代币以获取利润。Frontrunning 机器人:这些机器人监视内存池中的大型或有利可图的交易,并尝试在它们之前执行交易。例如,如果机器人在 DEX 上看到一个代币的大额买入订单,它可以尝试在原始订单执行之前购买相同的代币,然后在原始订单拉动需求后以更高的价格卖回和代币的价格。夹子机器人:这些机器人将抢先交易和反向交易(与抢先交易相反)结合起来,围绕另一笔交易创建“三明治”。例如,如果机器人在 DEX 上看到一个代币的大额买入订单,它可以尝试在原始订单执行之前购买相同的代币(抢先交易),然后在另一个机器人或用户购买相同的代币后将其卖回以更高的价格(套利)。闪贷机器人:这些机器人使用闪贷(在同一区块内偿还的临时贷款)来执行需要大量资金的复杂交易。例如,机器人可以使用闪电贷借入大量 ETH,在 DEX 上将其交换为另一种代币,然后在另一个 DEX 上将其交换回 ETH,然后连本带息地偿还贷款,所有这些都在一个区块内完成。如果操作正确,这可以为机器人带来净利润。MEV 的好处和风险?使用 MEV 机器人有哪些好处和风险?MEV 机器人可以为其操作员和用户提供多种好处,例如:创收:MEV 机器人可以通过从区块链上的盈利机会中获取价值,为其运营商创收。一些 MEV 机器人还可以与为其运营提供流动性或资本的用户或投资者分享利润。提高效率:MEV 机器人可以通过减少价格差异、增加流动性和促进价格发现来提高市场效率。他们还可以通过捆绑或优化交易来帮助用户节省汽油费。增强创新:MEV 机器人可以通过创建新的用例、产品和服务来增强以太坊生态系统的创新和发展。它们还可以激发新的研究和解决方案,以应对 MEV 的挑战和局限性。MEV 机器人的存在是必然的, 并且会是一种长期存在的套利方式!然而,MEV 机器人也带来了一些风险和挑战,例如:降低公平性:MEV 机器人可以为那些拥有更多资源、信息或对区块链影响力的人提供优势,从而降低市场的公平性和透明度。它们还可能损害不知道或无法与 MEV 机器人竞争的其他用户的利益。增加波动性:MEV 机器人可以通过造成突然的价格波动、飙升和下跌来增加市场的波动性和不可预测性。它们还可以触发级联效应或反馈循环,从而放大 MEV 的影响。威胁安全:MEV 机器人可以通过刺激恶意或不诚实行为来威胁区块链的安全和稳定。例如,一些 MEV 机器人可以利用智能合约中的漏洞或错误,或者与矿工或验证者勾结来操纵区块中交易的顺序或包含内容。MEV 机器人的实际应用有哪些示例?MEV 机器人在以太坊区块链上活跃且普遍,并且参与了一些值得注意的事件和事件。MEV 机器人的一些实际应用示例如下:2022 年 9 月,一个夹子机器人通过夹入 Uniswap 上由对冲基金发起的一笔大额交易,赚取了超过 400 万美元的利润。该机器人利用闪电贷借入了价值超过 3 亿美元的代币,并在原始交易前后执行了两笔交易,净利润为 0.3%。2022 年 10 月,一个抢先交易的机器人利用了 Harvest Finance 协议中的一个漏洞,导致其从资金池中挪用了超过 2400 万美元。该机器人利用闪电贷操纵 Curve Finance 上的稳定币价格,然后以虚高的利率兑换成 Harvest Finance 代币,从而获得了超过 10,000% 的净利润。2022 年 11 月,一个套利机器人通过 Sushiswap 和 Bancor Network 之间的套利赚取了超过 100 万美元的利润。该机器人利用闪电贷借入了价值超过 700 万美元的代币,并在不同的 DEX 上执行了两笔交易,净利润为 0.015%。结论与源码MEV 机器人是一个术语,指的是一种软件程序,可以通过操纵区块中的交易顺序来检测和利用以太坊区块链上的盈利机会。MEV 机器人可以执行套利、抢先交易、三明治和闪贷等策略。MEV 机器人可以为其运营商和用户提供多种好处,例如创收、提高效率和增强创新。然而,它们也带来了一些风险和挑战,例如降低公平性、增加波动性和威胁安全。MEV 机器人在以太坊区块链上活跃且普遍,并且参与了一些值得注意的事件和事件。因此,任何对加密货币和区块链技术感兴趣的人都需要了解并理解 MEV 机器人是什么以及它是如何工作的, MEV是长期存在与区块链上的套利机会。如果你感兴趣, 下方会提供一套经过实战的MEV源代码,它是可运行的, 真正能赚多少钱取决你的策略与你的服务器。服务器获取:https://www.vultr.com/?ref=9377909MEV 源码获取:https://app.holly.ink/Ikjf咨询请扫下面二维码视频教学https://www.youtube.com/@0xciiTG交流https://t.me/antcaveclub 点击了解,币圈福利资源!!!点击注册,新手奖励领取!!!发布于 2024-01-14 11:27・IP 属地江苏赞同 2添加评论分享喜欢收藏申请
狩猎者Hunter机器人如何在去中心化交易所实现套利,uniswap、pancakeswap、sunswap均可实现抢单套利_哔哩哔哩_bilibili 首页番剧直播游戏中心会员购漫画赛事投稿狩猎者Hunter机器人如何在去中心化交易所实现套利,uniswap、pancakeswap、sunswap均可实现抢单套利
1850
1
2022-02-18 19:01:02
未经作者授权,禁止转载1222914狩猎者Hunter机器人如何在去中心化交易所实现套利
当你在Defi如:uniswap,pancakeswap,sunswap等swap交易时,需要进行区块打包,在打包的过程中,有一个pending状态,这个时候我们的狩猎者机器人就可以监听到这个状态。如果监听到大额交易,在这个交易等待时,在这笔订单交易的过程中,狩猎者会快速放入我们的交易请求,并且提高我们的Gas,在别人的订单没完成之前已经完成了我们的订单,此时被我们抢了的那笔订单会比他当时预期更高的价格成交,并且为我们高价卖出垫了底池:https://t.me/liuzijie知识科学科普宇宙科普
defi说事
发消息
不付诸行动的梦想就像泡沫,很美好却一触即破。悠悠岁月,青春无悔;挥霍了的时光那叫蹉跎,飞舞起来的那才叫青春!
关注 55
实时桌宠互动,其乐无穷!
接下来播放
自动连播时钟人多元宇宙 29 (part 2) 纯打斗的一集飞星流月
1.2万
33
【超燃】世上有几人能活到这短片结束?|学生党必看TED英语官方
18.6万
1070
我们可能都死了?爱因斯坦临终留言:过去,现在,未来都是幻觉。或许我们都不存在?宇宙的宿命也早已注定live宇宙
9413
8
【油管4000w播放】美国15岁未成年高中生竟然悟透了四维世界!!TED英语官方
457.1万
2606
【8K极限】天文深空摄影:长达3个多月的拍摄,300多小时的曝光,从星云、星团到星系,从船底座、孔雀座到英仙座,记录下宇宙的神秘与美丽摄影师CC-Chen
5.1万
140
死亡不是终点 “灵魂”永远轮回存在?诺奖得主 宇宙循环理论 (上)多维怪谈
13.0万
384
CIA解密文件:宇宙是一场巨大的梦境?意识能够跨越时空与维度?大白夜谈
3.5万
173
【细思极恐】英国一科学家用实验来证明我们的世界是虚拟的,他成功了吗?晓涵哥来了
76.9万
4574
当你站在冥王星上时:一年相当于248年,一秒钟你就会死亡!A宇宙探索
7704
4
两篇大开脑洞的论文:宇宙不仅是个大脑,它还在自学和不断进化乔西说宇宙
9132
16
宇宙中细思恐极的假说,“玻尔兹曼大脑”让你怀疑人生!环球-揭秘解说MC
23.0万
593
看完之后,终于理解了那些很少刷手机的人挪威TALK
72.1万
639
Kurzgesagt科普:无限宇宙的悖论Kurzgesagt-科普
7.0万
296
CIA超能力者披露:看到月球上外星人基地,他们对人类满怀恶意【怪奇说】怪奇说
2.9万
118
一束光射向夜空,最后的结局是什么?科学认识论
23.0万
300
一次性看完物理学四大神兽!李论科学
40.1万
857
水浇不灭太阳?如果将4000亿亿亿吨水浇在太阳上,会发生什么?宇宙窥探署
28.3万
288
韦伯望远镜拍摄:132亿光年外,一个不可思议的远古存在窥探宇宙
14.5万
220
科学家终于揭开了奥陌陌的神秘面纱波特宇宙之旅
1761
0
首次对话外星人:揭示地球文明的真相,人类其实是地球上的囚犯捕月说
40.0万
308
展开
小窗
客服
顶部
赛事库 课堂 2021
OneSwap系列第十五篇之 合约间套利 - 掘金
首页 首页
沸点
课程
直播
活动
竞赛
商城
APP
插件 搜索历史
清空
创作者中心
写文章 发沸点 写笔记 写代码 草稿箱 创作灵感
查看更多
会员
登录
注册
OneSwap系列第十五篇之 合约间套利
OneSwap中文社区
2020-11-19
962
本文章主要介绍,如何用js编写一个简单的线下套利机器人,在去中心化交易所进行无风险盈利。本自动化程序无生产环境试验,仅用于研究,读者风险自担。
去中心化交易所
项目中使用了两个去中心化交易所:UniSwap、OneSwap;借助uniSwap提供的flashSwap(闪电贷)的功能,在不同的去中心化交易所中进行无损套利。
flashSwap(闪电贷):简单说,用户在一次合约调用中,从uniswap的交易对资金池中借出某种token,调用提前部署好的套利合约,与别的去中心化交易所的资金池进行无风险套利,完后,归还相应价值的借贷资产。在这种无风险套利中,用户只需要支付以太坊上的交易手续费,并且不需要事先持有任何的交易对中的token。
uniswap 与 oneswap套利合约示例:https://github.com/oneswap/uniswap_oneswap_arbitrage/blob/master/contracts/FlashSwap.sol
由于不同的去中心化交易所的交易引擎算法不同,所以需要针对于不同的交易所,编写特定的套利合约。
程序编写
本文描述的机器人是一个简单的MVP(Minimum Viable Product)版本,主要包含下列几种功能:
套利资金池的配置
查询不同交易所上资金池的数据
计算资金池在不同交易所中的价格
计算填平资金池之间的价格差距,需要从uniswap中借出的token数量
计算需要还给uniswap的token数量,计算可以从另一个交易所中得到的token数量
计算是否有套利空间
发送套利交易
配置套利资金池
在类uniswap的去中心化交易所中,每个资金池都由一个交易对组成(即:包含两种token),所以第一步,配置准备套利的资金池。因为不同的交易所中组成交易对合约的两种token排序算法不同,所以在这步,需要手动设置两个交易token的顺序(以方便下步的价格计算)
示例代码如下:
function initPairs(){
pairs = new Map();
// note: 此处value为的tokens地址,需要与uniswap, oneswap上组成pair的地址顺序相同
// eth/usdt; uniSwapPairAddr; oneSwapPairAddr
pairs.set("0x0d4a11d5EEaaC28EC3F61d100daF4d40471f1852;0xD5c97DaA0bfF751e4282BbC5AC8D008738881224;ETH/USDT",
["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0xdAC17F958D2ee523a2206206994597C13D831ec7"]);
....
}
pair:为Map类型,key 为string类型,value 为数组类型
key: 为两个交易所中资金池的地址,交易对名称,由;分隔;格式 uniSwapPairAddr;oneSwapPairAddr;PairSymbol
value: 为两个交易所中组成资金池的token,按顺序放置;格式 [uniswapToken0,uniswapToken1,oneswapStock,oneswapMoney]
uniswap中组成交易对的token排序规则:地址小的排在前面。
oneswap中组成交易对的token排序规则:stock定位的token排在前面,money定位的token排在后面;
当需要进行别的交易对套利时,只需要继续增加配置即可。
查询资金池的质押资金
在类uniswap的去中心交易所中,每个资金池都有两种对应的token质押金额,用来为交易者提供流动性;更详细的信息参见:https://uniswap.org/docs/v2/core-concepts/pools/;
此处查询两个交易对合约中的质押资金,示例代码如下:
async function queryUniSwapReserve(pairAddr){
console.log("uniswap pair : " + pairAddr);
let pairContract = await uniswapPairContract.at(pairAddr);
let reserves = await pairContract.getReserves();
return [reserves[0], reserves[1]]
}
async function queryOneSwapReserve(pairAddr){
console.log("oneswap pair : " + pairAddr);
let pairContract = await oneswapPairContract.at(pairAddr);
let reserves = await pairContract.getReserves();
return [reserves[0], reserves[1]]
}
注意:此处查询的质押金额的与第一步资金池中配置的token顺序相同。
即uniswap的质押金额:索引0为 token0的质押资金,索引1为 token1的质押资金;
oneswap的质押金额:索引0为 stock的质押资金,索引1为 money的质押资金;
计算两个资金池的当前价格
价格计算公式:price = money / stock;
统一质押金额顺序
计算价格时的第一步,是对两个资金池的质押金额顺序进行统一;此处是依据oneswap的顺序为准;
代码示例如下
function resortUniReserves(tokens, uniReserves){
if (tokens[0] === tokens[2]){ // uniToken0 == stock
return uniReserves
}else if (tokens[0] === tokens[3]){ uniToken0 == money
return [uniReserves[1], uniReserves[0]]
}
}
将uniswap的质押金额的顺序,与oneswap的顺序调整一致;此时返回的金额数组,索引0 为stock token的金额,索引1 为money token的金额。
计算价格
依据公式:price = moneyTokenAmount / stockTokenAmount
示例代码如下
function calPrice(reserves){
return reserves[1] / reserves[0]
}
分别计算出 oneswap、uniswap资金池中交易对的价格
计算填平价格差距时所需的资金数量
依据计算出的价格,计算填平两个资金池价格差距时所需要资金数量。
此处主要有三种情况:
价格相同,或者相差不大(可以自己设置价格滑点),表示无套利机会,直接退出。
uniSwapPrice > oneSwapPrice,则从uniSwap借出money token,在oneSwap市场中,购买stock token,将价格拉升至与uniSwap相同,计算需要借出的数量
uniSwapPrice < oneSwapPrice,则从uniSwap借出stock token,在oneSwap市场中,卖出stock token,将价格拉低至与uniSwap相同,计算需要借出的数量
注意:虽然oneSwap市场中,添加了订单簿的功能,但是在计算套利空间时,加上订单这部分计算,会导致数据查询、计算过程比较复杂;所以此处只考虑 AMM的质押金额;
但是这种考虑方式,也可以兼容订单簿的数据;因为每次置换时,如果碰巧oneSwap有订单簿可以成交,会导致最后将资金池的价格无法拉升/降低至与uniSwap价格相同,导致下次查询时,还存在套利空间,可以继续进行套利。弊端在于,可能将一笔交易完成的套利,切分成多笔;优点在于,线下计算、数据查询复杂度降低。
示例代码如下
function tillUniSwapPriceNeededAmount(uniReserves, oneReserves, tokens){
let uniPrice = calPrice(uniReserves)
let onePrice = calPrice(oneReserves)
let amount;
let borrowToken;
// 借入money,去套利stock,把oneswap市场的价格拉升
if (uniPrice > onePrice){
if (uniPrice < onePrice * 1.03){ return {amount: -2} }
uniPrice = onePrice * 1.03
amount = Big(oneReserves[0]).times(Big(oneReserves[1])).times(Big(uniPrice)).sqrt().minus(Big(oneReserves[1]))
borrowToken = tokens[3] // 借出money
}
......
console.log("calculate amount end: ", amount.toString())
return {
amount:amount,
borrowToken: borrowToken,
}
}
上述函数的返回值为{amount(Big), borrowToken(string)};
amount:从uniSwap借出token的数量
borrowToken: 借出token的地址
计算中出现两个硬编码的值:1.03,为随意设置,未经过实际数据测试;
1.03: 表示只套利当前OneSwap交易对价格的3%
uniPrice = onePrice * 1.03
设置该数值的原因在于,两个去中心化交易所的资金池质押数量相差悬殊,相同的价格区间,在不同资金池的价格曲线上,滑点会有很大差异;质押数量越小的资金池,滑点越大,会导致当填平所有价格差距时,付出大于回报,拉低收益率。
在计算时,填平价格区间时涉及两个公式的推导过程:
借出money token,买stock token,拉升oneSwap资金池价格
(M+Δm)∗(S−Δs)=K=M∗S(M + {\Delta m}) * (S - {\Delta s}) = K = M * S(M+Δm)∗(S−Δs)=K=M∗S
P0=M/S=K/S2=M2/KP_0 = M / S = K / S^2 = M^2 / KP0=M/S=K/S2=M2/K;
P1=(M+Δm)/(S−Δs)=K/(S−Δs)2=(M+ Δm)2/KP_1 = (M + {\Delta m}) / (S - {\Delta s}) = K / (S - {\Delta s})^2 = (M + {\ \Delta m})^2 / KP1=(M+Δm)/(S−Δs)=K/(S−Δs)2=(M+ Δm)2/K
所以:(M+Δm)2/P1=M2/P0(M + {\Delta m})^2 / P_1 = M^2 / P_0(M+Δm)2/P1=M2/P0
则:Δm=P1∗S∗M−M{\Delta m} = \sqrt{P_1 * S * M} - MΔm=P1∗S∗M−M
借出stock token,卖stock token,拉低oneSwap资金池价格
与上述推到类似,此处直接写结果:Δs=S∗M/P1−S{\Delta s} = \sqrt{S * M / P_1} - SΔs=S∗M/P1−S
计算还给uniSwap的token数量和从oneSwap得到的token数量
接下来计算需要还给uniSwap的token数量。
注意:假设从uniSwap借的是A token,那么这里还回去的就是等值的B token;
第二步计算,向oneSwap输入A token数量时,获得的B token数量.
示例代码如下:
unction calReceivedAndRequiredAmount(amountAndBorrowToken, uniReserves, oneReserves, tokens){
let uniRequired;
let oneSwapReceived;
// 第一步:计算需要还给uniSwap的token数量
if (amountAndBorrowToken.borrowToken === tokens[2]){ uniRequired = getAmountInUniSwap(amountAndInputToken.amount, uniReserves[1], uniReserves[0]) }
else{ uniRequired = getAmountInUniSwap(amountAndInputToken.amount, uniReserves[0], uniReserves[1]) }
// 第二步:计算从oneSwap获得的token数量
if (amountAndInputToken.borrowToken === tokens[2]){ oneSwapReceived = getAmountOutOneSwap(amountAndInputToken.amount, oneReserves[1], oneReserves[0]) }
else{ oneSwapReceived = getAmountOutOneSwap(amountAndInputToken.amount, oneReserves[0], oneReserves[1]) }
console.log("calculate profit, oneSwapReceived: ", oneSwapReceived.toString(),"; uniRequired: ", uniRequired.toString())
return {uniRequired: uniRequired, oneSwapReceived: oneSwapReceived}
}
该函数的返回值为 两个资金池得到/需求的数量;
索引0: uniSwap资金池需要的数量
索引1: oneSwap资金池获得的数量
该函数涉及两个公式,推导过程如下:
需要还给uniSwap的token数量
(M−Δm)∗(S+Δs)=K=M∗S(M - {\Delta m}) * (S + {\Delta s}) = K = M * S(M−Δm)∗(S+Δs)=K=M∗S
所以:(M−Δm)∗(S+Δs)=M∗S(M - {\Delta m}) * (S + {\Delta s}) = M * S(M−Δm)∗(S+Δs)=M∗S
则:Δs=S∗Δm/(M−Δm) {\Delta s} = S * {\Delta m} / (M - {\Delta m})Δs=S∗Δm/(M−Δm)
因为有0.3%的手续费,所以最后的公式要添加上手续费的计算:Δs=S∗Δm∗1000/((M−Δm)∗997) {\Delta s} = S * {\Delta m} * 1000 / ((M - {\Delta m}) * 997 )Δs=S∗Δm∗1000/((M−Δm)∗997)
可以从oneSwap获得token数量
(M+Δm)∗(S−Δs)=K=M∗S(M + {\Delta m}) * (S - {\Delta s}) = K = M * S(M+Δm)∗(S−Δs)=K=M∗S
所以:(M+Δm)∗(S−Δs)=M∗S(M + {\Delta m}) * (S - {\Delta s}) = M * S(M+Δm)∗(S−Δs)=M∗S
则:Δs=S∗Δm/(M+Δm) {\Delta s} = S * {\Delta m} / (M + {\Delta m})Δs=S∗Δm/(M+Δm)
因为有0.5%的手续费,所以最后的公式要添加上手续费的计算: {\Delta s} = Δs∗50/1000{\Delta s} * 50 / 1000Δs∗50/1000
计算是否有套利空间
依据上步计算出的两个市场的数量,计算可以盈利的数量;同时,在这里需要考虑两个方面:
盈利的token是否可以覆盖 这笔交易的手续费
因为此处的盈利为链下计算,交易上链可能需要一段时间(尤其是针对以太坊的拥堵情况)
所以,需要此处只有盈利极大的情况下(比如:100 usdt),才可以发送套利交易。
这里的100 美金为综合这段时间以太坊的手续费考虑 + 交易上链的时间(因为这段时间有可能链上还有用户在交易,抹平价格差)。
示例代码如下
// 获利太小的情况下,退出
if (oneSwapReceived < uniRequired.times(slippage)){
console.log("oneSwapReceived: ", oneSwapReceived.toString(), "; uniRequired * slippage : ", uniRequired.times(slippage).toString())
return {input: -1}
}
此处,并没有引入获利金额,而是用了一个盈利滑点控制。需要后续进行优化,引入盈利金额进行控制。因为一般情况下,每个币种一天的单价不会变化太大;所以,可以在配置里,写入当天币种的单价,来计算盈利。
发送套利交易
在上述所有计算之后,如果出现套利机会,就可以发送套利交易,调用uniSwap的flash swap(闪电贷)进行获利。
示例代码如下:
async function sendTx(tokenAndAmount, uniSwapPairAddr, tokens){
let bytes = web3.eth.abi.encodeParameters(['bool','bool'],[tokenAndAmount.uniSwapToken0IsStock, false]);
let contract = await uniswapPairContract.at(uniSwapPairAddr);
if (tokenAndAmount.inputToken === tokens[0]) {
await contract.swap(tokenAndAmount.amount, 0, arbitrageAddr, bytes);
}else if ((tokenAndAmount.inputToken === tokens[1]) ){
await contract.swap(0, tokenAndAmount.amount, arbitrageAddr, bytes);
}
}
上述函数有两个逻辑:
套利合约需要的参数:
套利合约需要两个参数:第一个为,uniSwap的token0 是否为 oneSwap的stock token,依据配置情况传入即可。第二个参数为:oneSwap的市场参数。
在oneSwap中,相同的交易对(如:ETH/USDT),可能存在两个市场,一个开启限价单功能,一个未开启限价单功能;false: 表式开启限价单功能。
调用uniSwap时,需要借出的金额
如果借出的token 为token0,则数量写在第一个参数,反之亦然。
组装机器人
通过将上述的功能组装起来,就可以得到一个可以运行的机器人。
示例代码如下:
async function loop(){
initPairs()
console.log("enter loop")
while (true) {
console.log("enter ...")
await work()
}
}
async function work(){
console.log("work ...: ")
for (let pair of pairs) {
let pairAddrs = spiltPairs(pair[0])
console.log("\n\n\ncheck pair: ", pairAddrs[2])
let uniReserves = await queryUniSwapReserve(pairAddrs[0]); // toke1, token2
let oneReserves = await queryOneSwapReserve(pairAddrs[1]); // stock, money
let tokenAndAmount = hasChanceToArbitrage(pair[1], uniReserves, oneReserves)
console.log("calculate profit amount: ", tokenAndAmount.profit, "; input token amount: ", tokenAndAmount.amount)
if (tokenAndAmount.amount > 0) {
await sendTx(tokenAndAmount, pairAddrs[0], pair[1])
}
}
}
总结
至此,一个套利机器人的MVP初版完成,大部分的核心功能都已具备。但是,在以太坊的去中心化交易所中套利时,除了套利程序这个基本的要素之外,还有一个必备的要素:与套利程序链接的以太坊节点,最好是直接链接矿池的节点,这样可以保证交易及时上链,保证套利交易的成功率。
套利的成功与否,作者认为取决于上述两点要素:套利程序的性能,链接的以太坊节点;二者缺一不可,套利程序可以保证捕捉到去中心化交易所中的套利机会;链接的节点,可以保证将捕捉到的机会真正兑现;下面的链接文章描述了在以太坊上套利时,节点的重要性。
Ethereum is a Dark Forest
OneSwap中文社区
14
文章
17k
阅读
30
粉丝 目录 收起
去中心化交易所
程序编写
配置套利资金池
查询资金池的质押资金
计算两个资金池的当前价格
统一质押金额顺序
计算价格
计算填平价格差距时所需的资金数量
计算还给uniSwap的token数量和从oneSwap得到的token数量
计算是否有套利空间
发送套利交易
组装机器人
总结
友情链接:
结婚三年他不曾碰过她离婚时
总裁爹地惹不起第113章
我有一个仙魔群
穿越时空的现代人小说在线阅读
swoole是什么意思
正确的选择小说
DeFi新玩法|一文教你用Node.js在Uniswap和SushiSwap之间套利_腾讯新闻
DeFi新玩法|一文教你用Node.js在Uniswap和SushiSwap之间套利
注:在以太坊的DeFi世界里,潜伏着一群机器猎人,它们的目的是捕捉潜在的利润机会,并自动完成交易任务。
那如何才能成为其中之一呢,这篇文章会教你入门,原文作者是Messari开发者Jonathan Otto。
(图片来自:Pxfuel)
Uniswap和SushiSwap就像股票交易所,但它们是以太坊区块链上的。在这种情况下,套利意味着在一家交易所买入某种东西,然后立即在其他地方卖出获利。
以太坊上有很多这样的套利机会,而在这篇文章中,我们会解释一个比较容易的套利方式,因为SushiSwap是Uniswap的分叉,这意味着它们的API都是相同的。参与这样的套利,你需要node.js以及一个以太坊节点(运行自己的节点或使用Infura/Etherscan)。
这个套利机器人的业务逻辑是:
监控Uniswap和SushiSwap的最新价格;
决定是否交易;
执行交易;
那这样能盈利吗?也许吧,这篇文章将帮助你入门DEX套利,然后在文章最后,我们会给出一些关于如何提高竞争力和利润的想法。
下面是我们如何构建这个机器人的伪代码:
实际上,我们可以将套利机器人应用到Uniswap(Uniswap目前拥有约19000个市场)和SushiSwap(目前有约220个市场)的所有交叉市场,但本文将只关注USDC/ETH。
首先,我们需要监控Uniswap和SushiSwap的最新交易。
1
监控最新价格
复制这60行node.js代码,然后粘贴,以查看每次在Uniswap上进行交易时以太坊的USDC报价(你需要连接一个以太坊节点)。
要使其适用于SushiSwap,只需更改一个变量:要监控的智能合约地址(Uniswap和SushiSwap的每个市场都是一个单独的智能合约)。
在这个例子中,我们将第5行的变量更改为0x397ff1542f962076d0bfe58ea045ffa2d347aca0。那我是从哪里得到这个地址的呢?
我是在这里找到它的:https://sushiswap.vision/pairs,你也可以直接从SushiSwap factory合约的方法中直接找到:为了将其扩展到所有交叉市场,你可以使用Uniswap和SushiSwap factory智能合约的方法。(Uniswap平台由3个组件组成,分别是“factory”、“router”以及N个“配对”合约)
2
决定是否交易
所以现在你要监控Uniswap和SushiSwap的USDC/ETH价格,那你怎么知道交易是否能盈利呢?这里有3个数学因素:
Uniswap和SushiSwap的交易费用(每笔交易0.3%);
以太坊网络交易费用(撰写本文时每笔交易大约4美元);
Uniswap市场和SushiSwap市场的滑点;
其中第一点是最重要的:即扣除交易费后的价差。
如果扣除交易费用后的利润大于0.01美元,那我们要进行交易吗?答案是“否”,因为以太坊网络交易费(gas费)可能相当于4美元。那如果利润为4.01美元,那我们应该交易吗?如果我们要购买的数量不会导致价格变化,那么答案为“是”。好吧,那我怎么知道这笔交易是否会改变价格?你可以计算出滑点,这可以从储备金(流动性)的大小得出结果。
而Uniswap和SushiSwap都是“AMM”(自动化做市商),这是一个看起来像这样的奇特对象:
有三种方式:depositLiquidity、withdrawLiquidity以及swap。
注意对象中的实际数据:2个数字,分别对应每个代币(400和1)。
这些数字代表了智能合约中代币的数量,即流动性。
请注意,如果将这些储备数相乘,结果为400。这被称为“乘积”(数学乘积),它由初始存储用户根据每个代币的存款大小在智能合约中进行定义(这是一个任意的数字,但在初始阶段之后不会改变,因此我们可以将其视为一种数学关系)。
要获得token1的价格,只需要找到比率:400/1或400。要获得token0的价格,取比率的倒数:1/400或0.0025。这些AMM是双向的:即用户可以购买token0出售token1,或者购买token1出售token0。
回到重点,我们如何计算滑点?我们将使用常数乘积400,以及储备大小之间的关系来查看token1储备供应的不同百分比的价格。
例如,在购买token1 50%的供应量后,计算token1的价格,我们要解决的是,如果token1只有0.5个单位(原始数量1的50%)存在,则需要多少个token0单位来维持400的恒定乘积。
恒定乘积 = token0 储备量* token1 储备量;
400= token0Reserves * (1*0.5);
求解token0Reserves:400=0.5 * token0Reserves
400/0.5 = 800
这意味着在购买50%的token1后,储备中将有800个token0和0.5个token1。因此,新价格(比率)为800/0.5=1600美元。这是否意味着在这里购买50%的供应要花费1600美元?不是的,实际支付的费用介于原价400美元和最终价格1600美元之间。在本示例子中,我们收到了0.5个单位,以将token0储备增加400个单位(800-400)/0.5 =800,即1个token1的平均价格为800 token0(价格上涨100%)。
不要错以为这是一个线性关系,购买80%的供应量,每单位token1,将平均花费1333单位的token0 (价格上涨233%)。请注意这种指数关系,因为你经常会在流动性池中看到,小订单就可以显著推动价格变化。
我建议你阅读这篇文章,以进一步了解Uniswap。有了滑点,我们可以使用另一个函数来改善我们的函数,以确定在价格超过盈亏平衡点之前,我们可以购买多少单位的token0 :
但这项交易不会100%完成,为什么?因为现实情况下,会存在和你竞争的套利机器人,这会使得你的交易利润变少,甚至有一些抢先交易机器人会以更高的gas价格复制你的交易,并取代你。
一种稚拙的解决方案,只需将估计利润的100%分配给gas,然后减少它,直到交易开始失败(竞争机器人)。
3
执行交易
在我们可以在Uniswap或SushiSwap上执行“swap”之前,我们需要对每个要交易的ERC20代币调用“approve”方法,对于这篇文章的例子,我们需要4次批准:
通过批准后,我们最终可以进行一笔交易:
4
黑暗森林战术
这个指南为每次交易执行了2个独立的交易,但实际上我们将部署一个智能合约,可以将这些交易批处理成单笔交易。我们还试图隐藏自己的交易,以防止通用的抢先交易机器人。
-J. Otto
在Infura上建立闪电贷套利机器人 #2 | 登链社区 | 区块链技术社区
文章
问答
讲堂
专栏
集市
更多
提问
发表文章
活动
文档
招聘
发现
Toggle navigation
首页 (current)
文章
问答
讲堂
专栏
活动
招聘
文档
集市
搜索
登录/注册
在Infura上建立闪电贷套利机器人 #2
翻译小组
更新于 2021-02-03 10:25
阅读 6373
闪电贷套利机器人
> * 译文出自:[登链翻译计划](https://github.com/lbc-team/Pioneer)
> * 译者:[翻译小组](https://learnblockchain.cn/people/412)
> * 校对:[Tiny 熊](https://learnblockchain.cn/people/15)
> * 本文永久链接:[learnblockchain.cn/article…](https://learnblockchain.cn/article/2101)
[在上一篇文章中](https://learnblockchain.cn/article/2038)我们介绍了我们机器人背后的三个主要概念:套利、基于合约的交易和乐观转账。
在这篇文章中,我们将介绍如何构建一个程序,以观察并执行有利可图的套利交易。
这是我们做的整体流程:
![套利交易流程](https://img.learnblockchain.cn/pics/20210203084003.png)
**1.** 程序(`Bot`)正在观察Uniswap和Sushiswap上ETH-Dai配对的价格。
**2.** 当它发现一个有利可图的套利机会时,它就会向我们部署的合约发送一笔交易。
**3.** 在这笔交易中,合约将:
**a)** 使用闪电兑,乐观地从价格较低的资产池中借入资产。
**b)** 立即在较高的资产池出售资产。
**c)** 偿还闪电兑,将差额收入囊中。
让我们一起来实现这些吧!
我们的程序是在Node.js中使用[ethers.js库](https://learnblockchain.cn/docs/ethers.js/)编写的,并与Infura节点相连,套利智能合约是用[Solidity](https://learnblockchain.cn/docs/solidity/) 编写。
## Infura
我们的后端部分是用Node写的,将使用Infura节点来观察Uniswap和Sushiswap合约上ETH和Dai的价格。 这里会依靠Infura节点来获取主网每个新区块产生的价格。 如果你没有免费的Infura账户,你可以在[这里](https://infura.io/register?&utm_source=infurablog&utm_medium=referral&utm_campaign=Tutorials&utm_content=flashbot2)注册。
### .env 配置
*这是超级重要的!*我们还需要存储我们的私钥来签署主网交易。 我们把所有的敏感信息都放在.env文件中([查看在repo中的例子](https://github.com/pedrobergamini/uni-sushi-flashloaner/blob/master/.env.example))。 我们还输入了套利合约的地址和Infura主网节点的密钥。
```
PRIVATE_KEY=
FLASH_LOANER=
INFURA_KEY=
```
确保 `PRIVATE_KEY `与部署 `FLASH_LOANER `合约的相同。 另外,与`PRIVATE_KEY`相关联的以太坊账户需要有足够的资金来支付Gas费用,Gas费用可能很高。
如果你不确定我们为什么要这样做,[请阅读这篇优秀的文章,解释如何避免将你的私钥上传到Github](https://consensys.net/blog/blockchain-development/how-to-avoid-uploading-your-private-key-to-github-approaches-to-prevent-making-your-secrets-public/?&utm_source=infurablog&utm_medium=referral&utm_campaign=Tutorials&utm_content=flashbot2)。正如文章所解释的,我们需要将敏感信息放在这个.env文件中,然后我们将其添加到[.gitignore文件中](https://github.com/pedrobergamini/uni-sushi-flashloaner/blob/master/.gitignore), 像这样:
```
.env
yarn.lock
package-lock.json
node_modules
```
这样,当我们把信息推送到Github时,这个文件就不会被提交。 这是超级,超级重要的!
## Ethers.js
我们使用Ethers.js是因为它兼容 Typescript ,Typescript是项目的原始语言。 这对于Ethereum开发者来说是一个老问题了,但是关于ethers.js和web3,js的更多区别,[请看这篇文章](http://blog.infura.io/ethereum-javascript-libraries-web3-js-vs-ethers-js-part-i/?&utm_source=infurablog&utm_medium=referral&utm_campaign=Tutorials&utm_content=flashbot2)。
## 合约实例
接下来,我们在第11行和第12行实例化[Uniswap和Sushiswap合约](https://github.com/pedrobergamini/uni-sushi-flashloaner/blob/master/index.js#L11)。
```
// uni/sushiswap ABIs
const UniswapV2Pair = require('./abis/IUniswapV2Pair.json');
const UniswapV2Factory = require('./abis/...
译文出自:登链翻译计划
译者:翻译小组
校对:Tiny 熊
本文永久链接:learnblockchain.cn/article…
在上一篇文章中我们介绍了我们机器人背后的三个主要概念:套利、基于合约的交易和乐观转账。
在这篇文章中,我们将介绍如何构建一个程序,以观察并执行有利可图的套利交易。
这是我们做的整体流程:
1. 程序(Bot)正在观察Uniswap和Sushiswap上ETH-Dai配对的价格。
2. 当它发现一个有利可图的套利机会时,它就会向我们部署的合约发送一笔交易。
3. 在这笔交易中,合约将:
a) 使用闪电兑,乐观地从价格较低的资产池中借入资产。
b) 立即在较高的资产池出售资产。
c) 偿还闪电兑,将差额收入囊中。
让我们一起来实现这些吧!
我们的程序是在Node.js中使用ethers.js库编写的,并与Infura节点相连,套利智能合约是用Solidity 编写。
Infura
我们的后端部分是用Node写的,将使用Infura节点来观察Uniswap和Sushiswap合约上ETH和Dai的价格。 这里会依靠Infura节点来获取主网每个新区块产生的价格。 如果你没有免费的Infura账户,你可以在这里注册。
.env 配置
这是超级重要的!我们还需要存储我们的私钥来签署主网交易。 我们把所有的敏感信息都放在.env文件中(查看在repo中的例子)。 我们还输入了套利合约的地址和Infura主网节点的密钥。
PRIVATE_KEY=
FLASH_LOANER=
INFURA_KEY=
确保 PRIVATE_KEY与部署 FLASH_LOANER合约的相同。 另外,与PRIVATE_KEY相关联的以太坊账户需要有足够的资金来支付Gas费用,Gas费用可能很高。
如果你不确定我们为什么要这样做,请阅读这篇优秀的文章,解释如何避免将你的私钥上传到Github。正如文章所解释的,我们需要将敏感信息放在这个.env文件中,然后我们将其添加到.gitignore文件中, 像这样:
.env
yarn.lock
package-lock.json
node_modules
这样,当我们把信息推送到Github时,这个文件就不会被提交。 这是超级,超级重要的!
Ethers.js
我们使用Ethers.js是因为它兼容 Typescript ,Typescript是项目的原始语言。 这对于Ethereum开发者来说是一个老问题了,但是关于ethers.js和web3,js的更多区别,请看这篇文章。
合约实例
接下来,我们在第11行和第12行实例化Uniswap和Sushiswap合约。
// uni/sushiswap ABIs
const UniswapV2Pair = require('./abis/IUniswapV2Pair.json');
const UniswapV2Factory = require('./abis/...
剩余50%的内容购买后可查看
单篇购买 15学分
学分: 87
分类: DeFi
标签:
套利
闪电贷
闪电兑
Uniswap
Sushiswap
点赞 6
收藏 21
分享
Twitter分享
微信扫码分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。
你可能感兴趣的文章
一个通用的套利交易模型
209 浏览
UniswapV3 部署 - - Foundry Edition
233 浏览
uniswap v2
313 浏览
剖析DeFi交易产品之UniswapV3:Pool合约
970 浏览
#DEFI# 从 BitShares 到 Uniswap:Dex 发展亲历者的去中心化交易所之旅
551 浏览
SharkTeam:BH闪电贷攻击原理分析
983 浏览
相关问题
有没有已经部署的合约去查询Uniswap V3 NFT仓位的价值
1 回答
一般在编写套利合约中通过什么能直接读取给定交易对uniswap v2中的价格?
4 回答
uniswap 多跳路由寻找相关
1 回答
请问一下在几个AMM池子中如果A池子与其他BCDE池子存在套利空间,如何快速计算最大的套利数量和选择最优的套利池子呢
1 回答
Uniswap中的LP token的数值是如何计算出来的(需要详细计算过程)
2 回答
如何获取 Uniswap 代币价格,v2 v3 是否不同
1 回答
0 条评论
请先 登录 后评论
翻译小组
0x9e64...7c84
关注
贡献值: 2706
学分: 51544
大家看到好的文章可以在 GitHub 提 Issue: https://github.com/lbc-team/Pioneer/issues
欢迎关注我的 Twitter: https://twitter.com/UpchainDAO
文章目录
关于
关于我们
社区公约
学分规则
Github
伙伴们
DeCert
ChainTool
GCC
合作
广告投放
发布课程
联系我们
友情链接
关注社区
Discord
Youtube
B 站
公众号
关注不错过动态
微信群
加入技术圈子
©2024 登链社区 版权所有 |
Powered By Tipask3.5|
粤公网安备 44049102496617号
粤ICP备17140514号
粤B2-20230927
增值电信业务经营许可证
×
发送私信
请将文档链接发给晓娜,我们会尽快安排上架,感谢您的推荐!
发给:
内容:
取消
发送
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
取消
举报
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!