作为顶点或边的对、符号或资产标识符 ? 有向还是无向 ? 简单还是多图 ? 为了做出上述实现选择,理解 Uniswap 对的属性是很重要的 :
Uniswap 对的这些属性建议使用代币 ID 作为图数据类型中的顶点。由此可见,图的边代表唯一的一对 ID。在这种形式下,图可以是无向的,也可以是有向的,每条边代表一对 ID、代币价格和储备。然而,不断更新代币价格和保留信息的需求表明,将该数据存储在具有适当的实时设置的缓存结构中可能更有效和可扩展,特别是对于实时交易的应用程序,而不是静态分析。 今后,在 Uniswap V2 和 V3 协议对之间路由是可取的。在这个场景中,可能存在多个对相同的代币 ID。虽然可以在一对 ID 之间添加额外的边,但另一种解决方案是在同一条边上分组不同的对 ID,从而避免遍历多重图的性能成本。下面是分组对 ID 无向简单图结构的部分示例,其中符号 ID 替换了符号名称: 图 5.0:在一个无向简单图中对 Uniswap V2 和 V3 协议对进行建模 (注意,实际结构使用代币 ID 而不是代币符号,所以在这里会很麻烦) 最初,深度优先搜索 (DFS) 已经证明可以遍历图,一般情况下深度限制为 4。该深度的一个例外是从 WETH 开始的路由,其中连接节点的数量超过 30000。当一条路由从 WETH 出发时,DFS 被限制为 2,以减少遍历时间。 有许多用于处理图形数据类型的工具,包括图形数据库 Neo4J 和 RedisGraph。这些讨论超出了本文的范围,目前的项目需求可以通过 Javascript 库 Graphlib 来满足。然而,如果路由问题的规模达到了 LinkedIn 或其他大型网络的规模,那么上述图表数据库的规模就会满足这些需求,从而权衡成本和开发复杂性。 约束当在图数据结构中计算路由时,约束是有用的。例如,它们有助于确定只遍历有限数量对的路由,或者可以用来忽略包含某些资产的对的路由。 现有的 Uniswap V2 路由主要是通过六项资产的路由,这些资产可以比作机场枢纽。这六项资产是:
这六种资产是有用的,因为它们是常用的,当它们与其他资产成对组合时,不会施加流动性限制 (即它们不是稀缺的,并且不会与新的、未经证实的加密资产构成相同的风险)。然而,它们的使用可能会造成效率问题,在这里说明 : (责任编辑:admin) |