├── .gitignore ├── LICENSE ├── README.md ├── SUMMARY.md ├── en ├── SUMMARY.md ├── assets │ ├── bookcover-en.pdf │ ├── bookcover-en.png │ └── logo.png ├── ch00 │ ├── ch00-become-chain-analyst.md │ └── img │ │ ├── ch00_01.jpg │ │ ├── ch00_01.png │ │ ├── ch00_02.jpg │ │ ├── ch00_03.jpg │ │ ├── ch00_03.png │ │ ├── ch00_04.jpg │ │ ├── ch00_04.png │ │ ├── ch00_05.jpg │ │ ├── ch00_06.jpg │ │ ├── ch00_07.jpg │ │ ├── ch00_08.jpg │ │ ├── ch00_08.png │ │ ├── ch00_09.jpg │ │ ├── ch00_09.png │ │ ├── ch00_10.jpg │ │ ├── ch00_11.jpg │ │ ├── ch00_data-process.png │ │ ├── ch00_scam.png │ │ ├── ch00_support.png │ │ └── ch00_xen.png ├── ch01 │ ├── ch01-dune-platform-introduction.md │ └── img │ │ ├── ch01_dashboard.png │ │ ├── ch01_main-page.png │ │ ├── ch01_query-page.png │ │ ├── ch01_query-params.png │ │ ├── ch01_spellbook-1.png │ │ ├── ch01_spellbook-2.png │ │ ├── ch01_spellbook.png │ │ └── ch01_visualization.png ├── ch02 │ └── ch02-quickstart.md ├── ch03 │ ├── ch03-build-first-dashboard.md │ └── img │ │ ├── ch03_dashboard.png │ │ ├── ch03_image_00.png │ │ ├── ch03_image_01.png │ │ ├── ch03_image_02.png │ │ ├── ch03_image_03.png │ │ ├── ch03_image_04.png │ │ ├── ch03_image_05.png │ │ ├── ch03_image_06.png │ │ ├── ch03_image_07.png │ │ ├── ch03_image_08.png │ │ └── ch03_image_09.png ├── ch04 │ ├── ch04-understanding-tables.md │ └── img │ │ ├── ch04_5-1.jpg │ │ ├── ch04_5-2.jpg │ │ ├── ch04_5-3.jpg │ │ ├── ch04_5-4.jpg │ │ ├── ch04_image_01.png │ │ ├── ch04_image_02.png │ │ ├── ch04_image_03.png │ │ └── ch04_image_04.png ├── ch05 │ ├── ch05-sql-basics-part1.md │ └── img │ │ ├── ch05_group-by-case.png │ │ ├── ch05_leftjoin.png │ │ ├── ch05_query-2.png │ │ ├── ch05_query-page-1.png │ │ ├── ch05_query-page.png │ │ ├── ch05_query-page2.png │ │ ├── ch05_query-page3.png │ │ ├── ch05_query-page4.png │ │ └── ch05_query-page5.png ├── ch06 │ ├── ch06-sql-basics-part2.md │ └── img │ │ ├── ch06_part_2_01.png │ │ ├── ch06_part_2_02.png │ │ └── ch06_part_2_03.png ├── ch07 │ ├── ch07-practice-build-lens-dashboard-part1.md │ └── img │ │ ├── ch07_image_01.png │ │ ├── ch07_image_02.png │ │ ├── ch07_image_03.png │ │ ├── ch07_image_04.png │ │ ├── ch07_image_05.png │ │ ├── ch07_image_06.png │ │ ├── ch07_image_07.png │ │ └── ch07_image_08.png ├── ch08 │ ├── ch08-practice-build-lens-dashboard-part2.md │ └── img │ │ ├── ch08_image_09.png │ │ ├── ch08_image_10.png │ │ ├── ch08_image_11.png │ │ ├── ch08_image_12.png │ │ ├── ch08_image_13.png │ │ ├── ch08_image_14.png │ │ ├── ch08_image_15.png │ │ ├── ch08_image_16.png │ │ ├── ch08_image_17.png │ │ ├── ch08_image_18.png │ │ ├── ch08_image_19.png │ │ ├── ch08_image_20.png │ │ └── ch08_image_21.png ├── ch09 │ ├── ch09-useful-queries-part1.md │ └── img │ │ ├── ch09_image_01.png │ │ └── ch09_image_02.png ├── ch10 │ ├── ch10-useful-queries-part2.md │ └── img │ │ ├── ch10_image_03.png │ │ ├── ch10_image_04.png │ │ ├── ch10_image_05.png │ │ ├── ch10_image_06.png │ │ └── ch10_image_07.png ├── ch11 │ ├── ch11-useful-queries-part3.md │ └── img │ │ ├── ch11_image_08.png │ │ ├── ch11_image_09.png │ │ ├── ch11_image_10.png │ │ ├── ch11_image_11.png │ │ └── ch11_image_12.png ├── ch12 │ ├── ch12-nft-analysis.md │ └── img │ │ ├── ch12_ERC-Standard.jpeg │ │ ├── ch12_daily-trade-volune.png │ │ ├── ch12_dune-nft-related.png │ │ ├── ch12_history-price.png │ │ ├── ch12_nft-all-in-one.png │ │ ├── ch12_nft-transfer-etherscan.png │ │ └── ch12_seaport1.1.png ├── ch13 │ ├── ch13-lending-analysis.md │ └── img │ │ ├── ch13_1.png │ │ ├── ch13_2.png │ │ ├── ch13_4.1.png │ │ ├── ch13_4.2.png │ │ ├── ch13_arbscan1.png │ │ ├── ch13_bank.jpeg │ │ ├── ch13_crv1.jpg │ │ ├── ch13_crv2.png │ │ ├── ch13_dashboard.png │ │ ├── ch13_dashboard2.png │ │ ├── ch13_dunedata.png │ │ ├── ch13_hf1.png │ │ ├── ch13_hf2.png │ │ ├── ch13_hf3.png │ │ ├── ch13_loan.png │ │ ├── ch13_tvl.png │ │ ├── ch13_tvl2.png │ │ ├── ch13_ur.jpg │ │ └── ch13_ur.png ├── ch14 │ ├── ch14-defi-analysis.md │ └── img │ │ ├── ch14_image_01.png │ │ ├── ch14_image_02.png │ │ ├── ch14_image_03.png │ │ ├── ch14_image_04.png │ │ ├── ch14_image_05.png │ │ └── ch14_image_06.png ├── ch15 │ ├── ch15-dunesql-introduction.md │ └── img │ │ ├── ch15_image_01.png │ │ └── ch15_image_02.png ├── ch16 │ ├── ch16-blockchain-analysis-polygon.md │ └── img │ │ ├── ch16_image_01.png │ │ ├── ch16_image_02.png │ │ ├── ch16_image_03.png │ │ ├── ch16_image_04.png │ │ ├── ch16_image_05.png │ │ ├── ch16_image_06.png │ │ ├── ch16_image_07.png │ │ ├── ch16_image_08.png │ │ ├── ch16_image_09.png │ │ └── ch16_image_10.png ├── ch17 │ ├── ch17-mev-analysis-uniswap.md │ └── img │ │ ├── ch17_1.jpg │ │ ├── ch17_JIT.png │ │ ├── ch17_JITv.png │ │ ├── ch17_arb.png │ │ ├── ch17_arb_protocol.png │ │ ├── ch17_dune_com.jpg │ │ ├── ch17_dune_fb.jpg │ │ ├── ch17_ep_mev_ov.jpg │ │ ├── ch17_fr.jpg │ │ ├── ch17_fr.png │ │ ├── ch17_mempool.jpg │ │ ├── ch17_mev_process.jpg │ │ ├── ch17_mev_sum.png │ │ ├── ch17_mev_supchain.jpg │ │ ├── ch17_mevsumchat.png │ │ ├── ch17_swa.png │ │ ├── ch17_the_block.jpg │ │ └── ch17_uniswap_bot.png ├── ch18 │ ├── ch18-uniswap-multichain-analysis.md │ └── img │ │ ├── ch18_image_01.png │ │ ├── ch18_image_02.png │ │ ├── ch18_image_03.png │ │ ├── ch18_image_04.png │ │ ├── ch18_image_05.png │ │ ├── ch18_image_06.png │ │ ├── ch18_image_07.png │ │ ├── ch18_image_08.png │ │ └── ch18_image_09.png ├── ch19 │ ├── ch19-useful-metrics.md │ └── img │ │ ├── ch19_image_01.png │ │ ├── ch19_image_02.png │ │ ├── ch19_image_03.png │ │ ├── ch19_image_04.png │ │ └── ch19_image_05.png ├── ch20 │ ├── ch20-network-analysis.md │ └── img │ │ ├── ch20_01-Graph-Raw-Relation.png │ │ ├── ch20_02-graph-raw-label.png │ │ └── ch20_20-3.png ├── ch21 │ ├── ch21-btc-analysis.md │ └── img │ │ ├── ch21_funnel_info.png │ │ ├── ch21_historical_trend.png │ │ ├── ch21_hour.png │ │ ├── ch21_input_info.png │ │ ├── ch21_output_info.png │ │ ├── ch21_overview.png │ │ ├── ch21_recent_trend.png │ │ ├── ch21_tool.png │ │ ├── ch21_transaction.png │ │ └── ch21_wallet.png ├── ch22 │ ├── ch22-how-to-build-spellbook.md │ └── img │ │ ├── ch22_image_00.jpg │ │ ├── ch22_image_01.jpg │ │ ├── ch22_image_02.jpg │ │ └── ch22_image_03.jpg ├── ch23 │ ├── ch23-how-to-build-app-use-dune-api.md │ └── img │ │ ├── ch23_watcher01.jpg │ │ └── ch23_watcher02.jpg ├── ch24 │ ├── ch24-explanation-of-account-abstraction.md │ └── img │ │ ├── erc4337-flow.png │ │ ├── etherscan-transaction.png │ │ ├── event-AccountDeployed.png │ │ ├── event-UserOperationEvent.png │ │ └── execuate-flow.png ├── ch25 │ ├── ch25-account-abstraction-data-analysis.md │ └── img │ │ ├── bundler-rank.png │ │ ├── bundler-revenue.png │ │ ├── daily-new-user.png │ │ ├── daily-operation.png │ │ ├── paymaster.png │ │ └── wallet-factory.png ├── ch26 │ ├── ch26-AA-aggregation-table-of-EVM-chains.md │ └── img │ │ ├── agg-account-deployed.png │ │ ├── agg-monthly-revenue.png │ │ └── agg-userop-distribution.png ├── eisvogel.tex ├── pandock-build-pdf.sh └── readme.md └── zh ├── SUMMARY.md ├── assets └── bookcover-zh.png ├── ch00 ├── ch00-become-chain-analyst.md └── img │ ├── 01.jpg │ ├── 02.jpg │ ├── 03.jpg │ ├── 04.jpg │ ├── 05.jpg │ ├── 06.jpg │ ├── 07.jpg │ ├── 08.jpg │ ├── 09.jpg │ ├── 10.jpg │ ├── 11.jpg │ ├── data-process.png │ ├── scam.png │ ├── support.png │ └── xen.png ├── ch01 ├── ch01-dune-platform-introduction.md └── img │ ├── dashboard.png │ ├── main-page.png │ ├── query-page.png │ ├── query-params.png │ ├── spellbook-1.png │ ├── spellbook-2.png │ ├── spellbook.png │ └── visualization.png ├── ch02 └── ch02-quickstart.md ├── ch03 ├── ch03-build-first-dashboard.md └── img │ ├── dashboard.png │ ├── image_00.png │ ├── image_01.png │ ├── image_02.png │ ├── image_03.png │ ├── image_04.png │ ├── image_05.png │ ├── image_06.png │ ├── image_07.png │ ├── image_08.png │ └── image_09.png ├── ch04 ├── ch04-understanding-tables.md └── img │ ├── image_01.png │ ├── image_02.png │ ├── image_03.png │ └── image_04.png ├── ch05 ├── ch05-sql-basics-part1.md └── img │ ├── Date_Function_Format.png │ ├── agg.png │ ├── base.png │ ├── group_by.png │ ├── group_by_case.png │ ├── left_join.png │ ├── left_join_case.png │ ├── part_2_01.png │ ├── part_2_02.png │ ├── part_2_03.png │ ├── raw_data.png │ └── with_as.png ├── ch06 ├── ch06-sql-basics-part2.md └── img │ ├── Date_Function_Format.png │ ├── agg.png │ ├── base.png │ ├── group_by.png │ ├── group_by_case.png │ ├── left_join.png │ ├── left_join_case.png │ ├── part_2_01.png │ ├── part_2_02.png │ ├── part_2_03.png │ ├── raw_data.png │ └── with_as.png ├── ch07 ├── ch07-practice-build-lens-dashboard-part1.md └── img │ ├── image_01.png │ ├── image_02.png │ ├── image_03.png │ ├── image_04.png │ ├── image_05.png │ ├── image_06.png │ ├── image_07.png │ └── image_08.png ├── ch08 ├── ch08-practice-build-lens-dashboard-part2.md └── img │ ├── image_09.png │ ├── image_10.png │ ├── image_11.png │ ├── image_12.png │ ├── image_13.png │ ├── image_14.png │ ├── image_15.png │ ├── image_16.png │ ├── image_17.png │ ├── image_18.png │ ├── image_19.png │ ├── image_20.png │ └── image_21.png ├── ch09 ├── ch09-useful-queries-part1.md └── img │ ├── image_01.png │ └── image_02.png ├── ch10 ├── ch10-useful-queries-part2.md └── img │ ├── image_03.png │ ├── image_04.png │ ├── image_05.png │ ├── image_06.png │ └── image_07.png ├── ch11 ├── ch11-useful-queries-part3.md └── img │ ├── image_08.png │ ├── image_09.png │ ├── image_10.png │ ├── image_11.png │ └── image_12.png ├── ch12 ├── ch12-nft-analysis.md └── img │ ├── ERC-Standard.jpeg │ ├── daily-trade-volune.png │ ├── dune-nft-related.png │ ├── history-price.png │ ├── nft-all-in-one.png │ ├── nft-transfer-etherscan.png │ └── seaport1.1.png ├── ch13 ├── ch13-lending-analysis.md └── img │ ├── 1.png │ ├── 2.png │ ├── 4.1.png │ ├── 4.2.png │ ├── arbscan1.png │ ├── bank.jpeg │ ├── crv1.jpg │ ├── crv2.png │ ├── dashboard.png │ ├── dashboard2.png │ ├── dunedata.png │ ├── hf1.png │ ├── hf2.png │ ├── hf3.png │ ├── loan.png │ ├── tvl.png │ ├── tvl2.png │ ├── ur.jpg │ └── ur.png ├── ch14 ├── ch14-defi-analysis.md └── img │ ├── image_01.png │ ├── image_02.png │ ├── image_03.png │ ├── image_04.png │ ├── image_05.png │ └── image_06.png ├── ch15 ├── ch15-dunesql-introduction.md └── img │ ├── image_01.png │ └── image_02.png ├── ch16 ├── ch16-blockchain-analysis-polygon.md └── img │ ├── image_01.png │ ├── image_02.png │ ├── image_03.png │ ├── image_04.png │ ├── image_05.png │ ├── image_06.png │ ├── image_07.png │ ├── image_08.png │ ├── image_09.png │ └── image_10.png ├── ch17 ├── ch17-mev-analysis-uniswap.md └── img │ ├── 1.jpg │ ├── JIT.png │ ├── JITv.png │ ├── arb.png │ ├── arb_protocol.png │ ├── dune_com.jpg │ ├── dune_fb.jpg │ ├── ep_mev_ov.jpg │ ├── fr.jpg │ ├── fr.png │ ├── mempool.jpg │ ├── mev_process.jpg │ ├── mev_sum.png │ ├── mev_supchain.jpg │ ├── mevsumchat.png │ ├── swa.png │ ├── the_block.jpg │ └── uniswap_bot.png ├── ch18 ├── ch18-uniswap-multichain-analysis.md └── img │ ├── image_01.png │ ├── image_02.png │ ├── image_03.png │ ├── image_04.png │ ├── image_05.png │ ├── image_06.png │ ├── image_07.png │ ├── image_08.png │ └── image_09.png ├── ch19 ├── ch19-useful-metrics.md └── img │ ├── image_01.png │ ├── image_02.png │ ├── image_03.png │ ├── image_04.png │ └── image_05.png ├── ch20 ├── ch20-network-analysis.md └── img │ ├── image-20221214165849494.png │ ├── image-20221214170041781.png │ └── image-20221214201810132.png ├── ch21 ├── ch21-btc-analysis.md └── img │ ├── funnel_info.png │ ├── historical_trend.png │ ├── hour.png │ ├── input_info.png │ ├── output_info.png │ ├── overview.png │ ├── recent_trend.png │ ├── tool.png │ ├── transaction.png │ └── wallet.png ├── ch22 ├── ch22-how-to-build-spellbook.md └── img │ ├── image_00.jpg │ ├── image_01.jpg │ ├── image_02.jpg │ └── image_03.jpg ├── ch23 ├── ch23-how-to-build-app-use-dune-api.md └── img │ ├── watcher01.jpg │ └── watcher02.jpg └── readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | *pxd -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Mastering Onchain Analytics 2 | 3 | Online Book: 4 | - En: [Mastering Onchain Analytics](https://tutorial.sixdegree.xyz/) 5 | - Zh: [精通链上数据分析](https://tutorial.sixdegree.xyz/v/zh/) 6 | 7 | This is a series tutorials for blockchain analysis enthusiasts, helping new users learn blockchain data analysis from scratch and become an on-chain data analyst master. 8 | 9 | 10 | # table of contents 11 | | **Id** | **English** | **Chinese** | 12 | |------------------|--------------------------------------------------------------------------------------------|----------------------------------------------------------------------------| 13 | | **Elementary** | --- | --- | 14 | | #0 | [become chain analyst](en/ch00/ch00-become-chain-analyst.md) | [成为链上数据分析师](zh/ch00/ch00-become-chain-analyst.md) | 15 | | #1 | [dune platform introduction](en/ch01/ch01-dune-platform-introduction.md) | [Dune平台简介](zh/ch01/ch01-dune-platform-introduction.md) | 16 | | #2 | [quickstart](en/ch02/ch02-quickstart.md) | [数据分析新手上路](zh/ch02/ch02-quickstart.md) | 17 | | #3 | [build first dashboard](en/ch03/ch03-build-first-dashboard.md) | [创建第一个Dune数据看板](zh/ch03/ch03-build-first-dashboard.md) | 18 | | #4 | [understanding tables](en/ch04/ch04-understanding-tables.md) | [熟悉数据表](zh/ch04/ch04-understanding-tables.md) | 19 | | #5 | [sql basics part1](en/ch05/ch05-sql-basics-part1.md) | [SQL基础(一)](zh/ch05/ch05-sql-basics-part1.md) | 20 | | #6 | [sql basics part2](en/ch06/ch06-sql-basics-part2.md) | [SQL基础(二)](zh/ch06/ch06-sql-basics-part2.md) | 21 | | #7 | [practice build lens dashboard part1](en/ch07/ch07-practice-build-lens-dashboard-part1.md) | [实践案例:制作Lens的数据看板(一)](zh/ch07/ch07-practice-build-lens-dashboard-part1.md) | 22 | | #8 | [practice build lens dashboard part2](en/ch08/ch08-practice-build-lens-dashboard-part2.md) | [实践案例:制作Lens的数据看板(二)](zh/ch08/ch08-practice-build-lens-dashboard-part2.md) | 23 | | **Intermediate** | ---- | ---- | 24 | | #9 | [useful queries part1](en/ch09/ch09-useful-queries-part1.md) | [常见查询一:ERC20代币价格](zh/ch09/ch09-useful-queries-part1.md) | 25 | | #10 | [useful queries part2](en/ch10/ch10-useful-queries-part2.md) | [常见查询二:代币的持有者、总供应量、账户余额](zh/ch10/ch10-useful-queries-part2.md) | 26 | | #11 | [useful queries part3](en/ch11/ch11-useful-queries-part3.md) | [常见查询三:自定义数据、数字序列、数组、JSON等](zh/ch11/ch11-useful-queries-part3.md) | 27 | | #12 | [nft analysis](en/ch12/ch12-nft-analysis.md) | [NFT数据分析](zh/ch12/ch12-nft-analysis.md) | 28 | | #13 | [lending analysis](en/ch13/ch13-lending-analysis.md) | [借贷协议数据分析](zh/ch13/ch13-lending-analysis.md) | 29 | | #14 | [defi analysis](en/ch14/ch14-defi-analysis.md) | [DeFi数据分析](zh/ch14/ch14-defi-analysis.md) | 30 | | #15 | [dunesql introduction](en/ch15/ch15-dunesql-introduction.md) | [Dune SQL 查询引擎入门](zh/ch15/ch15-dunesql-introduction.md) | 31 | | #16 | [blockchain analysis polygon](en/ch16/ch16-blockchain-analysis-polygon.md) | [Polygon区块链概况分析](zh/ch16/ch16-blockchain-analysis-polygon.md) | 32 | | #17 | [mev analysis uniswap](en/ch17/ch17-mev-analysis-uniswap.md) | [MEV数据分析——以Uniswap为例](zh/ch17/ch17-mev-analysis-uniswap.md) | 33 | | #18 | [uniswap multichain analysis](en/ch18/ch18-uniswap-multichain-analysis.md) | [Uniswap多链数据对比分析](zh/ch18/ch18-uniswap-multichain-analysis.md) | 34 | | #19 | [useful metrics](en/ch19/ch19-useful-metrics.md) | [各类常见指标分析](zh/ch19/ch19-useful-metrics.md) | 35 | | **Advanced** | --- | --- | 36 | | #20 | [network analysis](en/ch20/ch20-network-analysis.md) | [区块链网络分析](zh/ch20/ch20-network-analysis.md) | 37 | | #21 | [btc analysis](en/ch21/ch21-btc-analysis.md) | [BTC数据分析-以指标CDD为例](zh/ch21/ch21-btc-analysis.md) | 38 | | #22 | [how to build spellbook](en/ch22/ch22-how-to-build-spellbook.md) | [如何构建魔法表(Spellbook)](zh/ch22/ch22-how-to-build-spellbook.md) | 39 | | #23 | [how to build app use dune api](en/ch23/ch23-how-to-build-app-use-dune-api.md) | [使用Dune API创建应用程序](zh/ch23/ch23-how-to-build-app-use-dune-api.md) | 40 | | **Account Abstraction** | --- | --- | 41 | | #AA 01 | [explanation of account abstraction](ch24/ch24-explanation-of-account-abstraction.md) | | 42 | | #AA 02 | [account abstraction data analysis](ch25/ch25-account-abstraction-data-analysis.md) | | 43 | | #AA 03 | [AA aggregation table of EVM chains](ch26/ch26-AA-aggregation-table-of-EVM-chains.md) | | 44 | 45 | 46 | 47 | ## About Us 48 | 49 | [SixdegreeLab](https://twitter.com/SixdegreeLab) are a group of on-chain data enthusiasts. Our mission is to provide users with accurate on-chain data charts, analysis, and insights, and we are committed to popularizing on-chain data analysis. By establishing a community, writing tutorials, etc., train data analysts on the chain, output valuable analysis content, promote the community to build the data layer of the blockchain, and cultivate talents for the broad blockchain data application in the future. 50 | 51 | - website: [sixdegree.xyz](https://sixdegree.xyz) 52 | - twitter: [twitter.com/SixdegreeLab](https://twitter.com/SixdegreeLab) 53 | - dune: [dune.com/sixdegree](https://dune.com/sixdegree) -------------------------------------------------------------------------------- /SUMMARY.md: -------------------------------------------------------------------------------- 1 | * [简介](README.md) 2 | * [#0 成为链上数据分析师](00_introductions/readme.md) 3 | 4 | ## 入门教程 5 | 6 | * [#1 Dune平台简介](01_platform/dune.md) 7 | * [#2 数据分析新手上路](02_get_started/readme.md) 8 | * [#3 创建第一个Dune数据看板](03_build_first_dashboard/readme.md) 9 | * [#4 熟悉数据表](04_data_tables/readme.md) 10 | * [#5 SQL基础(一)](05_sql_syntax/sql_syntax_1.md) 11 | * [#6 实践案例:制作Lens Protocol的数据看板(一)](06_pratical_case_lens_protocol/readme.md) 12 | * [#7 实践案例:制作Lens Protocol的数据看板(二)](06_pratical_case_lens_protocol/lens_part2.md) 13 | * [#8 SQL基础(二)](05_sql_syntax/sql_syntax_2.md) 14 | 15 | ## 中级教程 16 | 17 | * [#9 常见查询一:ERC20代币价格](07_common_query_samples/readme.md) 18 | * [#10 常见查询二:代币的持有者、总供应量、账户余额](07_common_query_samples/common_queries_part2.md) 19 | * [#11 常见查询三:自定义数据、数字序列、数组、JSON等](07_common_query_samples/common_queries_part3.md) 20 | * [#12 NFT数据分析](08_nft_analysis/readme.md) 21 | * [#13 借贷协议数据分析](09_Lending_Analysis/readme.md) 22 | * [#14 DeFi数据分析](10_defi/readme.md) 23 | * [#15 Dune SQL 查询引擎入门](11_dune_sql/readme.md) 24 | * [#16 Polygon区块链概况分析](13_polygon/readme.md) 25 | * [#17 MEV数据分析——以Uniswap为例](14_MEV_UniswapV3/readme.md) 26 | * [#18 Uniswap 多链数据对比分析](15_uniswap_multichain/readme.md) 27 | * [#19 各类常见指标分析(一)](19_common_index/readme.md) 28 | 29 | ## 高级教程 30 | 31 | * [#20 区块链网络分析](12_Network_Analytics/Network_Analytics.md) 32 | * [#21 如何设计Dashboard - 以BTC指标CDD为例](21_how_to_design_a_dashboard/readme.md) 33 | * [#22 如何构建魔法表(Spell)](22_cast_a_spell/readme.md) 34 | * [#23 使用Dune API创建应用程序](23_app_with_dune_api/readme.md) 35 | -------------------------------------------------------------------------------- /en/SUMMARY.md: -------------------------------------------------------------------------------- 1 | ## Introduction 2 | - [Introduction](readme.md) 3 | - [#0 Become onchain analyst](ch00/ch00-become-chain-analyst.md) 4 | 5 | ## Elementary 6 | 7 | - [#1 Dune platform introduction](ch01/ch01-dune-platform-introduction.md) 8 | - [#2 Quick start](ch02/ch02-quickstart.md) 9 | - [#3 Build first dashboard](ch03/ch03-build-first-dashboard.md) 10 | - [#4 Understanding tables](ch04/ch04-understanding-tables.md) 11 | - [#5 SQL basics part1](ch05/ch05-sql-basics-part1.md) 12 | - [#6 SQL basics part2](ch06/ch06-sql-basics-part2.md) 13 | - [#7 Practice - build lens dashboard part1](ch07/ch07-practice-build-lens-dashboard-part1.md) 14 | - [#8 Practice - build lens dashboard part2](ch08/ch08-practice-build-lens-dashboard-part2.md) 15 | 16 | ## Intermediate 17 | - [#9 Useful queries part1](ch09/ch09-useful-queries-part1.md) 18 | - [#10 Useful queries part2](ch10/ch10-useful-queries-part2.md) 19 | - [#11 Useful queries part3](ch11/ch11-useful-queries-part3.md) 20 | - [#12 NFT analysis](ch12/ch12-nft-analysis.md) 21 | - [#13 Lending analysis](ch13/ch13-lending-analysis.md) 22 | - [#14 DeFi analysis](ch14/ch14-defi-analysis.md) 23 | - [#15 Introduction to DuneSQL ](ch15/ch15-dunesql-introduction.md) 24 | - [#16 Blockchain analysis - polygon](ch16/ch16-blockchain-analysis-polygon.md) 25 | - [#17 MEV analysis - uniswap](ch17/ch17-mev-analysis-uniswap.md) 26 | - [#18 Uniswap multichain analysis](ch18/ch18-uniswap-multichain-analysis.md) 27 | - [#19 Useful metrics](ch19/ch19-useful-metrics.md) 28 | 29 | ## Advanced 30 | - [#20 Network analysis](ch20/ch20-network-analysis.md) 31 | - [#21 BTC analysis](ch21/ch21-btc-analysis.md) 32 | - [#22 How to build Spellbook](ch22/ch22-how-to-build-spellbook.md) 33 | - [#23 How to build app use dune api](ch23/ch23-how-to-build-app-use-dune-api.md) 34 | 35 | ## Account Abstraction 36 | - [#AA 01 Explanation of account abstraction](ch24/ch24-explanation-of-account-abstraction.md) 37 | - [#AA 02 Account abstraction data analysis](ch25/ch25-account-abstraction-data-analysis.md) 38 | - [#AA 03 AA aggregation table of EVM chains](ch26/ch26-AA-aggregation-table-of-EVM-chains.md) -------------------------------------------------------------------------------- /en/assets/bookcover-en.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/assets/bookcover-en.pdf -------------------------------------------------------------------------------- /en/assets/bookcover-en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/assets/bookcover-en.png -------------------------------------------------------------------------------- /en/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/assets/logo.png -------------------------------------------------------------------------------- /en/ch00/img/ch00_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_01.jpg -------------------------------------------------------------------------------- /en/ch00/img/ch00_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_01.png -------------------------------------------------------------------------------- /en/ch00/img/ch00_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_02.jpg -------------------------------------------------------------------------------- /en/ch00/img/ch00_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_03.jpg -------------------------------------------------------------------------------- /en/ch00/img/ch00_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_03.png -------------------------------------------------------------------------------- /en/ch00/img/ch00_04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_04.jpg -------------------------------------------------------------------------------- /en/ch00/img/ch00_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_04.png -------------------------------------------------------------------------------- /en/ch00/img/ch00_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_05.jpg -------------------------------------------------------------------------------- /en/ch00/img/ch00_06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_06.jpg -------------------------------------------------------------------------------- /en/ch00/img/ch00_07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_07.jpg -------------------------------------------------------------------------------- /en/ch00/img/ch00_08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_08.jpg -------------------------------------------------------------------------------- /en/ch00/img/ch00_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_08.png -------------------------------------------------------------------------------- /en/ch00/img/ch00_09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_09.jpg -------------------------------------------------------------------------------- /en/ch00/img/ch00_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_09.png -------------------------------------------------------------------------------- /en/ch00/img/ch00_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_10.jpg -------------------------------------------------------------------------------- /en/ch00/img/ch00_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_11.jpg -------------------------------------------------------------------------------- /en/ch00/img/ch00_data-process.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_data-process.png -------------------------------------------------------------------------------- /en/ch00/img/ch00_scam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_scam.png -------------------------------------------------------------------------------- /en/ch00/img/ch00_support.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_support.png -------------------------------------------------------------------------------- /en/ch00/img/ch00_xen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch00/img/ch00_xen.png -------------------------------------------------------------------------------- /en/ch01/ch01-dune-platform-introduction.md: -------------------------------------------------------------------------------- 1 | # 01 Introduction to the Dune Platform # 2 | As mentioned earlier, from the perspective of the data stack, 3 | blockchain data products can be divided into three categories: 4 | `data sources`, `data development tools`, and `data apps`. 5 | Directly accessing data sources is costly and more difficult, 6 | while data apps are fixed. If we want to analyze data, 7 | we need a platform that does not require a large amount of development work 8 | and can access various data. Among these data development tools, 9 | the most convenient is the Dune platform. 10 | 11 | [Dune](https://dune.com/) is an Onchain data analysis platform. 12 | Users can write SQL statements on the platform, filter out the data they need 13 | from the blockchain database parsed by Dune, and generate corresponding charts 14 | to form a dashboard. 15 | 16 | All query examples and related queriesn in this tutorial - except for complete data dashboards and third-party account queries - have been tested and passed using the Dune SQL query engine. Dune has announced that it will fully transition to the Dune SQL engine within 2023, so that everyone can directly learn the syntax of Dune SQL. 17 | 18 | ## Webpage Introduction 19 | 20 | After registering on the Dune platform, the main interface of the platform is as follows, 21 | with specific functions: 22 | 23 | - **Discover**: show various trends on the platform 24 | - Dashboard: displays the most followed dashboards. 25 | On this page, you can search for keywords of interest in the search box 26 | in the upper left corner/right side. This is the most important part. 27 | You can click on a dashboard to view other people's dashboards. 28 | - **Queries**: displays the most followed queries. On this page, 29 | you can search for keywords of interest in the search box in the 30 | upper left corner/right side. 31 | - Wizards: ranking of users with the highest collection volume on the platform. 32 | - Teams: ranking of teams with the highest collection volume on the platform. 33 | - **Favorites**: 34 | - Dashboard: your favorite dashboards, which can be searched in the search box 35 | on the right. 36 | - Queries: your favorite queries, which can be searched in the search box on the right. 37 | - **My Creations**: 38 | - Dashboard: dashboards you created, which can be searched in the search box 39 | on the right. If you have a team, the dashboard can be among different teams. 40 | - Queries: queries you created, which can be searched in the search box on the right. 41 | - Contracts: contracts you submitted for parsing, which can be searched 42 | in the search box on the right. 43 | - **New Query**: create a new query. 44 | - **Others**: 45 | - Docs: link to the help documentation. 46 | - Discord: link to the community discussion group. 47 | 48 | ![](img/ch01_main-page.png) 49 | 50 | ## Core Features 51 | 52 | ### Query 53 | 54 | After clicking on `New Query`, you will enter a new interface, 55 | which consists of three main parts: 56 | 57 | - Database Directory: On the left, there is a `data search box` and a `data list`. 58 | Expanding the data list will reveal each specific table. 59 | (Note: The version displayed when you first enter is v1, which is deprecated. 60 | Please select `Dune Engine v2(SparkSQL)` from the dropdown.) 61 | - Raw: Contains the original data tables of various blockchains, 62 | mainly including block information (blocks), transaction information (transactions), 63 | event log information (logs), and traces tables, etc. 64 | The currently supported chains include: Ethereum, Polygon, Arbitrum, Solana, Optimism, 65 | Gnosis Chain, Avalanche. 66 | - Decoded projects: Directly parsed tables of various projects/contracts. 67 | The parsed tables will be clearer and easier to understand. 68 | If you are analyzing specific projects, it would be more suitable to use the tables 69 | here. 70 | - Spells: Comprehensive data tables extracted from raw and Decoded projects, 71 | such as Dex, NFT, ERC20, etc. 72 | - Community: Data tables contributed by community users. 73 | 74 | - Code Editor: Located in the upper right black area, 75 | it is used for writing your own SQL statements. 76 | After writing, you can click `Run` in the lower right corner to execute. 77 | - Results & Chart Visualization: Located in the lower right, 78 | the query results will be displayed in `Query results`, 79 | and you can sequentially create new sub-visualization pages afterwards. 80 | 81 | ![](img/ch01_query-page.png) 82 | 83 | Queries on the platform can be forked, allowing you to copy someone else's query 84 | to your own account for modification and editing. 85 | 86 | **Spellbook** 87 | 88 | The spellbook is a very important data table on the Dune platform. It is a series 89 | of processed data tables contributed by community users. You can contribute your 90 | own defined data tables on the GitHub 91 | page [duneanalytics/spellbook](https://github.com/duneanalytics/spellbook). 92 | The Dune platform will generate corresponding data in the background based on 93 | this definition. In the frontend page shown above, you can directly use these 94 | predefined data tables. The definitions and field meanings of these data tables 95 | can be viewed here: [https://spellbook-docs.dune.com/#!/overview](https://spellbook-docs.dune.com/#!/overview) 96 | 97 | At present, hundreds of various tables have been contributed by community users 98 | in the spellbook, such as nft.trades, dex.trades, tokens.erc20, etc. 99 | 100 | ![](img/ch01_spellbook.png) 101 | 102 | **Parameters** 103 | 104 | In the query, you can also set a variable input parameter to change the query conditions, 105 | such as setting different user addresses or setting different time ranges. 106 | The parameter setting is embedded in the query statement in the form of`'{{parameter name}}'`. 107 | 108 | ![](img/ch01_query-params.png) 109 | 110 | ### Visualization 111 | 112 | In chart visualization, the Dune platform provides scatter plots, bar charts, 113 | line charts, pie charts, area charts, counters, and two-dimensional data tables. 114 | After executing the query and getting the results, you can choose `New visualization` 115 | to create a new visualization chart. In the chart, you can choose the data fields 116 | you want to display, and you can immediately get the corresponding visualization chart. 117 | The chart supports displaying data in multiple dimensions. 118 | The area below the chart is where you set the chart style, including name, axis format, 119 | color, etc. 120 | 121 | ![](img/ch01_visualization.png) 122 | 123 | ### Dashboard 124 | 125 | The individual chart visualizations from the previous section can be 126 | flexibly combined in the dashboard to form an aggregated data indicator board 127 | with explanations, allowing for a more comprehensive perspective. 128 | In `Discover`, find `New Dashboard` to create a new dashboard. 129 | In the dashboard, you can add all the charts generated from queries, 130 | and you can add text information in markdown format. 131 | Each visualization widget can be dragged and resized. 132 | 133 | ![](img/ch01_dashboard.png) 134 | 135 | ### Dune Related Resources 136 | - Official Resources 137 | - [Dune Official Documentation](https://dune.com/docs/) 138 | - [Discord](https://discord.com/invite/ErrzwBz) 139 | - [Youtube](https://www.youtube.com/channel/UCPrm9d2hLd_YxSExH7oRyAg) 140 | - [Github Spellbook](https://github.com/duneanalytics/spellbook) 141 | - Community Tutorials 142 | - [Dune Data Dashboard Zero-Basic Minimalist Entry Guide](https://twitter.com/gm365/status/1525013340459716608) 143 | - [Dune Entry Guide - Make an NFT Dashboard with Pooly as an Example](https://mirror.xyz/0xa741296A1E9DDc3D6Cf431B73C6225cFb5F6693a/iVzr5bGcGKKCzuvl902P05xo7fxc2qWfqfIHwmCXDI4) 144 | - [Build Your Dune V1 Analytics Dashboard from 0 to 1 (Basic)](https://mirror.xyz/0xbi.eth/6cbedGOx0GwZdvuxHeyTAgn333jaT34y-2qryvh8Fio) 145 | - [Build Your Dune V1 Analytics Dashboard from 0 to 1 (Practical)](https://mirror.xyz/0xbi.eth/603BIaKXn7s2_7A84oayY_Fn5XUPh6zDsv2OlQTdzCg) 146 | - [Build Your Dune V1 Analytics Dashboard from 0 to 1 (Common Table Structures)](https://mirror.xyz/0xbi.eth/uSr336PzXtqMuE_LPBewbJ1CHN2oUs40-TDET2rnkqU) 147 | 148 | 149 | ## About Us 150 | 151 | `Sixdegree` is a professional onchain data analysis team Our mission is to provide users with accurate onchain data charts, analysis, and insights. We are committed to popularizing onchain data analysis. By building a community and writing tutorials, among other initiatives, we train onchain data analysts, output valuable analysis content, promote the community to build the data layer of the blockchain, and cultivate talents for the broad future of blockchain data applications. Welcome to the community exchange! 152 | 153 | - Website: [sixdegree.xyz](https://sixdegree.xyz) 154 | - Email: [contact@sixdegree.xyz](mailto:contact@sixdegree.xyz) 155 | - Twitter: [twitter.com/SixdegreeLab](https://twitter.com/SixdegreeLab) 156 | - Dune: [dune.com/sixdegree](https://dune.com/sixdegree) 157 | - Github: [https://github.com/SixdegreeLab](https://github.com/SixdegreeLab) 158 | 159 | 160 | -------------------------------------------------------------------------------- /en/ch01/img/ch01_dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch01/img/ch01_dashboard.png -------------------------------------------------------------------------------- /en/ch01/img/ch01_main-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch01/img/ch01_main-page.png -------------------------------------------------------------------------------- /en/ch01/img/ch01_query-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch01/img/ch01_query-page.png -------------------------------------------------------------------------------- /en/ch01/img/ch01_query-params.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch01/img/ch01_query-params.png -------------------------------------------------------------------------------- /en/ch01/img/ch01_spellbook-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch01/img/ch01_spellbook-1.png -------------------------------------------------------------------------------- /en/ch01/img/ch01_spellbook-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch01/img/ch01_spellbook-2.png -------------------------------------------------------------------------------- /en/ch01/img/ch01_spellbook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch01/img/ch01_spellbook.png -------------------------------------------------------------------------------- /en/ch01/img/ch01_visualization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch01/img/ch01_visualization.png -------------------------------------------------------------------------------- /en/ch03/img/ch03_dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch03/img/ch03_dashboard.png -------------------------------------------------------------------------------- /en/ch03/img/ch03_image_00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch03/img/ch03_image_00.png -------------------------------------------------------------------------------- /en/ch03/img/ch03_image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch03/img/ch03_image_01.png -------------------------------------------------------------------------------- /en/ch03/img/ch03_image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch03/img/ch03_image_02.png -------------------------------------------------------------------------------- /en/ch03/img/ch03_image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch03/img/ch03_image_03.png -------------------------------------------------------------------------------- /en/ch03/img/ch03_image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch03/img/ch03_image_04.png -------------------------------------------------------------------------------- /en/ch03/img/ch03_image_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch03/img/ch03_image_05.png -------------------------------------------------------------------------------- /en/ch03/img/ch03_image_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch03/img/ch03_image_06.png -------------------------------------------------------------------------------- /en/ch03/img/ch03_image_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch03/img/ch03_image_07.png -------------------------------------------------------------------------------- /en/ch03/img/ch03_image_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch03/img/ch03_image_08.png -------------------------------------------------------------------------------- /en/ch03/img/ch03_image_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch03/img/ch03_image_09.png -------------------------------------------------------------------------------- /en/ch04/img/ch04_5-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch04/img/ch04_5-1.jpg -------------------------------------------------------------------------------- /en/ch04/img/ch04_5-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch04/img/ch04_5-2.jpg -------------------------------------------------------------------------------- /en/ch04/img/ch04_5-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch04/img/ch04_5-3.jpg -------------------------------------------------------------------------------- /en/ch04/img/ch04_5-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch04/img/ch04_5-4.jpg -------------------------------------------------------------------------------- /en/ch04/img/ch04_image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch04/img/ch04_image_01.png -------------------------------------------------------------------------------- /en/ch04/img/ch04_image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch04/img/ch04_image_02.png -------------------------------------------------------------------------------- /en/ch04/img/ch04_image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch04/img/ch04_image_03.png -------------------------------------------------------------------------------- /en/ch04/img/ch04_image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch04/img/ch04_image_04.png -------------------------------------------------------------------------------- /en/ch05/img/ch05_group-by-case.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch05/img/ch05_group-by-case.png -------------------------------------------------------------------------------- /en/ch05/img/ch05_leftjoin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch05/img/ch05_leftjoin.png -------------------------------------------------------------------------------- /en/ch05/img/ch05_query-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch05/img/ch05_query-2.png -------------------------------------------------------------------------------- /en/ch05/img/ch05_query-page-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch05/img/ch05_query-page-1.png -------------------------------------------------------------------------------- /en/ch05/img/ch05_query-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch05/img/ch05_query-page.png -------------------------------------------------------------------------------- /en/ch05/img/ch05_query-page2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch05/img/ch05_query-page2.png -------------------------------------------------------------------------------- /en/ch05/img/ch05_query-page3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch05/img/ch05_query-page3.png -------------------------------------------------------------------------------- /en/ch05/img/ch05_query-page4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch05/img/ch05_query-page4.png -------------------------------------------------------------------------------- /en/ch05/img/ch05_query-page5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch05/img/ch05_query-page5.png -------------------------------------------------------------------------------- /en/ch06/img/ch06_part_2_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch06/img/ch06_part_2_01.png -------------------------------------------------------------------------------- /en/ch06/img/ch06_part_2_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch06/img/ch06_part_2_02.png -------------------------------------------------------------------------------- /en/ch06/img/ch06_part_2_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch06/img/ch06_part_2_03.png -------------------------------------------------------------------------------- /en/ch07/img/ch07_image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch07/img/ch07_image_01.png -------------------------------------------------------------------------------- /en/ch07/img/ch07_image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch07/img/ch07_image_02.png -------------------------------------------------------------------------------- /en/ch07/img/ch07_image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch07/img/ch07_image_03.png -------------------------------------------------------------------------------- /en/ch07/img/ch07_image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch07/img/ch07_image_04.png -------------------------------------------------------------------------------- /en/ch07/img/ch07_image_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch07/img/ch07_image_05.png -------------------------------------------------------------------------------- /en/ch07/img/ch07_image_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch07/img/ch07_image_06.png -------------------------------------------------------------------------------- /en/ch07/img/ch07_image_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch07/img/ch07_image_07.png -------------------------------------------------------------------------------- /en/ch07/img/ch07_image_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch07/img/ch07_image_08.png -------------------------------------------------------------------------------- /en/ch08/img/ch08_image_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch08/img/ch08_image_09.png -------------------------------------------------------------------------------- /en/ch08/img/ch08_image_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch08/img/ch08_image_10.png -------------------------------------------------------------------------------- /en/ch08/img/ch08_image_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch08/img/ch08_image_11.png -------------------------------------------------------------------------------- /en/ch08/img/ch08_image_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch08/img/ch08_image_12.png -------------------------------------------------------------------------------- /en/ch08/img/ch08_image_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch08/img/ch08_image_13.png -------------------------------------------------------------------------------- /en/ch08/img/ch08_image_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch08/img/ch08_image_14.png -------------------------------------------------------------------------------- /en/ch08/img/ch08_image_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch08/img/ch08_image_15.png -------------------------------------------------------------------------------- /en/ch08/img/ch08_image_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch08/img/ch08_image_16.png -------------------------------------------------------------------------------- /en/ch08/img/ch08_image_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch08/img/ch08_image_17.png -------------------------------------------------------------------------------- /en/ch08/img/ch08_image_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch08/img/ch08_image_18.png -------------------------------------------------------------------------------- /en/ch08/img/ch08_image_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch08/img/ch08_image_19.png -------------------------------------------------------------------------------- /en/ch08/img/ch08_image_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch08/img/ch08_image_20.png -------------------------------------------------------------------------------- /en/ch08/img/ch08_image_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch08/img/ch08_image_21.png -------------------------------------------------------------------------------- /en/ch09/img/ch09_image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch09/img/ch09_image_01.png -------------------------------------------------------------------------------- /en/ch09/img/ch09_image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch09/img/ch09_image_02.png -------------------------------------------------------------------------------- /en/ch10/img/ch10_image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch10/img/ch10_image_03.png -------------------------------------------------------------------------------- /en/ch10/img/ch10_image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch10/img/ch10_image_04.png -------------------------------------------------------------------------------- /en/ch10/img/ch10_image_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch10/img/ch10_image_05.png -------------------------------------------------------------------------------- /en/ch10/img/ch10_image_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch10/img/ch10_image_06.png -------------------------------------------------------------------------------- /en/ch10/img/ch10_image_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch10/img/ch10_image_07.png -------------------------------------------------------------------------------- /en/ch11/img/ch11_image_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch11/img/ch11_image_08.png -------------------------------------------------------------------------------- /en/ch11/img/ch11_image_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch11/img/ch11_image_09.png -------------------------------------------------------------------------------- /en/ch11/img/ch11_image_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch11/img/ch11_image_10.png -------------------------------------------------------------------------------- /en/ch11/img/ch11_image_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch11/img/ch11_image_11.png -------------------------------------------------------------------------------- /en/ch11/img/ch11_image_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch11/img/ch11_image_12.png -------------------------------------------------------------------------------- /en/ch12/img/ch12_ERC-Standard.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch12/img/ch12_ERC-Standard.jpeg -------------------------------------------------------------------------------- /en/ch12/img/ch12_daily-trade-volune.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch12/img/ch12_daily-trade-volune.png -------------------------------------------------------------------------------- /en/ch12/img/ch12_dune-nft-related.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch12/img/ch12_dune-nft-related.png -------------------------------------------------------------------------------- /en/ch12/img/ch12_history-price.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch12/img/ch12_history-price.png -------------------------------------------------------------------------------- /en/ch12/img/ch12_nft-all-in-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch12/img/ch12_nft-all-in-one.png -------------------------------------------------------------------------------- /en/ch12/img/ch12_nft-transfer-etherscan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch12/img/ch12_nft-transfer-etherscan.png -------------------------------------------------------------------------------- /en/ch12/img/ch12_seaport1.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch12/img/ch12_seaport1.1.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_1.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_2.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_4.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_4.1.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_4.2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_4.2.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_arbscan1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_arbscan1.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_bank.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_bank.jpeg -------------------------------------------------------------------------------- /en/ch13/img/ch13_crv1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_crv1.jpg -------------------------------------------------------------------------------- /en/ch13/img/ch13_crv2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_crv2.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_dashboard.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_dashboard2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_dashboard2.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_dunedata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_dunedata.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_hf1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_hf1.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_hf2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_hf2.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_hf3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_hf3.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_loan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_loan.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_tvl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_tvl.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_tvl2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_tvl2.png -------------------------------------------------------------------------------- /en/ch13/img/ch13_ur.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_ur.jpg -------------------------------------------------------------------------------- /en/ch13/img/ch13_ur.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch13/img/ch13_ur.png -------------------------------------------------------------------------------- /en/ch14/img/ch14_image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch14/img/ch14_image_01.png -------------------------------------------------------------------------------- /en/ch14/img/ch14_image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch14/img/ch14_image_02.png -------------------------------------------------------------------------------- /en/ch14/img/ch14_image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch14/img/ch14_image_03.png -------------------------------------------------------------------------------- /en/ch14/img/ch14_image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch14/img/ch14_image_04.png -------------------------------------------------------------------------------- /en/ch14/img/ch14_image_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch14/img/ch14_image_05.png -------------------------------------------------------------------------------- /en/ch14/img/ch14_image_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch14/img/ch14_image_06.png -------------------------------------------------------------------------------- /en/ch15/img/ch15_image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch15/img/ch15_image_01.png -------------------------------------------------------------------------------- /en/ch15/img/ch15_image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch15/img/ch15_image_02.png -------------------------------------------------------------------------------- /en/ch16/img/ch16_image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch16/img/ch16_image_01.png -------------------------------------------------------------------------------- /en/ch16/img/ch16_image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch16/img/ch16_image_02.png -------------------------------------------------------------------------------- /en/ch16/img/ch16_image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch16/img/ch16_image_03.png -------------------------------------------------------------------------------- /en/ch16/img/ch16_image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch16/img/ch16_image_04.png -------------------------------------------------------------------------------- /en/ch16/img/ch16_image_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch16/img/ch16_image_05.png -------------------------------------------------------------------------------- /en/ch16/img/ch16_image_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch16/img/ch16_image_06.png -------------------------------------------------------------------------------- /en/ch16/img/ch16_image_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch16/img/ch16_image_07.png -------------------------------------------------------------------------------- /en/ch16/img/ch16_image_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch16/img/ch16_image_08.png -------------------------------------------------------------------------------- /en/ch16/img/ch16_image_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch16/img/ch16_image_09.png -------------------------------------------------------------------------------- /en/ch16/img/ch16_image_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch16/img/ch16_image_10.png -------------------------------------------------------------------------------- /en/ch17/img/ch17_1.jpg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /en/ch17/img/ch17_JIT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_JIT.png -------------------------------------------------------------------------------- /en/ch17/img/ch17_JITv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_JITv.png -------------------------------------------------------------------------------- /en/ch17/img/ch17_arb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_arb.png -------------------------------------------------------------------------------- /en/ch17/img/ch17_arb_protocol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_arb_protocol.png -------------------------------------------------------------------------------- /en/ch17/img/ch17_dune_com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_dune_com.jpg -------------------------------------------------------------------------------- /en/ch17/img/ch17_dune_fb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_dune_fb.jpg -------------------------------------------------------------------------------- /en/ch17/img/ch17_ep_mev_ov.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_ep_mev_ov.jpg -------------------------------------------------------------------------------- /en/ch17/img/ch17_fr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_fr.jpg -------------------------------------------------------------------------------- /en/ch17/img/ch17_fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_fr.png -------------------------------------------------------------------------------- /en/ch17/img/ch17_mempool.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_mempool.jpg -------------------------------------------------------------------------------- /en/ch17/img/ch17_mev_process.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_mev_process.jpg -------------------------------------------------------------------------------- /en/ch17/img/ch17_mev_sum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_mev_sum.png -------------------------------------------------------------------------------- /en/ch17/img/ch17_mev_supchain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_mev_supchain.jpg -------------------------------------------------------------------------------- /en/ch17/img/ch17_mevsumchat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_mevsumchat.png -------------------------------------------------------------------------------- /en/ch17/img/ch17_swa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_swa.png -------------------------------------------------------------------------------- /en/ch17/img/ch17_the_block.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_the_block.jpg -------------------------------------------------------------------------------- /en/ch17/img/ch17_uniswap_bot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch17/img/ch17_uniswap_bot.png -------------------------------------------------------------------------------- /en/ch18/img/ch18_image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch18/img/ch18_image_01.png -------------------------------------------------------------------------------- /en/ch18/img/ch18_image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch18/img/ch18_image_02.png -------------------------------------------------------------------------------- /en/ch18/img/ch18_image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch18/img/ch18_image_03.png -------------------------------------------------------------------------------- /en/ch18/img/ch18_image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch18/img/ch18_image_04.png -------------------------------------------------------------------------------- /en/ch18/img/ch18_image_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch18/img/ch18_image_05.png -------------------------------------------------------------------------------- /en/ch18/img/ch18_image_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch18/img/ch18_image_06.png -------------------------------------------------------------------------------- /en/ch18/img/ch18_image_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch18/img/ch18_image_07.png -------------------------------------------------------------------------------- /en/ch18/img/ch18_image_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch18/img/ch18_image_08.png -------------------------------------------------------------------------------- /en/ch18/img/ch18_image_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch18/img/ch18_image_09.png -------------------------------------------------------------------------------- /en/ch19/img/ch19_image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch19/img/ch19_image_01.png -------------------------------------------------------------------------------- /en/ch19/img/ch19_image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch19/img/ch19_image_02.png -------------------------------------------------------------------------------- /en/ch19/img/ch19_image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch19/img/ch19_image_03.png -------------------------------------------------------------------------------- /en/ch19/img/ch19_image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch19/img/ch19_image_04.png -------------------------------------------------------------------------------- /en/ch19/img/ch19_image_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch19/img/ch19_image_05.png -------------------------------------------------------------------------------- /en/ch20/img/ch20_01-Graph-Raw-Relation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch20/img/ch20_01-Graph-Raw-Relation.png -------------------------------------------------------------------------------- /en/ch20/img/ch20_02-graph-raw-label.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch20/img/ch20_02-graph-raw-label.png -------------------------------------------------------------------------------- /en/ch20/img/ch20_20-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch20/img/ch20_20-3.png -------------------------------------------------------------------------------- /en/ch21/img/ch21_funnel_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch21/img/ch21_funnel_info.png -------------------------------------------------------------------------------- /en/ch21/img/ch21_historical_trend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch21/img/ch21_historical_trend.png -------------------------------------------------------------------------------- /en/ch21/img/ch21_hour.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch21/img/ch21_hour.png -------------------------------------------------------------------------------- /en/ch21/img/ch21_input_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch21/img/ch21_input_info.png -------------------------------------------------------------------------------- /en/ch21/img/ch21_output_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch21/img/ch21_output_info.png -------------------------------------------------------------------------------- /en/ch21/img/ch21_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch21/img/ch21_overview.png -------------------------------------------------------------------------------- /en/ch21/img/ch21_recent_trend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch21/img/ch21_recent_trend.png -------------------------------------------------------------------------------- /en/ch21/img/ch21_tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch21/img/ch21_tool.png -------------------------------------------------------------------------------- /en/ch21/img/ch21_transaction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch21/img/ch21_transaction.png -------------------------------------------------------------------------------- /en/ch21/img/ch21_wallet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch21/img/ch21_wallet.png -------------------------------------------------------------------------------- /en/ch22/img/ch22_image_00.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch22/img/ch22_image_00.jpg -------------------------------------------------------------------------------- /en/ch22/img/ch22_image_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch22/img/ch22_image_01.jpg -------------------------------------------------------------------------------- /en/ch22/img/ch22_image_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch22/img/ch22_image_02.jpg -------------------------------------------------------------------------------- /en/ch22/img/ch22_image_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch22/img/ch22_image_03.jpg -------------------------------------------------------------------------------- /en/ch23/ch23-how-to-build-app-use-dune-api.md: -------------------------------------------------------------------------------- 1 | # 23 Creating an Application Using Dune API 2 | 3 | ## Project Overview 4 | 5 | On April 25th, Dune officially opened up API access to all user levels, including free users. Now, even free users can access the Dune API. This tutorial provides a demo that demonstrates how to develop an application around the Dune API. 6 | 7 | The demo application is deployed here: [Watcher Demo](https://dev.lentics.xyz/). 8 | 9 | The demo application was completed in early March but due to various reasons, the tutorial has been delayed until now. We apologize for the delay. The project code was collaboratively completed by our colleagues George, Ken, and Benny. We extend our thanks to them. 10 | 11 | Please note that the above demo application may not work continuously due to API Key limitations. We recommend forking the project and deploying it yourself using your own API Key to further explore. 12 | 13 | The user interface of the project is shown in the following image: 14 | 15 | ![](img/ch23_watcher01.jpg) 16 | 17 | ## Introduction to Dune API Usage 18 | 19 | Dune API is executed and results are obtained based on the Query ID. Each saved Query can automatically be converted into an API access endpoint. In the latest version of the Query Editor interface, you simply need to write the query, test its functionality, save the query, and then click the "API Endpoint" button to obtain the API endpoint URL to access the query results. 20 | 21 | ``` 22 | https://api.dune.com/api/v1/query/2408388/results?api_key= 23 | ``` 24 | 25 | This is the simplest way to access the result set of a saved query through the API. 26 | 27 | ![](img/ch23_watcher02.jpg) 28 | 29 | The execution result of a Query is cached by default. If you do not actively execute the Query again, the API endpoint obtained above will provide the cached result of the last execution. Typically, our applications need to actively execute queries to obtain the latest data that meets the conditions, rather than repeatedly obtaining cached result sets. This is especially true for monitoring-type applications. Therefore, we also need to access the "Execute" endpoint to execute the query and the "Status" endpoint to check the status of query execution. After receiving the information that the query has been executed, we can access the "Results" endpoint to obtain the data. 30 | 31 | A complete API call process includes executing the query, checking the query execution status, and obtaining the query results. Detailed explanations about Dune API can be found in the API documentation: [Dune API](https://dune.com/docs/api/api-reference/#latest-results-endpoint). 32 | 33 | ## Project Requirements 34 | 35 | In order to demonstrate the complete process of developing a project using Dune API as comprehensively as possible, the following main requirements points have been organized. 36 | 37 | The main function of this application is to provide a pure frontend application for monitoring the creation of new liquidity pools based on the Dune API, specifically for Uniswap V3. It uses a database to save the user's choice of monitored pool addresses and implements caching to avoid making API requests for exactly the same data. 38 | 39 | The application includes three main functionalities: 40 | 41 | 1. **New Pools** 42 | 43 | Returns a list of newly created liquidity pools that meet the selected blockchain and date range criteria. When calling the API, the user selects the blockchain name (in all lowercase) and the date parameters (YYYY-MM-DD, converted to specific dates based on user choices). 44 | 45 | 1. **Latest Swaps** 46 | 47 | Displays the latest 100 swap exchange records for a pool selected from the pool list in a new interface. The user enters this interface by clicking the "Latest Swap" link next to a specific pool from the previous step. When calling the API, the user provides the blockchain name, pool address, and the current hour value (YYYY-MM-DD HH:MI:SS, converted to specific date and hour values, e.g. "2023-02-27 09:00:00"). The API call returns the results, which are displayed in a list format. 48 | 49 | 3. **Large Swap Alerts** 50 | 51 | Allows the user to input a pool address (prompting the user to copy it from the pool list), and set a threshold for large swaps (e.g.1000USD). The application then calls the API every 5 minutes and generates an on-site alert if there are swap records that meet the specified condition. The user can set the pool address to monitor and the minimum swap amount in USD (currently providing three choices: 1000, 10000, and 100000). If the API returns data, it will be added to the on-site alert. A red badge in the navigation bar will indicate the number of unread alerts, and clicking it will display the list. After clicking on a single alert, it will be marked as read. 52 | 53 | ## Development Environment Setup 54 | 55 | ``` bash 56 | Copy code 57 | yarn dev 58 | ``` 59 | 60 | For other commands, refer to the `readme.md` file in the project's source code. 61 | 62 | ## Development Overview 63 | 64 | ### Project Creation 65 | 66 | The project is based on Next.js, using tailwindcss as the CSS framework, Axios as the fetcher, dexie for front-end data operations, and prisma for back-end data operations. 67 | 68 | ``` 69 | $ yarn create next-app 70 | $ yarn add tailwindcss autoprefixer postcss prisma -D 71 | $ yarn add axios dexie dexie-react-hooks @prisma/client 72 | ``` 73 | 74 | ### Initialize Schema 75 | 76 | ``` bash 77 | $ yarn prisma init --datasource-provider sqlite 78 | $ vim prisma/schema.prisma 79 | generator client { 80 | provider = "prisma-client-js" 81 | } 82 | 83 | datasource db { 84 | provider = "sqlite" 85 | url = env("DATABASE_URL") 86 | } 87 | 88 | model DuneQuery { 89 | id String @unique 90 | execution_id String 91 | createdAt DateTime @default(now()) 92 | updatedAt DateTime @updatedAt 93 | } 94 | 95 | $ yarn prisma migrate dev --name init 96 | $ yarn prisma generate 97 | ``` 98 | 99 | ### Encapsulate API Calls 100 | 101 | Add `lib/dune.ts` to encapsulate the three steps of executing the Dune API: 102 | 103 | ``` javascript 104 | export const executeQuery = async (id: string, parameters: any) => { 105 | // Generate a hash for the current execution query key, check and get the corresponding execution_id from sqlite. Remember to handle cache expiration. 106 | // ... 107 | }; 108 | 109 | export const executeStatus = async (id: string) => { 110 | // ... 111 | }; 112 | 113 | export const executeResults = async (id: string) => { 114 | // ... 115 | }; 116 | ``` 117 | 118 | ### Front-end Data Display 119 | 120 | In the `pages` directory, add a recursive function to check if `data.result` node exists to use for recursive calls. Trigger it in the `useEffect`. 121 | 122 | ### Code Deployment 123 | 124 | The deployment process is similar to a Next.js project. The initialization of the database is already placed in `package.json`: 125 | 126 | ``` json 127 | "scripts": { 128 | "dev": "prisma generate && prisma migrate dev && next dev", 129 | "build": "prisma generate && prisma migrate deploy && next build", 130 | "start": "next start" 131 | } 132 | ``` 133 | 134 | ### Writing SQL Queries for API 135 | 136 | API calls and their corresponding query information: 137 | 138 | - New Pools: https://dune.com/queries/2056212 139 | - Latest Swap: https://dune.com/queries/2056310 140 | - Alerts: https://dune.com/queries/2056547 141 | 142 | ### Important Functionality Points 143 | 144 | 1. Dune API requires executing `Execute Query ID` to obtain its `execution_id` before performing `status/results`. Handle cache expiration properly. 145 | 2. The front-end needs to make recursive calls to the system API to retrieve results. 146 | 147 | ## Dune API Documentation 148 | 149 | - Chinese Documentation: https://dune.com/docs/zh/api/ 150 | - Latest Version: https://dune.com/docs/api/ 151 | 152 | ## Project Code Repository 153 | 154 | The source code of the project is available here: [Uniswap New Pools Watcher](https://github.com/codingtalent/watcher) 155 | 156 | ## About Us 157 | 158 | `Sixdegree` is a professional onchain data analysis team Our mission is to provide users with accurate onchain data charts, analysis, and insights. We are committed to popularizing onchain data analysis. By building a community and writing tutorials, among other initiatives, we train onchain data analysts, output valuable analysis content, promote the community to build the data layer of the blockchain, and cultivate talents for the broad future of blockchain data applications. Welcome to the community exchange! 159 | 160 | - Website: [sixdegree.xyz](https://sixdegree.xyz) 161 | - Email: [contact@sixdegree.xyz](mailto:contact@sixdegree.xyz) 162 | - Twitter: [twitter.com/SixdegreeLab](https://twitter.com/SixdegreeLab) 163 | - Dune: [dune.com/sixdegree](https://dune.com/sixdegree) 164 | - Github: [https://github.com/SixdegreeLab](https://github.com/SixdegreeLab) 165 | -------------------------------------------------------------------------------- /en/ch23/img/ch23_watcher01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch23/img/ch23_watcher01.jpg -------------------------------------------------------------------------------- /en/ch23/img/ch23_watcher02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch23/img/ch23_watcher02.jpg -------------------------------------------------------------------------------- /en/ch24/img/erc4337-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch24/img/erc4337-flow.png -------------------------------------------------------------------------------- /en/ch24/img/etherscan-transaction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch24/img/etherscan-transaction.png -------------------------------------------------------------------------------- /en/ch24/img/event-AccountDeployed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch24/img/event-AccountDeployed.png -------------------------------------------------------------------------------- /en/ch24/img/event-UserOperationEvent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch24/img/event-UserOperationEvent.png -------------------------------------------------------------------------------- /en/ch24/img/execuate-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch24/img/execuate-flow.png -------------------------------------------------------------------------------- /en/ch25/img/bundler-rank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch25/img/bundler-rank.png -------------------------------------------------------------------------------- /en/ch25/img/bundler-revenue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch25/img/bundler-revenue.png -------------------------------------------------------------------------------- /en/ch25/img/daily-new-user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch25/img/daily-new-user.png -------------------------------------------------------------------------------- /en/ch25/img/daily-operation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch25/img/daily-operation.png -------------------------------------------------------------------------------- /en/ch25/img/paymaster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch25/img/paymaster.png -------------------------------------------------------------------------------- /en/ch25/img/wallet-factory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch25/img/wallet-factory.png -------------------------------------------------------------------------------- /en/ch26/ch26-AA-aggregation-table-of-EVM-chains.md: -------------------------------------------------------------------------------- 1 | # AA Aggregation Table of EVM Chains 2 | 3 | The `EntryPoint` contract of ERC4337 has been deployed on multiple EVM chains. You can view the list of all chains that have deployed the `EntryPoint` contract here: 4 | 5 | - v0.5: [https://blockscan.com/address/0x5fF137D4b0FDCD49DcA30c7CF57E578a026d2789](https://blockscan.com/address/0x5fF137D4b0FDCD49DcA30c7CF57E578a026d2789) 6 | - v0.6: [https://blockscan.com/address/0x0576a174D229E3cFA37253523E645A78A0C91B57](https://blockscan.com/address/0x0576a174D229E3cFA37253523E645A78A0C91B57) 7 | 8 | If you want to analyze the combined data of all EVM chains, it would clearly be too cumbersome to write the analyses one by one. Therefore, based on the spellbook of the dune platform, we have aggregated the data of the EntryPoint contracts of two versions on 9 major blockchains into two new data tables. These tables can currently be directly used on the dune platform for easy analysis. The specific source code can be found at: 9 | 10 | [https://github.com/duneanalytics/spellbook/tree/main/models/account_abstraction/erc4337](https://github.com/duneanalytics/spellbook/tree/main/models/account_abstraction/erc4337) 11 | 12 | - `account_abstraction_erc4337.userops`: contains UserOperationEvent event data from 9 chains, also joined with the transactions table and price table to get information like the bundler of each `userOp` and the gas fee paid for that transaction. 13 | - `account_abstraction_erc4337.account_deployed`: includes AccountDeployed event data from 9 chains 14 | 15 | 16 | Including blockchains: 17 | | | | 18 | |-----------|--------| 19 | | Ethereum | Base | 20 | | Polygon | BNB | 21 | | Arbitrum | Celo | 22 | | Optimism | Gnosis | 23 | | Avalanche | | 24 | 25 | 26 | ## userops 27 | 28 | For a detailed definition of `UserOps`, see the link below: 29 | 30 | [https://spellbook-docs.dune.com/#!/model/model.spellbook.account_abstraction_erc4337_userops](https://spellbook-docs.dune.com/#!/model/model.spellbook.account_abstraction_erc4337_userops) 31 | 32 | The aggregated table UserOps contains more information; the included field information is as follows: 33 | 34 | | COLUMN | DESCRIPTION | 35 | |---------------------|------------------------------------------------------------------------------------------------------------------------------------------| 36 | | blockchain | blockchain which EntryPoint was deployed | 37 | | version | version of the EntryPoint contract | 38 | | block_month | UTC event block date of each User Operation | 39 | | block_time | UTC event block time of each User Operation | 40 | | entrypoint_contract | the contract address of the EntryPoint | 41 | | tx_hash | Unique transaction hash value tied to each transaction on the User Operation | 42 | | sender | the sender(AA wallet address) that submmited the user operation | 43 | | userop_hash | Unique user operation hash | 44 | | success | weather the user operation is successfully execuated | 45 | | paymaster | the address that pay for the user operation gas fees on behalf of the user | 46 | | op_fee | The gas paid by sender or paymaster It depends on the chain gas setting | 47 | | op_fee_usd | The user operation gas (in usd) paid by sender or paymaster. | 48 | | bundler | address that bundle UserOps and submit those UserOps to the final on-chain by send a EOA transaction. It is the transaction from address | 49 | | tx_to | address where the bundler send the transaction | 50 | | gas_symbol | the gas symbol paied for the transaction | 51 | | tx_fee | the bundler paied gas value for the transaction | 52 | | tx_fee_usd | the bundler paied gas (in usd) value for the transaction | 53 | | beneficiary | the address where the bundler setting for the user operation pay for thier gas fee | 54 | 55 | 56 | The analysis will then be much simpler. For example, analyzing the distribution of user operations across 9 chains: 57 | 58 | ```sql 59 | with total_op as ( 60 | select blockchain as chain, * from account_abstraction_erc4337.userops 61 | ) 62 | select chain, count(*) as nums from total_op group by chain order by nums desc 63 | ``` 64 | 65 | ![](img/agg-userop-distribution.png) 66 | 67 | For another example, analyzing the monthly profit of bundlers: 68 | 69 | ```sql 70 | with agg_ops as ( 71 | select 72 | row_number() over (partition by tx_hash order by userop_hash) as rn 73 | , sum(op_fee) over(PARTITION by tx_hash) as op_fee 74 | , sum(op_fee_usd) over(PARTITION by tx_hash) as op_fee_usd 75 | , tx_fee 76 | , tx_fee_usd 77 | , blockchain as chain 78 | , gas_symbol as symbol 79 | , block_time 80 | from account_abstraction_erc4337.userops 81 | ) 82 | , revenue as ( 83 | select 84 | date_trunc('month', block_time) as dt 85 | , sum(op_fee_usd - tx_fee_usd) as BundlerRevenueUSD 86 | from agg_ops 87 | where rn = 1 88 | group by 1 89 | ) 90 | select dt, 91 | sum(BundlerRevenueUSD) as TotalBundlerRevenueUSD, 92 | case 93 | when sum(BundlerRevenueUSD)>=0 then 'Positive' 94 | when sum(BundlerRevenueUSD)<0 then 'Negative' 95 | end as PosNeg 96 | 97 | from revenue group by 1 98 | 99 | ``` 100 | 101 | ![](img/agg-monthly-revenue.png) 102 | 103 | ## account_deployed 104 | 105 | The information contained in account_deployed is relatively small, it just integrates the data of the two contract versions and several EVM chains together. 106 | See the link for detailed definitions: 107 | 108 | [https://spellbook-docs.dune.com/#!/model/model.spellbook.account_abstraction_erc4337_userops](https://spellbook-docs.dune.com/#!/model/model.spellbook.account_abstraction_erc4337_userops) 109 | 110 | The fields included in the aggregated account_deployed table are as follows: 111 | 112 | | COLUMN | DESCRIPTION | 113 | |---------------------|------------------------------------------------------------------------------| 114 | | blockchain | blockchain which EntryPoint was deployed | 115 | | version | version of the EntryPoint contract | 116 | | block_time | UTC event block time of each User Operation | 117 | | block_month | UTC event block date of each User Operation | 118 | | userop_hash | Unique user operation hash | 119 | | entrypoint_contract | the contract address of the EntryPoint | 120 | | tx_hash | Unique transaction hash value tied to each transaction on the User Operation | 121 | | sender | the sender(AA wallet address) that submmited the user operation | 122 | | paymaster | the address that pay for the user operation gas fees on behalf of the user | 123 | | factory | who can create a new AA Wallet. It's smart contract address 124 | 125 | 126 | Using `account_deployed` aggregated tables makes analysis simpler as well. For example, getting the number of wallet factories on each chain: 127 | 128 | ``` sql 129 | with total_op as ( 130 | select blockchain as chain, * from account_abstraction_erc4337.account_deployed 131 | ) 132 | select chain, count(distinct factory) as Factories from total_op group by 1 order by 2 desc 133 | ``` 134 | 135 | ![](img/agg-account-deployed.png) 136 | 137 | For complete examples, please refer to the following link. This dashboard contains analyses of various aspects of `EntryPoint`: 138 | 139 | [https://dune.com/sixdegree/account-abstraction-overview](https://dune.com/sixdegree/account-abstraction-overview) 140 | -------------------------------------------------------------------------------- /en/ch26/img/agg-account-deployed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch26/img/agg-account-deployed.png -------------------------------------------------------------------------------- /en/ch26/img/agg-monthly-revenue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch26/img/agg-monthly-revenue.png -------------------------------------------------------------------------------- /en/ch26/img/agg-userop-distribution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/en/ch26/img/agg-userop-distribution.png -------------------------------------------------------------------------------- /en/pandock-build-pdf.sh: -------------------------------------------------------------------------------- 1 | # /bin/sh 2 | 3 | # requirements: 4 | # 1. docker pull pandoc/extra 5 | 6 | sudo docker run --rm \ 7 | --volume "$(pwd):/data" \ 8 | --user $(id -u):$(id -g) \ 9 | pandoc/extra \ 10 | --template 'eisvogel.tex' --listings \ 11 | --table-of-contents \ 12 | --variable colorlinks:yes \ 13 | -o books/MasteringOnchainAnalytics.pdf \ 14 | --resource-path ch00 \ 15 | --resource-path ch01 \ 16 | --resource-path ch02 \ 17 | --resource-path ch03 \ 18 | --resource-path ch04 \ 19 | --resource-path ch05 \ 20 | --resource-path ch06 \ 21 | --resource-path ch07 \ 22 | --resource-path ch08 \ 23 | --resource-path ch09 \ 24 | --resource-path ch10 \ 25 | --resource-path ch11 \ 26 | --resource-path ch12 \ 27 | --resource-path ch13 \ 28 | --resource-path ch14 \ 29 | --resource-path ch15 \ 30 | --resource-path ch16 \ 31 | --resource-path ch17 \ 32 | --resource-path ch18 \ 33 | --resource-path ch19 \ 34 | --resource-path ch20 \ 35 | --resource-path ch21 \ 36 | --resource-path ch22 \ 37 | --resource-path ch23 \ 38 | ch00/ch00-become-chain-analyst.md \ 39 | ch01/ch01-dune-platform-introduction.md \ 40 | ch02/ch02-quickstart.md \ 41 | ch03/ch03-build-first-dashboard.md \ 42 | ch04/ch04-understanding-tables.md \ 43 | ch05/ch05-sql-basics-part1.md \ 44 | ch06/ch06-sql-basics-part2.md \ 45 | ch07/ch07-practice-build-lens-dashboard-part1.md \ 46 | ch08/ch08-practice-build-lens-dashboard-part2.md \ 47 | ch09/ch09-useful-queries-part1.md \ 48 | ch10/ch10-useful-queries-part2.md \ 49 | ch11/ch11-useful-queries-part3.md \ 50 | ch12/ch12-nft-analysis.md \ 51 | ch13/ch13-lending-analysis.md \ 52 | ch14/ch14-defi-analysis.md \ 53 | ch15/ch15-dunesql-introduction.md \ 54 | ch16/ch16-blockchain-analysis-polygon.md \ 55 | ch17/ch17-mev-analysis-uniswap.md \ 56 | ch18/ch18-uniswap-multichain-analysis.md \ 57 | ch19/ch19-useful-metrics.md \ 58 | ch20/ch20-network-analysis.md \ 59 | ch21/ch21-btc-analysis.md \ 60 | ch22/ch22-how-to-build-spellbook.md \ 61 | ch23/ch23-how-to-build-app-use-dune-api.md -------------------------------------------------------------------------------- /en/readme.md: -------------------------------------------------------------------------------- 1 | 2 |

3 | book 4 |

5 | 6 | This is a series tutorials for blockchain analysis enthusiasts, helping new users learn blockchain data analysis from scratch and become an onchain data analyst master. 7 | 8 | - English Version: [Mastering Onchain Analytics](https://tutorial.sixdegree.xyz) 9 | - Chinese Version: [精通链上数据分析](https://tutorial.sixdegree.xyz/v/zh/) 10 | 11 | 12 | > Join & contribute: [https://github.com/SixdegreeLab/MasteringChainAnalytics](https://github.com/SixdegreeLab/MasteringChainAnalytics) 13 | 14 | 15 | ## Table of contents 16 | 17 | - **Introduction** 18 | - [Introduction](readme.md) 19 | - [#0 become onchain analyst](ch00/ch00-become-chain-analyst.md) 20 | - **Elementary** 21 | - [#1 dune platform introduction](ch01/ch01-dune-platform-introduction.md) 22 | - [#2 quickstart](ch02/ch02-quickstart.md) 23 | - [#3 build first dashboard](ch03/ch03-build-first-dashboard.md) 24 | - [#4 understanding tables](ch04/ch04-understanding-tables.md) 25 | - [#5 sql basics part1](ch05/ch05-sql-basics-part1.md) 26 | - [#6 sql basics part2](ch06/ch06-sql-basics-part2.md) 27 | - [#7 practice build lens dashboard part1](ch07/ch07-practice-build-lens-dashboard-part1.md) 28 | - [#8 practice build lens dashboard part2](ch08/ch08-practice-build-lens-dashboard-part2.md) 29 | - **Intermediate** 30 | - [#9 useful queries part1](ch09/ch09-useful-queries-part1.md) 31 | - [#10 useful queries part2](ch10/ch10-useful-queries-part2.md) 32 | - [#11 useful queries part3](ch11/ch11-useful-queries-part3.md) 33 | - [#12 nft analysis](ch12/ch12-nft-analysis.md) 34 | - [#13 lending analysis](ch13/ch13-lending-analysis.md) 35 | - [#14 defi analysis](ch14/ch14-defi-analysis.md) 36 | - [#15 dunesql introduction](ch15/ch15-dunesql-introduction.md) 37 | - [#16 blockchain analysis polygon](ch16/ch16-blockchain-analysis-polygon.md) 38 | - [#17 mev analysis uniswap](ch17/ch17-mev-analysis-uniswap.md) 39 | - [#18 uniswap multichain analysis](ch18/ch18-uniswap-multichain-analysis.md) 40 | - [#19 useful metrics](ch19/ch19-useful-metrics.md) 41 | - **Advanced** 42 | - [#20 network analysis](ch20/ch20-network-analysis.md) 43 | - [#21 btc analysis](ch21/ch21-btc-analysis.md) 44 | - [#22 how to build spellbook](ch22/ch22-how-to-build-spellbook.md) 45 | - [#23 how to build app use dune api](ch23/ch23-how-to-build-app-use-dune-api.md) 46 | - **Account Abstraction** 47 | - [#AA 01 explanation of account abstraction](ch24/ch24-explanation-of-account-abstraction.md) 48 | - [#AA 02 account abstraction data analysis](ch25/ch25-account-abstraction-data-analysis.md) 49 | - [#AA 03 AA aggregation table of EVM chains](ch26/ch26-AA-aggregation-table-of-EVM-chains.md) 50 | 51 | 52 | ## About Us 53 | 54 | `Sixdegree` is a professional onchain data analysis team Our mission is to provide users with accurate onchain data charts, analysis, and insights. We are committed to popularizing onchain data analysis. By building a community and writing tutorials, among other initiatives, we train onchain data analysts, output valuable analysis content, promote the community to build the data layer of the blockchain, and cultivate talents for the broad future of blockchain data applications. Welcome to the community exchange! 55 | 56 | - Website: [sixdegree.xyz](https://sixdegree.xyz) 57 | - Email: [contact@sixdegree.xyz](mailto:contact@sixdegree.xyz) 58 | - Twitter: [twitter.com/SixdegreeLab](https://twitter.com/SixdegreeLab) 59 | - Dune: [dune.com/sixdegree](https://dune.com/sixdegree) 60 | - Github: [https://github.com/SixdegreeLab](https://github.com/SixdegreeLab) 61 | 62 | ## Acknowledgements 63 | 64 | **Sponsor** 65 | 66 | This book is sponsored by the following institutions, really appreciate their strong support when writing this book. 67 | 68 | - [Ethereum Fundation](https://ethereum.foundation/) 69 | - [Dune Analytics](https://dune.com/) 70 | 71 | **Contributors** 72 | 73 | At the same time, there are many contributors to participate in this book. Thank you very much for your hard work. 74 | 75 | - george-taotaome, chenxsan, Brendan, 肖宁, g.c., ken, shell, yueyan, wodeche,Winkey -------------------------------------------------------------------------------- /zh/SUMMARY.md: -------------------------------------------------------------------------------- 1 | 2 | - [简介](readme.md) 3 | - [#0 成为链上数据分析师](ch00/ch00-become-chain-analyst.md) 4 | 5 | ## 入门教程 6 | - [#1 Dune平台简介](ch01/ch01-dune-platform-introduction.md) 7 | - [#2 数据分析新手上路](ch02/ch02-quickstart.md) 8 | - [#3 创建第一个Dune数据看板](ch03/ch03-build-first-dashboard.md) 9 | - [#4 熟悉数据表](ch04/ch04-understanding-tables.md) 10 | - [#5 SQL基础(一)](ch05/ch05-sql-basics-part1.md) 11 | - [#6 SQL基础(二)](ch06/ch06-sql-basics-part2.md) 12 | - [#7 实践案例:制作Lens看板(一)](ch07/ch07-practice-build-lens-dashboard-part1.md) 13 | - [#8 实践案例:制作Lens看板(二)](ch08/ch08-practice-build-lens-dashboard-part2.md) 14 | 15 | ## 中级教程 16 | - [#9 常见查询一:ERC20代币价格](ch09/ch09-useful-queries-part1.md) 17 | - [#10 常见查询二:代币的持有者、总供应量、账户余额](ch10/ch10-useful-queries-part2.md) 18 | - [#11 常见查询三:自定义数据、数字序列、数组、JSON等](ch11/ch11-useful-queries-part3.md) 19 | - [#12 NFT数据分析](ch12/ch12-nft-analysis.md) 20 | - [#13 借贷协议数据分析](ch13/ch13-lending-analysis.md) 21 | - [#14 DeFi数据分析](ch14/ch14-defi-analysis.md) 22 | - [#15 Dune SQL 查询引擎入门](ch15/ch15-dunesql-introduction.md) 23 | - [#16 Polygon区块链概况分析](ch16/ch16-blockchain-analysis-polygon.md) 24 | - [#17 MEV数据分析——以Uniswap为例](ch17/ch17-mev-analysis-uniswap.md) 25 | - [#18 Uniswap多链数据对比分析](ch18/ch18-uniswap-multichain-analysis.md) 26 | - [#19 各类常见指标分析](ch19/ch19-useful-metrics.md) 27 | 28 | ## 高级教程 29 | - [#20 区块链网络分析](ch20/ch20-network-analysis.md) 30 | - [#21 BTC数据分析-以指标CDD为例](ch21/ch21-btc-analysis.md) 31 | - [#22 如何构建魔法表(Spellbook)](ch22/ch22-how-to-build-spellbook.md) 32 | - [#23 使用Dune API创建应用程序](ch23/ch23-how-to-build-app-use-dune-api.md) 33 | -------------------------------------------------------------------------------- /zh/assets/bookcover-zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/assets/bookcover-zh.png -------------------------------------------------------------------------------- /zh/ch00/ch00-become-chain-analyst.md: -------------------------------------------------------------------------------- 1 | # 成为链上数据分析师#0 2 | ## TL;DR 3 | - 链上数据的丰富源于区块链技术的成熟和项目的创新 4 | - 掌握链上数据视角有助于减少信息差,在黑暗森林里前行多一层保护 5 | - 链上数据真实地反应了价值的流动,因此分析后的洞见更有价值 6 | - 数据分析提供一个可量化的视角最终去支撑决策,分析只是过程而不是目的 7 | - 好的数据分析来源于数据思维,需要加深行业理解,培养抽象事物的能力 8 | ## 什么是链上数据 9 | 大部分人刚接触区块链时都会得到这样的概念:区块链是个公开的、不可篡改的记账本,一切的转账、交易记录是透明可信的。然而这一功能并不是区块链的全部,只是最初我们从“点对点的电子现金系统”,也就是“记账本”这个角度出发的。随着智能合约的发展,区块链实际上正在成为一个大型的数据库,下图从架构对比了传统web2和web3应用的区别:智能合约代替了后端,区块链也承担起一部分数据库的功能。越来越多的链上项目涌现,我们在链上的交互越来越频繁,比如在DeFi协议里添加了多少流动性,mint了哪些NFT,甚至关注哪个社交账号记录都能上链,我们一切与区块链的交互都将被记录在这个数据库中,这些记录就属于链上数据。 10 | 11 | ![](img/01.jpg) 12 | 13 | **链上数据大致分为三类:** 14 | 1. 交易数据 15 | 如收发地址,转账金额,地址余额等 16 | 17 | 2. 区块数据 18 | 例如时间戳,矿工费,矿工奖励等 19 | 20 | 3. 智能合约代码 21 | 即区块链上的编码业务逻辑 22 | 23 | 链上数据分析就是从这三类数据中提取想要的信息进行解读。 从数据栈角度来看,区块链数据产品可以分为数据源、数据开发工具和数据app三类。 24 | 25 | ![](img/02.jpg) 26 | 27 | 灵活运用各类数据产品,会为我们在crypto世界提供崭新的视角。 28 | 29 | 虽然我们一直在说链上数据是公开透明的,但是我们很难直接读取那些数据,因为一笔简单的swap交易在链上看起来可能是这样的: 30 | 31 | ![](img/03.jpg) 32 | 33 | 我们能在区块链浏览器里看到一些原始链上数据,但是我的问题是想知道今天UniswapV3成交量是多少,这不解决我问题阿!我想看到的是下面这张图: 34 | 35 | ![](img/04.jpg) 36 | 37 | 链上原始数据并不能给我们答案,我们需要通过索引 (indexing),处理 (processing),存储 (storage) 等等一系列数据摄取 (ingestion) 的处理过程,再根据所提问题来聚合运算对应的数据,才能得到问题的答案。 38 | 39 | ![](img/data-process.png) 40 | 41 | 要从头做起,我们可能需要自己搭节点来接区块链数据,再作处理,但是这明显是非常耗时耗力的。还好,有许多数据平台,如Dune,Flipside,Footprint,他们将索引得到的原始链上数据,经过一系列处理后,存入由平台负责更新和管理的数据仓库,也就是说整个区块链数据被他们做成了好多张关系型数据表格,我们要做的就是从表格里选一些我们想要的数据构建我们的分析数据。更进一步地,有Nansen,Messari,DeBank这些数据类产品,不光整理好数据,还按照需求分门别类地封装起来,方便用户直接使用。 42 | 43 | |分类 | 应用示例| 44 | |--------|:---------------:| 45 | |数据应用 | Nansen,Messari,DeBank..| 46 | |数据平台 |Dune,FLipside,Footprint.. | 47 | |数据节点 | Infura,Quick Node..| 48 | 49 | ## 链上数据的重要性 50 | 随着链上生态的繁荣,丰富的交互行为带来了海量数据。这些链上数据对应着链上价值的流动,对这些数据的分析和根据分析而得出的洞察和见解变得极为有价值。通过链上透明且不会说谎的数据,我们可以推断交易者,甚至市场整体的心理状态和心理预期,从而帮助自身做更有利的决策,也可以在黑暗森林前行中时为自己提起一盏明灯,照亮前方保护自己。 51 | 52 | 以大家熟悉的DeFi协议流动性挖矿为例:你添加流动性收获了奖励,池子增加了深度,用户享受了更低的滑点,大家都有光明的未来,你安心地将钱锁在合约里。可是某一天,黑天鹅悄然而至,聪明钱消息灵通立马撤退,而你只是个普通投资者,等你看到负面新闻再想到去提款时,手里的奖励几乎分文不值,猛烈的无常损失让你保本都难,直呼区块链骗局。 53 | 54 | ![image](img/scam.png) 55 | 56 | 但如果你有个链上数据的视角,你可能会发现:协议TVL陡然下降,奖励的代币在Uniswap上抛量激增,换句话说,有聪明人得到消息或者发现不对,池子里的流动性变差钱在逃跑,大家都看跌代币疯狂出售,请问现在应该离场吗? 57 | 58 | 当然这只是个抽象且简单的举例,但是我想传递给大家的是:**普通投资者在Crypto这片黑暗丛林中,始终处于信息不对称的劣势地位。** 但是链上数据是透明且真实的。为什么大家很执着于追踪Nansen的Smart Money?因为有内幕的人不会把消息告诉你,但是信息会映射到链上行为,被真实地记录下来,我们所要做的就是细心地观察这个数据世界,通过捕捉链上细节,在一定程度上弥补信息差。 59 | 60 | DeFi summer之后,我们开始关心协议的锁仓量;Axie爆火,我们研究日增用户数;NFT崛起,我们研究mint数;以太坊上Gas飙升,我们观察是哪个项目这么火热。发现了吗?我们对链上数据与日俱增的了解和敏感度实则上来源于链上活动的繁荣发展,换句话说,**链上数据的重要性来源于区块链技术的成熟和应用的蓬勃。** 越来越多的链上项目给了我们足够丰富的交互空间,同时随着SBT、OAT的成熟和广泛应用,万物上链变为可能,这意味着日后的数据将多到足以支撑每一个用户丰满的链上肖像,届时我们能讲出关于DID,SocialFi更好的故事。 61 | 62 | ## 链上数据分析谁来做 63 | 对于大部分用户来说,成熟的数据产品已经够用,灵活组合多个数据工具就能取到不错的效果。比如使用Nansen帮助用户追踪巨鲸的实时动向;用Token Terminal查看各协议的收入;NFT类的数据监控平台更是五花八门。这些“成品”类数据产品虽然门槛低,使用方便,却也有无法满足高定制化要求的瓶颈。 64 | 65 | ![image](img/07.jpg) 66 | 67 | 举个例子, 你通过https://ultrasound.money/ 发现以太坊上Gas消耗突然上涨,是由这个没有听说过的XEN推动的,你敏锐地意识到,这可能是个早期机会!通过推特搜索,你了解了XEN采用PoP(Proof of Participation)挖矿机制,XEN挖矿参与者拥有挖出的XEN代币的所有权,随参与人数增加,挖矿难度加大,供应量降低。你想了解大家的参与情况,光靠个gas消耗可不够,你还想知道参与的人数,趋势,参与者都选择锁仓多久?同时你还发现,他好像没有防女巫?付个gas就能参与,冲进来的科学家多吗?我还有利润吗?分析到这你急需数据来支撑你“冲不冲”的决策,可是正因为早期,数据app中还没有对它的分析,同时数据app也很可能不会对每一个协议都进行监控分析。这就是为什么已经有很多数据产品的情况下,我们仍然需要自己会写一些数据分析:现成的产品难以满足定制化的需求。 68 | 69 | ![image](img/xen.png) 70 | 71 | 72 | 通过自己分析数据:https://dune.com/sixdegree/xen-crypto-overview, 我得知了大部分人都选择的是短期质押,且接近百分70的都是新钱包,说明被大家撸坏了,那我就明白了短期抛售压力会非常大,所以我如果想选择参与,就选质押最短的时间,尽快卖出,比谁跑得快。 73 | 至此,你已经完成了链上数据分析的整个流程:发现项目,研究项目机制,抽象出评估项目的标准,最后才是动手做数据处理、可视化,辅助决策。 74 | 75 | ## 如何做链上数据分析 76 | 尽管Dune这类的数据分析平台已经为我们做了很多整理工作,我们只要用SQL类的语法从数据表中抽取我们需要的部分进行构建就可以了。大部分人的学习路径我相信都是直奔《3日速成SQL》,拿下之后又开始迷茫,还是不知道如何从毛线团中找到哪根线头。怎么会这样?学习数据分析最重要的是培养数据思维,熟练使用编程语言是次要的。 77 | 78 | **数据分析提供一个可量化的视角最终去支撑决策,分析只是过程而不是目的。简单的步骤是厘清三个问题,构建数据思维:** 79 | 80 | **1. 我的目的是什么?** 81 | 82 | 是判断一个币现在是否是买入的好时机?决定是否为AAVE添加流动性赚取收益?还是想知道现在入场Stepn是否为时已晚? 83 | 84 | **2. 我的策略是什么?** 85 | 86 | 买币的策略就是紧跟Smart money,买啥跟啥,他进我进他出我出;观察如果协议运作情况良好,存款利率满意,就把暂时不动的币存进去吃利息;Stepn最近大火,如果势头仍然向上,那我就参与其中。 87 | 88 | **3. 我需要什么数据帮我做决策?** 89 | 90 | 需要监控Smart money地址的持仓动向,甚至考量代币的交易量和持仓分布;要查一下协议的TVL,未偿债务数额,资金利用率,APR等;考虑每日新增用户数,增长趋势,每日活跃用户数,交易笔数,玩家出入金情况,NFT市场里道具的销售情况。 91 | 92 | ![image](img/10.jpg) 93 | 94 | 这三个问题的难度逐渐增加,一二还容易回答,想明白第三个问题需要大量的学习和理解,这也是区分数据分析师们水平高低的小门槛。一名优秀的分析师应该具备以下三种特点: 95 | 96 | **1. 对赛道或者协议有理解与认识** 97 | 98 | 即分析的是什么赛道?这个项目的运行机制是什么?会产生哪些数据,分别代表什么含义? 99 | 100 | **2. 抽象事物的能力** 101 | 102 | 将一个模糊的概念变成可量化的指标,即 103 | 104 | >“这个DEX协议好不好” =>“流动性”+“成交量”+“活跃用户量”+“资本利用率”+“协议产生的收益” 105 | 106 | 再回到上一点,通过你对协议的了解找到对应的数据。 107 | 108 | **3. 处理数据的能力** 109 | 110 | 这里包含取数据(链上数据从哪来),处理数据(怎么筛选想要的滤除无关的),以及数据可视化的能力。 111 | 112 | ![image](img/11.jpg) 113 | 114 | 总的来说,数据分析只是支撑研究的工具,不要为了分析而分析。这个过程首先是出于你想对某个项目、概念、赛道进行研究、投资,然后学习、了解项目的运行机制,抽象出对定性概念的定量分析,最后才是找数据,做可视化。 115 | 116 | 数据分析最重要的始终是数据思维,至于最后动手做这一步,无非是熟练功,可以分为两部分: 117 | 118 | - 对区块链数据结构的了解。比如在EVM链中,只有EOA账户能发起交易,但是智能合约在被调用时可以转账ETH,这些内部调用就是通过traces 表来记录的,所以查表时查transactions会遗漏内部调用的交易。 119 | - 掌握Python、SQL等语言。掌握基本的数据库语言,无论是自己接数据或者用数据平台,都可以比较得心应手。 120 | 121 | ## 最后 122 | 123 | 网上有关链上数据分析的资料或者教程不少,但是都比较零散,质量也参差不齐。Web3是一所开放的大学,但是很多精力花费在寻找合适的教材上是比较痛苦的,同时大部分高质量的内容都是英文书写,对国内的用户构成一定语言障碍。 124 | 125 | 因此,Sixdegree团队将推出《成为链上数据分析师》的系列教程,以实际应用为导向,结合区块链数据结构和SQL语法,为大家提供一套上手教材,帮助更多的人掌握链上数据分析技能,最大化利用区块链数据的特性,一定程度上消除信息差。熊市多Build,成为链上数据分析师就从这里开始吧! 126 | 127 | ## 关于我们 128 | SixdegreeLab是专业的链上数据团队,我们的使命是为用户提供准确的链上数据图表、分析以及洞见,并致力于普及链上数据分析。通过建立社区、编写教程等方式,培养链上数据分析师,输出有价值的分析内容,推动社区构建区块链的数据层,为未来广阔的区块链数据应用培养人才,欢迎大家加入社区交流! 129 | 130 | ## 参考资料 131 | 1. [The Capital Efficiency Era of DeFi](https://blog.hashflow.com/the-capital-efficiency-era-of-defi-d8b3427feae4) 132 | 2. [Using On-Chain Data for Policy Research: Part 1](https://policy.paradigm.xyz/writing/using-on-chain-data-for-policy-research-part-1) 133 | 3. [IOSG:解析链上数据分析平台现状与前景](https://foresightnews.pro/article/detail/8473) 134 | 4. [An Introduction to «On-chain» Analysis](https://www.blockstar.ch/post/an-introduction-to-on-chain-analysis) 135 | 5. [The Architecture of a Web 3.0 application](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) 136 | 6. [Sixdegree Dune Dashborads](https://dune.com/sixdegree) 137 | -------------------------------------------------------------------------------- /zh/ch00/img/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch00/img/01.jpg -------------------------------------------------------------------------------- /zh/ch00/img/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch00/img/02.jpg -------------------------------------------------------------------------------- /zh/ch00/img/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch00/img/03.jpg -------------------------------------------------------------------------------- /zh/ch00/img/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch00/img/04.jpg -------------------------------------------------------------------------------- /zh/ch00/img/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch00/img/05.jpg -------------------------------------------------------------------------------- /zh/ch00/img/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch00/img/06.jpg -------------------------------------------------------------------------------- /zh/ch00/img/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch00/img/07.jpg -------------------------------------------------------------------------------- /zh/ch00/img/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch00/img/08.jpg -------------------------------------------------------------------------------- /zh/ch00/img/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch00/img/09.jpg -------------------------------------------------------------------------------- /zh/ch00/img/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch00/img/10.jpg -------------------------------------------------------------------------------- /zh/ch00/img/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch00/img/11.jpg -------------------------------------------------------------------------------- /zh/ch00/img/data-process.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch00/img/data-process.png -------------------------------------------------------------------------------- /zh/ch00/img/scam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch00/img/scam.png -------------------------------------------------------------------------------- /zh/ch00/img/support.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch00/img/support.png -------------------------------------------------------------------------------- /zh/ch00/img/xen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch00/img/xen.png -------------------------------------------------------------------------------- /zh/ch01/ch01-dune-platform-introduction.md: -------------------------------------------------------------------------------- 1 | ## Dune平台介绍 2 | 前文提到从数据栈角度来看,区块链数据产品可以分为`数据源`、`数据开发工具`和`数据app`三类,直接接入数据源成本太高,难度也更大,而数据app又是固定好的,我们要想分析数据, 3 | 需要一个开发工作量不大,又能接获取各种数据的平台,这类数据开发工具中,最便捷的便是Dune平台。 4 | 5 | [Dune](https://dune.com/)是一个链上的数据分析平台,用户可以在平台上面书写SQL语句,从Dune解析的区块链数据库中筛选出自己需要的数据,并生成对应的图表,组成仪表盘。 6 | 7 | 本教程的全部查询示例和引用的相关查询(完整的数据看板和第三方账号的查询除外)全部使用Dune SQL查询引擎测试通过。Dune已经宣布2023年内全面过渡到Dune SQL引擎,所以大家直接学习Dune SQL的语法即可。 8 | 9 | ## 页面介绍 10 | 11 | 在注册完Dune平台后,平台的主界面如下,具体的各项功能: 12 | 13 | - **Discover**:是展示平台的各个方面趋势 14 | - **Dashboard**:显示当前关注量最多的dashboard,在这个界面,可以左上角的搜索/右侧的搜索框搜索自己感兴趣的关键词,这也是最重要的一个部分,可以点击一个dashboard,查看别人制作的dashboard 15 | - Queries:显示的是当前关注量最多的query,在这个界面,可以左上角的搜索/右侧的搜索框搜索自己感兴趣的关键词; 16 | - Wizards:平台中收藏量最高的用户排名; 17 | - Teams:平台中收藏量最高的团队排名; 18 | - Favorites: 19 | - Dashboard:自己收藏的dashboard,可以在右侧搜索框搜索 20 | - Queries:自己收藏的query,可以在右侧搜索框搜索 21 | - **My Creations**: 22 | - Dashboard:自己创建的dashboard,可以在右侧搜索框搜索,如果你有团队,仪表盘可以在不同的团队中 23 | - Queries:自己创建的query,可以在右侧搜索框搜索 24 | - Contracts:自己提交解析的合约,可以在右侧搜索框搜索 25 | - **New Query**:新建一个查询 26 | - 其它 27 | - Docs:链接到帮助文档 28 | - Discord:链接到社区讨论组 29 | 30 | ![](img/main-page.png) 31 | 32 | ## 核心功能 33 | 34 | ### 查询Query 35 | 36 | 在点击`New Query` 之后,会进入一个新的界面,界面包含三个主要部分: 37 | 38 | - 数据表目录:在左侧有一个`数据搜索框`和`数据列表`,展开数据列表后可以看到具体的每一张表。(注:在第一次进入显示的是v1版本的,已弃用,请在上面选择`Dune Engine v2(SparkSQL)`) 39 | - Raw:记录了各个区块链的原始数据表,主要为区块信息blocks、交易信息transactions、事件日志信息logs和traces表等;目前支持的链有:Ethereum、Polygon、Arbitrum、Solana、Optimism、Gnosis Chain、Avalanche 40 | - Decoded projects:各个项目/合约的直接解析表,解析出来的表会更加清晰易懂,如果分析具体项目用这里的表会更加合适 41 | - Spells:是从raw和Decoded projects中提取的综合数据表,比如Dex,NFT,ERC20等等 42 | - Community:社区用户贡献的数据表 43 | 44 | - 代码编辑器:位于右上方的黑色区域,用于写自己的SQL语句,写完可以点击右下角的`Run`执行 45 | - 结果&图表可视化:位于右下方,查询结果会显示在`Query results`,可以依次在后面新建新的子可视化页面 46 | 47 | ![query-page](img/query-page.png) 48 | 49 | 平台的query可以通过分支fork的方式,将别人的query复制到自己的账户下,进行修改和编辑。 50 | 51 | **spellbook** 52 | 53 | spellbook是Dune平台非常重要的一个数据表,它是由社区用户贡献的一系列加工后的数据表,可以在github页面[duneanalytics/spellbook](https://github.com/duneanalytics/spellbook)贡献自己定义的数据表,dune平台会通过该定义,在后台生成相应的数据,在上图的前端页面中可以直接使用这些定义好的数据表,这些数据表的定义和字段意义可以到这里查看:[https://spellbook-docs.dune.com/#!/overview](https://spellbook-docs.dune.com/#!/overview) 54 | 55 | 目前spellbook中已经由社区用户贡献了几百张各种各样的表,比如nft.trades, dex.trades, tokens.erc20等等 56 | 57 | ![](img/spellbook.png) 58 | 59 | **参数** 60 | 61 | 在query中还可以设置一个可变的输入参数,改变查询条件,比如可以设置不同的用户地址,或者设置不同的时间范围,参数设置是以`'{{参数名称}}'`形式嵌入到查询语句中的。 62 | 63 | ![](img/query-params.png) 64 | 65 | ### 图表可视化Visualization 66 | 67 | 在图表可视化中,Dune平台提供了散点图、柱状图、折线图、饼状图、面积图和计数器以及二维数据表。在执行完查询,得到结果之后,可以选择`New visualization` 创建一个新可视化图,在图中可以选择想要显示的数据字段,可以立刻得到对应的可视化图,图中支持显示多个维度的数据,在图表下方是设置图表样式的区域,包括名称、坐标轴格式、颜色等信息。 68 | 69 | ![](img/visualization.png) 70 | 71 | ### 仪表盘Dashboard 72 | 73 | 上一小节的单个图表可视化,可以在仪表盘中灵活的组合,形成一个数据指标的聚合看板,并附带解释说明,这样可以从一个更加全面的角度去说明。在`Discover`中找到`New Dashboard`可以新建一个仪表盘,在仪表盘中可以添加所有query中生成的图表,并且可以添加markdown格式的文本信息,每个可视化的控件都可以拖拽并调整大小。 74 | 75 | 76 | 77 | ![](img/dashboard.png) 78 | 79 | 80 | ### Dune相关资料 81 | - 官方资料 82 | - [Dune官方文档(包括中文文档)](https://dune.com/docs/) 83 | - [Discord](https://discord.com/invite/ErrzwBz) 84 | - [Youtube](https://www.youtube.com/channel/UCPrm9d2hLd_YxSExH7oRyAg) 85 | - [Github Spellbook](https://github.com/duneanalytics/spellbook) 86 | - 社区教程 87 | - [Dune 数据看板零基础极简入门指南](https://twitter.com/gm365/status/1525013340459716608) 88 | - [Dune入门指南——以Pooly为例,做一个NFT看板](https://mirror.xyz/0xa741296A1E9DDc3D6Cf431B73C6225cFb5F6693a/iVzr5bGcGKKCzuvl902P05xo7fxc2qWfqfIHwmCXDI4) 89 | - [从0到1构建你的Dune V1 Analytics看板(基础篇)](https://mirror.xyz/0xbi.eth/6cbedGOx0GwZdvuxHeyTAgn333jaT34y-2qryvh8Fio) 90 | - [从0到1构建你的Dune V1 Analytics看板(实战篇)](https://mirror.xyz/0xbi.eth/603BIaKXn7s2_7A84oayY_Fn5XUPh6zDsv2OlQTdzCg) 91 | - [从0到1构建你的Dune V1 Analytics看板(常用表结构)](https://mirror.xyz/0xbi.eth/uSr336PzXtqMuE_LPBewbJ1CHN2oUs40-TDET2rnkqU) 92 | -------------------------------------------------------------------------------- /zh/ch01/img/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch01/img/dashboard.png -------------------------------------------------------------------------------- /zh/ch01/img/main-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch01/img/main-page.png -------------------------------------------------------------------------------- /zh/ch01/img/query-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch01/img/query-page.png -------------------------------------------------------------------------------- /zh/ch01/img/query-params.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch01/img/query-params.png -------------------------------------------------------------------------------- /zh/ch01/img/spellbook-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch01/img/spellbook-1.png -------------------------------------------------------------------------------- /zh/ch01/img/spellbook-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch01/img/spellbook-2.png -------------------------------------------------------------------------------- /zh/ch01/img/spellbook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch01/img/spellbook.png -------------------------------------------------------------------------------- /zh/ch01/img/visualization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch01/img/visualization.png -------------------------------------------------------------------------------- /zh/ch03/img/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch03/img/dashboard.png -------------------------------------------------------------------------------- /zh/ch03/img/image_00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch03/img/image_00.png -------------------------------------------------------------------------------- /zh/ch03/img/image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch03/img/image_01.png -------------------------------------------------------------------------------- /zh/ch03/img/image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch03/img/image_02.png -------------------------------------------------------------------------------- /zh/ch03/img/image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch03/img/image_03.png -------------------------------------------------------------------------------- /zh/ch03/img/image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch03/img/image_04.png -------------------------------------------------------------------------------- /zh/ch03/img/image_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch03/img/image_05.png -------------------------------------------------------------------------------- /zh/ch03/img/image_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch03/img/image_06.png -------------------------------------------------------------------------------- /zh/ch03/img/image_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch03/img/image_07.png -------------------------------------------------------------------------------- /zh/ch03/img/image_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch03/img/image_08.png -------------------------------------------------------------------------------- /zh/ch03/img/image_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch03/img/image_09.png -------------------------------------------------------------------------------- /zh/ch04/ch04-understanding-tables.md: -------------------------------------------------------------------------------- 1 | # 熟悉数据表 2 | 3 | 以Dune为代表的数据平台将区块链数据解析保存到数据库中。数据分析师针对具体的分析需求,编写SQL从相应的数据表中查询数据进行分析。目前市面上流行的区块链越来越多,新的区块链还在不断出现,部署到不同区块链上的各类项目也越来越丰富。如何快速找到待分析的项目对应的数据表,理解掌握对应数据表里每个字段的含义和用途,是每一个分析师必须掌握的技能。 4 | 5 | 目前我们熟悉的几个数据平台提供的基础数据集的整体结构比较相似,我们这里只围绕Dune平台来讲解。如果你偏好使用其他数据平台,可以通过该平台对应的文档了解详情。由于Dune已经正式宣布在2023年内全面切换到Dune SQL查询引擎,我们已将本教程中的全部Query升级到Dune SQL 版本。 6 | 7 | ## Dune V2数据引擎数据表介绍 8 | 9 | Dune 平台的数据集分为几种不同的类型: 10 | - **原始数据(Raw)**:存储了未经编辑的区块链数据。包括blocks、transactions、traces等数据表。这些原始数据表保存了最原始的链上数据,可用于灵活的数据分析。 11 | - **已解析项目(Decoded Projects)**:存储了经过解码后的智能合约事件日志及调用数据表。比如Uniswap V3相关的表,Opensea Seaport相关的表等。Dune使用智能合约的 ABI(Application Binary Interface) 和标准化代币智能合约的接口标准(ERC20、ERC721 等)来解析数据,并将每一个事件或者方法调用的数据单独保存到一个数据表中。 12 | - **魔法表(Spells)**:魔法表在Dune V1中也叫抽象表(Abstractions),是Dune和社区用户一起通过spellbook github存储库来建设和维护,并通过dbt编译生成的数据表,这些数据表通常使用起来更为便捷高效。 13 | - **社区贡献数据(Community)**:这部分是由第三方合作组织提供的数据源,自动接入到Dune的数据集里供分析师使用。目前Dune上主要有`flashbots`和`reservoir`两个社区来源数据集。 14 | - **用户生成的数据表(User Generated Tables)**:目前Dune V2引擎尚未开放此功能,只能通过魔法表的方式来上传(生成)自定义数据表。 15 | 16 | 在Dune平台的Query编辑页面,我们可以通过左边栏来选择或搜索需要的数据表。这部分界面如下图所示: 17 | 18 | ![image_01.png](img/image_01.png) 19 | 20 | 21 | 图片中间的文本框可以用于搜索对应的数据模式(Schema)或数据表。比如,输入`erc721`将筛选出名称包含这个字符串的所有魔法表和已解析项目表。图片中上方的红框部分用于选择要使用的数据集,途中显示的“v2 Dune SQL”就是我们通常说的“Dune SQL引擎”。Dune 将于2023年下半年全面过渡到Dune SQL引擎,所以现在大家只需熟悉Dune SQL的语法即可。 22 | 23 | 上图中下方的红框圈出的是前面所述Dune V2 引擎目前支持的几大类数据集。点击粗体分类标签文字即可进入下一级浏览该类数据集中的各种数据模式以及各模式下的数据表名称。点击分类标签进入下一级后,你还可以看到一个默认选项为“All Chains”的下拉列表,可以用来筛选你需要的区块链下的数据模式和数据表。当进入到数据表层级时,点击表名可以展开查看表中的字段列表。点击表名右边的“》”图标可以将表名(格式为`schema_name.table_name`插入到查询编辑器中光标所在位置。分级浏览的同时你也可以输入关键字在当前浏览的层级进一步搜索过滤。不同类型的数据表有不同的层次深度,下图为已解析数据表的浏览示例。 24 | 25 | ![image_03.png](img/image_03.png) 26 | 27 | ## 原始数据表 28 | 29 | 区块链中典型的原始数据表包括:区块表(Blocks)、交易表(Transactions)、内部合约调用表(Traces)、事件日志表(Logs)以及合约创建跟踪表(creation_traces)。原始数据表的命名格式为`blockchain_name.table_name`,例如arbitrum.logs,bnb.blocks,ethereum.transactions,optimism.traces等。部分区块链有更多或者更少的原始数据表,我们使用以太坊为例做简单介绍。 30 | 31 | ### 区块表(ethereum.blocks) 32 | 区块(Block)是区块链的基本构建组件。一个区块包含多个交易记录。区块表记录了每一个区块生成的日期时间(block time)、对应的区块编号(block number)、区块哈希值、难度值、燃料消耗等信息。除了需要分析整个区块链的区块生成状况、燃料消耗等场景外,我们一般并不需要关注和使用区块表。其中最重要的是区块生成日期时间和区块编号信息,它们几乎都同时保存到了其他所有数据表中,只是对应的字段名称不同。 33 | 34 | ### 交易表(ethereum.transactions) 35 | 36 | 交易表保存了区块链上发生的每一个交易的详细信息(同时包括成功交易和失败交易)。以太坊的交易表结构如下图所示: 37 | 38 | ![image_02.png](img/image_02.png) 39 | 40 | 交易表中最常用的字段包括block_time(或block_number)、from、to、value、hash、success等。Dune V2引擎是基于列存贮的数据库,每个表里的数据是按列存贮的。按列存贮的数据表无法使用传统意义上的索引,而是依赖于保存有“最小值/最大值”属性的元数据来提升查询性能。对于数值类型或者日期时间类型,可以很容易计算出一组值中的最小值/最大值。相反,对于字符串类型,因为长度可变,很难高效计算出一组字符串数据中的最小值/最大值。这就导致V2引擎在做字符串类型的查询时比较低效,所以我们通常需要同时结合使用日期时间类型或者数值类型的过滤条件来提升查询执行性能。如前所述,block_time, block_number字段几乎存在于所有的数据表中(在不同类型数据表中名称不同),我们应充分利用它们来筛选数据,确保查询可以高效执行。更多的相关信息可以查看[Dune V2查询引擎工作方式](https://docs.dune.com/dune-engine-v2-beta/query-engine#changes-in-how-the-database-works)来了解。 41 | 42 | ### 内部合约调用表(ethereum.traces) 43 | 44 | 一个交易(Transactions)可以触发更多的内部调用操作,一个内部调用还可能进一步触发更多的内部调用。这些调用执行的信息会被记录到内部合约调用表。内部合约调用表主要包括block_time、block_number、tx_hash、success、from、to、value、type等字段。 45 | 46 | 内部合约调用表有两个最常见的用途: 47 | 1. 用于跟踪区块链原生代币(Token)的转账详情或者燃料消耗。比如,对于以太坊,用户可能通过某个DAPP的智能合约将ETH转账到另一个(或者多个)地址。这种情况下,`ethereum.transactions`表的`value`字段并没有保存转账的ETH的金额数据,实际的转账金额只保存在内部合约调用表的`value`值中。另外,由于原生代币不属于ERC20代币,所以也无法通过ERC20协议的Transfer事件来跟踪转账详情。区块链交易的燃料费用也是用原生代币来支付的,燃料消耗数据同时保存于交易表和内部合约调用表。一个交易可能有多个内部合约调用,调用内部还可以发起新的调用,这就导致每个调用的`from`,`to`并不一致,也就意味着具体支付调用燃料费的账户地址不一致。所以,当我们需要计算某个地址或者一组地址的原生代币ETH余额时,只有使用`ethereum.traces`表才能计算出准确的余额。 这个查询有计算ETH余额的示例:[ETH顶级持有者余额](https://dune.com/queries/1001498/1731554) 48 | 2. 用于筛选合约地址。以太坊上的地址分为两大类型,外部拥有的地址(External Owned Address, EOA)和合约地址(Contract Address)。EOA外部拥有地址是指由以太坊用户拥有的地址,而合约地址是通过部署智能合约的交易来创建的。当部署新的智能合约时,`ethereum.traces`表中对应记录的`type`字段保存的值为`create`。我们可以使用这个特征筛选出智能合约地址。Dune V2里面,Dune团队已经将创建智能合约的内部调用记录整理出来,单独放到了表`ethereum.creation_traces`中。通过直接查询这个表就能确定某个地址是不是合约地址。 49 | 50 | ### 事件日志表(ethereum.logs) 51 | 52 | 事件日志表存储了智能合约生成的所有事件日志。当我们需要查询分析那些尚未被解码或者无法解码(由于代码非开源等原因)的智能合约,事件日志表非常有用。通常,我们建议优先使用已解析的数据表,这样可以提高效率并降低在查询中引入错误的可能性。但是,有时由于时效性(合约还未来得及被解码)或者合约本身不支持被解码的原因,我们就不得不直接访问事件日志表来查询数据进行分析。 53 | 54 | 事件日志表主要包括block_time、block_number、tx_hash、contract_address、topic1、topic2、topic3、topic4、data等字段。使用时需要注意的要点包括: 55 | - `topic1` 存贮的是事件对应的方法签名的哈希值。我们可以同时使用contract_address 和topic1筛选条件来找出某个智能合约的某个方法的全部事件日志记录。 56 | - `topic2`、`topic3`、`topic4` 存贮的是事件日志的可索引参数(主题),每个事件最多支持3个可索引主题参数。当索引主题参数不足3个时,剩余的字段不保存任何值。具体到每一个事件,这几个主题参数所保存的值各不相同。我们可以结合EtherScan这样的区块链浏览器上显示的日志来对照确认每一个主题参数代表什么含义。或者也可以查阅对应智能合约的源代码来了解事件参数的详细定义。 57 | - `data`存贮的是事件参数中没有被标记为索引主题类型的其他字段的16进制的组合值,字符串格式,以`0x`开头,每个参数包括64个字符,实际参数值不足64位则在左侧填充`0`来补足位数。当我们需要从data里面解析数据时,就要按照上述特征,从第3个字符开始,以每64个字符为一组进行拆分,然后再按其实际存贮的数据类型进行转换处理(转为地址、转为数值或者字符串等)。 58 | 59 | 这里是一个直接解析logs表的查询示例:[https://dune.com/queries/1510688](https://dune.com/queries/1510688)。你可以复制查询结果中的tx_hash值访问EtherScan站点,切换到“Logs”标签页进行对照。下图显示了EtherScan上的例子: 60 | 61 | ![image_04.png](img/image_04.png) 62 | 63 | ## 已解析项目表 64 | 65 | 已解析项目表是数量最庞大的数据表类型。当智能合约被提交到Dune进行解析时,Dune为其中的每一个方法调用(Call)和事件日志(Event)生成一个对应的专用数据表。在Dune的查询编辑器的左边栏中,这些已解析项目数据表按如下层级来逐级展示: 66 | 67 | ``` 68 | category name -> project name (namespace) -> contract name -> function name / event name 69 | 70 | -- Sample 71 | Decoded projects -> uniswap_v3 -> Factory -> PoolCreated 72 | ``` 73 | 74 | 已解析项目表的命名规则如下: 75 | 事件日志:`projectname_blockchain.contractName_evt_eventName` 76 | 函数调用:`projectname_blockchain.contractName_call_functionName` 77 | 例如,上面的Uniswap V3 的 PoolCreated 事件对应的表名为`uniswap_v3_ethereum.Factory_evt_PoolCreated`。 78 | 79 | 一个非常实用的方法是查询`ethereum.contracts`魔法表来确认你关注的智能合约是否已经被解析。这个表存贮了所有已解析的智能合约的记录。如果查询结果显示智能合约已被解析,你就可以用上面介绍的方法在查询编辑器界面快速浏览或搜索定位到对应的智能合约的数据表列表。如果查询无结果,则表示智能合约尚未被解析,你可以将其提交给Dune团队去解析处理:[提交解析新合约](https://dune.com/contracts/new)。可以提交任意的合约地址,但必须是有效的智能合约地址并且是可以被解析的(Dune能自动提取到其ABI代码或者你有它的ABI代码)。 80 | 81 | 我们制作了一个数据看板,你可以直接查询[检查智能合约是否已被解码](https://dune.com/sixdegree/decoded-projects-contracts-check) 82 | 83 | ## 魔法表 84 | 85 | 魔法书(Spellbook)是一个由Dune社区共同建设的数据转换层项目。魔法(Spell)可以用来构建高级抽象表格,魔法可以用来查询诸如 NFT 交易表等常用概念数据。魔法书项目可自动构建并维护这些表格,且对其数据质量进行检测。 Dune社区中的任何人都可以贡献魔法书中的魔法,参与方式是提交github PR,需要掌握github源代码管理库的基本使用方法。如果你希望参与贡献魔法表,可以访问[Dune Spellbook](https://dune.com/docs/spellbook/)文档了解详情。 86 | 87 | Dune社区非常活跃,已经创建了非常多的魔法表。其中很多魔法表已被广泛使用在我们的日常数据分析中,我们在这里对重要的魔法表做一些介绍。 88 | 89 | ### 价格信息表(prices.usd,prices.usd_latest) 90 | 91 | 价格信息表`prices.usd`记录了各区块链上主流ERC20代币的每分钟价格。当我们需要将将多种代币进行统计汇总或相互对比时,通常需要关联价格信息表统一换算为美元价格和金额后再进行汇总或对比。价格信息表目前提供了以太坊、BNB、Solana等链的常见ERC20代币价格信息,精确到每分钟。如果你需要按天或者按小时的价格,可以通过求平均值的方式来计算出平均价格。下面两个示例查询演示了两种同时获取多个token的每日价格的方式: 92 | - [获取每日平均价格](https://dune.com/queries/1507164) 93 | - [获取每天的最后一条价格数据](https://dune.com/queries/1506944) 94 | 95 | 最新价格表(prices.usd_latest)提供了相关ERC20代币的最新价格数据。 96 | 97 | ### DeFi交易信息表(dex.trades,dex_aggregator.trades) 98 | 99 | DeFi交易信息表`dex.trades`提供了主流DEX交易所的交易数据,因为各种DeFi项目比较多,Dune社区还在进一步完善相关的数据源,目前已经集成的有uniswap、sushiswap、curvefi、airswap、clipper、shibaswap、swapr、defiswap、dfx、pancakeswap_trades、dodo等DEX数据。DeFi交易信息表是将来自不同项目的交易信息合并到一起,这些项目本身也有其对应的魔法表格,比如Uniswap 有`uniswap.trades`,CurveFi有`curvefi_ethereum.trades`等。如果我们只想分析单个DeFi项目的交易,使用这些项目特有的魔法表会更好。 100 | 101 | DEX聚合器交易表`dex_aggregator.trades`保存了来自DeFi聚合器的交易记录。这些聚合器的交易通常最终会提交到某个DEX交易所执行。单独整理到一起可以避免与`dex.trades`记录重复计算。编写本文时,暂时还只有`cow_protocol`的数据。 102 | 103 | ### Tokens表(tokens.erc20,tokens.nft) 104 | 105 | Tokens表目前主要包括ERC20代币表`tokens.erc20`和NFT表(ERC721)`tokens.nft`。`tokens.erc20`表记录了各区块链上主流ERC20代币的定义信息,包括合约地址、代币符号、代币小数位数等。`tokens.nft`表记录了各NFT项目的基本信息,这个表的数据源目前还依赖社区用户提交PR来进行更新,可能存在更新延迟、数据不完整等问题。由于区块链上数据都是已原始数据格式保存的,金额数值不包括小数位数,我们必须结合`tokens.erc20`中的小数位数才能正确转换出实际的金额数值。 106 | 107 | ### ERC代表信息表(erc20_ethereum.evt_Transfer,erc721_ethereum.evt_Transfer等) 108 | 109 | ERC代币信息表分别记录了ERC20, ERC721(NFT),ERC1155等几种代币类型的批准(Approval)和转账(Transfer)记录。当我们要统计某个地址或者一组地址的ERC代币转账详情、余额等信息是,可以使用这一组魔法表。 110 | 111 | ### ENS域名信息表(ens.view_registrations等) 112 | 113 | ENS域名信息相关的表记录了ENS域名注册信息、反向解析记录、域名更新信息等。 114 | 115 | ### 标签信息表(labels.all等) 116 | 117 | 标签信息表是一组来源各不相同的魔法表,允许我们将钱包地址或者合约地址关联到一个或者一组文字标签。其数据来源包括ENS域名、Safe钱包、NFT项目、已解析的合约地址等多种类型。当我们的查询中希望把地址以更直观更有可读性的方式来显示是,可以通过Dune内置的`get_labels()`函数来使用地址标签。 118 | 119 | ### 余额信息表(balances_ethereum.erc20_latest等) 120 | 121 | 余额信息表保存了每个地址每天、每小时、和最新的ERC20, ERC721(NFT),ERC1155几种代币的余额信息。如果我们要计算某组地址的最新余额,或者跟踪这些地址的余额随时间的变化情况,可以使用这一组表。 122 | 123 | ### NFT交易信息表(nft.trades等) 124 | 125 | NFT交易信息表记录了各NFT交易平台的NFT交易数据。目前集成了opensea、magiceden、looksrare、x2y2、sudoswap、foundation、archipelago、cryptopunks、element、superrare、zora、blur等相关NFT交易平台的数据。跟DeFi交易数据类似,这些平台也各自有对应的魔法表,比如`opensea.trades`。当只需分析单个平台时,可以使用它特有的魔法表。 126 | 127 | ### 其他魔法表 128 | 129 | 除了上面提到的魔法表之外,还有很多其他的魔法表。Dune的社区用户还在不断创建新的魔法表。要了解进一步的信息,可以访问[Dune 魔法书](https://spellbook-docs.dune.com/#!/overview)文档网站。 130 | 131 | ## 社区贡献数据和用户生成数据表 132 | 133 | 如前文所述,目前Dune上主要有`flashbots`和`reservoir`两个社区来源数据集。Dune文档里面分别对这两个数据集做了简介: 134 | 135 | [Dune社区来源数据表](https://dune.com/docs/reference/tables/community/) 136 | 137 | 138 | ## SixdegreeLab介绍 139 | 140 | SixdegreeLab([@SixdegreeLab](https://twitter.com/sixdegreelab))是专业的链上数据团队,我们的使命是为用户提供准确的链上数据图表、分析以及洞见,并致力于普及链上数据分析。通过建立社区、编写教程等方式,培养链上数据分析师,输出有价值的分析内容,推动社区构建区块链的数据层,为未来广阔的区块链数据应用培养人才。 141 | 142 | 欢迎访问[SixdegreeLab的Dune主页](https://dune.com/sixdegree)。 143 | 144 | 因水平所限,不足之处在所难免。如有发现任何错误,敬请指正。 145 | -------------------------------------------------------------------------------- /zh/ch04/img/image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch04/img/image_01.png -------------------------------------------------------------------------------- /zh/ch04/img/image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch04/img/image_02.png -------------------------------------------------------------------------------- /zh/ch04/img/image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch04/img/image_03.png -------------------------------------------------------------------------------- /zh/ch04/img/image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch04/img/image_04.png -------------------------------------------------------------------------------- /zh/ch05/ch05-sql-basics-part1.md: -------------------------------------------------------------------------------- 1 | # SQL基础(一) 2 | 3 | ## 基础概念 4 | **1、数据仓库是什么?** 5 | 说人话就是说就是出于数据统计的需要,把一些数据分门别类地存储起来,存储的载体是【数据表】。针对某一个或者一些主题的一系列【数据表】合在一起就是数据仓库。 6 | 注意: 7 | 这里的数据可以是结果数据(比如Uniswap上线以来某个交易对每天的交易量统计) 8 | 也可以是过程数据(Uniswap上线以来某个交易对发生的每一条交易记录明细:谁发起的,用A换B,交易时间,tx_hash,交易数量….)。 9 | 10 | **2、SQL是什么?** 11 | 假设你想吃脆香米巧克力,但是你这会儿出不了门,你就叫个跑腿说:我需要一盒巧克力,他的牌子是脆香米。跑腿去了趟超市把巧克力买来送到你家。 12 | 类比过来SQL就是你说的那句话,Dune Analytics就是个跑腿儿,他可以让你可以跟数据仓库对话,并且将数据仓库里的数据给你搬出来给你。SQL最基本的结构或者语法就3个模块,几乎所有的SQL都会包含这3个部分: 13 | 14 | **select**: 取哪个字段? 15 | **from**:从哪个表里取? 16 | **where**:限制条件是什么? 17 | 18 | **3、数据表长什么样?** 19 | 你可以认为表就是一个一个的Excel 表,每一个Excel 表里存的不同的数据。以ethereum.transactions(以太坊上的transactions记录)为例: 20 | 21 | ![query-page](img/raw_data.png) 22 | 23 | 顺便说下表里用比较多的几个字段 24 | - **block_time**:交易被打包的时间 25 | - **block_number**:交易被打包的区块高度 26 | - **value**:转出了多少ETH(需要除以power(10,18)来换算精度) 27 | - **from**:ETH从哪个钱包转出的 28 | - **to**: ETH转到了哪个钱包 29 | - **hash**:这个transaction的tx hash 30 | - **success**:transaction是否成功 31 | 32 | ## 常见语法以及使用案例 33 | ### 1.基础结构·运算符·排序 34 | **案例1**:我想看看孙哥钱包(0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296)在2022年1月份以来的每一笔ETH的大额转出(>1000ETH)是在什么时候以及具体的转出数量 35 | #### SQL 36 | ```sql 37 | select --Select后跟着需要查询的字段,多个字段用英文逗号分隔 38 | block_time 39 | ,"from" 40 | ,"to" 41 | ,hash 42 | ,value /power(10,18) as value --通过将value除以/power(10,18)来换算精度,18是以太坊的精度 43 | from ethereum.transactions --从 ethereum.transactions表中获取数据 44 | where block_time > date('2022-01-01') --限制Transfer时间是在2022年1月1日之后 45 | and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296 --限制孙哥的钱包 46 | and value /power(10,18) >1000 --限制ETH Transfer量大于1000 47 | order by block_time --基于blocktime做升序排列,如果想降序排列需要在末尾加desc 48 | ``` 49 | 50 | ![query-page](img/base.png) 51 | 52 | #### Dune Query URL 53 | [https://dune.com/queries/1523799](https://dune.com/queries/1523799 ) 54 | 55 | #### 语法说明 56 | - SELECT 57 | - SELECT后边跟着,需要查询的字段,多个字段用英文逗号隔开 58 | - FROM 59 | - FROM 后边跟着数据来源的表 60 | - WHERE 61 | - WHERE后跟着对数据的筛选条件 62 | - 运算符:and / or 63 | - 如果筛选条件条件有多个,可以用运算符来连接 64 | - and:多个条件取并集 65 | - or:多个条件取交集 66 | - 排序:order by [字段A] ,按照字段A升序排列,如果需要按照降序排列就在末尾加上 desc 67 | - 幂乘计算:用于换算Value的精度,函数是Power(Number,Power),其中number表示底数;power表示指数 68 | - 字符串中字母换算大小写 69 | - lower():字符串中的字母统一换成小写 70 | - upper():字符串中的字母统一换成大写 71 | 72 | ### 2.聚合函数 73 | **案例2**:表里都是明细数据,我不想看细节,我只想通过一些统计数据去了解概况 74 | #### SQL 75 | ```sql 76 | select 77 | sum( value /power(10,18) ) as value --对符合要求的数据的value字段求和 78 | ,max( value /power(10,18) ) as max_value --求最大值 79 | ,min( value /power(10,18) ) as min_value--求最小值 80 | ,count( hash ) as tx_count --对符合要求的数据计数,统计有多少条 81 | ,count( distinct to ) as tx_to_address_count --对符合要求的数据计数,统计有多少条(按照去向地址to去重) 82 | from ethereum.transactions --从 ethereum.transactions表中获取数据 83 | where block_time > date('2022-01-01') --限制Transfer时间是在2022年1月1日之后 84 | and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296 85 | and value /power(10,18) > 1000 --限制ETH Transfer量大于1000 86 | ``` 87 | 88 | ![query-page](img/agg.png) 89 | 90 | #### Dune Query URL 91 | [https://dune.com/queries/1525555](https://dune.com/queries/1525555) 92 | 93 | #### 语法说明 94 | - 聚合函数 95 | - count():计数,统计有多少个;如果需要去重计数,括号内加distinct 96 | - sum():求和 97 | - min():求最小值 98 | - max():求最大值 99 | - avg():求平均 100 | 101 | ### 3.日期时间函数·分组聚合 102 | **案例3**:我不想只看一个单独的数字,想分小时/天/周来看一下趋势 103 | #### 3.1 把时间戳转化成小时/天/周的格式,方便进一步做聚合统计 104 | ##### SQL 105 | ```sql 106 | -- 把粒度到秒的时间转化为天/小时/分钟(为了方便后续按照天或者小时聚合) 107 | select --Select后跟着需要查询的字段,多个字段用空格隔开 108 | block_time --transactions发生的时间 109 | ,date_trunc('hour',block_time) as stat_hour --转化成小时的粒度 110 | ,date_trunc('day',block_time) as stat_date --转化成天的粒度 111 | ,date_trunc('week',block_time) as stat_week--转化成week的粒度 112 | ,"from" 113 | ,"to" 114 | ,hash 115 | ,value /power(10,18) as value --通过将value除以/power(10,18)来换算精度,18是以太坊的精度 116 | from ethereum.transactions --从 ethereum.transactions表中获取数据 117 | where block_time > date('2021-01-01') --限制Transfer时间是在2022年1月1日之后 118 | and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296 119 | and value /power(10,18) >1000 --限制ETH Transfer量大于1000 120 | order by block_time --基于blocktime做升序排列,如果想降序排列需要在末尾加desc 121 | ``` 122 | 123 | ![query-page](img/Date_Function_Format.png) 124 | 125 | ##### Dune Query URL 126 | [https://dune.com/queries/1527740](https://dune.com/queries/1527740) 127 | 128 | ##### 语法说明 129 | - DATE_TRUNC('datepart', timestamp) 130 | - 时间戳的截断函数 131 | - 根据datepart参数的不同会得到不同的效果 132 | - minute:将输入时间戳截断至分钟 133 | - hour:将输入时间戳截断至小时 134 | - day:将输入时间戳截断至天 135 | - week:将输入时间戳截断至某周的星期一 136 | - year:将输入时间戳截断至一年的第一天 137 | 138 | #### 3.2 基于之前得到的处理后的时间字段,使用group by + sum 完成分组聚合 139 | ##### SQL 140 | ```sql 141 | select 142 | date_trunc('day',block_time) as stat_date 143 | ,sum( value /power(10,18) ) as value --对符合要求的数据的value字段求和 144 | from ethereum.transactions --从 ethereum.transactions表中获取数据 145 | where block_time > date('2022-01-01') --限制Transfer时间是在2022年1月1日之后 146 | and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296 147 | and value /power(10,18) > 1000 --限制ETH Transfer量大于1000 148 | group by 1 149 | order by 1 150 | ``` 151 | 152 | ![query-page](img/group_by.png) 153 | 154 | ##### Dune Query URL 155 | [https://dune.com/queries/1525668](https://dune.com/queries/1525668) 156 | 157 | ##### 语法说明 158 | - 分组聚合(group by) 159 | 分组聚合的语法是group by。分组聚合顾名思义就是先分组后聚合,需要配合聚合函数一起使用。 160 | 161 | ![query-page](img/group_by_case.png) 162 | 163 | 假设上边表格是一个家庭(3个人)2020年前2个月的生活开销明细,如果你只用简单的sum,那你只能得到总计的12900;如果你想的到右边2种统计数据,那就需要用到分组聚合group by(按照【人员】分组聚合或者按照【月份】分组聚合) 164 | 165 | ### 4.联表查询·子查询 166 | **案例4**:我想从转出ETH的USD金额的角度去看孙哥的转出行为 167 | #### 4.1 转出数据看到的都是ETH的量,我想看下每次转出价值多少USD 168 | ##### SQL 169 | ```sql 170 | select 171 | block_time 172 | ,transactions_info.stat_minute as stat_minute 173 | ,"from" 174 | ,"to" 175 | ,hash 176 | ,eth_amount --通过将value除以/power(10,18)来换算精度,18是以太坊的精度 177 | ,price 178 | ,eth_amount * price as usd_value 179 | from 180 | ( 181 | select --Select后跟着需要查询的字段,多个字段用空格隔开 182 | block_time 183 | ,date_trunc('minute',block_time) as stat_minute --把block_time用date_trunc处理成分钟,方便作为主键去关联 184 | ,"from" 185 | ,"to" 186 | ,hash 187 | ,value /power(10,18) as eth_amount --通过将value除以/power(10,18)来换算精度,18是以太坊的精度 188 | from ethereum.transactions --从 ethereum.transactions表中获取数据 189 | where block_time > date('2022-01-01') --限制Transfer时间是在2022年1月1日之后 190 | and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296 191 | and value /power(10,18) >1000 --限制ETH Transfer量大于1000 192 | order by block_time --基于blocktime做升序排列,如果想降序排列需要在末尾加desc 193 | ) transactions_info 194 | left join --讲transactions_info与price_info的数据关联,关联方式为 left join 195 | ( 196 | --prices.usd表里存的是分钟级别的价格数据 197 | select 198 | date_trunc('minute',minute) as stat_minute --把minute用date_trunc处理成分钟,方便作为主键去关联 199 | ,price 200 | from prices.usd 201 | where blockchain = 'ethereum' --取以太坊上的价格数据 202 | and symbol = 'WETH' --取WETH的数据 203 | ) price_info on transactions_info.stat_minute = price_info.stat_minute --left join关联的主键为stat_minute 204 | ``` 205 | 206 | ![query-page](img/left_join.png) 207 | 208 | ##### Dune Query URL 209 | [https://dune.com/queries/1528027](https://dune.com/queries/1528027) 210 | 211 | ##### 语法说明 212 | - 联表查询 213 | - 大部分情况下我们需要的数据不是在同一张表里,比如transaction表存储的就是只有transaction数据,没有价格数据。如果我们希望能够计算出transaction对应USD 价值,那就需要用联表查询把价格数据给关联进来 214 | - 联表查询可以理解为把两个表通过一定的条件关联起来形成一张虚拟的表,你可以方便地对这虚拟表做更多处理。 215 | - 联表查询有2个部分构成 216 | - 联表方式(join,left join ,right join ,cross join,full join) 217 | - 关联条件(on) 218 | - 用得最多的联表方式是join 跟left join,以这2个为例子去解释下具体的用法 219 | 220 | ![query-page](img/left_join_case.png) 221 | 222 | - join:把两个表按照关联条件(on)关联在一起,取交集 223 | - Table A 跟 Table B通过姓名关联,其中交集是小红和小明,因为join是取交集,因此最终结果里姓名就只有小明和小红 224 | - 两表中所有符合要求的数据都需要关联,因为Table B中小明有2条记录,所以关联的结果中小明也有两条数据 225 | - left join:以左表为主,把右表按照关联条件(on)往左表去关联,如果关联不到就用null填充 226 | - Table A 跟 Table B通过姓名关联,因为是以左表为主,所以尽管左表中小兰和小绿在右表中没有符合关联条件的数据,但是小兰和小绿也会出现在结果中,右表那部分因为关联不到数据,因此都用null填充 227 | 228 | #### 4.2 我想把4.1的明细数据按照天去分组聚合,但是不想写嵌套太多层的sql 229 | ##### SQL 230 | ```sql 231 | with transactions_info as --通过with as 建立子查询命名为transactions_info 232 | ( 233 | select 234 | block_time 235 | ,transactions_info.stat_minute as stat_minute 236 | ,"from" 237 | ,"to" 238 | ,hash 239 | ,eth_amount --通过将value除以/power(10,18)来换算精度,18是以太坊的精度 240 | ,price 241 | ,eth_amount* price as usd_value 242 | from 243 | ( 244 | select --Select后跟着需要查询的字段,多个字段用空格隔开 245 | block_time 246 | ,date_trunc('minute',block_time) as stat_minute --把block_time用date_trunc处理成分钟,方便作为主键去关联 247 | ,"from" 248 | ,"to" 249 | ,hash 250 | ,value /power(10,18) as eth_amount --通过将value除以/power(10,18)来换算精度,18是以太坊的精度 251 | from ethereum.transactions --从 ethereum.transactions表中获取数据 252 | where block_time > date('2022-01-01') --限制Transfer时间是在2022年1月1日之后 253 | and "from" = 0x3DdfA8eC3052539b6C9549F12cEA2C295cfF5296 254 | and value /power(10,18) >1000 --限制ETH Transfer量大于1000 255 | order by block_time --基于blocktime做升序排列,如果想降序排列需要在末尾加desc 256 | ) transactions_info 257 | left join --讲transactions_info与price_info的数据关联,关联方式为 left join 258 | ( 259 | --prices.usd表里存的是分钟级别的价格数据 260 | select 261 | date_trunc('minute',minute) as stat_minute --把minute用date_trunc处理成分钟,方便作为主键去关联 262 | ,price 263 | from prices.usd 264 | where blockchain = 'ethereum' --取以太坊上的价格数据 265 | and symbol = 'WETH' --取WETH的数据 266 | ) price_info on transactions_info.stat_minute = price_info.stat_minute --left join关联的主键为stat_minute 267 | ) 268 | 269 | select date_trunc('day',block_time) as stat_date 270 | ,sum(eth_amount) as eth_amount 271 | ,sum(usd_value) as usd_value 272 | from transactions_info --从子查询形成的‘虚拟表’transactions_info中取需要的数据 273 | group by 1 274 | order by 1 275 | ``` 276 | 277 | ![query-page](img/with_as.png) 278 | 279 | ##### Dune Query URL 280 | [https://dune.com/queries/1528564](https://dune.com/queries/1528564) 281 | 282 | ##### 语法说明 283 | - 子查询(with as ) 284 | - 通过with as 可以构建一个子查询,把一段SQL的结果变成一个'虚拟表'(可类比为一个视图或者子查询),接下来的SQL中可以直接从这个'虚拟表'中取数据 285 | - 通过with as 可以比较好地提高SQL的逻辑的可读性,也可以避免多重嵌套 286 | -------------------------------------------------------------------------------- /zh/ch05/img/Date_Function_Format.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch05/img/Date_Function_Format.png -------------------------------------------------------------------------------- /zh/ch05/img/agg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch05/img/agg.png -------------------------------------------------------------------------------- /zh/ch05/img/base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch05/img/base.png -------------------------------------------------------------------------------- /zh/ch05/img/group_by.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch05/img/group_by.png -------------------------------------------------------------------------------- /zh/ch05/img/group_by_case.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch05/img/group_by_case.png -------------------------------------------------------------------------------- /zh/ch05/img/left_join.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch05/img/left_join.png -------------------------------------------------------------------------------- /zh/ch05/img/left_join_case.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch05/img/left_join_case.png -------------------------------------------------------------------------------- /zh/ch05/img/part_2_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch05/img/part_2_01.png -------------------------------------------------------------------------------- /zh/ch05/img/part_2_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch05/img/part_2_02.png -------------------------------------------------------------------------------- /zh/ch05/img/part_2_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch05/img/part_2_03.png -------------------------------------------------------------------------------- /zh/ch05/img/raw_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch05/img/raw_data.png -------------------------------------------------------------------------------- /zh/ch05/img/with_as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch05/img/with_as.png -------------------------------------------------------------------------------- /zh/ch06/img/Date_Function_Format.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch06/img/Date_Function_Format.png -------------------------------------------------------------------------------- /zh/ch06/img/agg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch06/img/agg.png -------------------------------------------------------------------------------- /zh/ch06/img/base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch06/img/base.png -------------------------------------------------------------------------------- /zh/ch06/img/group_by.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch06/img/group_by.png -------------------------------------------------------------------------------- /zh/ch06/img/group_by_case.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch06/img/group_by_case.png -------------------------------------------------------------------------------- /zh/ch06/img/left_join.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch06/img/left_join.png -------------------------------------------------------------------------------- /zh/ch06/img/left_join_case.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch06/img/left_join_case.png -------------------------------------------------------------------------------- /zh/ch06/img/part_2_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch06/img/part_2_01.png -------------------------------------------------------------------------------- /zh/ch06/img/part_2_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch06/img/part_2_02.png -------------------------------------------------------------------------------- /zh/ch06/img/part_2_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch06/img/part_2_03.png -------------------------------------------------------------------------------- /zh/ch06/img/raw_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch06/img/raw_data.png -------------------------------------------------------------------------------- /zh/ch06/img/with_as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch06/img/with_as.png -------------------------------------------------------------------------------- /zh/ch07/img/image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch07/img/image_01.png -------------------------------------------------------------------------------- /zh/ch07/img/image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch07/img/image_02.png -------------------------------------------------------------------------------- /zh/ch07/img/image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch07/img/image_03.png -------------------------------------------------------------------------------- /zh/ch07/img/image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch07/img/image_04.png -------------------------------------------------------------------------------- /zh/ch07/img/image_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch07/img/image_05.png -------------------------------------------------------------------------------- /zh/ch07/img/image_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch07/img/image_06.png -------------------------------------------------------------------------------- /zh/ch07/img/image_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch07/img/image_07.png -------------------------------------------------------------------------------- /zh/ch07/img/image_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch07/img/image_08.png -------------------------------------------------------------------------------- /zh/ch08/img/image_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch08/img/image_09.png -------------------------------------------------------------------------------- /zh/ch08/img/image_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch08/img/image_10.png -------------------------------------------------------------------------------- /zh/ch08/img/image_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch08/img/image_11.png -------------------------------------------------------------------------------- /zh/ch08/img/image_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch08/img/image_12.png -------------------------------------------------------------------------------- /zh/ch08/img/image_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch08/img/image_13.png -------------------------------------------------------------------------------- /zh/ch08/img/image_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch08/img/image_14.png -------------------------------------------------------------------------------- /zh/ch08/img/image_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch08/img/image_15.png -------------------------------------------------------------------------------- /zh/ch08/img/image_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch08/img/image_16.png -------------------------------------------------------------------------------- /zh/ch08/img/image_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch08/img/image_17.png -------------------------------------------------------------------------------- /zh/ch08/img/image_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch08/img/image_18.png -------------------------------------------------------------------------------- /zh/ch08/img/image_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch08/img/image_19.png -------------------------------------------------------------------------------- /zh/ch08/img/image_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch08/img/image_20.png -------------------------------------------------------------------------------- /zh/ch08/img/image_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch08/img/image_21.png -------------------------------------------------------------------------------- /zh/ch09/img/image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch09/img/image_01.png -------------------------------------------------------------------------------- /zh/ch09/img/image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch09/img/image_02.png -------------------------------------------------------------------------------- /zh/ch10/img/image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch10/img/image_03.png -------------------------------------------------------------------------------- /zh/ch10/img/image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch10/img/image_04.png -------------------------------------------------------------------------------- /zh/ch10/img/image_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch10/img/image_05.png -------------------------------------------------------------------------------- /zh/ch10/img/image_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch10/img/image_06.png -------------------------------------------------------------------------------- /zh/ch10/img/image_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch10/img/image_07.png -------------------------------------------------------------------------------- /zh/ch11/img/image_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch11/img/image_08.png -------------------------------------------------------------------------------- /zh/ch11/img/image_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch11/img/image_09.png -------------------------------------------------------------------------------- /zh/ch11/img/image_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch11/img/image_10.png -------------------------------------------------------------------------------- /zh/ch11/img/image_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch11/img/image_11.png -------------------------------------------------------------------------------- /zh/ch11/img/image_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch11/img/image_12.png -------------------------------------------------------------------------------- /zh/ch12/img/ERC-Standard.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch12/img/ERC-Standard.jpeg -------------------------------------------------------------------------------- /zh/ch12/img/daily-trade-volune.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch12/img/daily-trade-volune.png -------------------------------------------------------------------------------- /zh/ch12/img/dune-nft-related.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch12/img/dune-nft-related.png -------------------------------------------------------------------------------- /zh/ch12/img/history-price.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch12/img/history-price.png -------------------------------------------------------------------------------- /zh/ch12/img/nft-all-in-one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch12/img/nft-all-in-one.png -------------------------------------------------------------------------------- /zh/ch12/img/nft-transfer-etherscan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch12/img/nft-transfer-etherscan.png -------------------------------------------------------------------------------- /zh/ch12/img/seaport1.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch12/img/seaport1.1.png -------------------------------------------------------------------------------- /zh/ch13/img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/1.png -------------------------------------------------------------------------------- /zh/ch13/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/2.png -------------------------------------------------------------------------------- /zh/ch13/img/4.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/4.1.png -------------------------------------------------------------------------------- /zh/ch13/img/4.2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/4.2.png -------------------------------------------------------------------------------- /zh/ch13/img/arbscan1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/arbscan1.png -------------------------------------------------------------------------------- /zh/ch13/img/bank.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/bank.jpeg -------------------------------------------------------------------------------- /zh/ch13/img/crv1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/crv1.jpg -------------------------------------------------------------------------------- /zh/ch13/img/crv2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/crv2.png -------------------------------------------------------------------------------- /zh/ch13/img/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/dashboard.png -------------------------------------------------------------------------------- /zh/ch13/img/dashboard2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/dashboard2.png -------------------------------------------------------------------------------- /zh/ch13/img/dunedata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/dunedata.png -------------------------------------------------------------------------------- /zh/ch13/img/hf1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/hf1.png -------------------------------------------------------------------------------- /zh/ch13/img/hf2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/hf2.png -------------------------------------------------------------------------------- /zh/ch13/img/hf3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/hf3.png -------------------------------------------------------------------------------- /zh/ch13/img/loan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/loan.png -------------------------------------------------------------------------------- /zh/ch13/img/tvl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/tvl.png -------------------------------------------------------------------------------- /zh/ch13/img/tvl2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/tvl2.png -------------------------------------------------------------------------------- /zh/ch13/img/ur.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/ur.jpg -------------------------------------------------------------------------------- /zh/ch13/img/ur.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch13/img/ur.png -------------------------------------------------------------------------------- /zh/ch14/img/image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch14/img/image_01.png -------------------------------------------------------------------------------- /zh/ch14/img/image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch14/img/image_02.png -------------------------------------------------------------------------------- /zh/ch14/img/image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch14/img/image_03.png -------------------------------------------------------------------------------- /zh/ch14/img/image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch14/img/image_04.png -------------------------------------------------------------------------------- /zh/ch14/img/image_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch14/img/image_05.png -------------------------------------------------------------------------------- /zh/ch14/img/image_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch14/img/image_06.png -------------------------------------------------------------------------------- /zh/ch15/ch15-dunesql-introduction.md: -------------------------------------------------------------------------------- 1 | # Dune SQL 查询引擎入门 2 | 3 | Dune 已经正式推出了其团队基于Trino([https://trino.io/](https://trino.io/))自研的查询引擎Dune SQL。本文介绍Dune SQL的一些常见查询语法、注意事项和细节。 4 | 5 | 注:由于Dune已经宣布2023年下半年起将全面过渡到Dune SQL查询引擎,所以本篇教程将原有的所有Query全部升级到了Dune SQL 版本。 6 | 7 | ## Dune SQL 语法概览 8 | 9 | Dune SQL需要注意的书写语法要点有几个: 10 | - Dune SQL 使用双引号来引用包含特殊字符或者本身是关键字的字段名或表名,如` "from", "to" `。 11 | - Dune SQL的字符串类型和常用数值类型分别是`varchar`、`double`和`decimal(38, 0)`。 12 | - Dune SQL 不支持隐式类型转换。比如,Dune SQL中,不能将`'2022-10-01'`直接与 block_time 进行比较,需要用 `date('2022-10-01')`等函数显式转换为日期后才能比较。不能直接将数值类型和字符串连接,要用`cast(number_value as varchar)`转换为字符串后才能连接。 13 | 14 | Dune 文档提供了一份比较详细的语法对照表表,链接是:[Syntax Comparison](https://dune.com/docs/reference/dune-v2/query-engine/#syntax-comparison),大家可以参考。下图列出了部分差异对照: 15 | 16 | ![image_01.png](img/image_01.png) 17 | 18 | 19 | ## Dune SQL 实例 20 | 21 | ### Dune SQL使用双引号引用特殊字段名和表名 22 | 23 | Dune SQL使用双引号 24 | 25 | ```sql 26 | select "from" as address, gas_price, gas_used 27 | from ethereum.transactions 28 | where success = true 29 | limit 10 30 | ``` 31 | 32 | ### 日期时间 33 | 34 | Dune SQL 不支持字符串格式的日期值隐式转换为日期时间类型的值,必须使用显式转换。可以使用日期时间函数或者日期时间操作符。 35 | 36 | 1. 使用日期值 37 | 38 | Dune SQL使用date()函数 39 | 40 | ```sql 41 | select block_time, hash, "from" as address, "to" as contract_address 42 | from ethereum.transactions 43 | where block_time >= date('2022-12-18') 44 | limit 10 45 | ``` 46 | 47 | 2. 使用日期时间值 48 | 49 | Dune SQL使用timestamp 操作符 50 | 51 | ```sql 52 | select block_time, hash, "from" as address, "to" as contract_address 53 | from ethereum.transactions 54 | where block_time >= timestamp '2022-12-18 05:00:00' 55 | limit 10 56 | ``` 57 | 58 | 3. 使用interval 59 | 60 | Dune SQL使用`interval '12' hour` 61 | 62 | ```sql 63 | select block_time, hash, "from" as address, "to" as contract_address 64 | from ethereum.transactions 65 | where block_time >= now() - interval '12' hour 66 | limit 10 67 | ``` 68 | 69 | ### 地址和交易哈希 70 | 71 | Dune SQL 查询中,地址和哈希值可以不放入单引号中直接使用,此时大小写不敏感,可以不显示转换为小写格式。 72 | 73 | ```sql 74 | select block_time, hash, "from" as address, "to" as contract_address 75 | from ethereum.transactions 76 | where block_time >= date('2022-12-18') and block_time < date('2022-12-19') 77 | and ( 78 | hash = 0x2a5ca5ff26e33bec43c7a0609670b7d7db6f7d74a14d163baf6de525a166ab10 79 | or "from" = 0x76BE685c0C8746BBafECD1a578fcaC680Db8242E 80 | ) 81 | ``` 82 | 83 | ### Dune SQL的字符串类型 varchar 和数值类型 double 84 | 85 | Dune SQL中的字符串和常用数值类型是`varchar`和`double`。Dune SQL中的整数值默认是`bigint`类型,在做一些大数字的乘法时,容易产生溢出错误,此时可以强制转换为`double`类型或者`decimal(38, 0)`类型。Dune SQL中进行整数除法也不会隐式转换为浮点数再进行相除,而是直接返回一个整数,这点也需要注意。 86 | 87 | 1. 转换为字符串 88 | 89 | Dune SQL 90 | 91 | ```sql 92 | select block_time, hash, "from" as address, "to" as contract_address, 93 | cast(value / 1e9 as varchar) || ' ETH' as amount_value, 94 | format('%,.2f', value / 1e9) || ' ETH' as amount_value_format 95 | from ethereum.transactions 96 | where block_time >= date('2022-12-18') and block_time < date('2022-12-19') 97 | and ( 98 | hash = 0x2a5ca5ff26e33bec43c7A0609670b7d7db6f7d74a14d163baf6de525a166ab10 99 | or "from" = 0x76BE685c0C8746BBafECD1a578fcaC680Db8242E 100 | ) 101 | ``` 102 | 103 | 检查上面的SQL输出,可以看到当将比较大或者比较小的数字直接cast()转换为字符串时,会被处理为科学计数法的输出格式,效果不太理想。使用`format()`则可以精确控制输出的字符串的格式,所以推荐用这种方式。 104 | 105 | 2. 转换为数值 106 | 107 | 注意,表`erc20_ethereum.evt_Transfer`中,`value`字段的类型是字符串。可以使用`cast()`函数将其转换为double 或者 decimal(38, 0) 数值类型。 108 | 109 | ```sql 110 | select evt_block_time, evt_tx_hash, "from", "to", 111 | cast(value as double) as amount, 112 | cast(value as decimal(38, 0)) as amount2 113 | from erc20_ethereum.evt_Transfer 114 | where evt_block_time >= date('2022-12-18') and evt_block_time < date('2022-12-19') 115 | and evt_tx_hash in ( 116 | 0x2a5ca5ff26e33bec43c7a0609670b7d7db6f7d74a14d163baf6de525a166ab10, 117 | 0xb66447ec3fe29f709c43783621cbe4d878cda4856643d1dd162ce875651430fc 118 | ) 119 | ``` 120 | 121 | ### 强制类型转换 122 | 123 | 如前所述,Dune SQL不支持隐式类型转换,当我们需要将两种不同类型的值进行比较或者执行某些操作的时候,就需要确保它们是相同的(兼容的)数据类型,如果不是,则需要使用相关的函数或者操作符进行显式的类型转换。否则可能会遇到类型不匹配相关的错误。这里再举一个简单例子: 124 | 125 | Dune SQL未做类型转换时,下面的SQL会报错: 126 | 127 | ```sql 128 | select 1 as val 129 | union all 130 | select '2' as val 131 | ``` 132 | 133 | Dune SQL显式类型转换,可以执行 134 | 135 | ```sql 136 | select 1 as val 137 | union all 138 | select cast('2' as int) as val 139 | ``` 140 | 141 | 当我们遇到类似"Error: Line 47:1: column 1 in UNION query has incompatible types: integer, varchar(1) at line 47, position 1."这种错误时,就需要处理相应字段的类型兼容问题。 142 | 143 | ### 转换为double类型解决数值范围溢出错误 144 | 145 | Dune SQL 支持整数类型 `int` 和 `bigint`,但是由于EVM等区块链不支持小数导致数值经常很大,比如当我们计算gas 费的时候,就可能遇到数值溢出的错误。下面的SQL,为了故意导致错误,我们将计算的gas fee乘以1000倍了: 146 | 147 | ```sql 148 | select hash, gas_price * gas_used * 1000 as gas_fee 149 | from ethereum.transactions 150 | where block_time >= date('2022-12-18') and block_time < date('2022-12-19') 151 | order by gas_used desc 152 | limit 10 153 | ``` 154 | 155 | 执行上面的SQL将会遇到错误: 156 | ``` 157 | Error: Bigint multiplication overflow: 15112250000000000 * 1000. 158 | ``` 159 | 160 | 为了避免类型溢出错误,我们可以将第一个参数显式转换为double类型。下面的SQL可以正确执行: 161 | 162 | ```sql 163 | select hash, cast(gas_price as double) * gas_used * 1000 as gas_fee 164 | from ethereum.transactions 165 | where block_time >= date('2022-12-18') and block_time < date('2022-12-19') 166 | order by gas_used desc 167 | limit 10 168 | ``` 169 | 170 | ### 转换为double类型解决整数相除不能返回小数位的问题 171 | 172 | 同样,如果两个数值是bigint 类型,二者相除默认返回的也是整数类型,小数部分会被舍弃。如果希望返回小数部分,可以将被除数显式转换为double类型。 173 | 174 | ```sql 175 | select hash, gas_used, gas_limit, 176 | gas_used / gas_limit as gas_used_percentage 177 | from ethereum.transactions 178 | where block_time >= date('2022-12-18') and block_time < date('2022-12-19') 179 | limit 10 180 | ``` 181 | 182 | 执行上面的SQL,gas_used_percentage的值将会是0或者1,小数部分被舍弃取整,显然这不是我们想要的结果。将被除数gas_used显式转换为double类型,可以得到正确结果: 183 | 184 | ```sql 185 | select hash, gas_used, gas_limit, 186 | cast(gas_used as double) / gas_limit as gas_used_percentage 187 | from ethereum.transactions 188 | where block_time >= date('2022-12-18') and block_time < date('2022-12-19') 189 | limit 10 190 | ``` 191 | 192 | ### 从Hex十六进制转换到十进制 193 | 194 | Dune SQL 定义了一组新的函数来处理将varbinary类型字符串转换到十进制数值的转换,字符串必须以`0x`前缀开始。 195 | 196 | ```sql 197 | select bytearray_to_uint256('0x00000000000000000000000000000000000000000000005b5354f3463686164c') as amount_raw 198 | ``` 199 | 200 | 详细帮助可以参考:[Byte Array to Numeric Functions](https://dune.com/docs/query/DuneSQL-reference/Functions-and-operators/varbinary/#byte-array-to-numeric-functions) 201 | 202 | 203 | ### 生成数值序列和日期序列 204 | 205 | 1. 数值序列 206 | 207 | Dune SQL生成数值序列的语法: 208 | 209 | ```sql 210 | select num from unnest(sequence(1, 10)) as t(num) 211 | -- select num from unnest(sequence(1, 10, 2)) as t(num) -- step 2 212 | ``` 213 | 214 | 2. 日期序列 215 | 216 | Duen SQL使用`unnest()`搭配`sequence()`来生成日期序列值并转换为多行记录。 217 | 218 | Dune SQL生成日期序列的语法: 219 | 220 | ```sql 221 | select block_date from unnest(sequence(date('2022-01-01'), date('2022-01-31'))) as s(block_date) 222 | -- select block_date from unnest(sequence(date('2022-01-01'), date('2022-01-31'), interval '7' day)) as s(block_date) 223 | ``` 224 | 225 | ### 数组查询 226 | 227 | 1. Dune SQL 使用`cardinality()`查询数组大小。 228 | 229 | Dune SQL语法: 230 | 231 | ```sql 232 | select evt_block_time, evt_tx_hash, profileIds 233 | from lens_polygon.LensHub_evt_Followed 234 | where cardinality(profileIds) = 2 235 | limit 10 236 | ``` 237 | 238 | 2. Dune SQL 数组的索引从 1 开始计数 239 | 240 | Dune SQL访问数组元素: 241 | 242 | ```sql 243 | select evt_block_time, evt_tx_hash, profileIds, 244 | profileIds[1] as id1, profileIds[2] as id2 245 | from lens_polygon.LensHub_evt_Followed 246 | where cardinality(profileIds) = 2 247 | limit 10 248 | ``` 249 | 250 | 3. 将数组元素拆分到多行记录。 251 | 252 | Dune SQL拆分数组元素到多行: 253 | 254 | ```sql 255 | select evt_block_time, evt_tx_hash, profileIds, tbl.profile_id 256 | from lens_polygon.LensHub_evt_Followed 257 | cross join unnest(profileIds) as tbl(profile_id) 258 | where cardinality(profileIds) = 3 259 | limit 20 260 | ``` 261 | 262 | 4. 同时将多个数组字段拆分到多行记录。 263 | 264 | 要同时将多个数组字段拆分到多行(前提是它们必须具有相同的长度),Dune SQL中可以在`unnest()`函数中包括多个字段,同时输出多个对应字段。 265 | 266 | Dune SQL拆分多个数组元素到多行: 267 | 268 | ```sql 269 | SELECT evt_block_time, evt_tx_hash, ids, "values", tbl.id, tbl.val 270 | FROM erc1155_polygon.evt_TransferBatch 271 | cross join unnest(ids, "values") as tbl(id, val) 272 | WHERE evt_tx_hash = 0x19972e0ac41a70752643b9f4cb453e846fd5e0a4f7a3205b8ce1a35dacd3100b 273 | AND evt_block_time >= date('2022-12-14') 274 | ``` 275 | 276 | ## 从Spark SQL迁移查询到Dune SQL 示例 277 | 278 | 将已经存在的Spark SQL引擎编写的query迁移到Dune SQL的过程是非常便利的。你可以直接进入Query的Edit界面,从左边的数据集下拉列表中切换到“1. v2 Dune SQL”,同时对Query的内容做相应的调整,涉及的主要修改已经在本文前面各节分别进行了介绍。这里举一个实际的例子: 279 | 280 | Spark SQL 版本:[https://dune.com/queries/1773896](https://dune.com/queries/1773896) 281 | Dune SQL 版本:[https://dune.com/queries/1000162](https://dune.com/queries/1000162) 282 | 283 | 迁移时修改内容对照: 284 | 285 | ![image_02.png](img/image_02.png) 286 | 287 | 288 | ## 其他 289 | 290 | Dune SQL 还有一个潜在的高级功能,就是允许针对一个已保存的查询进行查询(Query of Query)。这个功能有很多的想象空间,可简化查询逻辑,优化缓存使用等。比如,你可以将一个复杂的查询的基础部分保存为一个query,然后基于此query来进一步的汇总统计。这个功能貌似有时还不太稳定。不过大家可以试试。 291 | 292 | ```sql 293 | -- original query: https://dune.com/queries/1752041 294 | select * from query_1752041 295 | where user_status = 'Retained' 296 | ``` 297 | 298 | ```sql 299 | -- original query: https://dune.com/queries/1752041 300 | select * from query_1752041 301 | where user_status = 'Churned' 302 | ``` 303 | 304 | ## 参考链接 305 | 306 | 1. [Syntax and operator differences](https://dune.com/docs/reference/dune-v2/query-engine/#syntax-and-operator-differences) 307 | 2. [Trino Functions and operators](https://trino.io/docs/current/functions.html) 308 | 309 | 310 | ## SixdegreeLab介绍 311 | 312 | SixdegreeLab([@SixdegreeLab](https://twitter.com/sixdegreelab))是专业的链上数据团队,我们的使命是为用户提供准确的链上数据图表、分析以及洞见,并致力于普及链上数据分析。通过建立社区、编写教程等方式,培养链上数据分析师,输出有价值的分析内容,推动社区构建区块链的数据层,为未来广阔的区块链数据应用培养人才。 313 | 314 | 欢迎访问[SixdegreeLab的Dune主页](https://dune.com/sixdegree)。 315 | 316 | 因水平所限,不足之处在所难免。如有发现任何错误,敬请指正。 317 | -------------------------------------------------------------------------------- /zh/ch15/img/image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch15/img/image_01.png -------------------------------------------------------------------------------- /zh/ch15/img/image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch15/img/image_02.png -------------------------------------------------------------------------------- /zh/ch16/img/image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch16/img/image_01.png -------------------------------------------------------------------------------- /zh/ch16/img/image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch16/img/image_02.png -------------------------------------------------------------------------------- /zh/ch16/img/image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch16/img/image_03.png -------------------------------------------------------------------------------- /zh/ch16/img/image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch16/img/image_04.png -------------------------------------------------------------------------------- /zh/ch16/img/image_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch16/img/image_05.png -------------------------------------------------------------------------------- /zh/ch16/img/image_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch16/img/image_06.png -------------------------------------------------------------------------------- /zh/ch16/img/image_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch16/img/image_07.png -------------------------------------------------------------------------------- /zh/ch16/img/image_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch16/img/image_08.png -------------------------------------------------------------------------------- /zh/ch16/img/image_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch16/img/image_09.png -------------------------------------------------------------------------------- /zh/ch16/img/image_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch16/img/image_10.png -------------------------------------------------------------------------------- /zh/ch17/img/1.jpg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /zh/ch17/img/JIT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/JIT.png -------------------------------------------------------------------------------- /zh/ch17/img/JITv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/JITv.png -------------------------------------------------------------------------------- /zh/ch17/img/arb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/arb.png -------------------------------------------------------------------------------- /zh/ch17/img/arb_protocol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/arb_protocol.png -------------------------------------------------------------------------------- /zh/ch17/img/dune_com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/dune_com.jpg -------------------------------------------------------------------------------- /zh/ch17/img/dune_fb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/dune_fb.jpg -------------------------------------------------------------------------------- /zh/ch17/img/ep_mev_ov.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/ep_mev_ov.jpg -------------------------------------------------------------------------------- /zh/ch17/img/fr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/fr.jpg -------------------------------------------------------------------------------- /zh/ch17/img/fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/fr.png -------------------------------------------------------------------------------- /zh/ch17/img/mempool.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/mempool.jpg -------------------------------------------------------------------------------- /zh/ch17/img/mev_process.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/mev_process.jpg -------------------------------------------------------------------------------- /zh/ch17/img/mev_sum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/mev_sum.png -------------------------------------------------------------------------------- /zh/ch17/img/mev_supchain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/mev_supchain.jpg -------------------------------------------------------------------------------- /zh/ch17/img/mevsumchat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/mevsumchat.png -------------------------------------------------------------------------------- /zh/ch17/img/swa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/swa.png -------------------------------------------------------------------------------- /zh/ch17/img/the_block.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/the_block.jpg -------------------------------------------------------------------------------- /zh/ch17/img/uniswap_bot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch17/img/uniswap_bot.png -------------------------------------------------------------------------------- /zh/ch18/img/image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch18/img/image_01.png -------------------------------------------------------------------------------- /zh/ch18/img/image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch18/img/image_02.png -------------------------------------------------------------------------------- /zh/ch18/img/image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch18/img/image_03.png -------------------------------------------------------------------------------- /zh/ch18/img/image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch18/img/image_04.png -------------------------------------------------------------------------------- /zh/ch18/img/image_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch18/img/image_05.png -------------------------------------------------------------------------------- /zh/ch18/img/image_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch18/img/image_06.png -------------------------------------------------------------------------------- /zh/ch18/img/image_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch18/img/image_07.png -------------------------------------------------------------------------------- /zh/ch18/img/image_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch18/img/image_08.png -------------------------------------------------------------------------------- /zh/ch18/img/image_09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch18/img/image_09.png -------------------------------------------------------------------------------- /zh/ch19/ch19-useful-metrics.md: -------------------------------------------------------------------------------- 1 | # 各类常见指标分析 2 | 3 | ## 背景知识 4 | 5 | 在前面的教程中,我们学习了许多关于数据表和SQL查询语句的知识。准确规范地检索统计出所需数据是一名合格分析师的必备技能。与此同时,正确地认识和解读这些数据指标也十分关键。只有对数据指标有足够深刻的理解,它才能对我们的决策提供强力的支持。 6 | 7 | 在看具体的指标之前,我们先思考一下,我们为什么需要数据指标呢?简单地说,指标就是能够反映一种现象的数字,比如某个NFT的地板价,某家DEX的日活跃交易数。指标可以直接反映我们研究对象的状况,为相应决策提供数据支撑,我们可以通过之前学习的数据表和SQL语句知识,构建、调用、分析这些指标,达到事半功倍的效果。如果没有指标,我们获取的信息就会显得很乱,我们能够从中获得的洞察就少。 8 | 9 | 具体到区块链领域,虽然有些指标与金融市场的指标类似,但它也有相当一部分特有的指标,比如比特币市值占比(Bitcoin Dominance),交易所七日流入量(All Exchanges Inflow Mean-MA7)等。在本教程中,我们先来学习以下几个常见指标和它们的计算方法: 10 | 11 | - 总锁仓量 Total Value Locked (TVL) 12 | - 流通总量 Circulating Supply 13 | - 总市值 Market Cap 14 | - 日/月活跃用户 Daily / Monthly Active User (DAU / MAU) 15 | - 日/月新用户数 Daily / Monthly New User 16 | 17 | 18 | ## 总锁仓量Total Value Locked (TVL) 19 | 我们来看我们今天学习的第一个指标 - 总锁仓量Total Value Locked (TVL)。 它描述了一个协议中锁定的所有代币价值的总和,该协议可以是Dex,借贷平台,也可以是侧链,L2二层网络等等。TVL描述了该协议的流动性,同时也反映了其受欢迎程度以及用户的信心。 20 | 21 | 比如我们来看一下DEX的TVL排行: 22 | 23 | ![DEX TVL](img/image_01.png) 24 | 25 | 以及二层网络L2的TVL排行: 26 | 27 | ![L2TVL](img/image_02.png) 28 | 29 | 排名靠前的均是热度比较高的协议。 30 | 31 | TVL的计算逻辑比较简单,即统计出协议中所有相关代币的数目,再乘以每种代币的价格,最后求和得出。这里我们以Arbitrum链上的一个DEX项目Auragi为例进行说明。DEX项目的TVL通过其中的流动性池Pool的余额来体现。为了计算这个项目每一天的TVL,我们可以先统计出它每一天的所有Pair中相关代币的余额数量,以及代币在该时间点的价格,然后相乘得到以USD计算的金额。 32 | 33 | 为了得到每一天的各个Pair的代币余额,我们要先整理出所有的交易明细记录: 34 | 35 | ```sql 36 | with token_pairs as ( 37 | select 38 | coalesce(k1.symbol, 'AGI') || '-' || coalesce(k2.symbol, 'AGI') as pair_name, 39 | p.pair, 40 | p.evt_block_time, 41 | p.token0, 42 | p.token1, 43 | p.stable 44 | from auragi_arbitrum.PairFactory_evt_PairCreated p 45 | left join tokens.erc20 k1 on p.token0 = k1.contract_address and k1.blockchain = 'arbitrum' 46 | left join tokens.erc20 k2 on p.token1 = k1.contract_address and k2.blockchain = 'arbitrum' 47 | ), 48 | 49 | token_transfer_detail as ( 50 | select date_trunc('minute', evt_block_time) as block_date, 51 | evt_tx_hash as tx_hash, 52 | contract_address, 53 | "to" as user_address, 54 | cast(value as decimal(38, 0)) as amount_raw 55 | from erc20_arbitrum.evt_Transfer 56 | where "to" in (select pair from token_pairs) 57 | and evt_block_time >= date('2023-04-04') 58 | 59 | union all 60 | 61 | select date_trunc('minute', evt_block_time) as block_date, 62 | evt_tx_hash as tx_hash, 63 | contract_address, 64 | "from" as user_address, 65 | -1 * cast(value as decimal(38, 0)) as amount_raw 66 | from erc20_arbitrum.evt_Transfer 67 | where "from" in (select pair from token_pairs) 68 | and evt_block_time >= date('2023-04-04') 69 | ), 70 | 71 | token_price as ( 72 | select date_trunc('minute', minute) as block_date, 73 | contract_address, 74 | decimals, 75 | symbol, 76 | avg(price) as price 77 | from prices.usd 78 | where blockchain = 'arbitrum' 79 | and contract_address in (select distinct contract_address from token_transfer_detail) 80 | and minute >= date('2023-04-04') 81 | group by 1, 2, 3, 4 82 | 83 | union all 84 | 85 | -- AGI price from swap trade 86 | select date_trunc('minute', block_time) as block_date, 87 | 0xFF191514A9baba76BfD19e3943a4d37E8ec9a111 as contract_address, 88 | 18 as decimals, 89 | 'AGI' as symbol, 90 | avg(case when token_in_address = 0xFF191514A9baba76BfD19e3943a4d37E8ec9a111 then token_in_price else token_out_price end) as price 91 | from query_2337808 92 | group by 1, 2, 3, 4 93 | ) 94 | 95 | select p.symbol, 96 | d.block_date, 97 | d.tx_hash, 98 | d.user_address, 99 | d.contract_address, 100 | d.amount_raw, 101 | (d.amount_raw / power(10, p.decimals) * p.price) as amount_usd 102 | from token_transfer_detail d 103 | inner join token_price p on d.contract_address = p.contract_address and d.block_date = p.block_date 104 | ``` 105 | 106 | 上面的查询逻辑如下: 107 | - 先在`token_pairs`中得到这个项目的所有交易对(Pair)。 108 | - 结合`evt_Transfer`表,查询出每一个交易对的资金转入转出详情。 109 | - 在`token_price`中计算出哥哥Token的当前价格。因为这个是一个比较新的Token,Dune可能没有它的价格数据,所以我们使用了交易数据来换算价格。交易数据的详细列表在另外一个查询中,这里使用Query of Query的方式来引用。 110 | - 最后我们将交易明细和价格信息关联,计算出每一笔交易的USD金额。 111 | 112 | 在上面的交易详情查询结果基础上,我们就可以来统计计算每一天的TVL了。 113 | 114 | 首先我们在`date_series`中生成一个日期时间序列。考虑到这是一个比较新的项目,我们按小时纬度进行统计。如果项目上线时间已经足够久,建议按天进行统计。 115 | 116 | 然后在`pool_balance_change`中,结合上面的交易详情数据,我们整理出美国Token每一个小时的余额变化金额。 117 | 118 | 接下来在`pool_balance_summary`中,我们按时间排序汇总出每个Token的累积余额。这里同时使用`lead()`函数计算出每一个token每一个时间段存在对应后续交易记录的下一个时间点。 119 | 120 | 最后,我们将时间序列和每一个小时的累积余额进行关联,补足缺失交易数据的时间段的值。请注意这里的关联条件:`inner join date_series d on p.block_date <= d.block_date and d.block_date < p.next_date`。这里使用了两个条件,限定累计余额的日期时间必须小于等于日期序列的日期时间值,同时序列的日期时间值必须小于下一个有记录的余额的日期时间值。这是一个很常见的处理技巧。因为并不是所有的Token在每一个时间段都有交易,如果遇到没有发生交易的时间段,我们需要用前一个时间段的余额来代表其在当前时间段的余额。这个应该不难理解,因为“当前时间段”内没有发生新的变化,所以余额自然跟上一个时间段相同。 121 | 122 | 查询代码如下: 123 | 124 | ```sql 125 | with date_series as ( 126 | select block_date 127 | from unnest(sequence(timestamp '2023-04-01 00:00:00', localtimestamp, interval '1' hour)) as tbl(block_date) 128 | ), 129 | 130 | pool_balance_change as ( 131 | select symbol, 132 | date_trunc('hour', block_date) as block_date, 133 | sum(amount_usd) as amount 134 | from query_2339248 135 | group by 1, 2 136 | ), 137 | 138 | pool_balance_summary as ( 139 | select symbol, 140 | block_date, 141 | sum(amount) over (partition by symbol order by block_date) as balance_amount, 142 | lead(block_date, 1, current_date) over (partition by symbol order by block_date) as next_date 143 | from pool_balance_change 144 | order by 1, 2 145 | ) 146 | 147 | select d.block_date, 148 | p.symbol, 149 | p.balance_amount 150 | from pool_balance_summary p 151 | inner join date_series d on p.block_date <= d.block_date and d.block_date < p.next_date 152 | order by 1, 2 153 | ``` 154 | 155 | 这样我们就能够把TVL的变化呈现出来: 156 | 157 | ![tvl](img/image_03.png) 158 | 159 | 以上查询的链接: 160 | - [https://dune.com/queries/2339317](https://dune.com/queries/2339317) 161 | - [https://dune.com/queries/2339248](https://dune.com/queries/2339248) 162 | - [https://dune.com/queries/2337808](https://dune.com/queries/2337808) 163 | 164 | 另外一个计算TVl的例子:[https://dune.com/queries/1059644/1822157](https://dune.com/queries/1059644/1822157) 165 | 166 | ## 流通总量 Circulating Supply 167 | 168 | 流通总量是当前市场中以及持币者掌握的流通的加密货币数量。它与总供应量(Total Supply)不同,它不会将无法交易流通的部分纳入统计,比如被锁定而无法交易的货币数量。由于这部分无法流通的加密货币通常并不会影响其价格,所以流通总量作为代币数量的度量较总供应量更为常用。对于不同的加密货币,其计算方式有所不同。比如一些线性释放的代币,他的供应量随时间增加。又如一些有通缩燃烧机制的代币,我们在计算流通总量的时候就要减去这一部分。这里我们以比特币为例,计算它的当前流通总量。 169 | 比特币的流通总量计算逻辑较为简单,从起始周期每个区块产出50枚,每210000个区块进入一个减半周期。基于此,我们可以计算出它当前的流通总量: 170 | 171 | ```sql 172 | SELECT SUM(50/POWER(2, ROUND(height/210000))) as Supply 173 | FROM bitcoin.blocks 174 | ``` 175 | 176 | 177 | ## 总市值 Market Cap 178 | 179 | 今天学习的第三个指标是总市值(Market Cap)。相信大家对这个指标并不陌生。在股票市场,总市值是指在某特定时间内总股本数乘以当时股价得出的股票总价值。相应的在区块链领域,它是一种加密货币的流通总量(Circulating Supply)乘以该加密货币的价格得出的该加密货币总价值。因此计算总市值的关键是计算出我们刚刚学习的指标-流通总量。当我们计算出了流通总量,再乘以该加密货币的当前价格,就能得出其总市值。 180 | 我们继续以比特币为例,在计算出其流通总量的基础上,我们再乘以它当前的价格即可获得它的总市值: 181 | 182 | ```sql 183 | SELECT SUM(50/POWER(2, ROUND(height/210000))) as Supply, 184 | SUM(50/POWER(2, ROUND(height/210000)) * p.price) /POWER(10, 9) AS "Market Cap" 185 | FROM bitcoin.blocks 186 | INNER JOIN ( 187 | SELECT price FROM prices.usd_latest 188 | WHERE symbol='BTC' 189 | AND contract_address IS NULL 190 | ) p ON TRUE 191 | ``` 192 | 193 | 我们最开始提到的比特币市值占比(Bitcoin Dominance),就是以此为分子,然后以所有加密货币市值之和为分母计算出来的。 194 | 195 | 196 | ## 日/月活跃用户 Daily/Monthly Active User 197 | 198 | 今天学习的下一个指标是日/月活跃用户 (Daily/Monthly Active User,DAU/MAU)。相对于绝对交易数额,活跃用户的数目更能反应一个协议受欢迎程度。由于少数用户的大额交互就可以拉高交易数额,活跃的用户数可以更客观的描述该协议的热度。它的计算方式比较简单,我们只要找出与某个合约交易的钱包地址,并按天/月统计频数即可得出。 199 | 我们以最近比较热门的Lens为例: 200 | 201 | ```sql 202 | with daily_count as ( 203 | select date_trunc('day', block_time) as block_date, 204 | count(*) as transaction_count, 205 | count(distinct "from") as user_count 206 | from polygon.transactions 207 | where "to" = 0xdb46d1dc155634fbc732f92e853b10b288ad5a1d -- LensHub 208 | and block_time >= date('2022-05-16') -- contract creation date 209 | group by 1 210 | order by 1 211 | ) 212 | 213 | select block_date, 214 | transaction_count, 215 | user_count, 216 | sum(transaction_count) over (order by block_date) as accumulate_transaction_count, 217 | sum(user_count) over (order by block_date) as accumulate_user_count 218 | from daily_count 219 | order by block_date 220 | ``` 221 | 222 | 我们使用distinct函数让每位用户每天只会被统计一次。在统计每日活跃人数的基础上,我们还使用 `sum` `over`函数,统计出了累计用户数。如果要统计月度活跃用户数(MAU),只需要改成使用`date_trunc('month', block_time)` 来获取每月第一天的日期并进行汇总统计即可。 223 | 224 | ![user](img/image_04.png) 225 | 226 | ## 日/月新用户数 Daily / Monthly New User 227 | 228 | 除了关注活跃用户数据外,每日/每月新增用户数量也是非常常见的一个分析指标。通常,为了得到准确的新增用户数据,我们需要先计算出每个用户地址第一次交易的日期时间,或者收到/发出第一笔转账记录的日期时间,然后再按天或者月进行统计得到新增用户数量。这里我们以统计Optimism链上每日新增用户数量的查询为例。 229 | 230 | ```sql 231 | with optimism_new_users as ( 232 | SELECT "from" as address, 233 | min(block_time) as start_time 234 | FROM optimism.transactions 235 | GROUP BY 1 236 | ) 237 | 238 | SELECT date_trunc('day', start_time) as block_date, 239 | count(n.address) as new_users_count 240 | FROM optimism_new_users n 241 | WHERE start_time >= date('2022-10-01') 242 | GROUP BY 1 243 | ``` 244 | 245 | ![new users](img/image_05.png) 246 | 247 | 这里有一个结合了新用户数量和具体NFT项目用户数据统计的[实际案例](https://dune.com/queries/1334302)。 248 | 249 | 250 | ## SixdegreeLab介绍 251 | 252 | SixdegreeLab([@SixdegreeLab](https://twitter.com/sixdegreelab))是专业的链上数据团队,我们的使命是为用户提供准确的链上数据图表、分析以及洞见,并致力于普及链上数据分析。通过建立社区、编写教程等方式,培养链上数据分析师,输出有价值的分析内容,推动社区构建区块链的数据层,为未来广阔的区块链数据应用培养人才。 253 | 254 | 欢迎访问[SixdegreeLab的Dune主页](https://dune.com/sixdegree)。 255 | 256 | 因水平所限,不足之处在所难免。如有发现任何错误,敬请指正。 257 | 258 | -------------------------------------------------------------------------------- /zh/ch19/img/image_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch19/img/image_01.png -------------------------------------------------------------------------------- /zh/ch19/img/image_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch19/img/image_02.png -------------------------------------------------------------------------------- /zh/ch19/img/image_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch19/img/image_03.png -------------------------------------------------------------------------------- /zh/ch19/img/image_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch19/img/image_04.png -------------------------------------------------------------------------------- /zh/ch19/img/image_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch19/img/image_05.png -------------------------------------------------------------------------------- /zh/ch20/img/image-20221214165849494.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch20/img/image-20221214165849494.png -------------------------------------------------------------------------------- /zh/ch20/img/image-20221214170041781.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch20/img/image-20221214170041781.png -------------------------------------------------------------------------------- /zh/ch20/img/image-20221214201810132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch20/img/image-20221214201810132.png -------------------------------------------------------------------------------- /zh/ch21/ch21-btc-analysis.md: -------------------------------------------------------------------------------- 1 | # 如何设计一个Dshboard-以BTC指标CDD(Coin Day Destroyed)为例 2 | ## 一、BTC CDD指标介绍 3 | 4 | ### 1.指标说明 5 | 6 | CDD 是 Coin Day Destroyed 的简称,在某种程度上我们可以认为它是对链上交易量指标(Transaction Volumn)做了一些改进。具体的改进就思路就是在评估链上活动(Transfer)的时候引入时间特征:在链上处于长时间HODL状态(没有被转移到其他钱包)的Token发生移动的时候,我们给这次的转账赋予更大的权重。 7 | 8 | 这里我们引入一个新的概念叫币天(Coin Day),`币天(Coin Day) = Token数量 * 该Token保持HODL状态的天数`。 9 | 10 | 链上的所有BTC每天都在累积币天(Coin Day),如果其中某一部分BTC发生了移动(从钱包A转移到钱包B),那么这部分累积币天就会被消耗,这就是所谓的 Coin Day Destroyed 。 11 | 12 | ![historical_trend.png](img//historical_trend.png) 13 | 14 | 15 | ### 2.底层逻辑 16 | 17 | 我们设计所有指标都是为了更好地刻画描述出我们想要反应的状况,对于这个指标来讲,它最终是希望反应长期持有者的一些行为。从这个角度来看这其实是一个Smart Money类型的指标,大家倾向于认为长期持有者是BTC早期的参与者,进而他们对BTC以及市场的理解是更聪明以及有经验的,如果他们的Token(长期处于HODL状态)发生了转移,那么很有可能是市场发生了一些变化促使他们采取了一些行动(在很多情况下是转到交易所或者通过OTC出售,但也存在其他的场景,不能一概而论)。 18 | 19 | 如果你经常用Glassnode,你会发现Glassnode上非常多的指标都是基于上述逻辑设计的,这个可以算是现有BTC链上数据分析的最重要的底层逻辑之一。 20 | 21 | ### 3.UTXO机制 22 | 23 | 这里需要引入关于BTC的一个基本常识:UTXO机制。理解它后才能明白应该如何利用Dune上的关于BTC的几张表完成上述的计算。 24 | 25 | UTXO是 Unspent Transaction Output的简称,即未花费的交易产出。BTC现有的运行机制中其实没有Balance的概念,每个钱包的Balance是通过将与该钱包拥有的所有UTXO中包含的BTC数量求和得到的。 26 | 27 | 28 | 搜索到一篇文章感觉讲地比较通俗易懂,这里放一下链接:https://www.liaoxuefeng.com/wiki/1207298049439968/1207298275932480 29 | 30 | ## 二、 Dune相关表 31 | 32 | 如果你能大概理解Input,Output,UTXO这几个概念,就很容易能理解Dune上我们需要用到的2个表。这里对需要用到的表以及字段做一个简单的说明。 33 | 34 | ### 2.1 bitcoin.inputs 35 | 36 | - 说明:包含所有的Input相关的数据,即对于每个地址来说他们的每一笔BTC的消费/转出 37 | - 重要字段 38 | - `address`:钱包地址 39 | - `block_time`:这次转出Transaction发生的时间 40 | - `tx_id`:这次转出Transaction的tx id 41 | - `value`:这次转出Transaction包含的BTC金额 42 | - `spent_tx_id`:这次产生Input(花费)是源于那个Output(我这次花的是之前收到哪笔钱) 43 | 44 | ![input_info.png](img//input_info.png) 45 | 46 | ### 2.2 bitcoin.outputs 47 | 48 | - 说明:包含所有的Output相关的数据,即对于每个地址来说他们的每一笔BTC的转入记录 49 | - 重要字段 50 | - `address`:钱包地址 51 | - `block_time`:这次转出Transaction发生的时间 52 | - `tx_id`:这次转出Transaction的tx id 53 | - `value`:这次转出Transaction包含的BTC金额 54 | 55 | ![output_info.png](img//output_info.png) 56 | 57 | ## 三、Dashboard设计以及实现 58 | 59 | ### 1. 如何设计一个Dashboard 60 | #### 1.1 整体思路 61 | 62 | 如何设计一个Dashbaord取决于我们使用Dashboard的最终目的。Dashbaord或者数据的最终目的是辅助人去做决策。在我看来数据能通过回答以下两个问题来辅助决策,能有效回答这两个问题才算是一个合格的Dashboard。 63 | 64 | `[a].`XXX 是什么? 它有什么特征? 65 | 66 | 通过一系列指标反映某个事物的基本特征以及现状(比如以太坊每天的用户量,tx数量,新增合约数量....)。 67 | 68 | `[b].`反应XXX特征的一些重要指标发生了变化,原因是什么? 69 | 70 | 当`[a]`中的指标发生变化时我们去分析变化的原因或者说就是去寻找数据波动的原因。 71 | 72 | #### 1.2 波动分析 73 | 74 | `[a]`比较好理解,就不展开说了,指标体系设计的好坏取决于你对这个事物本身的理解程度,每个行业或者每个行业下每个细分领域其实都不一样。 75 | 76 | 我们可以说说分析波动,在我看来分析波动就是去做拆解。通常情况下可以从两个角度去拆解一个指标的波动,这里以太坊每天销毁数量的为例,假设某一天以太坊销毁量+30%,我们应该怎么分析? 77 | 78 | **1.事物形成的过程** 79 | 80 | `今日ETH燃烧 = 今日gas fee消耗总量 * 燃烧比例` 81 | 82 | - `今日gas fee消耗总量 = 今日单个tx平均消耗gas fee * 今日 tx数` 83 | - `今日tx数 = 今日以太坊活跃用户 * 今日以太坊活跃用户平均发出tx数` 84 | - `今日以太坊活跃用户 = 以太坊总用户数 * 今日活跃比例` 85 | - `燃烧比例:取决于EIP1559 或者是否有新的提案` 86 | 87 | ![funnel_info.png](img//funnel_info.png) 88 | 89 | 90 | **2.事物本身的特征** 91 | 92 | - 时间:区分小时来看是24小时中哪个小时gas fee消耗上涨还是所有小时普遍上涨 93 | - 空间:如果能拿到每个发起交易的钱包的ip去看否是是否某个国家的gas fee消耗大幅度上涨(实际做不到) 94 | - 其他特征:是EOA地址的gas fee消耗上涨还是合约地址的gas fee消耗上涨 95 | - 如果是EOA地址,是BOT造成的,还是普通EOA地址;如果是普通EOA地址,是鲸鱼造成的还是普通钱包造成的 96 | - 如果是合约地址,是哪个类型的项目(Defi Gamefi...的合约gas fee消耗上涨,如果是Gamefi项目,具体是哪个合约造成的 97 | 98 | 上述是两大类拆解思路,通过将主指标一层一层拆解成子指标,就可以比较好地观察是那些子指标的波动造成了主指标的波动,进而推测最源头的原因。 99 | 100 | ### 2. Bitcoin - Coin Day Destroyed Matrix 的设计 101 | 102 | 回到这次的主题,我们开始设计 Bitcoin - Coin Day Destroyed 这个Dashboard。 103 | 104 | #### 2.1 整体状况 105 | 106 | 首先是需要一张图反映整体的状况,因为只有CDD这一个指标比较简单,我就只放了一张历史趋势图。 107 | 108 | ![historical_trend.png](img//historical_trend.png) 109 | 110 | 但是这个图的时间周期过长,我们很难通过这张图比较明显地看出近期CDD的变化,因此我又增加了一个近期的趋势。 111 | 112 | ![recent_trend.png](img//recent_trend.png) 113 | 114 | PS:这里还是可以看到这轮下跌钱又明显的CDD异动的。 115 | 116 | #### 2.2 波动分析 117 | 118 | 这里我只做了3个纬度的拆解: 119 | 120 | - 按照时间(小时)拆解,这样我就指标异动发生在大概什么时间【统计最新一天的数据】 121 | 122 | ![hour.png](img//hour.png) 123 | 124 | - 按照发起Transaction的钱包地址拆解,这样我就知道指标异动是由什么引起的:是一个钱包还是很多钱包引起的,是一小部分`老币`,还是大量`新币`。【统计最新一天的数据】 125 | 126 | ![wallet.png](img//wallet.png) 127 | 128 | - 按照Transaction_ID这个非常细的粒度去拆解,这样我就知道异动具体是由哪些Transaction带来的,也可以去区块链浏览器中去核实。【统计最新一天的数据】 129 | 130 | ![transaction.png](img//transaction.png) 131 | 132 | - 除此之外,为了方便按照钱包地址去分析历史上任意一天的波动原因,我新增了一个工具模块,可以通过输入日期来查找历史上任意一天CDD按照钱包的分布 133 | 134 | ![tool.png](img//tool.png) 135 | 136 | ### 3. 完成 137 | 138 | 就这样一个用于关注CDD的Dashboard就完成了.最终的效果就是你可以比较方便地看到该指标的历史趋势以及近期变化。如果某天发生异动,可以快速地定位到异动发生的时间以及关联钱包,具体的transaction_id辅助进一步分析。 139 | 140 | ![overview.png](img//overview.png) 141 | 142 | 详细Dashboard见:https://dune.com/sixdegree/bitcoin-coin-day-destroyed-matrix 143 | 144 | 145 | 补充一些更多的拆解思路: 146 | - 尝试按照Transaction的目标地址去拆解,分成转入交易所的Tx的CDD以及普通的tx的CDD。这样你就知道CDD中有多大比例是有明确出售意向的 147 | - 尝试按照钱包的类型去做拆解,我们可以尝试计算每个钱包出现大额CDD异动后价格下跌了的概率,然后定义出一些Smart Money,这样就把CDD拆解成了Smart Money CDD & Normal CDD 148 | 149 | 感兴趣可以自己fork Dashboard,去尝试去实现。 150 | 151 | 152 | ## SixdegreeLab介绍 153 | 154 | SixdegreeLab([@SixdegreeLab](https://twitter.com/sixdegreelab))是专业的链上数据团队,我们的使命是为用户提供准确的链上数据图表、分析以及洞见,并致力于普及链上数据分析。通过建立社区、编写教程等方式,培养链上数据分析师,输出有价值的分析内容,推动社区构建区块链的数据层,为未来广阔的区块链数据应用培养人才。 155 | 156 | 欢迎访问[SixdegreeLab的Dune主页](https://dune.com/sixdegree)。 157 | 158 | 因水平所限,不足之处在所难免。如有发现任何错误,敬请指正。 159 | 160 | 161 | 162 | 163 | -------------------------------------------------------------------------------- /zh/ch21/img/funnel_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch21/img/funnel_info.png -------------------------------------------------------------------------------- /zh/ch21/img/historical_trend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch21/img/historical_trend.png -------------------------------------------------------------------------------- /zh/ch21/img/hour.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch21/img/hour.png -------------------------------------------------------------------------------- /zh/ch21/img/input_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch21/img/input_info.png -------------------------------------------------------------------------------- /zh/ch21/img/output_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch21/img/output_info.png -------------------------------------------------------------------------------- /zh/ch21/img/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch21/img/overview.png -------------------------------------------------------------------------------- /zh/ch21/img/recent_trend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch21/img/recent_trend.png -------------------------------------------------------------------------------- /zh/ch21/img/tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch21/img/tool.png -------------------------------------------------------------------------------- /zh/ch21/img/transaction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch21/img/transaction.png -------------------------------------------------------------------------------- /zh/ch21/img/wallet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch21/img/wallet.png -------------------------------------------------------------------------------- /zh/ch22/img/image_00.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch22/img/image_00.jpg -------------------------------------------------------------------------------- /zh/ch22/img/image_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch22/img/image_01.jpg -------------------------------------------------------------------------------- /zh/ch22/img/image_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch22/img/image_02.jpg -------------------------------------------------------------------------------- /zh/ch22/img/image_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch22/img/image_03.jpg -------------------------------------------------------------------------------- /zh/ch23/ch23-how-to-build-app-use-dune-api.md: -------------------------------------------------------------------------------- 1 | # 使用Dune API创建应用程序 2 | 3 | ## 项目概述 4 | 5 | 4月25日,Dune正式向所有用户等级开放了期待已久的API访问权限。现在,免费用户也可以访问Dune API了。本篇教程提供一个Demo,讲解如何围绕Dune API来开发应用程序。 6 | 7 | Demo程序部署在这里:[Watcher Demo](https://dev.lentics.xyz/)。 8 | 9 | 本教程的Demo程序在3月初已经完成,由于各种其他原因,教程拖延到了现在,抱歉让大家久等了。项目程序代码由我公司同事George,Ken 和 Benny 协同完成,在此表示感谢。 10 | 11 | 由于API Key 有额度限制,以上Demo程序有可能无法一直正常工作。建议大家Fork之后自行部署,使用自己的API Key来做更多尝试。 12 | 13 | 项目运行的界面如下图所示: 14 | 15 | ![wather01.jpg](./img/watcher01.jpg) 16 | 17 | ## Dune API 使用介绍 18 | 19 | Dune API是基于Query ID来执行和获取结果的。每一个已保存的Query,都可以自动转化为一个API的访问端点。在最新版的Query Editor 界面,只需先编写查询,测试好功能,保存查询,然后点击”API Endpoint“按钮,即可获取访问该查询结果的API端点网址。 20 | 21 | ``` 22 | https://api.dune.com/api/v1/query/2408388/results?api_key= 23 | ``` 24 | 25 | 这是通过API访问已保存的查询结果集的最简便的方法。 26 | 27 | ![wather02.jpg](./img/watcher02.jpg) 28 | 29 | Query的执行结果默认是缓存保存的,如果不再次主动执行这个Query,那么上面的API端点获取的将是已保存的上次执行结果集。通常我们的应用程序需要主动执行查询以获取最新满足条件的数据而不是重复获取缓存的结果集,对于监控类型的应用更是如此。所以我们还需要访问执行查询(Execute)的端点和获取查询执行状态(Status)的端点,在接收到已执行完成的状态信息后,访问获取结果集(Results)的端点获取数据。 30 | 31 | 一个完整的API调用流程包括:执行查询、检查查询执行状态、获取查询结果集。Dune API的相关文档已经有详细的说明,所以这里就不再展开描述。大家可以直接看API文档:[Dune API](https://dune.com/docs/api/api-reference/#latest-results-endpoint)。 32 | 33 | 34 | ## 项目需求说明 35 | 36 | 为了尽可能完整展示使用Dune API开发项目的完整流程,我整理了以下主要需求点。 37 | 38 | 这个应用的主要功能是基于Dune 的API,针对Uniswap V3,提供一个新建流动资金池监控的纯前端应用。使用数据库来保存用户选择监控的资金池地址。使用缓存以避免重复调用API请求完全相同的数据。 39 | 40 | 功能包括三个方面: 41 | 42 | 1. New Pools 新建资金池 43 | 44 | 按选择的区块链、日期范围,返回满足条件的新建资金池列表。 45 | 调用API时,传入选择的区块链名称(全部小写),日期参数(YYYY-MM-DD,本地根据用户选择换算成具体日期)。 46 | 47 | 2. Latest Swaps 最新交易记录 48 | 49 | 从资金池列表选择一个Pool(链接),在新的界面中列出该Pool当前小时内的最新100条Swap兑换记录。 50 | 用户从第一步的各个列表点击Pool 旁边的“Latest Swap”链接进入本界面。 51 | 调用API时,传入区块链名称、Pool地址和当前的小时值(YYYY-MM-DD HH:MI:SS,本地换算成具体日期+小时值,如 “2023-02-27 09:00:00”)。 52 | API调用参数: blockchain, pool, current hour (Unix timestamp) 53 | 用列表方式展示API调用返回结果即可。 54 | 55 | 3. Large Swap Alerts 大额交易提醒 56 | 57 | 允许用户输入一个Pool 的地址(提示用户自行从资金池列表中复制),大额交换的阈值(比如1000 USD)。设置后每隔5分钟调用因此API,当出现满足条件的Swap记录时,生成站内提醒。 58 | 用户可以设置要监控的Pool 地址和最小交换金额(USD)(暂时只提供1000,10000,10000三个选择值)。 59 | 如果API有返回数据,则加入站内提醒中。导航条红色数字badge提醒未读提醒个数,点击可以显示列表。点击单条信息后改成已读状态。 60 | 61 | 62 | ## 开发环境配置 63 | 64 | ``` 65 | yarn dev 66 | ``` 67 | 68 | 其他命令可以参考项目源代码中的 readme.md 文件说明。 69 | 70 | ## 开发概览 71 | 72 | ### 创建项目 73 | 74 | 基于 Next.js, CSS framework 使用 tailwindcss,fetcher 使用 Axios,前端数据操作使用 dexie,后端数据操作使用 prisma。 75 | 76 | ``` bash 77 | $ yarn create next-app 78 | $ yarn add tailwindcss autoprefixer postcss prisma -D 79 | $ yarn add axios dexie dexie-react-hooks @prisma/client 80 | ``` 81 | 82 | ### 初始化 Schema 83 | 84 | ``` bash 85 | $ yarn prisma init --datasource-provider sqlite 86 | $ vim prisma/schema.prisma 87 | generator client { 88 | provider = "prisma-client-js" 89 | } 90 | 91 | datasource db { 92 | provider = "sqlite" 93 | url = env("DATABASE_URL") 94 | } 95 | 96 | model DuneQuery { 97 | id String @unique 98 | execution_id String 99 | createdAt DateTime @default(now()) 100 | updatedAt DateTime @updatedAt 101 | } 102 | 103 | $ yarn prisma migrate dev --name init 104 | $ yarn prisma generate 105 | ``` 106 | 107 | ### 封装API调用 108 | 109 | 增加 lib/dune.ts, 封装 Dune API 执行的三个步骤: 110 | ``` javascript 111 | export const executeQuery = async (id: string, parameters: any) => { 112 | // 用 hash 生成当前执行的 query key, 检查并获取 sqlite 中是否有对应 execution_id。记得做好缓存过期处理 113 | // ... 114 | }; 115 | export const executeStatus = async (id: string) => { 116 | // ... 117 | }; 118 | export const executeResults = async (id: string) => { 119 | // ... 120 | }; 121 | ``` 122 | 123 | ### 前端数据展示 124 | 125 | 在 pages 目录增加对应页面中增加个递归 function,判断是否有 data.result 节点返回用于递归调用,useEffect 中触发即可。 126 | 127 | 128 | ### 代码部署 129 | 130 | 与 Next.js 项目部署方式一致,这儿已将 DB 初始化放到 package.json 131 | 132 | ``` json 133 | "scripts": { 134 | "dev": "prisma generate && prisma migrate dev && next dev", 135 | "build": "prisma generate && prisma migrate deploy && next build", 136 | "start": "next start" 137 | } 138 | ``` 139 | 140 | ### 为API编写SQL查询 141 | 142 | API 调用的query 信息: 143 | 144 | New Pools: 145 | 146 | https://dune.com/queries/2056212 147 | 148 | Latest Swap: 149 | 150 | https://dune.com/queries/2056310 151 | 152 | Alerts: 153 | 154 | https://dune.com/queries/2056547 155 | 156 | 157 | ### 重要功能点说明 158 | 159 | 1. Dune API 需要先 Execute Query ID, 获取其 execution_id,才能执行后面的 status/results。做好缓存过期处理。 160 | 2. 前端需要递归调用系统 API 来获取结果 161 | 162 | 163 | ## Dune API 文档 164 | - 中文文档: https://dune.com/docs/zh/api/ 165 | - 最新版本: https://dune.com/docs/api/ 166 | 167 | 168 | ## 项目代码仓库 169 | 170 | 项目的源代码在这里: 171 | [Uniswap New Pools Watcher](https://github.com/codingtalent/watcher) 172 | 173 | 174 | ## SixdegreeLab介绍 175 | 176 | SixdegreeLab([@SixdegreeLab](https://twitter.com/sixdegreelab))是专业的链上数据团队,我们的使命是为用户提供准确的链上数据图表、分析以及洞见,并致力于普及链上数据分析。通过建立社区、编写教程等方式,培养链上数据分析师,输出有价值的分析内容,推动社区构建区块链的数据层,为未来广阔的区块链数据应用培养人才。 177 | 178 | 欢迎访问[SixdegreeLab的Dune主页](https://dune.com/sixdegree)。 179 | 180 | 因水平所限,不足之处在所难免。如有发现任何错误,敬请指正。 181 | -------------------------------------------------------------------------------- /zh/ch23/img/watcher01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch23/img/watcher01.jpg -------------------------------------------------------------------------------- /zh/ch23/img/watcher02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SixdegreeLab/MasteringChainAnalytics/7b7c7777bf8956dd7e1bccf1dcdd1b2ece5cf717/zh/ch23/img/watcher02.jpg -------------------------------------------------------------------------------- /zh/readme.md: -------------------------------------------------------------------------------- 1 | 2 |

3 | book 4 |

5 | 6 | 本教程是一个面向区块链爱好者的系列教程,帮助新手用户从零开始学习区块链数据分析,成为一名链上数据分析师。 7 | 8 | - 英文版本: [Mastering Onchain Analytics](https://tutorial.sixdegree.xyz) 9 | - 中文版本: [精通链上数据分析](https://tutorial.sixdegree.xyz/v/zh/) 10 | 11 | 12 | > 参与贡献: [https://github.com/SixdegreeLab/MasteringChainAnalytics](https://github.com/SixdegreeLab/MasteringChainAnalytics) 13 | 14 | ## 目录 15 | 16 | - **简介** 17 | - [简介](readme.md) 18 | - [#0 成为链上数据分析师](ch00/ch00-become-chain-analyst.md) 19 | 20 | - **入门教程** 21 | - [#1 Dune平台简介](ch01/ch01-dune-platform-introduction.md) 22 | - [#2 数据分析新手上路](ch02/ch02-quickstart.md) 23 | - [#3 创建第一个Dune数据看板](ch03/ch03-build-first-dashboard.md) 24 | - [#4 熟悉数据表](ch04/ch04-understanding-tables.md) 25 | - [#5 SQL基础(一)](ch05/ch05-sql-basics-part1.md) 26 | - [#6 SQL基础(二)](ch06/ch06-sql-basics-part2.md) 27 | - [#7 实践案例:制作Lens的数据看板(一)](ch07/ch07-practice-build-lens-dashboard-part1.md) 28 | - [#8 实践案例:制作Lens的数据看板(二)](ch08/ch08-practice-build-lens-dashboard-part2.md) 29 | 30 | - **中级教程** 31 | - [#9 常见查询一:ERC20代币价格](ch09/ch09-useful-queries-part1.md) 32 | - [#10 常见查询二:代币的持有者、总供应量、账户余额](ch10/ch10-useful-queries-part2.md) 33 | - [#11 常见查询三:自定义数据、数字序列、数组、JSON等](ch11/ch11-useful-queries-part3.md) 34 | - [#12 NFT数据分析](ch12/ch12-nft-analysis.md) 35 | - [#13 借贷协议数据分析](ch13/ch13-lending-analysis.md) 36 | - [#14 DeFi数据分析](ch14/ch14-defi-analysis.md) 37 | - [#15 Dune SQL 查询引擎入门](ch15/ch15-dunesql-introduction.md) 38 | - [#16 Polygon区块链概况分析](ch16/ch16-blockchain-analysis-polygon.md) 39 | - [#17 MEV数据分析——以Uniswap为例](ch17/ch17-mev-analysis-uniswap.md) 40 | - [#18 Uniswap多链数据对比分析](ch18/ch18-uniswap-multichain-analysis.md) 41 | - [#19 各类常见指标分析](ch19/ch19-useful-metrics.md) 42 | 43 | - **高级教程** 44 | - [#20 区块链网络分析](ch20/ch20-network-analysis.md) 45 | - [#21 BTC数据分析-以指标CDD为例](ch21/ch21-btc-analysis.md) 46 | - [#22 如何构建魔法表(Spellbook)](ch22/ch22-how-to-build-spellbook.md) 47 | - [#23 使用Dune API创建应用程序](ch23/ch23-how-to-build-app-use-dune-api.md) 48 | 49 | ## 关于我们 50 | `Sixdegree`是专业的链上数据团队,我们的使命是为用户提供准确的链上数据图表、分析以及洞见,并致力于普及链上数据分析。 51 | 通过建立社区、编写教程等方式,培养链上数据分析师,输出有价值的分析内容,推动社区构建区块链的数据层,为未来广阔的区块链数据应用培养人才。 52 | 53 | - Website: [sixdegree.xyz](https://sixdegree.xyz) 54 | - Email: [contact@sixdegree.xyz](mailto:contact@sixdegree.xyz) 55 | - Twitter: [twitter.com/SixdegreeLab](https://twitter.com/SixdegreeLab) 56 | - Dune: [dune.com/sixdegree](https://dune.com/sixdegree) 57 | - Github: [https://github.com/SixdegreeLab](https://github.com/SixdegreeLab) 58 | 59 | 60 | ## 致谢 61 | 62 | **赞助** 63 | 64 | 本书得到以下机构赞助,非常感谢他们在撰写此书期间给予的大力支支持。 65 | 66 | 67 | - [Ethereum Fundation](https://ethereum.foundation/) 68 | - [Dune Analytics](https://dune.com/) 69 | 70 | **贡献者** 71 | 72 | 与此同时,有非常多的贡献者也参与到了此书的编写中,非常感谢他们的努力付出。 73 | 74 | 75 | - george-taotaome, chenxsan, Brendan, 肖宁, g.c., ken, shell, yueyan, wodeche,Winkey --------------------------------------------------------------------------------