NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

谷歌宣布其 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:262117
用户头像

发布了 370 篇内容, 共 171.3 次阅读, 收获喜欢 940 次。

关注

评论

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

像这样操作 Python 列表,能让你的代码更优雅 | pythonic 小技巧

AlwaysBeta

Python

Wireshark 数据包分析学习笔记 Day13

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

一卷河图赋太虚:HMS Core CG kit与移动游戏新可能

脑极体

短网址服务设计整理

程序员架构进阶

架构 设计实践 28天写作 实操案例 3月日更

融云即时通讯SDK集成 -- 通知检查

融云 RongCloud

即时通讯

项目延期了,怎么办?

石云升

项目管理 28天写作 职场经验 管理经验 3月日更

产品经理训练营 - 大作业

joelhy

产品经理训练营

融云 IMkit 拦截或监听所有发送消息

融云 RongCloud

sdk

Android 端如何添加自定义表情

融云 RongCloud

IM

5 分钟部署一个 OIDC 服务并对接 nightingale

冯骐

CAS Nightingale 认证授权 OIDC Apereo

算命、运气和其他「Day 24」

道伟

28天写作

融云清空历史消息 Android 端

融云 RongCloud

sdk

唠一唠融云的消息扩展功能

融云 RongCloud

sdk

大作业

LouisN

京东数科面试真题:常见的 IO 模型有哪些?Java 中的 BIO、NIO、AIO 有啥区别?

Java 架构 面试

LeetCode题解:91. 解码方法,动态规划(优化),JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

融云即时通讯SDK集成 -- 定制UI(二) ——添加自定义表情库

融云 RongCloud

诊所数字化:医疗机构常见的系统整理

boshi

医院 医疗 七日更

融云 IM SDK 集成 --- 刷新会话界面和会话列表界面

融云 RongCloud

IM

金三银四跳槽阿里必备:分布式/高并发/Redis,不看我真的怕你后悔

比伯

Java 编程 架构 面试 程序人生

美丽的数学学习笔记(1)

方勇(gopher)

假期无聊冰河开发了一款国民级游戏!

冰河

Java 游戏

融云如何把图片消息的图片上传到自己的文件服务器

融云 RongCloud

sdk

阿里大师口述:让你可以在简历上写精通SpringBoot

编程 架构 springboot

markdown如何插入图片、音频、视频?

xiezhr

markdown markdown语法 音频

容器or虚拟机?

xcbeyond

Docker 容器 3月日更 专业术语

跳转到@消息的位置

融云 RongCloud

即时通讯

算法攻关-climbing-stairs(O(n))_70

小诚信驿站

刘晓成 小诚信驿站 28天写作 算法攻关

php的一些漏洞梳理

依旧廖凯

28天写作 3月日更

融云即时通讯SDK集成 -- 定制UI(一) ——会话界面小改动

融云 RongCloud

即时通讯

融云即时通讯SDK集成 -- 定制UI(三) ——兼容Android Q

融云 RongCloud

即时通讯

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