谷歌宣布其 BigQuery 服务已支持以太坊区块链数据分析

阅读数:562 2018 年 9 月 12 日

以太坊(Ethereum)和其他加密货币吸引了技术专家、金融家和经济学家的想象力。数字货币只是底层区块链技术的一种应用。今年早些时候,我们在 Google BigQuery 中公开了比特币数据集http://u6.gg/e3VqS)用于分析。今天我们将提供以太坊数据集

和它的前身比特币一样,你可能认为以太坊区块链是一个不可变的分布式账本。然而,创建者 Vitalik Buterin 通过包含一个虚拟机扩展了它的功能集,这个虚拟机可以执行存储在区块链上的任意代码作为智能合约。

译注:智能合约(smart contracts),是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易。这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出,但直到近年随着区块链技术的发展逐步被社会大所熟悉,智能合约的概念具备承诺、协议、数字形式三大要素,因此能够将区块链的应用范围扩展至金融行业交易、支付、结算和清算的各个环节。智能合约是指当一个预先编好的条件被触发时,智能合约会立即执行相应的合同条款,其工作原理类似于计算机程序的 if-then 语句。

就系统架构而言,以太坊与比特币的相似之处在于,它主要用于记录不可变的交易。两者本质上都是 OLTP 数据库,并且很少提供 OLAP(分析)功能。然而,以太坊数据集明显不同于比特币数据集的地方如下:

译注: OLTP,即 Online transaction processing 缩写,意即联机交易处理。是指通过信息系统、计算机网络及数据库,以线上交易的方式处理一般即时性的作业数据,和更早期传统数据库系统大量批量的作业方式并不相同。OLTP 通常被运用于自动化的数据处理工作,如订单输入、金融业务……等反复性的日常性交易活动。和其相对的是属于决策分析层次的联机分析处理(OLAP)。

  • 以太坊区块链的主要加密经济价值单位是以太(Ether),而比特币区块链的价值单位是比特币(Bitcoin)。然而,以太坊区块链上的大部分价值转移都是由所谓的代币(token)组成的。代币由智能合约创建和管理。
  • 以太币的价值转移是精确和直接的,类似于会计分类账的借方和贷方。这与比特币的价值转移机制形成了鲜明的对比,在这种机制下,很难确定给定钱包地址的余额。
  • 地址不仅可以是保存余额的钱包,还可以包含智能合约字节码,这个字节码允许以编程方式创建协议并自动触发执行。一组协调的智能合约可以用来建立去中心化自治组织。

译注:去中心化自制组织(decentralized autonomous organization,DAO),是一个通过编码为称为智能合约的计算机程序的规则运行的组织,由计算机网络支持的无中心组织并且没有单一的领导者,是一种自主的或者是自治的组织结构。

现在,以太坊区块链数据现在可以通过 BigQuery 进行探索。所有历史数据都在ethereum_blockchain数据集中,该数据集每天都会更新。GitHub 上的 Ethereum ETL 项目包含用于从以太坊区块链中提取数据并将其加载到 BigQuery 中所有的代码,我们欢迎更多的贡献者和更多的区块链加入!

译注: ethereum_blockchain数据集:http://u6.gg/e3Vun

Ethereum ETL 的 GitHub 项目地址:https://github.com/medvedev1088/ethereum-etl

为什么要在 Google Cloud 上提供以太坊区块链数据?

虽然以太坊区块链对等软件有一个用于常用随机访问函数的 API(如检查交易状态、查找钱包交易关联以及检查钱包余额),但是 API 端点并不存在,无法方便地访问链上存储的所有数据。

也许更重要的是,也不存在用于聚合查看区块链数据的 API 端点。下面是一个示例图表,显示了总转移成本和平均交易成本(按天计算):

像这样的可视化(以及基础数据库查询) 对于指定业务决策很有用,例如从优先考虑以太坊架构本身的改进(系统是否接近容量上限并需要升级?)到资产负债表调整(钱包能以多快的速度重新平衡?)。

BigQuery 有强大的 OLAP 功能来支持这种类型的分析,一般而言,不需要额外的 API 实现。

因此,我们在 Google CLoud 上构建了一个软件系统:

  1. 将以太坊区块链与在 Google CLoud 中运行 Parity(https://github.com/paritytech/parity-ethereum)的计算机同步。
  2. 每天从以太坊区块链分类帐提取数据,包括智能合约交易的结果,例如代币传输。
  3. 对日期分区数据进行反规范化(de-normalizes),并将其存储到 BigQuery,以便进行简单且经济高效的探索。

以太坊区块链数据集也可以在 Kaggle 上获得:http://u6.gg/e3Ken。你可以使用 BigQuery Python 客户端在 Kaggle 免费的浏览器内编码环境 Kernel(https://www.kaggle.com/kernels)中查询实时数据。派生这个示例的内核(http://u6.gg/e3Kpr),试验你自己的 Python 代码副本。

有趣的查询与分析

下面,我们将展示一些基于以太坊数据集的有趣查询和可视化。我们的分析侧重于三个热门话题上:

  • 智能合约函数调用
  • 链上交易时间序列和交易网络
  • 智能合约函数分析

分析 1:流行的智能合约事件日志

到目前为止,以太坊区块链的主要用例是数字代币的交换。下面我们将演示如何查询数据集的交易和合约表,以找到最流行的智能合约(通过交易计数进行度量):

根据交易次数,以太坊所收藏的 10 种最受欢迎的收藏品(ERC-721 合约)是哪些?访问http://u6.gg/e3KWH来查看我的查询视图。

最受欢迎的 ERC-721 智能合约(按交易数量计算)是0x06012c8cf97bead5deae237070f9587f8e7a266dhttp://u6.gg/e3V2D),是CryptoKitties游戏的主要智能合约。稍后我们将在本文中介绍游戏的一些属性。

仔细查看这个合约的源代码,它将一个 CryptoKitty 出生事件(http://u6.gg/e3LdC)记录到区块链中。您可以在日志表中查询此事件的实例:http://u6.gg/e3Ldc

我们可以将 CryptoKitty 谱系进行可视化,如下图所示,这些帐户至少拥有 10 个 CryptoKitties。颜色表示所有者,大小表示每个 CryptoKitty 的 PageRank (生殖适度(reproductive fitness)):

分析 2:交易量和交易网络

在以太坊区块链上分布着许多类型的代币,它们的分布模式随类型和时间而异。通过查看每个代币的交易活动,我们可以衡量哪些在总体上更流行,哪些在给定的时间范围内更流行。

下面是一个用于度量聚合代币统计信息的查询:按交易数量计算,10 个最流行的以太坊代币 (ERC20 contract) 是哪些?在http://u6.gg/e3LyR找到答案。

在 #5 位置,最受欢迎的代币之一是 OmiseGO($OMG)(https://omisego.network/),其地址为0xd26114cd6ee289accf82350c8d8487fedb8a0c07http://u6.gg/e3L3M)。

作为后续,访问http://u6.gg/e3L9e,这里有一个根据时间窗口度量代币统计(交易计数)的查询,具体来说就是 $OMG 代币传输的每日计数,以及从 Google Sheet(http://u6.gg/e3L9R)开始到 2018 年 8 月 2 日的时间序列数据的 Data Studio 可视化。

注意,在 2017 年 9 月 13 日,$OMG 接收器的数量大幅增加,而发送者的数量却没有增加。这相当于 OmiseGO Token Airdrop(https://www.omise.co/omisego-airdrop-update-3)的开始。

由于数据在高细粒度级别上由钱包地址之间的一组传输组成,我们还可以使用有向图数据结构来推断数据。

下面是同一数据的一个可视化子集:这是前 5 万笔交易,其中至少有两个交易伙伴。在这张图中,节点(点)表示以太坊区块链上的钱包地址,边(线)表示一对地址之间的代币的聚合传输。边长与传递的代币数量大致成正比,这意味着在图中,在它们之间传递更多聚合代币的钱包更靠近。另外一组地址经常相互转换——排除其他组的成员——将聚集在一起,为清楚起见,我们对这些组进行了颜色编码。这张图是用 Gephi 绘制的,用Modularity 算法计算的分组对节点进行颜色标记。

分析 3:智能合约函数分析

我们之前提到过,以太坊区块链上的许多智能合约都是 ERC-20 合约。这是什么意思?ERC-20 简单地定义了一个智能合约可以实现的软件接口。具体来说,它由一些与代币传输相关的函数组成,在 ERC20 代币标准规范文档中有详细的描述:http://u6.gg/e3LPy

智能合约还可以实现许多其他函数。幸运的是,许多智能合约的源码可以免费使用(开源)。甚至对于那些我们没有源码的合约,我们也可以使用它从函数的名称来获得一些关于其他合约的知识,因为常用的函数名称将会共享一个公共签名。

回到前面分析 3 中讨论的 CyptoKitties,游戏玩法的主要元素是畜牧业,并且在一个育种事件中的基因混合在 CryptoKitties GeneScience 智能合约中实现:0xf97e0a5b616dffc913e72455fde9ea8bbe946a2bhttp://u6.gg/e3LYF)。假设我们想要找到其他游戏也实现与 CryptoKitties GeneScience 合约类似的游戏机制?我们可以使用此查询(http://u6.gg/e3LYW)中的 Jaccard 相似系数的 JavaScript UDF 实现来度量这一点。

译注: Jaccard 相似系数(Jaccard similarity coefficient),用于比较有限样本集之间的相似性与差异性。Jaccard 系数值越大,样本相似度越高。

这些结果表明,GeneScience 合约的几个早期版本(http://u6.gg/e3Mg6)与在地址0xf97e0a5b616dffc913e72455fde9ea8bbe946a2b上的智能合约的当前版本最相似。但是也有一些其他的 (例如0xb64e6bef349a0d3e8571ac80b5ec522b417faeb6http://u6.gg/e3MhN)的 CryptoPuppy),根据方法签名的度量,它们似乎是高度相似的合约。

原文链接: Ethereum in BigQuery: a Public Dataset for smart contract analytics

感谢杜小芳对本文的审校。