web3-基于贝尔曼福特算法(Bellman-Ford )与 SMT 的 Web3 DeFi 套利策略研究

如何找到Defi中的交易机会

把defi看做是一个完全开放的金融产品图表,可以看到所有的一切东西;我们要沿着这些金融图表找到一些最优的路径,就有可能会发现一些有利可图的机会。这些有利可图的机会对于项目方来说可能是一种攻击

如何在Defi中发现套利或者获利的机会
  • 贝尔曼福特算法Bellman Ford Algorithm
    • 负循环检测(Negative cycle detection)
    • 适用于多个市场
    • 在传统金融和DeFi中都被广泛使用
  • 定理求解器(SMT)
    • 需要对defi模型编码
    • 可能需要一些启发式算法(heuristic)来进行路径修剪(path pruning)
DeFiPoser-ARB和DeFiPoser-SMT
  • DeFiPoser-ARB
    • 建立defi市场图标
    • 检测负周期
    • Bellman Ford-Moore 算法
  • DeFiPoser-SMT
    • 状态转换模型
    • 修剪搜索空间
    • 定理证明者
      在这里插入图片描述
📌 图解说明:

这张图其实是货币兑换套利问题的一个例子,常用贝尔曼-福特算法来检测是否存在套利机会(即经过一圈兑换后,能赚到钱,兑换前后资产数量增加)。

📌 图中元素含义:
  • 红、黄、绿、蓝的小房子 代表四个不同货币交易市场。
  • 每个房子标记了汇率:
    • A B = p 1 \frac{A}{B}=p_1 BA=p1
    • B C = p 2 \frac{B}{C}=p_2 CB=p2
    • C A = p 3 \frac{C}{A}=p_3 AC=p3
    • B A = p 4 \frac{B}{A}=p_4 AB=p4
  • 箭头代表交易路径,箭头上的公式是交易后的资产数量。
  • 初始带着 1×A,尝试通过不同路径回来,看是否能变成大于1×A。
📌 中间两张图讲了两种套利路径:
▶️ 中间图(路径一):

从 A → B → A
利润条件是:
p 1 × p 4 > 1 p_1 \times p_4 > 1 p1×p4>1
即:如果你先把 A 换成 B,再把 B 换回 A,资产增值了,就存在套利。


▶️ 右边图(路径二):

从 A → B → C → A
利润条件是:
p 1 × p 2 × p 3 > 1 p_1 \times p_2 \times p_3 > 1 p1×p2×p3>1
同理,如果沿这个路径资产增值了,就存在套利。

📌 这和贝尔曼-福特算法的关系:

贝尔曼-福特算法原本用来在带权图中找最短路径,也能用来检测负权环

套利问题中

  • 我们把汇率取对数(通常是 log ⁡ ( 汇率 ) \log(\text{汇率}) log(汇率)),然后取相反数,变成权值。
  • 如果存在一条回路,回到起点,路径和小于0,说明存在套利机会。
📌 算法步骤:
  1. 初始化每个点到起点的距离。
  2. 对所有边松弛 (Relax) N-1 次。
  3. 再执行一次松弛,如果还能更新,说明存在负权环(即套利机会)。
    在这里插入图片描述
    这张图就是用交易路径的方式形象化表示套利路径和条件,而检测这些路径是否满足套利条件,就是贝尔曼-福特算法擅长的事情。
货币套利问题贝尔曼-福特算法 的应用场景
📌 左边这张图:

是一个带权有向图,每个节点代表一个货币,每条有向边代表汇率交易

  • A → B A \rightarrow B AB 的权值是 − log ⁡ p 1 -\log p_1 logp1
  • B → C B \rightarrow C BC 的权值是 − log ⁡ p 2 -\log p_2 logp2
  • C → A C \rightarrow A CA 的权值是 − log ⁡ p 3 -\log p_3 logp3

为什么用 − log ⁡ p -\log p logp 呢?

  • 因为原本套利条件是:

p 1 × p 2 × p 3 > 1 p_1 \times p_2 \times p_3 > 1 p1×p2×p3>1

两边取对数:
log ⁡ ( p 1 × p 2 × p 3 ) > 0 \log(p_1 \times p_2 \times p_3) > 0 log(p1×p2×p3)>0
转化成:
log ⁡ p 1 + log ⁡ p 2 + log ⁡ p 3 > 0 \log p_1 + \log p_2 + \log p_3 > 0 logp1+logp2+logp3>0
再乘个 − 1 -1 1
− ( log ⁡ p 1 + log ⁡ p 2 + log ⁡ p 3 ) < 0 -(\log p_1 + \log p_2 + \log p_3) < 0 (logp1+logp2+logp3)<0

📌 中间部分:

把套利条件转化为:
( − log ⁡ p 1 ) + ( − log ⁡ p 2 ) + ( − log ⁡ p 3 ) < 0 (-\log p_1) + (-\log p_2) + (-\log p_3) < 0 (logp1)+(logp2)+(logp3)<0
意思是:
如果图中存在一个环,环上的边权之和 < 0,说明存在套利机会。

📌 右上角小公式:

总结了一下这件事:

  • 如果:

∏ p i > 1 \prod p_i > 1 pi>1

等价于:
∑ ( − log ⁡ p i ) < 0 \sum (-\log p_i) < 0 (logpi)<0

📌 右下角框:

说明解决这个问题的方法:

  • 使用 Bellman-Ford-Moore 算法
  • 时间复杂度:

O ( ∣ N ∣ 2 ⋅ ∣ E ∣ ) O(|N|^2 \cdot |E|) O(N2E)

(其实一般 Bellman-Ford 是 O ( N ⋅ E ) O(N \cdot E) O(NE),这里写成 ∣ N ∣ 2 ⋅ ∣ E ∣ |N|^2 \cdot |E| N2E 可能是指对所有顶点多轮松弛或特殊实现)
在这里插入图片描述
这张图其实讲了一个套利检测的问题:

  1. 汇率相乘 > 1 就是套利。
  2. − log ⁡ -\log log 把乘法变加法。
  3. 看图中是否存在负环
  4. Bellman-Ford算法检测负环。

DeFiPoser-SMT
在这里插入图片描述

DeFiPoser 评估

  • 96笔在Uniswap,Bancor和Marker DAO上的操作,总共覆盖了25种资产
  • Block910000(Dec-13-2019)到10050000(May-12-2020)
  • 通过具体执行来进行验证
    在这里插入图片描述

贝尔曼福特算法 VS SMT

在这里插入图片描述

总结

本文研究了基于贝尔曼-福特算法和SMT求解器的DeFi套利策略。将DeFi市场建模为金融产品图,利用贝尔曼-福特算法检测负权环(套利机会),并通过SMT对DeFi模型编码进行路径优化。研究提出两种方法:DeFiPoser-ARB建立市场图并检测负周期,DeFiPoser-SMT采用状态转换模型进行空间修剪。实验验证了该策略在Uniswap等平台的有效性,比较了两种算法在检测套利路径时的性能差异。该研究为DeFi领域的套利检测提供了量化分析框架。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/83123.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/83123.shtml
英文地址,请注明出处:http://en.pswp.cn/web/83123.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…

Go 语言中的内置运算符

1. 算术运算符 注意&#xff1a; &#xff08;自增&#xff09;和--&#xff08;自减&#xff09;在 Go 语言中是单独的语句&#xff0c;并不是运算符。 package mainimport "fmt"func main() {fmt.Println("103", 103) // 13fmt.Println("10-3…

SQL注入篇-sqlmap的配置和使用

在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap&#xff0c;但是由于很多朋友看不了解命令行格式&#xff0c;所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习&#xff0c;链接&#xff1a;https://wwhc.lanzoue.com/ifJY32ybh6vc…

发立得信息发布系统房屋信息版(php+mysql)V1.0版

# 发立得信息发布系统房屋信息版(phpmysql) 一个轻量级的房屋信息发布平台&#xff0c;基于PHP和MySQL开发&#xff0c;支持用户发布房屋出售/出租信息&#xff0c;以及后台管理功能。 轻量级适合网站开发PHP方向入门者学习&#xff0c;首发版本&#xff0c;未经实际业务流程检…

学习 React【Plan - June - Week 1】

一、使用 JSX 书写标签语言 JSX 是一种 JavaScript 的语法扩展&#xff0c;React 使用它来描述用户界面。 什么是 JSX&#xff1f; JSX 是 JavaScript 的一种语法扩展。看起来像 HTML&#xff0c;但它实际上是在 JavaScript 代码中写 XML/HTML。浏览器并不能直接运行 JSX&…

小智AI+MCP

什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析&#xff1a;AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github&#xff1a;https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…

基于python大数据的口红商品分析与推荐系统

博主介绍&#xff1a;高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实实在…

ArcPy扩展模块的使用(3)

管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如&#xff0c;可以更新、修复或替换图层数据源&#xff0c;修改图层的符号系统&#xff0c;甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…

打开GitHub网站因为网络原因导致加载失败问题解决方案

Date: 2025.06.09 20:34:22 author: lijianzhan 在Windows系统中&#xff0c;打开GitHub网站因为网络原因导致加载失败问题解决方案 打开Windows系统下方搜索框&#xff0c;搜索Microsoft Store&#xff0c;并且双击打开 在应用里面搜索Watt Toolkit&#xff0c;并下载安装 …

AI代码助手需求说明书架构

AI代码助手需求说明书架构 #mermaid-svg-6dtAzH7HjD5rehlu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6dtAzH7HjD5rehlu .error-icon{fill:#552222;}#mermaid-svg-6dtAzH7HjD5rehlu .error-text{fill:#552222;s…

.NET开发主流框架全方位对比分析

文章目录 1. ASP.NET Core核心特性代码示例&#xff1a;基本控制器优势劣势 2. .NET MAUI核心特性代码示例&#xff1a;基本页面优势劣势 3. Blazor两种托管模型核心特性代码示例&#xff1a;计数器组件优势劣势 4. WPF (Windows Presentation Foundation)核心特性代码示例&…

【系统架构设计师-2025上半年真题】案例分析-参考答案及部分详解(回忆版)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 试题一(25分)【问题1】(12分)【问题2】(13分)试题二(25分)【问题1】(10分)【问题2】(6分)【问题3】(9分)试题三(25分)【问题1】(13分)【问题2】(8分)【问题3】(4分)试题四(25分)【问题1】(6分)【问题2】(12…

【中间件】Web服务、消息队列、缓存与微服务治理:Nginx、Kafka、Redis、Nacos 详解

Nginx 是什么&#xff1a;高性能的HTTP和反向代理Web服务器。怎么用&#xff1a;通过配置文件定义代理规则、负载均衡、静态资源服务等。为什么用&#xff1a;提升Web服务性能、高并发处理、负载均衡和反向代理。优缺点&#xff1a;轻量高效&#xff0c;但动态处理能力较弱&am…

运动控制--小车的启动和停止算法

一、现实问题 小车在启动时由于受到惯性&#xff0c;后轮和前轮速度不一致&#xff0c;会引起车身不稳。 如小车上面装的是水&#xff0c;会出现倾洒&#xff0c;体验差。 二、数学研究 启动时 停止时 急动度&#xff08;jerk) 三、BLDC控制与S型曲线的融合逻…

WebFuture:Ubuntu 系统上在线安装.NET Core 8 的步骤

方法一&#xff1a;使用官方二进制包安装 下载.NET Core 8 SDK 二进制包&#xff1a;访问 .NET Core 8 SDK 官方下载页面&#xff0c;根据你的系统架构选择对应的 Linux x64 版本等下载链接&#xff0c;将其下载到本地4. 创建安装目录&#xff1a;在终端中执行以下命令创建用于…

可视化预警系统:如何实现生产风险的实时监控?

在生产环境中&#xff0c;风险无处不在&#xff0c;而传统的监控方式往往只能事后补救&#xff0c;难以做到提前预警。但如今&#xff0c;可视化预警系统正在改变这一切&#xff01;它能够实时收集和分析生产数据&#xff0c;通过直观的图表和警报&#xff0c;让管理者第一时间…

深度解析 Linux 内核参数 net.ipv4.tcp_rmem:优化网络性能的关键

文章目录 引言一、认识 net.ipv4.tcp_rmem1. 最小值&#xff08;min&#xff09;2. 默认值&#xff08;default&#xff09;3. 最大值&#xff08;max&#xff09; 二、net.ipv4.tcp_rmem 的工作原理三、net.ipv4.tcp_rmem 的实际应用场景1. 高并发 Web 服务器2. 文件传输服务3…

Windmill:开源开发者基础设施的革命者

前言 在企业内部,开发者经常需要构建各种内部工具来支持业务运营、数据分析和系统管理。这些工具通常需要前端界面、后端逻辑和工作流编排,开发过程繁琐且耗时。今天要介绍的Windmill项目,正是为解决这一痛点而生,它让构建内部工具变得简单高效,堪称开发者的得力助手。 …

国产化Excel处理组件Spire.XLS教程:用 Java 获取所有 Excel 工作表名称(图文详解)

在 Excel 中&#xff0c;工作表名称通常能够反映其用途或所含内容&#xff0c;提取这些名称有助于理清整个工作簿的结构。对于新用户或协作者来说&#xff0c;仅凭这些名称就能快速掌握各表中的数据类型。本文将演示如何使用 Java 获取 Excel 文件中的所有工作表名称&#xff0…

day49python打卡

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 最近临近毕业&#xff0c;事情有点多。如果有之前的基础的话&#xff0c;今天的难度相对较低。 后面说完几种模块提取特征的组合方式后&#xff0c;会提供整理的开源模块的文件。 现在大家已近可以去读这类…