#20 区块链网络分析

写在前边

所有的公链本身就是一个大的网络,分析链上数据时,网络分析几乎是不可避免的。常用的数据平台比如Dune现有的可视化功能其实目前很难比较好地刻画公链上各个节点之间的关系。这里我们以之前传的沸沸扬扬的FTX"黑客"地址(0x59ABf3837Fa962d6853b4Cc0a19513AA031fd32b)为例做一些网络分析(具体是黑客还是巴拿马政府这里就不细究了),去看下这个地址下的ETH都去了哪里(这里我们看从这个地址往外的2层关系)

整个过程中用到的东西

  • Dune:获取网络间各个地址间的原始数据,并对他们做初步的处理

  • Python

    • Networkx:是用python语言编写的软件包,便于用户对复杂网络进行创建、操作和学习。利用networkx可以以标准化和非标准化的数据格式存储网络、生成多种随机网络和经典网络、分析网络结构、建立网络模型、设计新的网络算法、进行网络绘制等。

      • 更多信息可以访问:https://networkx.org/

    • Plotly:做可视化很好用的包,可以生成可交互的HTML文件。另外还有一个与之配合的前端框架DASH,对工程能力没有那么出众的数据分析师非常友好。

      • 更多信息可以访问:https://plotly.com/

    • Pandas:最常见的处理数据的python包,提供了大量能使我们快速便捷地处理数据的函数和方法。

      • 更多信息可以访问:https://pandas.pydata.org/

  • Etherscan API:ETH Balance在dune上算起来太麻烦了,每次都要拉全量数据去算,我们直接从Etherscan API取Balance

概述

如果我们简单地描述这个过程,大概会分成以下几步

  • 通过Dune获取原始数据

  • 通过Networkx处理Node之间的关系并处理画网络图时需要的各种属性数据(pos,label,color,Size等等)

  • 通过Plotly画出网络图

详细过程

一、通过Dune获取原始数据(SQL部分)

SQL比较复杂,就不展开说了,大家感兴趣去URL里自己研究

  • 通过SQL获得包含所有相关地址之间关系数据:https://dune.com/queries/1753177

    • from:转账的发起方

    • to:转账的收款方

    • transfer_eth_balance:双方转账ETH的总量

    • transfer_eth_count:双方转账ETH的总次数

    image-20221214165849494.png
  • 通过SQL获得包含所有地址的列表以及相关标签:https://dune.com/queries/2430347

    • address:本次网络分析中涉及的所有地址

    • level_type:本次网络分析中涉及的所有地址的在网络中的层级(Core,Layer One,Layer Two)

    • account_type:是EOA普通地址还是交易所或者是一个智能合约

    • label:这个地址的有用的信息聚合成一个标签字段,用于后续在python中做可视化

    image-20221214170041781.png

二、用pandas读取本地文件到Dataframe并通过Etherscan API补充Balance列

  • 将dune的数据下载到本地(可以通过Dune的API或者通过直接复制粘贴)通过pandas从本地读取在dune中获得的数据

  • 通过Etherscan API获得所有地址的Balance数据并写入DataFrame

  • 将list中的Balance放入Dataframe中并定一个列Balance_level(根据Balance大小打标签)后续控制网络图中Node的大小

三、定义一个函数通过Network X处理节点关系并使用Plotly画图

四、调用函数drew_graph,传入2个Dataframe画图。并导出HTML文件

五、效果图

可以访问URL查看可交互的版本:https://pro0xbi.github.io/FTX_Accounts_Drainer.html

  • Node颜色

    • 绿色是FTX"黑客"地址

    • 蓝色所有与之发生过大额转账(>100ETH)是普通的EOA账户

    • 黄色是Exchange地址(FTX)

    • 红色是智能合约

  • Node大小

    • Node越大表明对应地址的余额越大,其中最大的Node表示当前地址的Balance余额大于10000ETH

    可以看出与FTX"黑客"地址有关的所有地址中目前至少还有12个地址有超过10000个ETH,也就是说至少有12万ETH还没有被"黑客"抛售

    image-20221214201810132.png

Last updated

Was this helpful?