Dune Query 入門教程及Sol錢包轉(zhuǎn)賬追蹤實(shí)踐Ⅰ
介紹
Dune Analytics 是一個(gè)用于分析并發(fā)現(xiàn)區(qū)塊鏈數(shù)據(jù)的強(qiáng)大工具。它使用 SQL 語(yǔ)言來(lái)查詢鏈上數(shù)據(jù),使用者可以將這些數(shù)據(jù)轉(zhuǎn)換為有用的分析。這篇博客將介紹 Dune 查詢的基礎(chǔ)用法,并通過(guò)一個(gè) Solana 鏈上鏈下鏈監(jiān)控實(shí)踐項(xiàng)目來(lái)幫助你學(xué)會(huì)實(shí)踐中的基礎(chǔ)查詢技術(shù)。
Data Explorer 功能介紹
在開始編寫查詢之前,熟悉 Dune Analytics 左側(cè)的 Data Explorer 是非常重要的。Data Explorer 提供了對(duì)數(shù)據(jù)庫(kù)中可用數(shù)據(jù)表和字段的瀏覽功能。你可以通過(guò)它查看不同區(qū)塊鏈的數(shù)據(jù)集、表結(jié)構(gòu)和字段的類型,從而更好地理解哪些數(shù)據(jù)可以用于查詢。例如,你可以在 Solana 區(qū)塊鏈下找到 transactions
表,并看到其中的字段(如 block_time
、pre_token_balances
等),這些信息對(duì)你編寫查詢時(shí)非常有幫助。
Data Explorer 的主要功能包括:
- 瀏覽不同區(qū)塊鏈(例如以太坊、Solana 等)的數(shù)據(jù)集。
- 查看每個(gè)數(shù)據(jù)表的字段和數(shù)據(jù)類型,幫助你了解如何構(gòu)建查詢。
- 使用過(guò)濾功能快速定位特定的表或字段。
利用 Data Explorer 可以幫助你更快地找到你需要的數(shù)據(jù),并了解這些數(shù)據(jù)的結(jié)構(gòu)。
基礎(chǔ)語(yǔ)法
Dune 使用 Trino 語(yǔ)法的 SQL,對(duì)于很多只寫過(guò) MySQL 的人來(lái)說(shuō),這些語(yǔ)法可能會(huì)有一些不同,但大部分基礎(chǔ)查詢是相似的,基本語(yǔ)法和我們所熟悉的 SQL 應(yīng)該相當(dāng)接近。下面對(duì)一些常用的 SQL 基礎(chǔ)語(yǔ)法用詞進(jìn)行解釋:
- WITH:用于定義公用表表達(dá)式(CTE),可以讓查詢分步驟進(jìn)行,增加可讀性和模塊化。
- SELECT:用于指定查詢的列。
- FROM:用于指定查詢的數(shù)據(jù)表。
- WHERE:用于過(guò)濾數(shù)據(jù),指定查詢條件。
- UNNEST:用于將數(shù)組字段解包為多行,便于后續(xù)處理。
- AS:為字段或表賦予別名,方便引用。
例如,要查詢 Solana 鏈上特定時(shí)間段內(nèi)的交易,可以使用下面的基本查詢語(yǔ)法:
SELECT * FROM solana.transactions WHERE block_time >= NOW() - INTERVAL '7' DAY;
- SELECT 語(yǔ)法用于查詢指定列。在這個(gè)例子中,查詢所有交易。
- FROM 用于指定數(shù)據(jù)來(lái)源,此處為
solana.transactions
表。 - WHERE 用來(lái)過(guò)濾數(shù)據(jù),例如查詢最近7天的交易。
聯(lián)合用法和基礎(chǔ) UNNEST
在 Dune 中,鏈上數(shù)據(jù)常包含運(yùn)行結(jié)果為數(shù)組的記錄,例如交易的應(yīng)用數(shù)量變更。這時(shí),可以用 UNNEST
。UNNEST
用于將數(shù)組字段中的每個(gè)元素都作為單獨(dú)的一行進(jìn)行處理。比如,在鏈上交易的數(shù)據(jù)中,有些字段包含數(shù)組(例如一個(gè)錢包的多個(gè)代幣余額),通過(guò) UNNEST
操作,可以將這些數(shù)組元素解開,讓每個(gè)元素變成一行數(shù)據(jù)。這對(duì)于需要分析數(shù)組內(nèi)部各個(gè)元素的情況非常有用,這樣就可以將數(shù)組內(nèi)容逐條處理,而不是整體作為一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
SELECT t.block_time, pre.owner FROM solana.transactions t, UNNEST(t.pre_token_balances) AS pre WHERE pre.owner = '6EDJ7JuynXSPaMvufzAX4swSRJZXv6uPi4s6jmo33xj5';
- UNNEST 語(yǔ)法用來(lái)將數(shù)組字段解包為多行,此處是
pre_token_balances
。 - AS pre 用來(lái)為每一行數(shù)組記錄賦予一個(gè)別名pre,便于后面查詢。
這個(gè)查詢實(shí)踐項(xiàng)目
我們的實(shí)踐項(xiàng)目是一個(gè)用于追蹤 Solana 鏈上特定鏈下鏈的代幣轉(zhuǎn)賬的分析工具。并通過(guò)這個(gè)查詢實(shí)現(xiàn)了特定代幣的交易跟蹤:
WITH filtered_transactions AS ( SELECT * FROM solana.transactions t WHERE block_time >= NOW() - INTERVAL '7' DAY -- 限制時(shí)間范圍為最近7天 ), wallet_related_transactions AS ( SELECT * FROM filtered_transactions t, UNNEST(t.pre_token_balances) AS pre WHERE pre.owner = '6EDJ7JuynXSPaMvufzAX4swSRJZXv6uPi4s6jmo33xj5' -- 為指定鏈下鏈地址 ), token_transfers AS ( SELECT t.block_time, pre.owner AS "From", post.owner AS "To", post.mint AS "Token", pre.amount AS "Pre_Amount", post.amount AS "Post_Amount" FROM wallet_related_transactions t, UNNEST(t.pre_token_balances) AS pre, UNNEST(t.post_token_balances) AS post WHERE pre.owner = '6EDJ7JuynXSPaMvufzAX4swSRJZXv6uPi4s6jmo33xj5' -- 指定主鏈包并地址 AND post.owner IS NOT NULL AND post.mint = 'BYcs8bjoGv6m4LkRrpEDVbJvPESvP9A1migRmaDApump' -- 指定代幣合約地址 ) SELECT block_time, "From", "To", "Token", "Pre_Amount", "Post_Amount" FROM token_transfers ORDER BY block_time DESC LIMIT 1000; -- 限制最多返回 1000 條記錄
這個(gè)查詢的過(guò)程
- 首先在
filtered_transactions
中限制查詢最近7天的數(shù)據(jù),使數(shù)據(jù)量更可控。 - 然后在
wallet_related_transactions
中將這些數(shù)據(jù)進(jìn)行UNNEST
,按照為指定鏈下鏈的交易進(jìn)行過(guò)濾。 - 最后在
token_transfers
中進(jìn)行更詳細(xì)的解包,并追蹤代幣從 “From” 到 “To” 的轉(zhuǎn)賬。
這樣的查詢?cè)O(shè)計(jì)使用了多個(gè) CTE 來(lái)組織查詢過(guò)程,通過(guò)漸進(jìn)過(guò)濾的方式,使得查詢更加高效。
結(jié)論
使用 Dune Analytics 可以幫助你對(duì)區(qū)塊鏈數(shù)據(jù)進(jìn)行深入分析。通過(guò)基礎(chǔ)的 SQL 語(yǔ)法并使用 UNNEST
來(lái)處理復(fù)雜數(shù)據(jù)結(jié)構(gòu),你可以實(shí)現(xiàn)特定鏈下鏈的轉(zhuǎn)賬查詢和跟蹤。在實(shí)踐中,使用強(qiáng)化的數(shù)據(jù)過(guò)濾以便將查詢范圍限制在為你所關(guān)心的信息上,這樣會(huì)更有效率。希望這篇博客能幫助你學(xué)會(huì)使用 Dune 來(lái)開始實(shí)現(xiàn)你的區(qū)塊鏈數(shù)據(jù)分析目標(biāo)。
你可能感興趣的文章
-
Mynt是什么?如何在Monad測(cè)試網(wǎng)上挖礦Mynt?
Mynt是一個(gè)去中心化的穩(wěn)定幣協(xié)議,允許用戶通過(guò)存入ETH或MON(Monad 的原生代幣)作為抵押品,鑄造與美元掛鉤的穩(wěn)定幣USDm,通過(guò)與 Mynt 進(jìn)行測(cè)試網(wǎng)互動(dòng),用戶可能有機(jī)會(huì)獲…
2025-06-06 -
如何在加密貨幣交易中應(yīng)用Black-Litterman模型?
Black-Litterman模型由Fischer Black和Robert Litterman于1991年在高盛開發(fā),Black-Litterman模型是加密貨幣交易和投資的強(qiáng)大工具,為最優(yōu)投資組合配置提供了穩(wěn)健的框架,那…
2025-06-06 -
加密貨幣交易中的諧波形態(tài):八種常用的諧波形態(tài)指南
諧波形態(tài)是依靠斐波那契比率來(lái)預(yù)示價(jià)格趨勢(shì)潛在反轉(zhuǎn)的高級(jí)圖表形態(tài),諧波形態(tài)精確且數(shù)學(xué)定義明確,使其成為重視市場(chǎng)預(yù)測(cè)結(jié)構(gòu)化方法的交易者的最愛(ài),在本指南中,我們將探討諧…
2025-06-06 -
區(qū)塊鏈的多層結(jié)構(gòu)都有那些?L1 與 L2 有什么區(qū)別?新手完整指南
區(qū)塊鏈的多層結(jié)構(gòu)都有那些?區(qū)塊鏈層:完整指南區(qū)塊鏈被稱為革命性的,但其潛力的本質(zhì)在于其多層架構(gòu),這些層決定了信息在分布式網(wǎng)絡(luò)中的傳遞、驗(yàn)證、記錄和訪問(wèn)方式,從硬件…
2025-06-06 -
什么是空投挖礦?如何在2025年進(jìn)行空投挖礦?
空投挖礦是指積極尋求并參與由各種加密貨幣初創(chuàng)公司或項(xiàng)目的創(chuàng)始人和創(chuàng)始人組織的空投活動(dòng),很多新手投資者還不了解什么是空投挖礦?如何在2025年進(jìn)行空投挖礦?下文將為大…
2025-06-06 -
什么是時(shí)空證明PoSt?有什么優(yōu)勢(shì)?有哪些值得關(guān)注的項(xiàng)目?
Proof-of-Space-Time(PoST)是什么?Proof-of-Space-Time(PoST)有什么優(yōu)勢(shì)?時(shí)空證明PoSt有哪些值得關(guān)注的項(xiàng)目?下面腳本之家小編給大家詳細(xì)介紹下時(shí)空證明PoSt是什么吧…
2025-06-06 -
Solana是什么?它如何運(yùn)作?與其他鏈有何不同?
Solana 是一個(gè)高性能公鏈,以其速度快、費(fèi)用低和可擴(kuò)展性而聞名,它于 2020 年上線,支持智能合約、去中心化應(yīng)用 (dApp) 和數(shù)字資產(chǎn)——與以太坊類似,但速度更快、成本更低…
2025-06-05 -
SUI上排名前五的空投項(xiàng)目有哪些?SUI 上5大最佳空投項(xiàng)目
Sui近期在DEX日交易量上超越了Base,表明盡管發(fā)生了短暫震動(dòng)網(wǎng)絡(luò)的安全事件,但用戶參與度依然強(qiáng)勁,即使在受到協(xié)議層漏洞影響后,生態(tài)系統(tǒng)仍展現(xiàn)出非凡的韌性——用戶并未…
2025-06-05 -
InfoFi與注意力經(jīng)濟(jì)平臺(tái)Kaito是什么?Kaito新手使用教學(xué)
KAITO是AI驅(qū)動(dòng)的Web3一站式資訊平臺(tái),KAITO是Kaito生態(tài)關(guān)鍵代幣,生態(tài)主要交易媒介、能質(zhì)押、能參與項(xiàng)目Launchpad、能分配獎(jiǎng)勵(lì),就像是注意力版本的$BNB代幣之于BNB生態(tài),下…
2025-06-05 -
什么是InfoFi?有哪些InfoFi項(xiàng)目值得關(guān)注?如何利用InfoFi賺錢
一個(gè)新的金融前沿正在形成——信息、注意力和數(shù)字信號(hào)成為寶貴的資產(chǎn),在本文中,我們探討了什么是InfoFi,有哪些InfoFi項(xiàng)目值得關(guān)注以及個(gè)人在這個(gè)新的信息驅(qū)動(dòng)型經(jīng)濟(jì)中如…
2025-06-05