![Cover image for 1.5[Intermediate] Iceberg-Trino 如何解决链上数据面临的挑战](https://img.paragraph.com/cdn-cgi/image/format=auto,width=3840,quality=85/https://storage.googleapis.com/papyrus_images/5f9d4430fcd78103e346b51a95d59f17df5ed3a8d9b08ea412a1d2ba116f9247.jpg)
1.5[Intermediate] Iceberg-Trino 如何解决链上数据面临的挑战
此文章是 #Web3 data 系列 的其中一个章节。链上数据处理面临的挑战区块链数据公司,在索引以及处理链上数据时,可能会面临一些挑战,包括:海量数据。随着区块链上数据量的增加,数据索引将需要扩大规模以处理增加的负载并提供对数据的有效访问。因此,它导致了更高的存储成本;缓慢的指标计算和增加数据库服务器的负载。复杂的数据生产流程。区块链技术是复杂的,建立一个全面和可靠的数据索引需要对底层数据结构和算法有深刻的理解。这是由区块链实现方式的多样性所决定的。举一个具体的例子,以太坊中的 NFT 通常是在遵循 ERC721 和 ERC1155 格式的智能合约中进行创建的,而像Polkadot 上通常是直接在区块链运行时间内构建的。对于用户来说,不管是任何形式的存在,这些数据应该被视为 NFT 的交易,需要被存储,并且处理为可读状态,方便分析以及进行计算。集成能力。为了给用户提供最大的价值,区块链索引解决方案可能需要将其数据索引与其他系统集成,如分析平台或 API。这很有挑战性,需要在架构设计上投入大量精力。随着区块链技术的使用越来越广泛,存储在区块链上的数据量也在增加。这是因为更多的人在...

区块链游戏概览:回顾 2023,展望 2024
作者:lesley@footprint.network 数据来源:区块链游戏年报关键要点今年,比特币(BTC)市值从上年的低谷中强劲回升,相较之下,区块链游戏市场的增长虽然较为平淡,但年末也迎来了显著的上升势头。今年的游戏中,仅有 6% 的游戏拥有超过 1,000 个活跃钱包,相比去年的 10% 有所减少。2023 年,尽管整体交易量比 2022 年的高点有所下降,交易次数却相对稳定。2023 年,区块链游戏行业正在发展,而 AI 也在深刻改变着这一行业。Layer 2 区块链也发展迅速,但 BNB 链等老牌区块链仍占据市场。市场正在期待顶尖区块链游戏的出现,GambleFi 或许将迎来增长,但仍需面对监管挑战。在用户获取上,利用 Telegram 和 X(Twitter)等社交平台平台来触达庞大用户群体已成为一种趋势区块链游戏是 Web3 领域对于大众普及的重要催化剂,在简化复杂概念、让人们理解区块链技术上发挥着重要作用。与其他领域不同,传统游戏里早已存在的游戏货币和道具概念,使区块链游戏成为普罗大众更易理解和接受的 Web3 普及方案。 尽管 2023 年区块链游戏市场交易量...

如何使用Footrace 钱包监控功能和设置自定义的交易警报
本文将介绍如何使用 Footrace 监控 CEX 的钱包地址并设置自定义警报。 2022-06-12 本文将介绍如何使用 Footrace 监控 CEX 的钱包地址并设置自定义警报。 什么是 Footrace? Footrace (Foot Trace) 是一个多链的钱包追踪监控平台,可以监控CEX、DEX、鲸鱼、聪明钱、或任何你想关注的地址的钱包。 Footrace 帮助投资者保护他们的投资并监控异常的市场和资金流动。您可以设置自定义警报,通过电子邮件、电报、Discord、SMS 等向您发送重要的资金流通知和警报。Footrace 中心化交易所监控页Footrace目前监控了 122 交易所的资金流活动及其钱包余额。包括了中心化和去中心化交易所的地址数据。由于这些交易所和基金可能会添加新的钱包地址,用户可以使用Footrace的钱包地址的功能来添加 Footrace 缺少的任何钱包地址。Footrace 地址提交工具 如何开始监控?钱包余额在监控交易所时,钱包余额是需要仔细关注的指标之一。具有大量钱包余额的交易所通常意味著有大量的客户,并反映出市场对此加密货币交易所的高度信...
Footprint Analytics 是一个全面的区块链数据分析平台,简化了 Web3 项目的分析和社区管理,实现可持续增长。


![Cover image for 1.5[Intermediate] Iceberg-Trino 如何解决链上数据面临的挑战](https://img.paragraph.com/cdn-cgi/image/format=auto,width=3840,quality=85/https://storage.googleapis.com/papyrus_images/5f9d4430fcd78103e346b51a95d59f17df5ed3a8d9b08ea412a1d2ba116f9247.jpg)
1.5[Intermediate] Iceberg-Trino 如何解决链上数据面临的挑战
此文章是 #Web3 data 系列 的其中一个章节。链上数据处理面临的挑战区块链数据公司,在索引以及处理链上数据时,可能会面临一些挑战,包括:海量数据。随着区块链上数据量的增加,数据索引将需要扩大规模以处理增加的负载并提供对数据的有效访问。因此,它导致了更高的存储成本;缓慢的指标计算和增加数据库服务器的负载。复杂的数据生产流程。区块链技术是复杂的,建立一个全面和可靠的数据索引需要对底层数据结构和算法有深刻的理解。这是由区块链实现方式的多样性所决定的。举一个具体的例子,以太坊中的 NFT 通常是在遵循 ERC721 和 ERC1155 格式的智能合约中进行创建的,而像Polkadot 上通常是直接在区块链运行时间内构建的。对于用户来说,不管是任何形式的存在,这些数据应该被视为 NFT 的交易,需要被存储,并且处理为可读状态,方便分析以及进行计算。集成能力。为了给用户提供最大的价值,区块链索引解决方案可能需要将其数据索引与其他系统集成,如分析平台或 API。这很有挑战性,需要在架构设计上投入大量精力。随着区块链技术的使用越来越广泛,存储在区块链上的数据量也在增加。这是因为更多的人在...

区块链游戏概览:回顾 2023,展望 2024
作者:lesley@footprint.network 数据来源:区块链游戏年报关键要点今年,比特币(BTC)市值从上年的低谷中强劲回升,相较之下,区块链游戏市场的增长虽然较为平淡,但年末也迎来了显著的上升势头。今年的游戏中,仅有 6% 的游戏拥有超过 1,000 个活跃钱包,相比去年的 10% 有所减少。2023 年,尽管整体交易量比 2022 年的高点有所下降,交易次数却相对稳定。2023 年,区块链游戏行业正在发展,而 AI 也在深刻改变着这一行业。Layer 2 区块链也发展迅速,但 BNB 链等老牌区块链仍占据市场。市场正在期待顶尖区块链游戏的出现,GambleFi 或许将迎来增长,但仍需面对监管挑战。在用户获取上,利用 Telegram 和 X(Twitter)等社交平台平台来触达庞大用户群体已成为一种趋势区块链游戏是 Web3 领域对于大众普及的重要催化剂,在简化复杂概念、让人们理解区块链技术上发挥着重要作用。与其他领域不同,传统游戏里早已存在的游戏货币和道具概念,使区块链游戏成为普罗大众更易理解和接受的 Web3 普及方案。 尽管 2023 年区块链游戏市场交易量...

如何使用Footrace 钱包监控功能和设置自定义的交易警报
本文将介绍如何使用 Footrace 监控 CEX 的钱包地址并设置自定义警报。 2022-06-12 本文将介绍如何使用 Footrace 监控 CEX 的钱包地址并设置自定义警报。 什么是 Footrace? Footrace (Foot Trace) 是一个多链的钱包追踪监控平台,可以监控CEX、DEX、鲸鱼、聪明钱、或任何你想关注的地址的钱包。 Footrace 帮助投资者保护他们的投资并监控异常的市场和资金流动。您可以设置自定义警报,通过电子邮件、电报、Discord、SMS 等向您发送重要的资金流通知和警报。Footrace 中心化交易所监控页Footrace目前监控了 122 交易所的资金流活动及其钱包余额。包括了中心化和去中心化交易所的地址数据。由于这些交易所和基金可能会添加新的钱包地址,用户可以使用Footrace的钱包地址的功能来添加 Footrace 缺少的任何钱包地址。Footrace 地址提交工具 如何开始监控?钱包余额在监控交易所时,钱包余额是需要仔细关注的指标之一。具有大量钱包余额的交易所通常意味著有大量的客户,并反映出市场对此加密货币交易所的高度信...
Footprint Analytics 是一个全面的区块链数据分析平台,简化了 Web3 项目的分析和社区管理,实现可持续增长。
Share Dialog
Share Dialog

Subscribe to Footprint Analytics

Subscribe to Footprint Analytics
<100 subscribers
<100 subscribers
此文章是 #Web3 data 系列 的其中一个章节。
数据质量是指数据的准确性、完整性、可靠性和一致性。这些特征对于数据的有效性和可用性至关重要。如果数据质量不高,可能会导致决策失误、成本增加、浪费资源。因此,维护数据质量是非常重要的。

Footprint Analytics 对链上数据的校验标准,分为以下几个纬度:

Footprint Analytics 使用 Great Expectations 框架对链上数据校验。Great Expectations 是一个开源的数据质量和数据流程管理工具,提供了一系列工具和功能,可以帮助用户定义数据质量期望值,并在数据处理过程中检查数据是否符合这些期望值。
Footprint Analytics 使用 Great Expectations 进行数据校验,将异常测试数据结果实时发送到 slack 预警,团队可以在第一时间对数据问题进行修复;同时在 Footprint 生成对应的数据测试结果报告,方便团队对数据质量进行分析。

Footprint Analytics Great Expectations 项目结构:
├── expectations
├── great_expectations
│ ├── checkpoints # 生成的 yml
│ ├── expectations # 生成的 json
│ ├── notebooks
│ │ └── basic_info
│ │ └── nft # nft 领域
│ │ │ └──nft_transfers_timeliness.py # 其中一个校验开发脚本
│ ├── output
│ │ └── validations # 校验结果
│ ├── plugins
│ │ └── expectations # 自定义规则 Custom Expectation
├── utils
测试结果报告

从此文章的数据生产流程介绍中,我们能了解到,所有到指标计算都是基于原始数据的抽象。因此,对链底层对数据校验是最基础的一步。
以 Ethereum 链为例,公链的底层数据表有:
ethereum_traces
内部合约调用表,一个交易(Transactions)可以触发更多的内部调用操作,一个内部调用还可能进一步触发更多的内部调用。这些调用执行的信息会被记录到内部合约调用表。内部合约调用表主要包括 block_time、block_number、transaction_hash、status、from_address、to_address、value、trace_type 等字段。
ethereum_blocks
区块(Block)是区块链的基本构建组件。一个区块包含多个交易记录。区块表记录了每一个区块生成的日期时间 (timestamp)、对应的区块编号 ( number)、区块哈希值、难度值、燃料消耗等信息。除了需要分析整个区块链的区块生成状况、燃料消耗等场景外,我们一般并不需要关注和使用区块表。其中最重要的是区块生成日期时间和区块编号信息,它们几乎都同时保存到了其他所有数据表中,只是对应的字段名称不同。
ethereum_token_transfers
token转账表保存了区块链上非原生代币的转移详细信息;token转账表中最常用的字段包括block_timestamp、block_number、transaction_hash、from_address、to_address、token_address、value等。
ethereum_transactions
交易表保存了区块链上发生的每一个交易的详细信息(同时包括成功交易和失败交易)。交易表中最常用的字段包括 block_timestamp、 block_number、from_address、to_address、value、hash 等。
Footprint Analytics 的校验规则如下:
在traces表中以trace_id作为唯一键,数据不能重复
SELECT if((
SELECT count(1)
FROM (
SELECT trace_id, count(1) AS nums
FROM "ethereum_traces"
WHERE block_timestamp >= timestamp '2022-01-01' --节省运行时间,截取 2022-01-01 开始
GROUP BY 1
HAVING count(1) > 1
)
) > 0, 'fail', 'pass')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-trace-uniqueness-fp-34876
traces 表必须有最新日期的数据 SELECT if((
SELECT count(*)
FROM "ethereum_traces"
WHERE block_timestamp >= CURRENT_DATE
) > 0, 'pass', 'fail')

Footprint Query URL: https://www.footprint.network/chart/ethereum-trace-timeliness-fp-34871
traces中,trace_type= 'reward' 且 reward_type='block' 的去重 block 数量应该等于同一时间范围内blocks表的block数量 SELECT if((
SELECT count(DISTINCT block_number) AS trace_blocks_count
FROM "ethereum_traces"
WHERE trace_type = 'reward'
AND reward_type = 'block'
AND block_timestamp < CURRENT_DATE
) = (
SELECT count(*) AS blocks_count
FROM "ethereum_blocks"
WHERE timestamp < CURRENT_DATE
) - 1, 'pass', 'fail') AS trace_blocks_count_result

Footprint Query URL:
https://www.footprint.network/chart/ethereum-trace-trace-blocks-count-check-fp-34872
在 traces 表中,非空 trace_address 中的非空 transaction_hash 数量应该等于同一时间范围内 transactions 表的总记录数 SELECT if((
SELECT count(transaction_hash)
FROM "ethereum_traces"
WHERE trace_address IS NULL
AND transaction_hash IS NOT NULL
AND block_timestamp < CURRENT_DATE
AND block_timestamp >=timestamp '2022-01-01' --节省运行时间,截取2022-01-01开始
) = (
SELECT count(*)
FROM "ethereum_transactions"
WHERE block_timestamp < CURRENT_DATE
AND block_timestamp >=timestamp '2022-01-01' --节省运行时间,截取2022-01-01开始
), 'pass', 'fail')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-trace-transactions-count-check-fp-34874
在blocks表中以number作为唯一键,数据不能重复
SELECT if((
SELECT count(1)
FROM (
SELECT number, count(1) AS nums
FROM "ethereum_blocks"
GROUP BY 1
HAVING count(1) > 1
)
) > 0, 'fail', 'pass')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-blocks-uniqueness-fp-34878
blocks表必须有最新日期的数据 SELECT if((
SELECT count(*)
FROM "ethereum_blocks"
WHERE timestamp >= CURRENT_DATE
) > 0, 'pass', 'fail')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-blocks-timeliness-fp-34879
blocks表中的number必须是连续不中断的 SELECT if((
SELECT expect_total_blocks - total_blocks
FROM (
SELECT max(number) - min(number) + 1 AS expect_total_blocks
, count(DISTINCT number) AS total_blocks
FROM "ethereum_blocks"
)
) = 0, 'pass', 'fail') --blocks的number应该是连续不中断的

Footprint Query URL: https://www.footprint.network/chart/ethereum-blocks-continuity-fp-34880
blocks 表中最大的 number+1 等于 blocks 表的总行数,因为blocks的number是从0开始,也就是创世块的number=0
SELECT if((
SELECT expect_total_blocks - total_blocks
FROM (
SELECT count(1) AS total_blocks
, max(number) + 1 AS expect_total_blocks
FROM "ethereum_blocks"
)
) = 0, 'pass', 'fail') --blocks的记录数应该等于最大的block number+1

Footprint Query URL:
https://www.footprint.network/chart/ethereum-blocks-blocks-validity-check-fp-34882
blocks中的transaction_count 总和等于同一时间范围内transactions的总行数 SELECT if((
SELECT sum(transaction_count) AS block_transaction_count
FROM "ethereum_blocks"
WHERE timestamp < CURRENT_DATE
) = (
SELECT count(*) AS transaction_count
FROM "ethereum_transactions"
WHERE block_timestamp < CURRENT_DATE
), 'pass', 'fail') --相同时间范围内,blocks中的transaction 总数等于transactions中的总行数

Footprint Query URL:
https://www.footprint.network/chart/ethereum-blocks-transactions-validity-check-fp-34883
token_transfers表以block_timestamp,log_index,transaction_hash 为唯一键,数据不能重复
SELECT if((
SELECT count(1)
FROM (
SELECT block_timestamp,log_index,transaction_hash,count(1) AS nums
FROM "ethereum_token_transfers"
WHERE block_timestamp >=timestamp '2022-01-01' --节省运行时间,截取2022-01-01开始
GROUP BY 1,2,3
HAVING count(1) > 1
)
) > 0, 'fail', 'pass')

Footprint Query URL: https://www.footprint.network/chart/ethereum-token-transfers-uniqueness-fp-35017
token_transfers表必须有最新日期的数据
SELECT if((
SELECT count(*)
FROM "ethereum_token_transfers"
WHERE block_timestamp >= CURRENT_DATE
) > 0, 'pass', 'fail')

Footprint Query URL:
https://www.footprint.network/chart/token-transfers-timeliness-fp-35018
token_transfers每日应该有交易数据,按天为纬度是连续的
SELECT if((
SELECT total_day - diff_day AS block_timestamp_continue_result
FROM (
SELECT date_diff('day', date(min(block_timestamp)), date(max(block_timestamp))) AS diff_day
, count(DISTINCT date(block_timestamp)) AS total_day
FROM "ethereum_token_transfers"
WHERE block_timestamp >= timestamp '2022-01-01’ --节省运行时间,截取2022-01-01开始
)
) = 1, 'pass', 'fail')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-token-transfers-continuity-fp-35020
transactions表以block_timestamp,hash,block_number 为唯一键,数据不能重复
SELECT if((
SELECT count(1)
FROM (
SELECT block_timestamp,hash,block_number,count(1) AS nums
FROM "ethereum_transactions"
WHERE block_timestamp >=timestamp '2022-01-01' --节省运行时间,截取2022-01-01开始
GROUP BY 1,2,3
HAVING count(1) > 1
)
) > 0, 'fail', 'pass')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-transactions-uniqueness-fp-35021
transactions表必须有最新日期的数据
SELECT if((
SELECT count(*)
FROM "ethereum_transactions"
WHERE block_timestamp >= CURRENT_DATE
) > 0, 'pass', 'fail')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-transactions-timeliness-fp-35022
transactions每日应该有交易数据,按天为纬度是连续的
SELECT if((
SELECT total_day - diff_day AS block_timestamp_continue_result
FROM (
SELECT date_diff('day', date(min(block_timestamp)), date(max(block_timestamp))) AS diff_day
, count(DISTINCT date(block_timestamp)) AS total_day
FROM "ethereum_transactions"
WHERE block_timestamp >= timestamp '2022-01-01' --节省运行时间,截取2022-01-01开始
)
) = 1, 'pass', 'fail')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-transactions-continuity-fp-35023
以上就是 Footprint Analytics 技术团队对底层链的数据进行测试的方法和规则,仍在持续完善更新中,欢迎大家提出优化的建议,一起让Footprint Analytics的数据质量得到更可靠的保证。
推荐阅读
#Footprint Analytics for SQL Footprint Analytics 是首家 Crypto 领域支持无代码数据分析平台。平台还提供一个统一的数据 API,让用户可以快速检索超过23条公链生态的 NFT,GameFi 以及 DeFi 数据。
如果您对该课程有任何反馈或建议,您可以通过以下方式联系我们。
Footprint Website: https://www.footprint.network
Discord: https://discord.gg/3HYaR6USM7
Twitter: https://twitter.com/Footprint_Data
此文章是 #Web3 data 系列 的其中一个章节。
数据质量是指数据的准确性、完整性、可靠性和一致性。这些特征对于数据的有效性和可用性至关重要。如果数据质量不高,可能会导致决策失误、成本增加、浪费资源。因此,维护数据质量是非常重要的。

Footprint Analytics 对链上数据的校验标准,分为以下几个纬度:

Footprint Analytics 使用 Great Expectations 框架对链上数据校验。Great Expectations 是一个开源的数据质量和数据流程管理工具,提供了一系列工具和功能,可以帮助用户定义数据质量期望值,并在数据处理过程中检查数据是否符合这些期望值。
Footprint Analytics 使用 Great Expectations 进行数据校验,将异常测试数据结果实时发送到 slack 预警,团队可以在第一时间对数据问题进行修复;同时在 Footprint 生成对应的数据测试结果报告,方便团队对数据质量进行分析。

Footprint Analytics Great Expectations 项目结构:
├── expectations
├── great_expectations
│ ├── checkpoints # 生成的 yml
│ ├── expectations # 生成的 json
│ ├── notebooks
│ │ └── basic_info
│ │ └── nft # nft 领域
│ │ │ └──nft_transfers_timeliness.py # 其中一个校验开发脚本
│ ├── output
│ │ └── validations # 校验结果
│ ├── plugins
│ │ └── expectations # 自定义规则 Custom Expectation
├── utils
测试结果报告

从此文章的数据生产流程介绍中,我们能了解到,所有到指标计算都是基于原始数据的抽象。因此,对链底层对数据校验是最基础的一步。
以 Ethereum 链为例,公链的底层数据表有:
ethereum_traces
内部合约调用表,一个交易(Transactions)可以触发更多的内部调用操作,一个内部调用还可能进一步触发更多的内部调用。这些调用执行的信息会被记录到内部合约调用表。内部合约调用表主要包括 block_time、block_number、transaction_hash、status、from_address、to_address、value、trace_type 等字段。
ethereum_blocks
区块(Block)是区块链的基本构建组件。一个区块包含多个交易记录。区块表记录了每一个区块生成的日期时间 (timestamp)、对应的区块编号 ( number)、区块哈希值、难度值、燃料消耗等信息。除了需要分析整个区块链的区块生成状况、燃料消耗等场景外,我们一般并不需要关注和使用区块表。其中最重要的是区块生成日期时间和区块编号信息,它们几乎都同时保存到了其他所有数据表中,只是对应的字段名称不同。
ethereum_token_transfers
token转账表保存了区块链上非原生代币的转移详细信息;token转账表中最常用的字段包括block_timestamp、block_number、transaction_hash、from_address、to_address、token_address、value等。
ethereum_transactions
交易表保存了区块链上发生的每一个交易的详细信息(同时包括成功交易和失败交易)。交易表中最常用的字段包括 block_timestamp、 block_number、from_address、to_address、value、hash 等。
Footprint Analytics 的校验规则如下:
在traces表中以trace_id作为唯一键,数据不能重复
SELECT if((
SELECT count(1)
FROM (
SELECT trace_id, count(1) AS nums
FROM "ethereum_traces"
WHERE block_timestamp >= timestamp '2022-01-01' --节省运行时间,截取 2022-01-01 开始
GROUP BY 1
HAVING count(1) > 1
)
) > 0, 'fail', 'pass')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-trace-uniqueness-fp-34876
traces 表必须有最新日期的数据 SELECT if((
SELECT count(*)
FROM "ethereum_traces"
WHERE block_timestamp >= CURRENT_DATE
) > 0, 'pass', 'fail')

Footprint Query URL: https://www.footprint.network/chart/ethereum-trace-timeliness-fp-34871
traces中,trace_type= 'reward' 且 reward_type='block' 的去重 block 数量应该等于同一时间范围内blocks表的block数量 SELECT if((
SELECT count(DISTINCT block_number) AS trace_blocks_count
FROM "ethereum_traces"
WHERE trace_type = 'reward'
AND reward_type = 'block'
AND block_timestamp < CURRENT_DATE
) = (
SELECT count(*) AS blocks_count
FROM "ethereum_blocks"
WHERE timestamp < CURRENT_DATE
) - 1, 'pass', 'fail') AS trace_blocks_count_result

Footprint Query URL:
https://www.footprint.network/chart/ethereum-trace-trace-blocks-count-check-fp-34872
在 traces 表中,非空 trace_address 中的非空 transaction_hash 数量应该等于同一时间范围内 transactions 表的总记录数 SELECT if((
SELECT count(transaction_hash)
FROM "ethereum_traces"
WHERE trace_address IS NULL
AND transaction_hash IS NOT NULL
AND block_timestamp < CURRENT_DATE
AND block_timestamp >=timestamp '2022-01-01' --节省运行时间,截取2022-01-01开始
) = (
SELECT count(*)
FROM "ethereum_transactions"
WHERE block_timestamp < CURRENT_DATE
AND block_timestamp >=timestamp '2022-01-01' --节省运行时间,截取2022-01-01开始
), 'pass', 'fail')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-trace-transactions-count-check-fp-34874
在blocks表中以number作为唯一键,数据不能重复
SELECT if((
SELECT count(1)
FROM (
SELECT number, count(1) AS nums
FROM "ethereum_blocks"
GROUP BY 1
HAVING count(1) > 1
)
) > 0, 'fail', 'pass')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-blocks-uniqueness-fp-34878
blocks表必须有最新日期的数据 SELECT if((
SELECT count(*)
FROM "ethereum_blocks"
WHERE timestamp >= CURRENT_DATE
) > 0, 'pass', 'fail')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-blocks-timeliness-fp-34879
blocks表中的number必须是连续不中断的 SELECT if((
SELECT expect_total_blocks - total_blocks
FROM (
SELECT max(number) - min(number) + 1 AS expect_total_blocks
, count(DISTINCT number) AS total_blocks
FROM "ethereum_blocks"
)
) = 0, 'pass', 'fail') --blocks的number应该是连续不中断的

Footprint Query URL: https://www.footprint.network/chart/ethereum-blocks-continuity-fp-34880
blocks 表中最大的 number+1 等于 blocks 表的总行数,因为blocks的number是从0开始,也就是创世块的number=0
SELECT if((
SELECT expect_total_blocks - total_blocks
FROM (
SELECT count(1) AS total_blocks
, max(number) + 1 AS expect_total_blocks
FROM "ethereum_blocks"
)
) = 0, 'pass', 'fail') --blocks的记录数应该等于最大的block number+1

Footprint Query URL:
https://www.footprint.network/chart/ethereum-blocks-blocks-validity-check-fp-34882
blocks中的transaction_count 总和等于同一时间范围内transactions的总行数 SELECT if((
SELECT sum(transaction_count) AS block_transaction_count
FROM "ethereum_blocks"
WHERE timestamp < CURRENT_DATE
) = (
SELECT count(*) AS transaction_count
FROM "ethereum_transactions"
WHERE block_timestamp < CURRENT_DATE
), 'pass', 'fail') --相同时间范围内,blocks中的transaction 总数等于transactions中的总行数

Footprint Query URL:
https://www.footprint.network/chart/ethereum-blocks-transactions-validity-check-fp-34883
token_transfers表以block_timestamp,log_index,transaction_hash 为唯一键,数据不能重复
SELECT if((
SELECT count(1)
FROM (
SELECT block_timestamp,log_index,transaction_hash,count(1) AS nums
FROM "ethereum_token_transfers"
WHERE block_timestamp >=timestamp '2022-01-01' --节省运行时间,截取2022-01-01开始
GROUP BY 1,2,3
HAVING count(1) > 1
)
) > 0, 'fail', 'pass')

Footprint Query URL: https://www.footprint.network/chart/ethereum-token-transfers-uniqueness-fp-35017
token_transfers表必须有最新日期的数据
SELECT if((
SELECT count(*)
FROM "ethereum_token_transfers"
WHERE block_timestamp >= CURRENT_DATE
) > 0, 'pass', 'fail')

Footprint Query URL:
https://www.footprint.network/chart/token-transfers-timeliness-fp-35018
token_transfers每日应该有交易数据,按天为纬度是连续的
SELECT if((
SELECT total_day - diff_day AS block_timestamp_continue_result
FROM (
SELECT date_diff('day', date(min(block_timestamp)), date(max(block_timestamp))) AS diff_day
, count(DISTINCT date(block_timestamp)) AS total_day
FROM "ethereum_token_transfers"
WHERE block_timestamp >= timestamp '2022-01-01’ --节省运行时间,截取2022-01-01开始
)
) = 1, 'pass', 'fail')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-token-transfers-continuity-fp-35020
transactions表以block_timestamp,hash,block_number 为唯一键,数据不能重复
SELECT if((
SELECT count(1)
FROM (
SELECT block_timestamp,hash,block_number,count(1) AS nums
FROM "ethereum_transactions"
WHERE block_timestamp >=timestamp '2022-01-01' --节省运行时间,截取2022-01-01开始
GROUP BY 1,2,3
HAVING count(1) > 1
)
) > 0, 'fail', 'pass')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-transactions-uniqueness-fp-35021
transactions表必须有最新日期的数据
SELECT if((
SELECT count(*)
FROM "ethereum_transactions"
WHERE block_timestamp >= CURRENT_DATE
) > 0, 'pass', 'fail')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-transactions-timeliness-fp-35022
transactions每日应该有交易数据,按天为纬度是连续的
SELECT if((
SELECT total_day - diff_day AS block_timestamp_continue_result
FROM (
SELECT date_diff('day', date(min(block_timestamp)), date(max(block_timestamp))) AS diff_day
, count(DISTINCT date(block_timestamp)) AS total_day
FROM "ethereum_transactions"
WHERE block_timestamp >= timestamp '2022-01-01' --节省运行时间,截取2022-01-01开始
)
) = 1, 'pass', 'fail')

Footprint Query URL:
https://www.footprint.network/chart/ethereum-transactions-continuity-fp-35023
以上就是 Footprint Analytics 技术团队对底层链的数据进行测试的方法和规则,仍在持续完善更新中,欢迎大家提出优化的建议,一起让Footprint Analytics的数据质量得到更可靠的保证。
推荐阅读
#Footprint Analytics for SQL Footprint Analytics 是首家 Crypto 领域支持无代码数据分析平台。平台还提供一个统一的数据 API,让用户可以快速检索超过23条公链生态的 NFT,GameFi 以及 DeFi 数据。
如果您对该课程有任何反馈或建议,您可以通过以下方式联系我们。
Footprint Website: https://www.footprint.network
Discord: https://discord.gg/3HYaR6USM7
Twitter: https://twitter.com/Footprint_Data
No activity yet