我尝试获取特定 uniswap 对的所有掉期,以跟踪不同实体的买卖并计算其盈亏。
当我通过 API 获取它时,我只看到购买代币的一次交换,但看不到实体再次出售这些代币的其他四个交换。
实体:0x88565bde2d55ea0460acd250f05818acc9b91e99 令牌对:0x1Db2B839409eAB8902fd1A9Fd3FFc7cD8E2131Ce 代币(匿名):0x975bBd66C60b54fedD24E59a241251e261F474DF
我正在使用 graph ql,具体来说是 uniswap 子图(https://thegraph.com/hosted-service/subgraph/uniswap/uniswap-v2)来获取数据
这是我在测试用例中使用的查询,用于获取带有实体上的过滤器的令牌对的数据(稍后我将删除该过滤器,因为我想要所有实体的数据,但现在我使用该过滤器来验证与其他数据源一起查看我是否获得了正确的数据)
{
swaps (orderBy: timestamp, orderDirection: asc,
where: {
and: [
{pair: "0x1db2b839409eab8902fd1a9fd3ffc7cd8e2131ce"}
{or:[
{to: "0x88565bde2d55ea0460acd250f05818acc9b91e99"}
{sender: "0x88565bde2d55ea0460acd250f05818acc9b91e99"}
]}
]
}
)
{
id
timestamp
sender
to
amount0In
amount1In
amount0Out
amount1Out
amountUSD
transaction {
id
blockNumber
timestamp
}
}
}
您可以将此查询粘贴到我上面提供的链接中以查看我得到的响应。 所以你会看到只有一次交换作为响应。
现在前往 dextools.io 并检查交换: dex工具
或 dexscreener: dexscreener
两次我都将制造商地址过滤为 0x88565bde2d55ea0460acd250f05818acc9b91e99,这是我正在验证结果的实体。您会看到总共有 5 次掉期,其中 1 次买入,4 次卖出。我不明白为什么我只在一次交换之上获取 api 请求,仅此而已。
如果有人已经具有分析链上交易的经验并且可以帮助我,那就太好了。 另外,如果您使用其他方式来获取该数据,我也愿意接受其他方法。
问题出在
Swap
事件中。 sender
是msg.sender
,正常的掉期交易是通过RouterV2
合约完成的。
考虑您示例中的此卖出掉期 - 0x18dc2b342bd3f75645b62389a46d12a5aa638fde6257d7f9a3e55dbed0851ce4#eventlogs 如果您搜索
Swap
记录发件人是 RouterV2
和 to
也是 RouterV2
,因为这是 SELL
动作。
当用户购买代币时,Tx 将被匹配,在这种情况下,to
将是 EOA 地址。
我们使用
Transfer
日志代替,并按 EOA_ADDRESS
、PAIR_ADDRESS
进行过滤。因此,卖出操作将是 Transfer(EOA, PAIR)
,买入操作将是 Transfer(PAIR, EOA)