![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 项目的分析和社区管理,实现可持续增长。

Subscribe to Footprint Analytics

Subscribe to Footprint Analytics
Share Dialog
Share Dialog
<100 subscribers
<100 subscribers


此文章是 #Footprint Analytics for SQL 系列 的其中一个章节。
ERC20代币的价格可以通过多种方式查询,但是有时我们也需要获取其他信息,如某个代币的持有者数量、代币总供应量(流通量)、各持有者的账户余额(例如持有最多的账号的余额)。不同于比特币使用未花费的交易产出(UTXO)来跟踪账户余额,Ethereum区块链使用账户余额模型。每个账号地址都有转入和转出ERC20代币的记录,将这些转入和转出数据汇总后可以得到账户的当前余额。但是区块链本身并没有保存每个地址的当前余额,所以需要进行计算得出。
为了计算某个账户下某种ERC20代币的余额,或者统计所有持有某种代币的账户的余额,我们需要将转入和转出数据合并在一起。转入数据以用户地址为to_address,金额为正数;转出数据则以用户地址为from_address,金额乘以-1变成负数。可以使用union all将所有数据合并起来。
以下,以arbitrum_token_transfers为例,通过 token_address = '0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a',筛选出 GMX 这个 token的所有流水。 由于链上的数据都是以超大整数保存的,所以要换算成真正的个数,需要关联 token_info 表,找到这个token的 decimals,进行换算。
with
token_transfers as (
select
tt.from_address
,tt.to_address
,tt.amount_raw / power(10, coalesce(ti.decimals, 18)) as amount
,ti.token_slug
from footprint.arbitrum_token_transfers tt
left join
footprint.token_info ti
on tt.token_address = ti.token_address
where 1=1
and tt.token_address = '0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a'
and ti.chain = 'Arbitrum'
),
outflow as (
select
from_address as wallet_address
,token_slug
,-amount as amount
from token_transfers
),
inflow as (
select
to_address as wallet_address
,token_slug
,amount as amount
from token_transfers
),
union_flow as (
select * from outflow
union all
select * from inflow
)
select * from union_flow
在上述查询中,我们使用union all将每个账户的转入和转出GMX Token的明细数据合并起来。 我们还可以将上述查询的结果放入一个CTE(Common Table Expression,通用表表达式)中,然后对CTE执行统计汇总。考虑到某些代币的持有者数量可能非常多(几万甚至更多),我们通常关注的是持有者总数、总流通量以及持有量最多的一部分地址。因此我们也可以将按地址汇总的查询放入一个CTE中,方便根据需要进一步统计。在这里,我们首先统计持有者总数,并且在查询时过滤掉当前代币余额为0的地址。新的SQL如下:
with
token_transfers as (
select
tt.from_address
,tt.to_address
,tt.amount_raw / power(10, coalesce(ti.decimals, 18)) as amount
,ti.token_slug
from footprint.arbitrum_token_transfers tt
left join
footprint.token_info ti
on tt.token_address = ti.token_address
where 1=1
and tt.token_address = '0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a'
and ti.chain = 'Arbitrum'
),
outflow as (
select
from_address as wallet_address
,token_slug
,-amount as amount
from token_transfers
),
inflow as (
select
to_address as wallet_address
,token_slug
,amount as amount
from token_transfers
),
union_flow as (
select * from outflow
union all
select * from inflow
),
token_balance as (
select
wallet_address
,sum(amount) as amount
from union_flow
group by wallet_address
order by amount desc
)
select
count(*) as holder_count
,sum(amount) as total_supply
from token_balance
where amount > 0
在上述查询中,我们在CTE token_balance中按地址统计了账户余额,然后在最后的查询中计算了余额大于0的地址数量(持有者数量)和所有账户的余额汇总(流通总量)。
这张chart展示了GMX 代币 的分布情况,约75%的代币质押在项目方的stake GMX合约中。大量的流通代币质押在合约中,有利于降低代币流通量,从而推高币价。

进阶玩法 - 账户每日余额 跟当前账户余额类似,多了一步日期填充,直接上代码
with
token_transfers as (
select
tt.from_address
,tt.to_address
,tt.amount_raw / power(10, coalesce(ti.decimals, 18)) as amount
,ti.token_slug
,tt.block_timestamp
from footprint.arbitrum_token_transfers tt
left join
footprint.token_info ti
on tt.token_address = ti.token_address
where 1=1
and tt.token_address = lower('0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a')
and ti.chain = 'Arbitrum'
),
outflow as (
select
block_timestamp
,from_address as wallet_address
,token_slug
,-amount as amount
from token_transfers
),
inflow as (
select
block_timestamp
,to_address as wallet_address
,token_slug
,amount as amount
from token_transfers
),
union_flow as (
select * from outflow
union all
select * from inflow
),
double_entry_book_grouped_by_date as (
select wallet_address, token_slug, sum(amount) as balance, Date(block_timestamp) as on_date
from union_flow
group by wallet_address, token_slug, Date(block_timestamp)
),
daily_balances_with_gaps as (
select
wallet_address,
token_slug,
on_date,
sum(balance) over (partition by wallet_address, token_slug order by on_date) as balance,
lead(on_date, 1, current_date) over (partition by wallet_address, token_slug order by on_date) as next_date
from double_entry_book_grouped_by_date
),
calendar AS (
select on_date from unnest(sequence(FROM_ISO8601_DATE('2021-07-21'), current_date, interval '1' day)) t(on_date)
),
daily_holder_balance as (
select wallet_address, token_slug, calendar.on_date, balance
from daily_balances_with_gaps dbwg
right join calendar
on dbwg.on_date <= calendar.on_date
and calendar.on_date < dbwg.next_date
and dbwg.balance > 0
order by calendar.on_date asc, dbwg.balance desc
)
select * from daily_holder_balance
进阶工具 - 使用DBT来管理SQL dbt-footprint
以上代码均在项目中,可以切换不同的token_address,得到不同token的余额。
如何在Footprint上创建一个token monitor:
在这个看板里,Token Monitor。你只需要改变token_address,就可以搭建属于你自己的token monitor。
推荐阅读
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
此文章是 #Footprint Analytics for SQL 系列 的其中一个章节。
ERC20代币的价格可以通过多种方式查询,但是有时我们也需要获取其他信息,如某个代币的持有者数量、代币总供应量(流通量)、各持有者的账户余额(例如持有最多的账号的余额)。不同于比特币使用未花费的交易产出(UTXO)来跟踪账户余额,Ethereum区块链使用账户余额模型。每个账号地址都有转入和转出ERC20代币的记录,将这些转入和转出数据汇总后可以得到账户的当前余额。但是区块链本身并没有保存每个地址的当前余额,所以需要进行计算得出。
为了计算某个账户下某种ERC20代币的余额,或者统计所有持有某种代币的账户的余额,我们需要将转入和转出数据合并在一起。转入数据以用户地址为to_address,金额为正数;转出数据则以用户地址为from_address,金额乘以-1变成负数。可以使用union all将所有数据合并起来。
以下,以arbitrum_token_transfers为例,通过 token_address = '0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a',筛选出 GMX 这个 token的所有流水。 由于链上的数据都是以超大整数保存的,所以要换算成真正的个数,需要关联 token_info 表,找到这个token的 decimals,进行换算。
with
token_transfers as (
select
tt.from_address
,tt.to_address
,tt.amount_raw / power(10, coalesce(ti.decimals, 18)) as amount
,ti.token_slug
from footprint.arbitrum_token_transfers tt
left join
footprint.token_info ti
on tt.token_address = ti.token_address
where 1=1
and tt.token_address = '0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a'
and ti.chain = 'Arbitrum'
),
outflow as (
select
from_address as wallet_address
,token_slug
,-amount as amount
from token_transfers
),
inflow as (
select
to_address as wallet_address
,token_slug
,amount as amount
from token_transfers
),
union_flow as (
select * from outflow
union all
select * from inflow
)
select * from union_flow
在上述查询中,我们使用union all将每个账户的转入和转出GMX Token的明细数据合并起来。 我们还可以将上述查询的结果放入一个CTE(Common Table Expression,通用表表达式)中,然后对CTE执行统计汇总。考虑到某些代币的持有者数量可能非常多(几万甚至更多),我们通常关注的是持有者总数、总流通量以及持有量最多的一部分地址。因此我们也可以将按地址汇总的查询放入一个CTE中,方便根据需要进一步统计。在这里,我们首先统计持有者总数,并且在查询时过滤掉当前代币余额为0的地址。新的SQL如下:
with
token_transfers as (
select
tt.from_address
,tt.to_address
,tt.amount_raw / power(10, coalesce(ti.decimals, 18)) as amount
,ti.token_slug
from footprint.arbitrum_token_transfers tt
left join
footprint.token_info ti
on tt.token_address = ti.token_address
where 1=1
and tt.token_address = '0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a'
and ti.chain = 'Arbitrum'
),
outflow as (
select
from_address as wallet_address
,token_slug
,-amount as amount
from token_transfers
),
inflow as (
select
to_address as wallet_address
,token_slug
,amount as amount
from token_transfers
),
union_flow as (
select * from outflow
union all
select * from inflow
),
token_balance as (
select
wallet_address
,sum(amount) as amount
from union_flow
group by wallet_address
order by amount desc
)
select
count(*) as holder_count
,sum(amount) as total_supply
from token_balance
where amount > 0
在上述查询中,我们在CTE token_balance中按地址统计了账户余额,然后在最后的查询中计算了余额大于0的地址数量(持有者数量)和所有账户的余额汇总(流通总量)。
这张chart展示了GMX 代币 的分布情况,约75%的代币质押在项目方的stake GMX合约中。大量的流通代币质押在合约中,有利于降低代币流通量,从而推高币价。

进阶玩法 - 账户每日余额 跟当前账户余额类似,多了一步日期填充,直接上代码
with
token_transfers as (
select
tt.from_address
,tt.to_address
,tt.amount_raw / power(10, coalesce(ti.decimals, 18)) as amount
,ti.token_slug
,tt.block_timestamp
from footprint.arbitrum_token_transfers tt
left join
footprint.token_info ti
on tt.token_address = ti.token_address
where 1=1
and tt.token_address = lower('0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a')
and ti.chain = 'Arbitrum'
),
outflow as (
select
block_timestamp
,from_address as wallet_address
,token_slug
,-amount as amount
from token_transfers
),
inflow as (
select
block_timestamp
,to_address as wallet_address
,token_slug
,amount as amount
from token_transfers
),
union_flow as (
select * from outflow
union all
select * from inflow
),
double_entry_book_grouped_by_date as (
select wallet_address, token_slug, sum(amount) as balance, Date(block_timestamp) as on_date
from union_flow
group by wallet_address, token_slug, Date(block_timestamp)
),
daily_balances_with_gaps as (
select
wallet_address,
token_slug,
on_date,
sum(balance) over (partition by wallet_address, token_slug order by on_date) as balance,
lead(on_date, 1, current_date) over (partition by wallet_address, token_slug order by on_date) as next_date
from double_entry_book_grouped_by_date
),
calendar AS (
select on_date from unnest(sequence(FROM_ISO8601_DATE('2021-07-21'), current_date, interval '1' day)) t(on_date)
),
daily_holder_balance as (
select wallet_address, token_slug, calendar.on_date, balance
from daily_balances_with_gaps dbwg
right join calendar
on dbwg.on_date <= calendar.on_date
and calendar.on_date < dbwg.next_date
and dbwg.balance > 0
order by calendar.on_date asc, dbwg.balance desc
)
select * from daily_holder_balance
进阶工具 - 使用DBT来管理SQL dbt-footprint
以上代码均在项目中,可以切换不同的token_address,得到不同token的余额。
如何在Footprint上创建一个token monitor:
在这个看板里,Token Monitor。你只需要改变token_address,就可以搭建属于你自己的token monitor。
推荐阅读
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