如何使用SQL分析Web3中的数据?
你想知道如何在 Web3 中成为一名高效的数据分析师吗?还是,你只想构建一个Web3 分析仪来对感兴趣的Web3数据感进行分析?不管怎样,欢迎你阅读本文。
作为一个数据人,Web3数据中最具挑战性的部分是理解数据本身。根据我的经验,有一件事让我觉得很容易,那就是把每个人都看作是一个巨大的数据仓库和以太坊区块链上面的协议,作为仓库中包含多个表和视图的各种模式。PS:这也适用于其他区块链。
对于这篇文章,我将努力使事情变得简洁,并使用这些主题突出它们:
- Web3数据流和景观。了解Web3,去中心化的数据存储。
- 用于解码交易数据的工具:与Web3数据栈一起的工具概述,以及如何利用它们
让我们开始吧!
Web3的数据流和景观
Web3 的关键在于变得更加独立和自主。这是通过区块链和分布式对等网络而不是服务器-客户端关系来实现的。这使得数据流和格式与我们在 Web2 中习惯的不同。通过研究,我发现了像 Dune Analytics 和 Flipside Crypto 这样的数据映射器,它们具有解码的区块链数据和内置的可视化工具,供对 Web3 感兴趣的数据科学家使用和构建。
上图:
上面的图片显示了从不同的区块链模式中提取数据进行分析的不同方式,在此以以太坊为例。
如果你曾经在以太坊(或任何启用智能合约的区块链)上进行过交易,那么你可能已经在区块资源管理器上查找过它,并看到了这种信息:
通过 Etherscan 区块浏览器看到的以太坊区块链上的交易示例
学会阅读交易细节将是所有以太坊数据分析和知识的基础,但了解代币和交易数据的流向也很重要。
解读Web3数据
我可能偏向于使用以太坊区块链来解释解密区块链数据,但根据经验,当你了解数据在智能合约上的存储和管理方式时,以太坊更容易理解。既然如此,重要的是要注意,我将谈论的许多概念将广泛适用于所有与EVM兼容的链和智能合约,例如Polygon、Fantom Opera、BSC、Arbitrum One等。
一个智能合约交易相当于智能合约驱动的web3应用程序中的后台API调用。智能合约上的活动细节及其产生的应用状态变化被记录在称为交易、调用和日志的数据元素中。交易数据元素代表由用户(或更准确的说是EOA)发起的功能调用,调用数据元素代表智能合约在交易中发起的额外功能调用,而日志数据元素代表交易执行期间发生的事件。
为了了解以太坊区块链上的交易数据,我们可以尝试使用Etherscan(作为交易实例的基础,我使用了一个Mirror Crowdfund合约)。这就像检查你的汽车仪表盘,以寻找修复汽车问题的指针,但作为一个数据科学家,我们必须打开汽车的引擎盖,了解幕后发生了什么。通常情况下,有3种不同类型的交易:
- 以基础货币的形式从一个用户(EOA)转移到另一个用户,例如,张三在以太坊网络上给李四发送了3个ETH
- 由一个EOA创建一个智能合约,例如,张三将代码提交给区块链上的一个地址,创建一个智能合约,一旦一定数量的资源被转移到卖方的账户(或钱包),智能合约就会转移NFT的所有权。
- EOA对智能合约的调用,例如,张三调用李四的智能合约,用999ETH交换NFT。
当用户在区块链上提出请求时,在引擎盖下发生的事情是:
- 与用户相关的EOA发起一项交易,指定目标智能合约地址、目标功能、该功能的参数、交易付款(如果有)以及它愿意支付的gas费用(如果有)。
- 该交易被广播到网络上,并由愿意执行目标智能合约中指定功能的矿工拾取。
- 如果执行成功,智能合约会发出事件,标志着某些里程碑的完成。由此产生的事件数据结构被称为 "日志"。
- 目标智能合约可以向其他智能合约发起内部交易(额外调用)。这些内部事务创建的数据结构被称为 "轨迹",也可能在各自的执行过程中发出额外的日志事件。
上图: 代币传输的数据生命周期。来源:
数据是如何结构化的
现在,你已经了解了发生在幕后的活动和相应的数据元素。现在是时候逐项列出构成web3景观的各种元素了。交易和跟踪数据结构包含了智能合约函数调用的细节,按照这个顺序:
- 在区块链上,每笔交易都有一个独特的哈希值`交易哈希值`,其中有各种交易细节。例如,我们可以在这里查询这个交易哈希值0xbe3b109b857e8897cbe3c2a261d8072546ae693662422a1b93fe1a3a990dfded
- `From`是交易的发送方,`To`是交易的接收方,也可以是一个合约地址。在这个例子中,它是从`0x83ebd57bf4f22cba9c4a624a69c910d7c8619ee2`转移到CROWDFUND_EDITIONS代币的。
- `Value`是被转移的ETH值。有时ETH值可以是0,在这种情况下,它是。
- `交易费用=交易使用的气体*气体价格`,你可以在这里找到更多与以太坊气体有关的细节。(https://ethereum.org/en/developers/docs/gas/#post-london)
- 输入数据包含关于交易的额外信息。在这种情况下,它是一个转移函数,细节包括交易的地址和价值。
- 数据本身是字节码,在Dune上有数据类型`bytea`。
- 前8个字符`0xa22cb465`是函数签名的`MethodId`,它不总是唯一的(但应该是)。
- 之后的每64个字符是一个不同的输入变量。这里我们有两个,分别对应于`to address`和`value`。—
访问和处理Web3数据的工具
现在我们已经很好地理解了Web3数据的元素,它看起来像什么,并且已经在区块链上查询了我们的第一个交易数据,你可能想知道如何快速熟悉一个协议及其数据。有一系列很好的工具可以帮助我们做到这一点。
Block Explorers
如前所述,使用 Block Explorers 是深入了解区块链上的交易的一个好方法。 Block Explorers 是在线浏览器,可以显示区块链网络上曾经发生过的所有交易的细节。以上面的截图为例,重要的是要知道所有主要的区块链都有探索器--突出的例子包括Etherscan、Polygonscan、BSCScan、Solana beach等。
尽管区块链探索者对于询问区块链账本内的单个记录很有帮助,但他们对于回答需要聚合或转换数据的问题并不擅长。例如,如果你想知道过去3个月有多少NFT通过
分析数据
Dune analytics是访问和分析区块链数据的一个伟大资源。在写这篇文章时,它有Ethereum、Solana、Xdai、Polygon、Optimism和BSC的原始和解码数据。它提供了一个PostgreSQL界面来查询数据集,以及一个简单的点选界面来在查询结果的基础上创建简单的仪表盘。Dune上的用户社区也相当活跃,并产生了一个广泛的查询和仪表盘的例子库,供人们学习。下面是在Dune上创建的几个分析实例
如果你对SQL完全陌生,我会推荐这些有用的Dune分析的提示和指南:
- 内联Ethereum地址。当在Dune中工作时,Ethereum地址被存储为PostgresSQL字节数,当你在Etherscan上查询时,它被编码为`x`前缀,而不是通常的`0x`。
- 识别交易中的合约地址。当试图区分合约地址和普通地址时,你可以通过检查`CREATE`操作码是否在`traces`中被调用来实现,比如说
3. 充分利用Dune上的标签。标签是一块关于地址的元数据,如果你愿意,是一个标签或元数据。它以键-值对的形式出现。键是标签类型,而值是标签名称。从本质上讲,你可以使用标签来查找地址,看看它们是什么(见下面的标签表)。你可以在这里(https://hackmd.io/k71ZUSTxQVKGqOcvR6OXnw?view#%F0%9F%AA%A7-What-is-a-label)获得更多关于标签是什么以及如何使用它们的见解
如果你想获取所查看地址的标签,请使用此 UDF,你可以这样做;
4. 表和列名的引号。PostgresSQL不能识别没有引号的骆驼字母的列和表名。因此,在Postgres中,双引号是为表和列保留的,而单引号是为值保留的,因此,如果你查询表名中的大写字母,Dune会抛出一个错误。
5. 去除小数。在处理代币金额时,记得检查`erc20. "tokens"`中的小数。
6. 生成时间序列。当处理一个具有不连续时间序列的数据集时,使用
希望这是一篇有用的讨论文章,你已经知道了足够的知识来做基本的Web3数据探索和分析,使用Dune上的SQL,它看起来像什么,以及如何与它合作。在分析web3中的经济活动和用户行为时,重要的是要培养对特定智能合约工作方式的理解兴趣,这就会继续帮助你确定感兴趣的指标中涉及的关键功能和事件。
Web3正在经历快速发展和高变异,每天都有新的想法、产品、社区和实验涌现。它目前触及生活中的方方面面,包括但不限于支付、金融、艺术、音乐、游戏、社区、治理和身份,这使得任何人都能参与其中,令人兴奋。
所以请理解,结合实际使用 Web3 产品、检查 Etherscan 等区块浏览器上的数据耗尽情况以及阅读智能合约源代码,是制定正确的数据分析策略的关键必要条件。
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
Justin Sun suspected to have purchased $160m in Ethereum
Justin Sun suspected to have purchased $160m in Ethereum