区块链数据探索:Bitcoin公链数据ETL

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
日志服务 SLS,月写入数据量 50GB 1个月
全局流量管理 GTM,标准版 1个月
简介: Bitcoin 公链可以理解为是一个公共的数据库,里面存储的是Bitcoin发布至今的所有转账记录,并且任何人只要接入到其网络中都可以获取,并不需要任何交易、挖矿、持币等相关操作。本文主要主题的是将原始的Bitcoin公链数据进行清洗规整,写入到阿里云SLS,然后做一些有趣的数据处理,比如实现简洁的区块链浏览器、数据分析、交易链路追踪等。

概述

Bitcoin 公链可以理解为是一个公共的数据库,里面存储的是Bitcoin发布至今的所有转账记录,并且任何人只要接入到其网络中都可以获取,并不需要任何交易、挖矿、持币等相关操作。

本文主要主题的是将原始的Bitcoin公链数据进行清洗规整,写入到阿里云SLS,然后做一些有趣的数据处理,比如实现简洁的区块链浏览器、数据分析、交易链路追踪等。整个框架如下图:
Bitcoin ETL.jpg

阿里云 SLS 的使用教程参考官方文档,这里假设已经拥有阿里云账号并开通SLS,创建了测试project和logstore。关于 Bitcoin 的技术细节这里不会做深入讨论,不过如果要完全理解Bitcoin公链数据的ETL过程,也需要对Bitcoin的原理(比如UTXO机制)有基础了解。

Bitcoin 公链数据

Bitcoin公链数据接收需要运行一个接收端,具体的操作步骤可移步互联网搜索,这里补充一个细节,在运行bitcoind的时候需要指定 -txindex 参数,为交易数据维护索引提供ETL来使用,运行命令参考

./bitcoind \
  -rpcuser=username \
  -rpcpassword=password \ 
  -daemon \
  -txindex

Bitcoin公链数据结构其实就是一个单链表,连续的区块(block)之间通过hash指针连接,而区块则是多笔交易(transaction)的集合,每一个交易则包含了一组输入(input,关联的是某次交易的输出)和一组输出(output,关联一个目标)。数据结构细节参考 Bitcoin Wiki

ETL 过程

Bitcoin公链数据 Python ETL代码已经放到 Github ,其使用了开源项目 Bitcoin ETL做数据解析。

假如我们需要将本机运行的bitcoin接收端的数据从0至10000区块解析后写入SLS的 project my-blockchain-data 中的logstore bitcoin。使用样例如下:

python bitcoin-etl.py \
  --ak-id=LTA******* \
  --ak-secret=******** \
  --endpoint=cn-shanghai.log.aliyuncs.com \
  --project=my-blockchain-data \
  --logstore=bitcoin \
  --btc-provider="http://username:password@localhost:8332" \
  --start-block=0 \
  --end-block=10000 \
  --workers=5

解析后的数据包含4个类别的数据内容:block、transaction、input、output,通过SLS内知字段 __topic__来做区分。在解析后的数据中添加了3个元字段:_bk_ 表示区块高度、 _ts_ 表示出块时间, _tx_ 表示交易在区块中的序号。

以下是解析后的数据样例。

  1. block
__topic__: block
_bk_: 100000
_ts_: 1293623863
bits: 1b04864c
coinbase_param: 044c86041b020602
hash: 000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506
merkle_root: f3e94742aca4b5ef85488dc37c06c3282295ffec960994b2c0d5ac2a25a95766
nonce: 10572b0f
size: 957
stripped_size: 957
transaction_count: 4
version: 1
weight: 3828
  1. transaction
__topic__: transaction
_bk_: 100000
_ts_: 1293623863
_tx_: 3
fee: 0
hash: e9a66845e05d5abc0ad04ec80f774a7e585c6e8db975962d069a522137b80c1d
input_count: 1
input_value: 1000000
is_coinbase: n
lock_time: 0
output_count: 1
output_value: 1000000
size: 225
version: 1
virtual_size: 225
  1. input
__topic__: input
_bk_: 100000
_ts_: 1293623863
_tx_: 3
addresses: 1JxDJCyWNakZ5kECKdCU9Zka6mh34mZ7B2
index: 0
required_signatures:
script_asm: 3046022100bb1ad26df930a51cce110cf44f7a48c3c561fd977500b1ae5d6b6fd13d0b3f4a022100c5b42951acedff14abba2736fd574bdb465f3e6f8da12e2c5303954aca7f78f3[ALL] 04a7135bfe824c97ecc01ec7d7e336185c81e2aa2c41ab175407c09484ce9694b44953fcb751206564a9c24dd094d42fdbfdd5aad3e063ce6af4cfaaea4ea14fbb
script_hex: 493046022100bb1ad26df930a51cce110cf44f7a48c3c561fd977500b1ae5d6b6fd13d0b3f4a022100c5b42951acedff14abba2736fd574bdb465f3e6f8da12e2c5303954aca7f78f3014104a7135bfe824c97ecc01ec7d7e336185c81e2aa2c41ab175407c09484ce9694b44953fcb751206564a9c24dd094d42fdbfdd5aad3e063ce6af4cfaaea4ea14fbb
sequence: 4294967295
spent_output_index: 0
spent_transaction_hash: f4515fed3dc4a19b90a317b9840c243bac26114cf637522373a7d486b372600b
type: pubkeyhash
value: 1000000
  1. output
__topic__: output
_bk_: 100000
_ts_: 1293623863
_tx_: 3
addresses: 16FuTPaeRSPVxxCnwQmdyx2PQWxX6HWzhQ
index: 0
required_signatures: 
script_asm: OP_DUP OP_HASH160 39aa3d569e06a1d7926dc4be1193c99bf2eb9ee0 OP_EQUALVERIFY OP_CHECKSIG
script_hex: 76a91439aa3d569e06a1d7926dc4be1193c99bf2eb9ee088ac
type: pubkeyhash
value: 1000000

区块链浏览器

这里基于SLS的查询、分析以及数据展示能力,我们将写入到 SLS 的Bitcoin公链数据快速实现Bitcoin的区块链浏览器。

  1. 最新的10个区块信息

SQL 语句:

(__topic__: block)| select
  _bk_ as "区块高度",
  _ts_ as "出块时间",
  transaction_count as "交易笔数",
  size as "区块大小",
  nonce as "出块 Nonce"
order by
  _bk_ desc
limit
  10 

结果展示:
最新的10个区块信息.png

  1. 最新的10000个交易信息

SQL 语句:

(__topic__: transaction) |
select
  hash as "交易Hash",
  _ts_ as "出块时间",
  if(is_coinbase = 'y', '是', '否') as "是否为Coinbase",
  input_value as "交易量(sat)",
  fee as "交易费用(sat)",
  size as "交易大小",
  round(fee / size, 2) as "交易费率(sat/byte)"
limit
  10000

结果展示:
最新的10000个交易信息.png

  1. 区块 727,932 的所有参与交易的地址

SQL 语句:

(*
and _bk_: 727932
and (
  __topic__: input
  or __topic__: output
) not _tx_ :0)| select
  _bk_ as "区块高度",
  arbitrary(_ts_) as "出块时间",
  _tx_ as "交易编号",
  arbitrary(inputs) as "源",
  arbitrary(outputs) as "目标",
  arbitrary(value) as "量(sat)"
from(
    select
      *,
      if(__topic__ = 'input', addresses, NULL) as inputs,
      if(__topic__ = 'output', addresses, NULL) as outputs
    FROM      (
        select
          arbitrary(_ts_) as _ts_,
          _bk_,
          _tx_,
          __topic__,
          array_join(max(addresses, 1000), ', ') as addresses,
          sum(value) as value
        FROM          log
        group by
          _bk_,
          _tx_,
          __topic__
        order by
          _tx_,
          __topic__
      )
  )
group by
  _bk_,
  _tx_
order by
  _bk_,
  _tx_
limit
  10000 

结果展示:
交易链路.png

总结

本文讨论了如何将原始的Bitcoin公链数据进行清洗规整,写入到阿里云SLS,然后实现简洁的区块链浏览器。后续还将分享如何通过Bitcoin公链数据追踪转账链路,敬请关注。

下图是 SLS 团队的技术博客,我们会不定期推出技术文章分享和产品更新介绍,欢迎大家订阅,有任何问题也欢迎与我们反馈。
SLS QR.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7月前
|
存储 安全 数据管理
新型数据库技术:基于区块链的分布式数据存储系统
传统数据库系统面临着中心化管理、数据安全性和可信度等方面的挑战。本文介绍了一种基于区块链技术的新型数据库系统,通过分布式存储和去中心化的特性,提高了数据的安全性和可信度,同时实现了高效的数据管理和共享。该系统在多个领域如金融、医疗和物联网等具有广阔的应用前景。
|
7月前
|
安全 数据挖掘 API
《区块链公链数据分析简易速速上手小册》第4章:交易数据分析(2024 最新版)(下)
《区块链公链数据分析简易速速上手小册》第4章:交易数据分析(2024 最新版)(下)
154 1
|
7月前
|
数据可视化 数据挖掘 区块链
《区块链公链数据分析简易速速上手小册》第4章:交易数据分析(2024 最新版)(上)
《区块链公链数据分析简易速速上手小册》第4章:交易数据分析(2024 最新版)(上)
321 0
|
6月前
|
安全 物联网安全 物联网
区块链零知识证明:未来数据的“隐身斗篷”
**区块链零知识证明(ZKP)技术融合密码学与分布式账本,确保数据安全与隐私。ZKP允许证明者不透露信息地验证论断,增强数据真实性,同时避免数据篡改。未来,ZKP将在数字身份、数据交易、物联网安全及跨链互操作中扮演关键角色,驱动数字化转型并保障信息安全。**
|
6月前
|
安全 物联网安全 物联网
区块链零知识证明:未来数据的“隐身斗篷”
**区块链零知识证明(ZKP)技术融合密码学与分布式账本,确保数据安全与隐私。ZKP允许证明者在不透露信息情况下证实论断,增强区块链安全性,提高验证效率。未来,ZKP将在数字身份、数据交易、物联网安全及跨链互操作中扮演关键角色,驱动数字世界的安全转型。**
|
7月前
|
存储 安全 数据管理
新一代数据库技术:融合区块链的分布式数据存储系统
传统数据库系统面临着数据安全性、可信度和去中心化等挑战,而区块链技术的兴起为解决这些问题提供了新的思路。本文介绍了一种新一代数据库技术,将区块链技术与传统的分布式数据存储系统相融合,实现了更高水平的数据安全性和可信度,以及去中心化的优势。通过结合区块链的不可篡改性和分布式存储系统的高性能,这一新型数据库技术将在未来的数据管理领域发挥重要作用。
|
7月前
|
消息中间件 数据挖掘 Kafka
《区块链公链数据分析简易速速上手小册》第5章:高级数据分析技术(2024 最新版)(上)
《区块链公链数据分析简易速速上手小册》第5章:高级数据分析技术(2024 最新版)(上)
101 1
|
7月前
|
算法 安全 数据挖掘
《区块链公链数据分析简易速速上手小册》第3章:区块链数据结构(2024 最新版)(上)
《区块链公链数据分析简易速速上手小册》第3章:区块链数据结构(2024 最新版)(上)
90 0
《区块链公链数据分析简易速速上手小册》第3章:区块链数据结构(2024 最新版)(上)
|
7月前
|
存储 数据挖掘 区块链
《区块链公链数据分析简易速速上手小册》第3章:区块链数据结构(2024 最新版)(下)
《区块链公链数据分析简易速速上手小册》第3章:区块链数据结构(2024 最新版)(下)
88 0
|
7月前
|
数据挖掘 API 区块链
《区块链公链数据分析简易速速上手小册》第2章:数据获取基础(2024 最新版)
《区块链公链数据分析简易速速上手小册》第2章:数据获取基础(2024 最新版)
226 0