
一文详解Berachain原理及交互
1. 简介Berachain是构建在cosmos SDK基础上, 与EVM兼容的layer1公链, 它采用的是“流动性证明”(Proof of Liquidity)的共识机制. 在PoL中,为网络安全做出贡献的唯一方式,就是首先为一系列内置于链本身的智能合约和 DeFi 基础设施提供流动性;具体来说,就是为链原生DEX(去中心化交易平台)、永续合约交易平台和稳定币借贷平台提供流动性。这个范围将来可能会扩展到berachain上建立的Dapp,前提是得到治理的批准,这样链上的任何流动性来源都可以成为安全性的来源。 这意味着,新的NFT AMM、on-chain game, SoFi protocol或其他需要在启动阶段额外帮助的DApp,都可以在Berachain上启动,并通过治理投票使其流动性池合约获得BGT奖励,有效地补贴其用户获取成本。2. 融资情况2023年4月20日, Berachain 获得了由 Polychain 领投的 4200 万美元融资, 估值 4.2 亿美元。团队目前base在加拿大多伦多.https://www.theblock.co/post/227344...

Dune基础入门-part3
这个part主要想学习一下token standard(ERC20/ERC721/ERC1155)以及以$LINK为例看一下如何对代币进行整体分析~ ERC20:ERC20是由EIP20提案经过以太坊社区讨论通过后得到的以太坊代币标准。基于ERC20标准发行的代币是同质化代币(Fungible Token),同质化代币的意思就是同一种代币的所有代币的价值与属性完全一致,任何一个代币都完全等于其他代币,它们之间可以完全等价互换。截止至目前,ETH链上已经发行了572,351个ERC20代币。目前已经发行572,351个ERC20代币ERC721:基于ERC721标准发行的代币是非同质化代币(Non-Fungible Token),意思就是每个代币都是独一无二的。它的特点是每个代币不可互换、不可拆分、属性互不相同。截止至目前,ETH链上已经发行了111,937个ERC721代币。在ETH链上,ERC20和ERC721代币能占据以太坊上总代币类型的99%以上目前已经发行111,937个ERC721代币ERC1155:ERC1155是用于多种代币管理的合约标准接口。 单个部署的合约可以包...

Dune基础入门-part2
我认为作为一名想进入web3行业的数据分析师,掌握一些区块链的基础知识很有必要。比如能看懂etherscan上记录的数据的含义、合约的调用等等,对我们理解数据是至关重要的~因此这篇文章打算对part1中一些没有讲的特别清楚的细节问题打一些小补丁~ 我们还是以在ethereum链上转移USDT为例,结合etherscan和dune的数据表来理解数据,顺便介绍一些sql的常用函数:(https://etherscan.io/tx/0x09ecb3cbf332b30e432307624ed463d3639cf2b8c5b1108099b46a2f585f6ec6)第一个小补丁- etherscan数据解析在上面的交易中,aa40给b632转了400USDT,转账过程调用了USDT的合约1e37。Transaction Hash对每笔交易来说是唯一的,简单理解就是唯一ID。Status记录的是这笔交易的状态。Transaction Fee(0.001314332814012091 Ether)=Gas price(20.797392503 Gwei)*gas used by transa...

一文详解Berachain原理及交互
1. 简介Berachain是构建在cosmos SDK基础上, 与EVM兼容的layer1公链, 它采用的是“流动性证明”(Proof of Liquidity)的共识机制. 在PoL中,为网络安全做出贡献的唯一方式,就是首先为一系列内置于链本身的智能合约和 DeFi 基础设施提供流动性;具体来说,就是为链原生DEX(去中心化交易平台)、永续合约交易平台和稳定币借贷平台提供流动性。这个范围将来可能会扩展到berachain上建立的Dapp,前提是得到治理的批准,这样链上的任何流动性来源都可以成为安全性的来源。 这意味着,新的NFT AMM、on-chain game, SoFi protocol或其他需要在启动阶段额外帮助的DApp,都可以在Berachain上启动,并通过治理投票使其流动性池合约获得BGT奖励,有效地补贴其用户获取成本。2. 融资情况2023年4月20日, Berachain 获得了由 Polychain 领投的 4200 万美元融资, 估值 4.2 亿美元。团队目前base在加拿大多伦多.https://www.theblock.co/post/227344...

Dune基础入门-part3
这个part主要想学习一下token standard(ERC20/ERC721/ERC1155)以及以$LINK为例看一下如何对代币进行整体分析~ ERC20:ERC20是由EIP20提案经过以太坊社区讨论通过后得到的以太坊代币标准。基于ERC20标准发行的代币是同质化代币(Fungible Token),同质化代币的意思就是同一种代币的所有代币的价值与属性完全一致,任何一个代币都完全等于其他代币,它们之间可以完全等价互换。截止至目前,ETH链上已经发行了572,351个ERC20代币。目前已经发行572,351个ERC20代币ERC721:基于ERC721标准发行的代币是非同质化代币(Non-Fungible Token),意思就是每个代币都是独一无二的。它的特点是每个代币不可互换、不可拆分、属性互不相同。截止至目前,ETH链上已经发行了111,937个ERC721代币。在ETH链上,ERC20和ERC721代币能占据以太坊上总代币类型的99%以上目前已经发行111,937个ERC721代币ERC1155:ERC1155是用于多种代币管理的合约标准接口。 单个部署的合约可以包...

Dune基础入门-part2
我认为作为一名想进入web3行业的数据分析师,掌握一些区块链的基础知识很有必要。比如能看懂etherscan上记录的数据的含义、合约的调用等等,对我们理解数据是至关重要的~因此这篇文章打算对part1中一些没有讲的特别清楚的细节问题打一些小补丁~ 我们还是以在ethereum链上转移USDT为例,结合etherscan和dune的数据表来理解数据,顺便介绍一些sql的常用函数:(https://etherscan.io/tx/0x09ecb3cbf332b30e432307624ed463d3639cf2b8c5b1108099b46a2f585f6ec6)第一个小补丁- etherscan数据解析在上面的交易中,aa40给b632转了400USDT,转账过程调用了USDT的合约1e37。Transaction Hash对每笔交易来说是唯一的,简单理解就是唯一ID。Status记录的是这笔交易的状态。Transaction Fee(0.001314332814012091 Ether)=Gas price(20.797392503 Gwei)*gas used by transa...
Subscribe to sherry
Subscribe to sherry
Share Dialog
Share Dialog


网址:https://dune.com/browse/dashboards
dune简介
区块链的本质是一个分布式的公共账本,所有的数据在链上公开透明,包括每一笔转账,每一次的合约调用。Dune将链上数据聚合到可访问的PostgreSQL数据库中,是进行链上数据分析的工具。用户可以通过PostgreSQL查询链上数据并将数据可视化,汇总成dashboard。
常用数据表介绍
Dune数据表架构如下:
raw transaction data: 原始交易数据。
decoded data: 解码后的智能合约数据。
abstractions: 更高级别的按照主题聚合的数据表,比如price.usd等。在GitHub上可以找到每张表的创建逻辑,链接如下。
https://github.com/duneanalytics/abstractions/tree/master/ethereum
以ethereum链为例,下图是转移token的过程产生的数据流转。假设现在要在链上转移USDT,就会调用transfer函数,指定接收者和转移的金额,对此条交易进行签名,那么此时链上就会产生calldata数据,dune将这个数据存在了ethereum.transaction表中,这张表主要包含以下字段~from(发送交易的人的地址/签名者),to(合约交互的地址,现在转移的是USDT,那么就是USDT的合约地址),success(这条交易是成功?还是失败?),value(表示的是转移的ETH数值,那现在转移的是USDT,没有转移ETH,所以在这条交易中value的值为0),gas_column(主要记录交易的gas使用情况,有gas limit,gas used,gas price),hash(在链上进行的每次行为都会产生一个唯一的transaction hash,这个值也是用来多表关联的唯一主键),blocknumber,blocktime主要记录交易发生的区块和时间~
转移USDT的合约调用过程,也称为内部交易/子交易,数据存在了ethereum.traces表中。
交易执行的日志数据,包括签名者、接收者、topic、转账金额等等存在ethereum.logs表中。

ethereum.transaction: eth交易数据

ethereum.traces:eth“内部”交易数据

ethereum.logs:eth交易事件日志

SQL基础入门
SQL是结构化查询语言,用于存取、查询、升级和管理相关的数据库系统。我们以三箭资本的一个地址(0x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7)在eth链的交易数据为例展开讲解分析~
查询数据
select * from ethereum."transactions" order by block_time desc limit 10

其中select后面表示的是需要的数据字段,*代表数据表中所有的字段,如果只想选取其中一些字段,则select后面加上相应的字段名就可以了,from后面为数据表,order by表示按照block_number的顺序排列显示结果,desc为降序,asc为升序。limit是为了限制数据量,否则语句将返回表中全部数据。
过滤数据
select * from ethereum."transactions"
where "from" ='\x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7' order by block_time desc limit 100

where后面表示根据指定条件对结果进行过滤,只筛选出字段from=\x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7的数据,即钱包0x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7(三箭资本)的交易数据。
多表连接

比如我想知道这个地址0x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7的账户余额。
with total_token as ( SELECT token_address, sum(amount) as amount FROM erc20."view_token_balances_latest" WHERE "wallet_address" IN ('\x676aecc97bf721c3cb3329a22d49c0ea0ed375f7') group by token_address ), token_price as ( select contract_address, price from prices.usd where minute-date_trunc('minute', now())='-06:00:00' AND contract_address in (select token_address from total_token) and price >0 ) Select sum(a.amount * b.price) as Value from total_token a left join token_price b on a.token_address=b.contract_address

on后面的语句表示将两表连接起来的条件。
在链上交易数据中,Transaction Hash是唯一的,因此Transaction Hash是将表连接起来的唯一主键。
数据聚合
select date_trunc('day', block_time) date, sum(value)/1e18 as value
from ethereum."transactions"
where "from" ='\x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7'
and block_time>='2022-01-01'
and block_time<now()
group by date_trunc('day', block_time)
order by date_trunc('day', block_time) desc

group by函数可以根据一列或者多列对结果进行汇总。其中date_trunc('day', block_time)函数为时间截断函数,可以根据指定的日期部分(比如hour,day,month等)对时间戳表达式进行截断。group by date_trunc('day', block_time) 表示按照date_trunc('day', block_time)即date字段进行汇总,也可以简写为group by 1即按照第一个字段汇总。order by date_trunc('day', block_time) desc表示按照date字段降序排列结果。
当有了这种汇总结果后,可以建立我们的第一个数据可视化图表~点击New visualization,可以选择你想使用的可视化图表以及x轴和y轴数据,就对数据进行展示啦。

常用聚合函数
sum() 求和函数、count() 计数函数、avg() 求平均值函数、min()求最小值函数、max()求最大值函数、Cumulative Sum() 累加函数等等。
比如我想知道0x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7这个地址一共发出过多少ETH,一共对外发出的交易次数等等。
select sum(value)/1e18 as sum_value, count(1) as trans_cnt
from ethereum."transactions"where "from"='\x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7'
可以看出0x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7这个地址一共发出了365454个ETH,一共对外发出交易次数为6887次。
总结
当会了一些基本的SQL语句后,我们就可以从数据表中查询任何我们需要的数据啦。但是会写SQL只是作为一名数据分析师的基本功,我认为最重要的还是理解数据并用数据讲故事,在数据中能总结发现出一些有意思的东西~
网址:https://dune.com/browse/dashboards
dune简介
区块链的本质是一个分布式的公共账本,所有的数据在链上公开透明,包括每一笔转账,每一次的合约调用。Dune将链上数据聚合到可访问的PostgreSQL数据库中,是进行链上数据分析的工具。用户可以通过PostgreSQL查询链上数据并将数据可视化,汇总成dashboard。
常用数据表介绍
Dune数据表架构如下:
raw transaction data: 原始交易数据。
decoded data: 解码后的智能合约数据。
abstractions: 更高级别的按照主题聚合的数据表,比如price.usd等。在GitHub上可以找到每张表的创建逻辑,链接如下。
https://github.com/duneanalytics/abstractions/tree/master/ethereum
以ethereum链为例,下图是转移token的过程产生的数据流转。假设现在要在链上转移USDT,就会调用transfer函数,指定接收者和转移的金额,对此条交易进行签名,那么此时链上就会产生calldata数据,dune将这个数据存在了ethereum.transaction表中,这张表主要包含以下字段~from(发送交易的人的地址/签名者),to(合约交互的地址,现在转移的是USDT,那么就是USDT的合约地址),success(这条交易是成功?还是失败?),value(表示的是转移的ETH数值,那现在转移的是USDT,没有转移ETH,所以在这条交易中value的值为0),gas_column(主要记录交易的gas使用情况,有gas limit,gas used,gas price),hash(在链上进行的每次行为都会产生一个唯一的transaction hash,这个值也是用来多表关联的唯一主键),blocknumber,blocktime主要记录交易发生的区块和时间~
转移USDT的合约调用过程,也称为内部交易/子交易,数据存在了ethereum.traces表中。
交易执行的日志数据,包括签名者、接收者、topic、转账金额等等存在ethereum.logs表中。

ethereum.transaction: eth交易数据

ethereum.traces:eth“内部”交易数据

ethereum.logs:eth交易事件日志

SQL基础入门
SQL是结构化查询语言,用于存取、查询、升级和管理相关的数据库系统。我们以三箭资本的一个地址(0x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7)在eth链的交易数据为例展开讲解分析~
查询数据
select * from ethereum."transactions" order by block_time desc limit 10

其中select后面表示的是需要的数据字段,*代表数据表中所有的字段,如果只想选取其中一些字段,则select后面加上相应的字段名就可以了,from后面为数据表,order by表示按照block_number的顺序排列显示结果,desc为降序,asc为升序。limit是为了限制数据量,否则语句将返回表中全部数据。
过滤数据
select * from ethereum."transactions"
where "from" ='\x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7' order by block_time desc limit 100

where后面表示根据指定条件对结果进行过滤,只筛选出字段from=\x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7的数据,即钱包0x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7(三箭资本)的交易数据。
多表连接

比如我想知道这个地址0x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7的账户余额。
with total_token as ( SELECT token_address, sum(amount) as amount FROM erc20."view_token_balances_latest" WHERE "wallet_address" IN ('\x676aecc97bf721c3cb3329a22d49c0ea0ed375f7') group by token_address ), token_price as ( select contract_address, price from prices.usd where minute-date_trunc('minute', now())='-06:00:00' AND contract_address in (select token_address from total_token) and price >0 ) Select sum(a.amount * b.price) as Value from total_token a left join token_price b on a.token_address=b.contract_address

on后面的语句表示将两表连接起来的条件。
在链上交易数据中,Transaction Hash是唯一的,因此Transaction Hash是将表连接起来的唯一主键。
数据聚合
select date_trunc('day', block_time) date, sum(value)/1e18 as value
from ethereum."transactions"
where "from" ='\x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7'
and block_time>='2022-01-01'
and block_time<now()
group by date_trunc('day', block_time)
order by date_trunc('day', block_time) desc

group by函数可以根据一列或者多列对结果进行汇总。其中date_trunc('day', block_time)函数为时间截断函数,可以根据指定的日期部分(比如hour,day,month等)对时间戳表达式进行截断。group by date_trunc('day', block_time) 表示按照date_trunc('day', block_time)即date字段进行汇总,也可以简写为group by 1即按照第一个字段汇总。order by date_trunc('day', block_time) desc表示按照date字段降序排列结果。
当有了这种汇总结果后,可以建立我们的第一个数据可视化图表~点击New visualization,可以选择你想使用的可视化图表以及x轴和y轴数据,就对数据进行展示啦。

常用聚合函数
sum() 求和函数、count() 计数函数、avg() 求平均值函数、min()求最小值函数、max()求最大值函数、Cumulative Sum() 累加函数等等。
比如我想知道0x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7这个地址一共发出过多少ETH,一共对外发出的交易次数等等。
select sum(value)/1e18 as sum_value, count(1) as trans_cnt
from ethereum."transactions"where "from"='\x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7'
可以看出0x676Aecc97bF721C3cb3329A22D49C0ea0ED375F7这个地址一共发出了365454个ETH,一共对外发出交易次数为6887次。
总结
当会了一些基本的SQL语句后,我们就可以从数据表中查询任何我们需要的数据啦。但是会写SQL只是作为一名数据分析师的基本功,我认为最重要的还是理解数据并用数据讲故事,在数据中能总结发现出一些有意思的东西~
<100 subscribers
<100 subscribers
No activity yet