美文网首页
区块链数据分析1-如何查询token余额

区块链数据分析1-如何查询token余额

作者: Mil_Pasos | 来源:发表于2021-07-16 10:08 被阅读0次

    区块链数据分析1-如何查询token余额

    前文[1]中已经介绍了区块链的公开数据,今天分享一下如何查询 eth 和 token 的余额

    公开数据集

    以我目前认知对数据集里个别表的理解:

    • tokens: 记录了token的address、name、供应量和小数位数等信息
    • amended tokens: 修正的tokens表
    • balances: 用户的最新eth余额 (截止etl完成的时刻)
    • transactions: eth链上,原生代币eth的转移和gas费的消耗记录,即我们在etherscan上看到的Transactions
    • token_transfers: erc20上,token的流转记录,即etherscan上的Erc20 Token Txns
    • traces:没有看过,猜测包含了transactions表里没有的记录,即etherscan上的Internal Txns
    • logs: event log,即etherscan中的Logs,没有细看看过,猜测大神们从这里,etl出不同dapp的event,从而实现对不同dapp的独立分析
    • blocks: 没有看过,猜测包含了矿工的地址信息

    ETH的余额 和 每日余额

    直接看大神开源的代码吧

    (ps.上面是top用户的余额,要所有人的话,把最后的order和limit删掉即可)

    比较绕的处理是: 交易的gas费只向转出方收取,而矿工的地址,则会奖励gas费,即对应代码中

    -- transaction fees debits
    -- transaction fees credits
    

    这两段。

    另外还需要特殊处理的,是链上的一些记账失败的记录,大神使用了下面的代码来处理,我没有细究:

        where to_address is not null
        and status = 1
        and (call_type not in ('delegatecall', 'callcode', 'staticcall') or call_type is null)
    

    这段代码就太神了,感兴趣的自己品吧

    token的余额

    还是大神提供了开源代码

    跳转到medium后,直接搜"Token balance for any address"就能找到。

    代码逻辑很简单,就是用流进地址的token数量减去流出地址的token数量。然而事情并没有这么简单,我们也遇到了github issue上,别的同仁遇到的问题,即有个别的token,通过上述方式计算出来,数量为负。

    我的理解,原因如下:

    token_transfers是大神们,通过event log筛选出Transfer函数的调用记录而已。所以没有通过Transfer函数记账的token流转操作,如Deposit或者Withdrawal,就被忽略了。

    对这种特殊的case,上面的issue提供了两种解决方案

    其中一种是针对该token,编写个性化的sql来查询余额,另一种则是大神提供的etl解决方案,单独把contract对应的event都洗出来,再基于event表来统计。

    Event ETL

    如何对特定的合约event进行etl,这篇文章[2]有介绍,这里不再赘述。

    我们测试了基于WETH的event表来进行token balance的统计,是正确的。

    Web3

    最后,如果是开发dapp需要查询实时余额,不需要如上方法,直接起一个eth的节点,节点里实时存储了balance,使用Web3封装好的函数get_balance来获取即可。

    相关文章

      网友评论

          本文标题:区块链数据分析1-如何查询token余额

          本文链接:https://www.haomeiwen.com/subject/yywvpltx.html