首页 > 解决方案 > 列出 DFS 中所有可能的循环

问题描述

我正在尝试实施货币套利系统。我有一组这样的费率(摘录):

{
  WETH: { USDC: 1251.412454, USDT: 1247.922038, DAI: 1248.889170853253, GRT: 2564.449143585127 },
  USDC: { USDT: 0.997184, GRT: 2.047075466264398 },
  UNI:  { WETH: 0.011422976592904394 },
  UST:  { USDT: 1.006223 },
  DAI:  { USDC: 0.996408 },
  LINK: { WETH: 0.016572361615010835 },
  AAVE: { WETH: 0.22086511962970312 },
  YFI:  { WETH: 22.127349619001087 },
  WNXM: { WETH: 3.198146952589934 },
  COMP: { WETH: 0.178430488180767 },
  SNX:  { WETH: 0.012523661095285127 },
  CVP:  { WETH: 0.002145308148869976 },
  MKR:  { WETH: 1.06714037595511 },
  ANT:  { WETH: 0.002866589268616632 },
  BAND: { WETH: 0.006611859609454254 },
  GNO:  { WETH: 0.08678180778916264 },
  REN:  { WETH: 0.000417608062873623 },
  UMA:  { WETH: 0.00805809579069431 },
}

我想列出所有可能的循环(以相同的标记开始和结束),例如:

1 WETH -> 1251.412454 USDC -> 2.047075466264398*1251.412454=2561.73573 GRT -> 2561.73573/2564.449143585127 = 0.998941912 WETH

我想找到总计高于 1 的周期,因为它们是有利可图的(理论上)。

我想我应该使用 Bellman-Ford 但我无法获得一些我尝试使用这些数据的实现,因为并非每一对都有对应的匹配项(例如,没有 AAVE-USDC 对,你必须做 AAVE- >WETH->USDC)。

我正在使用 javascript 但伪代码或其他任何东西都可以。

标签: javascriptdepth-first-searchbellman-ford

解决方案


推荐阅读