深入理解 OCAP 实现 (3): 浅析数据对区块链行业发展的重要性

作者: 舒适 (ArcBlock 团队数据工程师)

很多人会问,为什么 ArcBlock 这样一家初创的区块链公司需要大量的数据分析?又有什么数据可以分析呢?今天我们从 OCAP 的数据方面切入,介绍一下目前比特币和以太坊上数据量的情况和潜在价值,并从宏观角度介绍一下 ArcBlock 平台是如何构建自己的 data pipeline 的。数据分析不仅是 ArcBlock 产品和服务的一部分,也是我们做出各种决策的基础和信心。

什么是数据?

首先要统一一下对数据的定义: 数据就是数值,也就是我们通过观察、实验或计算得出的结果。更广义地理解可以说,数据就是人们在这个世界留下过的痕迹,而人们最终可以通过收集和分析这些痕迹,提出之前未曾想到的问题,并找到问题的答案。ArcBlock 平台使用的数据包括了:用户使用产品的情况和反馈、现有的链上数据,以及系统的日志。

在 ArcBlock,我们对数据的使用主要分成三个部分:

  1. 链上数据的分析
  2. 用户和产品的分析
  3. 安全监控

一. 链上数据的分析

区块链技术的一个核心亮点是数据的不可篡改性,也就是说每一笔产生过的交易都有迹可循。区块链就像是一本公开的总账,只要有比特币地址,你就可以查询到这个地址参与过的所有交易。

bitcoin

从 2017 年开始,由于比特币价格直线走高,越来越多的人开始关注并使用它作为交易平台,使得比特币上的数据类型和内容都日益丰富。比特币链上自 2009 年诞生至今将近十年,储存的交易的总数高达大约 17 亿条。

eth

哪怕是更年轻的诞生于 2015 年的以太坊,其链上也已经有超过六百万个区块,数亿条交易数据,并且新的数据仍在以 12 秒一个区块的速度持续增加着。

这些数据实际上是用户的交易行为,蕴藏着大量的有价值信息。一笔一笔的钱都从哪里来,又去了哪里?资金的流通过程是怎样的?什么样的地址存在异常交易行为?有无数的信息等待我们挖掘。

为什么这些公开的数据在市场上没有足够多的数据分析报告呢?一是由于区块链去中心化的特点,其背后没有专门的产品经理和团队做专门的用户画像和产品分析;而是因为区块链的结构和算法有一定门槛,需要一定的研究才能把数据解析出来。

onchain

为了更好地做数据分析,我们把比特币和以太坊的数据解析出来,并通过 Listener 保持数据的实时更新。在之前的文章中,已经介绍了数据是如何解析的。我们把解析好的数据以 parquet 的形式存在 s3 上面备份,同时把数据打入 data pipeline,用 Spark 做好数据的清理和聚合,然后再将整理好的数据放进 redshift,处理之后用可视化图表展示出来。

dashboard

目前我们使用 Superset 对以太坊做了日活跃用户和月活跃用户的分析,之后还会陆续加入更多的链上数据分析报告,如用户留存率、用户流失率、冷钱包数量等。

二. 对用户和产品的分析

dashboard

更好的服务的核心是更优化的产品,更优化的产品又离不开对用户的了解。在打造一个产品的过程中,充斥着大大小小的决定:大到应该优先开发哪一个功能,产品的定位应该往什么方向发展,小到应该优先修复服务中的哪一个问题,网站页面如何布局才能更好地提升用户体验。只有对用户需求有更准确的了解,我们才能做出正确的决定。在 ArcBlock,所有做出的决定都应该是一个可追溯的过程,而数据的支持是一切答案的信心和基础——数据是用户真实行为和选择的反映。

因为对数据的重视,从一开始我们就很注重打造一条和产品线齐头并进的数据 pipeline。这条 pipeline 可以让我们实时获取产品被使用的状况,保存好每个时间段的数据。我们的 API 会把产品的使用数据实时打进 Kinesis stream,然后用 s3 做好这部分原始数据的备份;另一边用 spark 做原始数据的处理和聚合,并且把处理好的数据导到 redshift 上,用来做之后的数据分析以及可视化。随着之后产品的不断升级和新功能的增加,我们的 pipeline 也会不断优化。

三. 安全监控

区块链是建设价值互联网的基础设施,安全性尤为重要。除了设计严密的基础架构,ArcBlock 平台也会利用数据分析提前识别出恶意用户的行为,以防患于未然。

dashboard

我们会将所有的系统日志备份在 s3 上,和处理好的用户数据一起通过专门的数据分析引擎,用机器学习等方法,通过比对历史和当前的数据,以最快速度识别出异常的用户行为,通过系统的自动处理,防止恶意的攻击行为给用户带来损失。

今天简单介绍了 ArcBlock 平台对数据在三个方面的使用。关于区块链的过去和未来,不论是已提出还是未提出的问题,其答案都在数据里,不来也不去,等着我们找到一个最合适的算法让它们浮出水面。