我最近在重新学 Solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新 1-3 讲。
所有代码和教程开源在 github: github.com/AmazingAng/WTF-Solidity
Dune
是区块链查询分析工具,每个人可以通过写类sql语言查询区块链上的所有信息,例如巨鲸,链上交易的数据等等。同时Dune
能便捷的将数据转换为可视化的图表。
以太坊是数据库,智能合约是数据表,来自钱包的交易是每个表中的行。
这句话讲出了区块链的精髓:区块链本质上就是公开的存储数据的分布式账本,现在我们可以通过Dune来查询这个分布式账本的数据。
目标:查询过去 24 小时在 Uniswap 上购买的 DAI稳定币
-
注册登陆Dune。
-
点击右上角new query新建查询,输入代码:
SELECT SUM(token_a_amount) AS dai_bought FROM dex."trades" WHERE block_time > now() - interval '24 hours' AND token_a_symbol = 'DAI' AND project = 'Uniswap';
-
点击右下角的Run执行查询,得到最近的24h内通过uniswap购买DAI的的数量。
目标:学会使用 SELECT, WHERE, LIMIT
我们查询其中一个表,以aave为例:aave合约
通过查询aave这个合约,它有deposit(存储)这个方法,并且有该事件(事件会在执行的时候广播)。
回到Dune查找对应的表,根据在Ethereum上搜索aave相关的表,并对应事件,LendingPool_evt_Deposit
找到该表。
然后我们通过Dune可以查询对应的存储数据
SELECT * FROM aave."LendingPool_evt_Deposit"
limit 100
就可以得到aave合约中存储方法的相应数据,通过这个数据可以做一些筛选
_user:发起存款的钱包地址
_reserve:作为抵押品存放的代币地址
_amount:存入的代币数量
_timestamp:交易被挖掘到区块链的时间戳
查询过滤特殊的地址0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
SELECT *, (_amount / 1e18) as _amount FROM aave."LendingPool_evt_Deposit"
WHERE _reserve = '\xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'
limit 100
带上了查询条件,能够快速的筛选我们需要的数据
查看抵押品为USDC,USDC合约地址:xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
SELECT * FROM aave."LendingPool_evt_Deposit"
WHERE _reserve = '\xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
limit 100
以上案例参考 Your guide to basic SQL while learning Ethereum at the same time
实践Ethereum.Transactions
表的转账查询
select * from ethereum.transactions
LIMIT 10
看这个hash转账
由0x22fff189c37302c02635322911c3b64f80ce7203 转账到 0x8aae242452471d2dfea145214ceedf87ca043198
hash:0xfa69f5eb0218f56ae602ef7f01588d9193a891e6fe7ba7e1c3994075a689bb51
我们可以直接通过dune查到该条信息
select * from ethereum.transactions
WHERE hash='\xfa69f5eb0218f56ae602ef7f01588d9193a891e6fe7ba7e1c3994075a689bb51'
dune中的字段,也是和etherscan中一一对应。
点击 New visualization 就可以选择你需要的视图,比如我点击 bar chart
就会将我刚才筛选的数据可视化。看最长的几根,就是借贷最多的几个账号。
这一讲,我们介绍了Dune的基础用法。通过Dune,我们能够将链上的数据转换为可视化的数据,更好的了解链上热点。