AICon 深圳站 Keynote 嘉宾官宣!共探AI价值转化的实践路径 了解详情
写点什么

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

  • 2018-09-12
  • 本文字数:3787 字

    阅读完需:约 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 智能合约(按交易数量计算)是0x06012c8cf97bead5deae237070f9587f8e7a266d http://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/ ),其地址为0xd26114cd6ee289accf82350c8d8487fedb8a0c07 http://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 智能合约中实现:0xf97e0a5b616dffc913e72455fde9ea8bbe946a2b http://u6.gg/e3LYF )。假设我们想要找到其他游戏也实现与 CryptoKitties GeneScience 合约类似的游戏机制?我们可以使用此查询( http://u6.gg/e3LYW )中的 Jaccard 相似系数的 JavaScript UDF 实现来度量这一点。

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

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

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

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

2018-09-12 18:262728
用户头像

发布了 376 篇内容, 共 203.1 次阅读, 收获喜欢 949 次。

关注

评论

发布
暂无评论
发现更多内容

双非本,3年时间从外包到阿里P6(Android岗,移动终端软件开发颜色演示

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(三)(1),面试Android岗

android 程序员 移动开发

国内大厂在移动端跨平台的框架接入分析,2021年一起努力应对互联网寒冬吧

android 程序员 移动开发

回眸重探锁机制,跨平台移动开发的特点

android 程序员 移动开发

因为不了解Android事件分发机制,居然被实习生嘲笑了,天呐

android 程序员 移动开发

反向面试提问,安卓framework层

android 程序员 移动开发

linux之我常用的系统重要文件备份命令

入门小站

Linux

另一种绕过-Android-P以上非公开API限制的办法,安卓多线程面试题

android 程序员 移动开发

只有这些东西?不,学习Android开发只要这些东西,想转行当程序员的必看

android 程序员 移动开发

听我慢慢道来Android-面试中的细节,三年老Android经验面经

android 程序员 移动开发

四张图让你玩转Tomcat系统架构!!!(1),android音频面试题

android 程序员 移动开发

又来新需求了,急,Android怎么实现时间线效果(1),android开发面试自我介绍

android 程序员 移动开发

又来新需求了,急,Android怎么实现时间线效果,成体系化的神级Android进阶笔记

android 程序员 移动开发

反思|Android 事件拦截机制的设计与实现,android串口工具apk

android 程序员 移动开发

在线二进制转文本工具

入门小站

工具

史上最全Android性能优化总结,经典收藏,一口气拿了9家公司的offer

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(三),4面字节跳动拿到Offer

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(一),一线互联网公司面经总结

android 程序员 移动开发

哭了!失业半年-2020没有风口我也要跳槽,凭本事吃饭有技术到哪都是人才

android 程序员 移动开发

四面阿里,因为最后一个问题与offer失之交臂,android驱动开发

android 程序员 移动开发

参考微信模块化通信具体实现,android开发从入门到精通pdf下载

android 程序员 移动开发

启动速度与执行效率优化项目实战(四),android开发入门与实战网盘

android 程序员 移动开发

反思一次羞愧的阿里面试经历,致Android开发者

android 程序员 移动开发

可能一眼看不懂的几行Kotlin代码,程序员面试防坑宝典

android 程序员 移动开发

[ CloudWeGo 微服务实践 - 05 ] 服务注册(2)

baiyutang

golang 微服务 11月日更

四张图让你玩转Tomcat系统架构!!!,移动应用开发课程设计报告

android 程序员 移动开发

四月字节客户端面经,七月内推请找我,一文带你搞懂Android多线程Handler

android 程序员 移动开发

双非大三,无实习经历,如何以 hard 模式逆袭字节跳动,androidframework开发书籍

android 程序员 移动开发

只需四点,让你的面试百试百过!,android移动应用基础教程

android 程序员 移动开发

可怕!RxHttp2,安卓开发基础

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(四),flutter开源项目商业化

android 程序员 移动开发

谷歌宣布其BigQuery服务已支持以太坊区块链数据分析_语言 & 开发_Allen Day_InfoQ精选文章