[关闭]
@sambodhi 2018-09-04T22:23:00.000000Z 字数 4656 阅读 4306

BigQuery上的以太坊:用于智能合约分析的公共数据集

作者|Allen Day、Evgeny Medvedev
译者|Sambodhi
编辑|Tina

导读: Google日前发布了以太坊区块链的分析工具,本文详细介绍了这一工具的方方面面。

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

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

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

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

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

译注:去中心化自制组织(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(https://www.cryptokitties.co/)游戏的主要智能合约。稍后我们将在本文中介绍游戏的一些属性。

仔细查看这个合约的源代码,它将一个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
https://cloud.google.com/blog/products/data-analytics/ethereum-bigquery-public-dataset-smart-contract-analytics

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注