FAN-finance / stock

get tsla apple stock price
0 stars 1 forks source link

uniswap交易对的历史价格获取,放进预言机 #1

Closed neocarmack closed 3 years ago

neocarmack commented 3 years ago

背景:uniswap的链上交易数据是存入theGraph的,画出价格历史图表的时候,是从theGraph里取出来,然后在前端js代码里计算画图。

伍:

价格历史: 是个大活, 需要分钟小时天月这些维度的数据.

在swap-info前端站点里它是这样的计算: 1 先按时间范围计算出"图表"需要的时间点(分/小/天) 列表. 2 拿着上一步计算的"时间点列表" ,去 api.thegraph.com/explorer/subgraph/blocklytics/ethereum-blocks接口取回 时间点列表 所对应的"块号列表" 3 取回块号对应的eth美元价格列表: 使用上一步获得的 "块号列表",去 https://api.thegraph.com/subgraphs/name/ianlapham/uniswapv2 的bundle对象,以这些块号为版本取回eth美元价格列表. bundle只有一行记录,存储的是eth当前美元价格, thegraph支持以块号为版,获取历史快照 . 4 取回"块号列表"对应的token的以eth为单位的价格列表: 每个token在thegraph只保留一行记录(这行记录包含token各种信息,比如token以eth价格). 同样这行信息支持以块号为版,获取历史快照. 5 把1 3 4步骤的数据合成图表需要的价格数据.

明天,我把这些步骤放在预机里搞.

其实swap-info脚本"熟练"的话,是可以直接使用现有swap-info脚本直接去thegraph取数据的,但是它的js代码比较复杂. 目前预机已经有步骤2和3的数据了. 明天可以把这个功能弄完.

neocarmack commented 3 years ago

伍:

thegraph数据记录没有"时间字段", 原因是这样的: 脚本监听到eth事件并处理时, "事件对象"上只"有块号", 没有带blockTime 当然也可以考虑使用 脚本当的前"系统时间",当做blockTime. 但是在处理以前"历史事件"时,就会出错.

我使用go监听事件时,发现事件接口没 blockTime.

neocarmack commented 3 years ago

伍:

swap时,两个token间如果没有直接关联的pair uniswap 会找其它多个pair关联起来,使用几个“最优pair组合”,“计算”目标token兑换数量. 这应该是router合约计算的,很难描述这个计算细节。 规则太多。

neocarmack commented 3 years ago

朱:

取预言机数据,方便第三方应用绘制价格历史曲线图,等等。如果涉及uniswap的交易对,还有流动性挖矿等数据。

wxf4150 commented 3 years ago

目前接口开发完成.

很大程度上减少了前端使用图表时的工作量: 在swap-info前端站点, 加载了200-300个请求, 才完成这样的价格图表数据的计算, 直接使用swap-info逻辑,会很麻烦.

应该还有要修改的,比如token某段时间没有交易过, 缺失相应时间点数据, 需要补齐相应时间点数据,使图表x轴显示的时间点连贯. 或者说token从来没有交易过, 要不要把所有时间点全部填空呢. 随着使用我们进一步完善.