原文作者:0xPhillan
原文來源:web3edge
原文翻譯:老雅痞
Dune可能是目前大眾可以使用的最強大的區塊鏈數據分析工具,而且最棒的是:免費!使用Dune,通過公共數據庫你可以近乎實時地訪問區塊鏈數據,可以使用SQL進行查詢。
這是很強大的能量。
Dune在將區塊鏈數據添加到數據庫之前,會對其進行解碼,這意味著你不必自己上手搞明白字節碼。相反,你可以使用Dune的瀏覽器來瀏覽數據集、特定的智能合約、事件或調用!
Dune最近發布了V2引擎,將性能提高了10倍,現在就是你學習如何使用Dune的時候了。
在本指南中,你將學到:
第1部分:Dune界面
第2部分:使用SQL構建你自己的查詢和圖表——從最基礎開始
第3部分:將所有內容組織到儀表板中
在此次的分步指南中,我們將為PoolyNFT系列構建包含以下內容的儀表板:
讓我們開始吧!
儀表盤
查詢
分叉
查詢編輯器
數據集瀏覽器和數據分類
保存你的分叉查詢
第2部分:構建你的第一個查詢
決定建立哪些查詢
尋找正確的信息
準備在Dune中建立你的第一個查詢
查詢1:以ETH形式籌集的資金
查詢2:以美元籌集的資金
?查詢2a:以當前ETH價值計算的美元籌款
?查詢2b:以購買時的ETH價值計算的美元籌款資金
查詢3:支持者總人數
查詢4:
?查詢4a:使用erc721的排行榜。抽象法
?查詢4b:使用poolysupporter的排行榜。解碼表
查詢5:每個NFT集的最大供應量和剩余供應量
查詢6:隨著時間的推移,ETH籌集的時間序列圖
結束
儀表板
儀表盤是一個查詢的集合,它被安排成一系列的圖表、計數器和其他信息,給用戶提供關于特定興趣領域的背景資料。下面,我打開了傳奇人物@hildobby的以太坊儀表盤。在這里,我們可以看到從Dune的數據庫中提取的各種數據,以集合或者時間序列圖的形式顯示。
在Dune中,每個儀表板都是公開的。這意味著任何人都可以查看和復制你構建的、或其他人構建的所有內容!這大大減少了儀表板的創建時間,并讓你可以從其他用戶的查詢中學習。
查詢
如果你還記得,我提到儀表板是查詢的集合。如果你單擊任何一個儀表板元素的標題,你將被帶到該圖表的SQL查詢:
以太坊價格查詢
讓我們分叉以太坊價格圖表!在查詢上按“Fork”后,你將被帶到查詢編輯器,之前的代碼已經復制進去!
查詢編輯器
讓我在這里向你介紹各種屏幕上的元素:
查詢位置和名稱——點擊保存后可以更改名稱!
數據集瀏覽器-搜索特定數據集
查詢窗口-在此處輸入你的SQL查詢
可視化選擇器-選擇是否查看查詢結果、分叉折線圖或創建新的可視化
運行-運行查詢窗口中的查詢
結果/可視化-查看查詢結果或使用查詢結果創建的可視化
保存-保存你的查詢!
鏈式選擇
數據集搜索
瀏覽原始區塊鏈數據
瀏覽解碼合約數據
瀏覽數據的摘要
瀏覽社區提供的數據
Dune數據集瀏覽器概述
數據集選擇
在數據集選擇中,你可以選擇想要解析的鏈。選擇“DuneEngineV2(Beta)”可以讓你使用Dune的最新增強功能,其中包括多鏈查詢和10倍的性能提升。
數據集資源管理器中的數據集選擇選項
如果你選擇另一個鏈,類別選擇將消失,而你將看到可以與之交互的合約調用和事件的列表。
選擇“1.以太坊”
搜索
在搜索字段中,你可以輸入搜索參數,Dune將以你的要求搜索包含該關鍵字的所有表格。
注意:DuneEngineV2和舊的搜索功能以不同的方式返回結果。舊的搜索返回所有結果的列表,而DuneEngineV2返回一個嵌套的結果列表。我們將使用V2引擎!
DuneEngineV2原始區塊鏈數據概述
這是獲取高級區塊鏈數據的一種非常快捷方便的方法。
解碼項目
在這里,你將找到已被Dune解碼的項目。解碼的項目是指Dune團隊將項目拆開,貼上標簽放入表格,以便用戶對某些數據有一個簡單的標準化的參考。
你會再次注意到,搜索結果是嵌套的。在最高級別,有你可以搜索的項目,在較低級別,你可以過濾該項目中的特定智能合約,最后我們會看到從該智能合約生成的各種表格。如果單擊任何表格,你將看到一個列表,就像原始區塊鏈數據一樣。
DuneEngineV2解碼項目概述
摘要
摘要可以被認為是連接和組合各種查詢和數據塊的,以形成唯一表格的自定義表。摘要可幫助用戶更輕松地查詢他們正在尋找的特定數據,而無需手動組合各種數據。
一般來說,摘要可以分為兩大類:
部門摘要:特定部門的數據
項目摘要:項目特定數據
從摘要的子菜單中,可以看到帶有標簽的摘要列表,這些標簽可以指定這個摘要是特定于部門還是特定于項目。
DuneEngineV2摘要概述
社區
社區部分可以被認為是摘要部分的擴展,但由Dune社區成員提供。
你可能想知道為什么社區部分只有一個條目——那是因為DuneEngineV2剛剛發布!隨著時間的推移,我們可以期待看到越來越多受信任的社區成員構建的社區數據集。
DuneEngineV2社區概述
數據集瀏覽器標簽
在下圖中,你可以看到自DuneEngineV2發布以來,Dune中數據如何匯總的摘要:四個主要數據類別是原始區塊鏈數據、解碼項目、摘要和社區,它們以表格的形式保存了各種區塊鏈的數據,可以保存各種數據類型。
英國考慮授予英格蘭銀行更多穩定幣監管權力:金色財經報道,英國財政部在一份穩定幣咨詢文件中概述了其考慮如何進行穩定幣監管。該政府考慮授予英格蘭銀行更多穩定幣監管權力,讓英格蘭銀行與金融行為監管局(FCA)一起監管。該咨詢文件是在政府向PayPal、英國匯豐銀行、Circle 和巴克萊銀行等受訪者征求反饋后發布的。
財政部發現,2009 年《銀行法》為英國央行提供了足夠的監管范圍來監督穩定幣,不過它指出,這將“進一步澄清央行現有的監管工具包” ,咨詢文件解釋說,英國央行可以處理審慎事項,而英國金融行為監管局可以負責監管行為。[2023/8/9 21:33:19]
DuneEngineV2數據瀏覽器中的標簽概述
保存分叉查詢
讓我們先保存這個查詢。點擊保存后,會發生一些事情。首先,要為你的查詢命名一個名字。
保存查詢彈出窗口
選擇名稱后,你會注意到:
(1)查詢位置和名稱已更新,并且(2)你的查詢正在運行。這意味著Dune正在從他們的數據庫中獲取最新數據,該數據庫會定期使用來自各種區塊鏈的最新數據進行更新。查詢完成運行后,你將看到查詢結果(3)。
分叉查詢概述
從這里,如果你單擊(1)“查詢結果”、“折線圖”或“新可視化”中的任何一個,(2)結果/可視化框將與(3)顯示在其下方的選擇設置一起更新。在這里,還有一個“添加到儀表板”按鈕,可以快速將你的查詢結果或可視化,添加到新的或現有的儀表板——就像之前@hildobby的以太坊儀表板一樣!
查詢結果和可視化部分
如果你點擊(1)右上角的圓圈,然后點擊(2)“我的查詢”,將打開你帳戶的查詢列表。
導航到你的查詢
查詢列表包括你曾經保存在帳戶中的所有查詢。在下面的頂部屏幕截圖中,我們可以看到創建的最新查詢:
帶有最新查詢的查詢列表保存在頂部
恭喜,你已經學會使用可視化分叉并保存了你的第一個查詢!
分叉Forking是Dune的超級強大的功能之一,它可以幫助你通過建立在其他“巫師”在你之前建立的查詢上,輕松而快速地創建新的查詢。你可以結合多個分叉的查詢來建立你自己的儀表板。
讓我們動手并構建一個儀表板——一個查詢和可視化的集合——從頭開始,不走分叉這條路。這部分將教你在哪里可以找到正確的區塊鏈詳細信息以查找你的特定項目,并教你SQL的基礎知識。
如何找到特定項目所需的正確信息
一些基本的SQL知識
但首先,我們需要決定儀表板的用途。PoolTogetherDeFi協議的PoolyNFT是第一步。
PoolyNFT鑄造頁面。來源:https://mint.pooltogether.com/
如果我們在Dune上搜索“Pooly”,果然可以找到一些由社區創建的PoolyNFT追蹤器。
在Dune.com上搜索Pooly的結果
我們可以單擊@0xbills創建的Pooly儀表板之一,然后單擊“Fork”開始工作……
@0xbills通過https://dune.com/0xbills/Pooly-NFT
但是,如果我們從頭開始構建它,我們將學習如何成為區塊鏈偵探的同時,學習一些SQL!因此,需要從頭開始構建我們自己的查詢。
確定要構建的查詢
首先,讓我們決定想要在儀表板上使用哪些圖表。讓我們重建Pooly在其主頁上構建的視圖!仔細看下面兩張截圖,我們可以看到一些基于鏈上數據的指標。
帶有資金跟蹤器的PoolyNFT登錄頁面
PoolyNFT鑄幣廠選項和供應
我們可以看到:
籌集的資金與以ETH計價的資金目標
籌集的資金與以美元計價的資金目標
支持者總數
排行榜包括地址、每個地址購買的NFT數量以及按降序排列的總ETH
三種NFT類型中的每一種的最大供應量和剩余供應量
是不是超級棒!但這些只是時間的快照。讓我們也給自己另一個挑戰:
制作隨時間上升的ETH時間序列圖
就目前而言,我們無法以與Pooly網站相同的方式構建視圖,但我們可以捕獲相同數量的數據來構建我們的儀表板。
尋找正確的信息
在我們開始使用Dune之前,我們需要找到正確的信息。從網站上,我們可以看出PoolTogether正在銷售三套NFT:
支持者–9個隨機收藏品中的1個,價值0.1ETH
律師–1ETH只有一件藝術品
評委——75ETH只有一件藝術品
Pooly是通過一份合約出售所有三種NFT,還是通過三種不同的合約出售?
讓我們前往Etherscan,看看是否能找到與Pooly相關的智能合約。打開Etherscan.io后,鍵入“Pooly”以查看這些智能合約的所有者是否在Etherscan上注冊了它們。
在Etherscan上搜索Pooly
找到了!共有三個智能合約,可能對應于三個NFT集合中的每一個。此外,我們現在知道每個Pooly都是一個ERC721代幣。
打開三個集合中的每一個,并通過單擊鼠標懸停在該地址上時出現的復制圖標,來復制智能合約地址。在頁面底部我們還可以看到最近的所有交易,這將有助于以后的故障排除。
通過Etherscan查找Pooly合約地址
我們將需要這些合約地址從Dune中提取正確的數據,它們構成了我們所有查詢的基礎:
0.1ETHPooly支持者:
0x90B3832e2F2aDe2FE382a911805B6933C056D6ed
1.0ETHPoolyLawyer:
0x3545192b340F50d77403DC0A64cf2b32F03d00A9
75ETHPooly法官:
0x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523
準備在Dune中構建你的第一個查詢
首先,導航到dune.com,然后單擊屏幕右上角的“新查詢”。
創建新查詢
本周約有11家加密公司共籌集約1.69億美元:金色財經報道,本周加密公司的融資有所增加,約有11家公司共籌集了約1.69億美元。這一數字略低于上周8850萬美元的兩倍,但低于4月份的第一周,當時加密公司的收入為2.51億美元。
比特幣托管解決方案和抵押貸款機構Unchained在B輪融資中籌集了6000萬美元,成為本周最大的融資項目。[2023/4/24 14:22:28]
這將打開查詢編輯器,我們就可以開始進行查詢工作了!
新的和未觸及的新查詢窗口
查詢1:以ETH籌集的資金
首先,在左上角從“7.Dune引擎V2”改為“1.以太坊”。Pooly在以太坊上,因此我們只需要以太坊數據來進行此查詢。另外,“1.以太坊”比剛剛進入測試階段的DuneEngineV2更成熟。
對于我們的第一個查詢,我們將構建一個計數器,顯示以ETH計價的募集資金。為此,請將以下代碼復制到Dune的查詢字段中,然后按“運行”:
selectSUM("value"/1e18)fromethereum.transactionswhere"to"='\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'or"to"='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'or"to"='\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'
上面的代碼是一個SQL查詢,它解析Dune的數據庫以獲取我們請求的特定數據。你可以將Dune的數據庫想象為各種表的集合,每個表都包含你可能想要提取的特定信息。使用SQL,你可以實現:
指定你想要的數據
是否要轉換該數據
你要從哪個表中獲取數據
是否要過濾數據
為了說明上述情況,讓我們逐段運行上述代碼。將以下代碼復制到Dune的查詢編輯器并運行它:
select*fromethereum.transactionswhere"to"='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
你會得到一個包含很多信息的大表:
使用*命令返回表中所有列的示例
現在讓我們看一下SQL代碼:
SQL代碼分解
這段代碼的意思是“從以太類別中的事務表中選擇所有列,其中to列的值為x3545192b340F50d77403DC0A64cf2b32F03d00A9”,或者使用簡單的英語:給我一個表,其中包含與Pooly2(1ETH)智能合約的所有智能合約交互。
你無需運行查詢即可查看表中的列。數據瀏覽器讓你通過其漂亮的搜索功能探索各種表頭:
使用數據瀏覽器在“以太坊”中搜索表
我們可以完全刪除第3行,以去除過濾器,然而,這將返回一個巨大的表,查詢將需要很長的時間來完成。你的查詢越精確,它們就會運行得越快!
因為我們只想查詢歸還籌集的資金,所以不需要所有列。所以讓我們調整我們的代碼,只抓取“value”列:
select"value"fromethereum.transactionswhere"to"='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
現在我們只有一個“值”列,而不是我們之前看到的很多:
返回“值”列中的所有條目
但是,你可能會注意到,這些值似乎非常大。那是因為它們是以Wei而非ETH計價的!為了解決這個問題,我們可以簡單地將算術運算符應用于“值”列:
select"value"/1e18fromethereum.transactionswhere"to"='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
這樣看起來是不是好多了!SQL中的1e18與10^18相同,我們只是告訴Dune將這個數字除以1,000,000,000,000,000,000,以便我們看到以ETH計價的值而不是Wei。
由于我們只想要總值而不是值列表,我們可以將“value”/1e18包裝在SUM()語句中:
selectSUM("value"/1e18)fromethereum.transactionswhere"to"='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
太棒了,我們現在可以看到在Pooly2上花費的ETH總數!由于我們想要獲得所有三個PoolyNFT智能合約的總花費,我們需要再添加兩行以包含有關其他智能合約的詳細信息:
selectSUM("value"/1e18)fromethereum.transactionswhere"to"='\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'or"to"='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'or"to"='\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'
最終輸出
“?or?”命令與“?where?”命令協同工作,并指定在過濾“to”列中的值時,如果找到第一個值或第二個值或第三個值,則應考慮該行。
我們現在看到,總共花費了773.7ETH用于所有三個Pooly合約。驚人的!讓我們去Pooly網站看看是否正確:
將我們的輸出與PoolyNFT頁面上的官方數據進行比較。資金目標達到-恭喜!
在Pooly網站上,我們看到776.5ETH-恭喜實現目標!但是,哦不,有2.8ETH的差異!好吧——這沒什么好擔心的。Dune定期同步區塊鏈數據。而且由于他們同步到數據庫的數據集非常龐大,因此需要一些時間。我們可以預期數據將在接下來的一兩個小時內刷新。
現在我們的查詢已經完成,我們需要設置一個計數器以便稍后在我們的儀表板上顯示它。在查詢結果框下方,單擊新的可視化,然后在出現的下拉菜單中單擊“計數器”。
向查詢添加計數器可視化
將出現一個計數器,如果向下滾動,你會看到各種設置。只需根據自己的喜好調整設置。
計數器可視化標簽和標題設置
完成后,單擊(1)“添加到儀表板”并選擇(2)“新儀表板”。然后(3)為你的儀表板命名并(4)單擊“保存儀表板”。新儀表板將出現在你的儀表板列表中。從這里單擊(5)你希望將可視化添加到的儀表板上的“添加”。添加后,標簽將從“添加add”變為“已添加added”。
數據:一巨鯨地址疑似正在做空CRV,CRV 24小時跌超13%:11月22日消息,數據分析機構Lookonchain發推稱:“某巨鯨地址從Aave借出了2000萬枚CRV(約990萬美元) 并將其中1000萬枚CRV(約490萬美元)轉入了OKX,而在過去的七天內,該地址已從Aave借出了3700萬枚CRV,與此同時CRV價格已從0.625美元跌至0.464美元。看起來該地址正在通過做空并拋售借來的CRV獲利。”
截至發文,CRV暫報0.434美元,24小時跌幅13.92%。[2022/11/22 7:56:54]
將可視化添加到儀表板
如果你在此子菜單中單擊儀表板的名稱,你將被帶到顯示我們跟蹤器的儀表板。
添加了可視化的儀表板
干得漂亮!
一旦我們完成了所有查詢的設置,我們將回到編輯我們的儀表板。
查詢2:以美元籌集的資金
我們有兩種方法可以解決這個問題:
使用用于購買NFTs的美元資金的當前價值
使用購買時資金的美元價值
如果我們查看Etherscan上的智能合約,我們可以看到大部分776.5ETH已經從智能合約中移出,截至撰寫本文時,PolyNFT智能合約中還剩下299.2ETH。
Etherscan.io上的Pooly1/2/3智能合約ETH余額
如果我們查看之前的Pooly網站截圖,776.5ETH的價值為1,411,249美元,這暗示著Pooly智能合約所有者可能將資金保留為ETH,而不是美元。
最終,很難說Pooly采用哪種方法,但兩種計算美元價值的方法都很有趣:
當前值告訴我們資金現在的價值
購買時的價值告訴我們購買者的預期美元金額
所以……讓我們一起創造吧!
查詢2a:以當前ETH價值以美元籌集的資金
對于這個,我們將使用我們之前的代碼作為基礎,并在一些額外的行中插入新代碼以獲得當前的美元價值。
首先,fork我們剛剛創建的查詢:
/1e18)*(????SELECT"price"FROMprices.usd????WHERE"symbol"='WETH'????AND"minute"<now()-interval'1hours'????ORDERBY"minute"DESC????LIMIT1??)fromethereum.transactionswhere"to"='\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'or"to"='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'or"to"='\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'
你會注意到我們在SUM(“value”/1e18)命令之后添加了一個乘法運算符*和一個大代碼塊。
在Dune中,你可以突出顯示查詢的特定部分,并通過單擊“運行選擇”僅運行該部分。讓我們(1)僅突出顯示括號內的行并(2)運行該選擇:
通過選擇查詢的一部分,你可以只運行選定的部分。
在查詢結果中你將看到WETH的最新美元價格!我們在這里的添加將WETH的最新價格乘以籌集的ETH數量,從而為我們提供美元價值。
讓我們分解這個代碼塊:
先前代碼的細分
從price.usd表中選擇“價格”列
過濾“WETH”的符號列
僅查看過去1小時的時間條目
按降序排列
將查詢限制為一個結果
為了更好地理解這段代碼,讓我們對查詢進行一些小的調整。(1)將“price”替換為*和(2)僅選擇第2到5行的代碼,然后(3)運行選擇:
稍作調整運行上一個查詢
在查詢結果中,你將看到由五列組成的完整表。首先,讓我們檢查一下Etherscan.io中的合約地址:
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Etherscan.io上的WETH智能合約
該智能合約控制以太坊區塊鏈上的WETH資產。距離我們的目標更進一步了!現在我們從之前的屏幕截圖中知道了表格的來源,該屏幕截圖顯示了WETH的美元價格。
讓我們將注意力轉移回上一張表:
查詢結果表我們之前的查詢
在這里,我們有一個名為“分鐘minute”的列,它每分鐘跟蹤ETH到美元的價值。由于我們將查詢限制為“間隔1小時”,因此我們只能獲得最新一小時的可用數據。出于我們的目的,我們實際上只需要最新的數據輸入,因此將此查詢限制在最后一小時會顯著加快查詢速度。例如,也可以將其更改為“1天”、“3天”或“1周”,以獲取更多歷史數據。
這里重要的是列名是“分鐘”,因此我們的查詢引用“分鐘”列,不要將其誤認為與時間相關的命令。
讓我們將我們的代碼恢復到我們在本節開頭更改的內容并運行查詢:
保存查詢
結果是已經轉移到Pooly1、Poly2和Pooly3智能合約以換取PoolyNFT的ETH的當前美元價值。
為此,我們將再次使用計數器,因此向下滾動并單擊從我們之前的查詢分叉的計數器,調整數據源和更改標簽。
調整計數器可視化
完成后,記得保存并添加到我們的儀表板:
保存查詢并將可視化添加到我們之前的儀表板
添加后,它將如下圖所示。別擔心,在本指南的最后,我們會清理它。現在,不要擔心外觀!
添加了第二個查詢的儀表板
查詢2b:籌集的資金以美元計算,購買時為ETH價值
這個查詢會稍微復雜一些,因為我們必須查詢兩個表并組合結果。具體來說,我們將必須獲取單個交易并使用交易時的ETH價格轉換為每筆交易的ETH價值。
同樣,讓我們先fork之前的查詢,為我們的下一個查詢做準備:
分叉上一個查詢。
從分叉的代碼中,我們要進行以下操作:
withpoolyTransactionsas(select??block_time,??value/1e18asvalue_ethfromethereum.transactionswhere"to"='\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'or"to"='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'or"to"='\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523')selectsum(value_eth*price)frompoolyTransactionstxleftjoin??(selectminute,pricefromprices.usd???????wheresymbol='WETH'andminute>'2022-05-01')???????aspricesondate_trunc('minute',block_time)=minute
比特幣市值占比降至近半年以來最低點:金色財經消息,據CoinMarketCap數據,自六月中旬以來比特幣市值占比持續下降,目前已降至40.35%附近,此占比為近六個月以來的最低點。此前4月23日的低點為40.79%。
金色財經昨日報道,ETH市值占比為19.2%,較6月份低點增漲超5%。[2022/8/8 12:08:25]
使用購買NFT時的ETH-USD匯率查詢。
如果我們在此處運行此代碼,我們會看到我們收到了140萬美元的美元價值。
讓我們把這段代碼分成三個部分:
將查詢分為三個部分
第1節
在這里,我們構建了我們將引用的第一個表。我們在這里所做的是創建一個我們稱之為“poolyTransactions”的輔助表,它將保存來自ethereum.transactions表的block_time和value_eth。對于這個表,我們過濾了我們知道的三個Pooly地址。
這里逐行解釋:
第1行:使用poolyTransaction作為-定義名為“poolyTransaction”的輔助表具有以下屬性
第3-11行:選擇要包含在ethereum.transcations表中的列和過濾器
第5行:value/1e18asvalue_eth——這里我們將列重命名為“value_eth”,以便我們可以在第2節中直接引用它,而不是進行其他計算
第2節
這是我們創建輸出表的地方。你會注意到我們正在從poolyTransactions構建一個表,這是我們在第1節中創建的輔助表,但我們還引用了一個我們尚未定義的名為“price”的列。價格實際上只在第19行后面定義!這是可能的,因為我們在第3節中將poolyTransactions與price.usd表中的某些輸出連接起來。所以本質上,我們正在使用我們的輔助表?poolyTransactions?以及我們從price.usd中構建的表,創建一個表的下一節。
第3節
這是我們定義一個要與另一個表連接的表的地方。“leftjoin”關鍵字允許我們這樣做:
第18行:leftjoin——關鍵字用于表示我們想將我們的第一個表與另一個表連接起來。這意味著,我們在第1節中定義的第一個表作為基表。
第19-20行:這里我們定義了我們想要從price.usd創建的表。在第20行中,我們將持續時間限制為“2022-05-01”,因為Pooly智能合約僅在5月份部署,因此如果我們將其限制在更小的時間范圍內,可以顯著加快查詢數據的過程。
第21行:作為價格——這將第19-20行中的表格命名為“價格”,以便于將來參考
第22行:ondata_trunc('minute',block_time)=minute?–這是將我們的輔助表與價格表結合起來的行。這里所說的是從我們的輔助表中取出列“block_time”,并將其截斷為僅按照分鐘,即刪除所有其他不是分鐘的數據。price.usd表已經被截斷為分鐘,所以這里不需要進一步的轉換。然后將prices.usd中的分鐘列與我們輔助表中的分鐘列進行匹配,從而將正確的價格從prices.usd分配到poolyTransactions中對應的分鐘時間戳。
在數據集瀏覽器中查看price.usd表的分鐘列
為了更好地可視化第三部分,我重新組織了各個部分以使其更易于理解:
連接命令每一步的可視化
(1)我們創建poolyTransactions表,然后(2)我們告訴SQL將它與另一個表連接起來,(3)我們將它定義為來自prices.usd表的分鐘和價格列。然后將我們創建的這個price.usd表連接到左表poolyTransactions上,使用以分鐘為單位的時間作為映射變量。要連接表,兩個表必須具有完全相同的條目,如果我們將block_time變量截斷為分鐘,我們會在兩個表之間創建匹配的分鐘。通過這樣做,(5)poolyTransactions表被更新以包括價格列,價格值與相應的日期相匹配。
從這里,我們只需查詢連接的poolyTransactions表,并將每一行的value_eth和ETH價格相乘的結果相加。
現在添加一個計數器,保存并添加到儀表板!
向查詢添加計數器可視化
計數器可視化設置并添加到儀表板
計數器可視化添加到儀表板
查詢3:支持者總數
對于我們的下一個查詢,我們想要計算購買PoolyNFT的唯一地址。這意味著即使一個地址購買了所有三種Pooly類型的多個Pooly,它們也應該只計算一次。
為此,讓我們首先打開我們的第一個查詢,將其分叉,記住,這一步也要保存。
分叉第一個查詢
這里我們簡單地改變第一行:
selectCOUNT(DISTINCT"from")fromethereum.transactionswhere"to"='\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'or"to"='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'or"to"='\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'
獨特的Pooly支持者查詢
COUNT變量計算所有事務,而DISTINCT關鍵字確保每個唯一條目只計算一次。我們得到的結果是4660個獨特的支持者。如果我們將其與Pooly網站上的獨特支持者進行比較,我們會發現他們非常接近:
Pooly實時支持者數據
這表明我們的查詢是正確的,因為Dune的數據庫刷新和最新的區塊鏈狀態之間存在一點延遲。
最后,更改可視化計數器并再次添加到儀表板。
調整計數器的可視化設置并添加到儀表板
計數器添加到儀表板
查詢4a:使用erc721的排行榜,摘要
接下來,讓我們構建排行榜,包括地址、每個地址購買的NFT數量和總ETH以降序排列。
同樣,讓我們分叉之前的查詢,這樣我們就不必重新輸入過濾后的地址。請記住在繼續之前保存此新查詢。
查看排行榜,我們需要三個信息。首先是購買者的地址,然后是購買的NFT數量,最后是購買所有NFT所花費的ETH數量。
BitMEX創始人:高盛擬收購Celsius資產或僅為公關噱頭:6月25日消息,BitMEX創始人 Arthur Hayes 在社交媒體上發文表示,除非高盛明確表示,請不要相信高盛正在將其資金置于風險之中。高盛正在做的就是咨詢銀行應該做的,召集一群投資者,幫助他們構建購買不良資產的框架,以獲取巨額費用。
Hayes表示,如果這個工具真地從Celsius Network收購資產,并再次啟用提款功能,那么社區可以為債權人拿回一些錢而歡欣鼓舞。這將恢復市場信心,并為加密貨幣啟動牛市提供更多支撐。但他再次提醒,任何和所有的緊急援助都應該被視為公關噱頭,直到實際資金得到部署,實際儲戶可以從破產的中心化加密貸款機構提取部分或全部資金。[2022/6/25 1:30:54]
Pooly排行榜列
在這里,我們正在查看不是購買了但沒有持有的情況。完全有可能有人購買了NFT,然后將其移至安全錢包或稍后轉售。我們只對首次購買感興趣。
我們使用以下查詢來實現這一點:
withpoolyTransactionsas(select??"from",??hash,??value/1e18asvalue_ethfromethereum.transactionswhere"to"='\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'or"to"='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'or"to"='\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523')select"from",nfts_purchased,value_ethfrompoolyTransactionsleftjoin??(Selectevt_tx_hash,COUNT("tokenId")asnfts_purchased????Fromerc721."ERC721_evt_Transfer"????Where(contract_address='\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'????orcontract_address='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'????orcontract_address='\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523')????and"from"='\x0000000000000000000000000000000000000000'????groupby1)????asnfts????onevt_tx_hash=hashORDERBY3desc
Pooly排行榜表
你會注意到這與“購買時以ETH價值以美元籌集的資金”中的查詢非常相似,這是因為我們使用了相同的方法:我們首先在poolyTransactions表中收集交易數據,然后我們留下了第二個表——它上面有一個共同的映射值。
在這里,對于第二個表,我們使用erc721.“ERC721_evt_Transfer”表,這是Dune維護的一個摘要,用于跟蹤以太坊上的所有NFT傳輸。如果我們使用數據集瀏覽器,請輸入“erc721”。并滾動到“ERC721_evt_Transfer”,我們可以看到該特定表中包含的所有內容。我們還可以只突出顯示第二個表的命令,看看輸出是什么:
由于我們只想要智能合約新鑄造的NFT,因此我們必須將“發件人”地址指定為空地址。在以太坊上,所有NFT都是從空地址鑄造的。通過計算每筆交易的“tokenId”數量,我們可以統計每筆交易鑄造的NFT總數。
你還會注意到過濾器的定義方式有些特殊。前三個過濾器現在包含在括號中,而最后一個過濾器位于括號之外。
評估前三個過濾器語句是否用括號括起來
括號決定了計算和/或過濾器命令的順序,就像在SQL中執行算術命令時一樣。如果我們沒有將前三個語句括起來,則and條件將僅適用于最后一個過濾器設置。
不使用括號時的評估
由于我們希望將fromnull地址過濾器應用于先前過濾器的所有結果,因此我們需要添加括號。
最后,由于我們使用“COUNT”命令,我們需要指定在哪一列進行計數。為此,我們使用“groupby”命令表示我們要將“tokenId”的計數分組到表中的第一列,即“evt_tx_hash”。
之前提到,我們需要一個通用映射值來將第二個表映射到表。在這里,我們使用交易哈希將每筆交易購買的NFT數量映射到我們的poolyTransactions表,這次我們也要求了交易哈希值。因此,最終,我們將erc721."ERC721_evt_Transfer"表的交易哈希值映射到我們的poolyTransactions表中,其中只包括用于購買poolys的交易。
輸出是一個表格,其中包括購買者地址、總共購買的NFT數量以及花費的ETH總價值。
最后,我們告訴Dune為“ORDERBY3desc”,這意味著我們輸出表的第三列應該按降序排列:
“ORDERBY3desc”命令。
超棒!我們的排行榜已經完成。讓我們將其與PoolyNFT網站上的排行榜進行比較:
將Dune查詢排行榜與Pooly網站排行榜進行比較。
并非所有數字都相同,但從這個列表中我們可以看到,一些地址、購買的NFT和總ETH花費的數字確實相同。這又是Dune和實時區塊鏈數據之間的同步時間問題,無需擔心。
請記住保存你的查詢并將其添加到儀表板。
查詢4b:使用poolysupporter的排行榜解碼表
除了使用erc721.“ERC721_evt_Transfer”表,我們還可以使用Dune團隊整理的poolysupporter.“PoolyNFT_call_mintNFT”解碼表。
withpoolyTransactionsas(select??"from",??hash,??value/1e18asvalue_ethfromethereum.transactionswhere"to"='\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'or"to"='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'or"to"='\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523')select"from",nfts_purchased,value_ethfrompoolyTransactionsleftjoin??(Selectcall_tx_hash,"_numberOfTokens"asnfts_purchased????Frompoolysupporters."PoolyNFT_call_mintNFT"????wherecontract_address='\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'????orcontract_address='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'????orcontract_address='\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'????)????asnfts????oncall_tx_hash=hashORDERBY3desc
方法與上面相同,只是使用此表我們可以直接返回所有調用mintNFT函數的交易哈希,而不是使用空地址來確定來自erc721的交易。“ERC721_evt_Transfer”表是mint交易。
使用poolysupporters。而不是erc721。
poolysupporter數據集允許我們進行更具體和詳細的查詢,因為我們可以參考特定的合約調用。
讓我們比較兩個表的結果以確保沒有任何問題:
你看,輸出是相同的。
請記住保存你的查詢并將其添加到儀表板。
查詢5:每個NFT集合的最大供應量和剩余供應量
在查詢4的替代版本中,我們使用了poolysupporter函數。你可能已經看到,當你在數據集資源管理器中搜索pooly時,你還會看到一個名為“PoolyNFT_call_maxNFT”的函數。
poolysupporters.PoolyNFT_call_maxNFT函數
你可以得出結論,你可以使用這個函數調用來直接檢索最大鑄幣量的NFT。
使用poolysupporters.PoolyNFT_call_maxNFT沒有查詢結果
不幸的是,這是不可能的:這個函數是一個“讀取”函數,因此在調用這個函數時沒有鏈上記錄。請參閱下面的Etherscan:
maxNFT是一個讀取函數,它不會在區塊鏈上留下任何記錄
maxNFT變量是在部署者合約部署PoolySupporter智能合約時設置的,但不幸的是,在撰寫本文時,部署者智能合約尚未解碼,因此我們無法從鏈上數據中獲得最大鑄幣廠數量。
相反,我們必須手動輸入每個智能合約的maxNFT數據:
withpoolyContractsas(Select?contract_address,????COUNT("tokenId")asnfts_purchased??????Fromerc721."ERC721_evt_Transfer"??????Where(contract_address='\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'??????orcontract_address='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'??????orcontract_address='\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523')??????and"from"='\x0000000000000000000000000000000000000000'??????groupby1)select??CASEcontract_address????WHEN'\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'then'Pooly_Supporter'????WHEN'\x3545192b340F50d77403DC0A64cf2b32F03d00A9'then'Pooly_Lawyer'????WHEN'\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'then'Pooly_Judge'????ENDasNFT_name,??nfts_purchased,??CASEmaxNFT_Supply????WHEN'\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'then10000????WHEN'\x3545192b340F50d77403DC0A64cf2b32F03d00A9'then100????WHEN'\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'then10????ENDasNFT_Supply,??CASEmaxNFT_Supply????WHEN'\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'then100-(nfts_purchased/10000.0*100)????WHEN'\x3545192b340F50d77403DC0A64cf2b32F03d00A9'then100-(nfts_purchased/1000.0*100)????WHEN'\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'then100-(nfts_purchased/10.0*100)????ENDaspercent_supply_remainingfrompoolyContractsleftjoin??(??Select?contract_addressasmaxNFT_Supply??????Fromerc721."ERC721_evt_Transfer"??????Where(contract_address='\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'??????orcontract_address='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'??????orcontract_address='\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523')??????and"from"='\x0000000000000000000000000000000000000000'??????groupby1??)??asmaxNFT??onmaxNFT_Supply=contract_address??ORDERBY3desc
PoolyNFT供應查詢
這是必須有點創意的地方。手動將數字添加到SQL中的特定表條目是一項艱巨的任務,我不得不應用一些技巧來得到這個,以便留下一個易于閱讀的表。
在這里,我們將再次使用左連接來組合兩個表,但我們還將在四列中的三列上使用CASEWHEN語句來輸出我們想要顯示的特定信息。我們要做的是首先創建我們的基表,然后創建第二個表,然后將第二個表與第一個表左連接并轉換表輸入以使其易于閱讀,并為我們做一些簡單的算術運算。
第二個表的原因是在單個查詢中SQL不允許你兩次調用列。實際上,我們需要多次調用一列,并分別轉換每一列調用。然而,連接表允許我們多次調用第二個表中的列,從而使我們能夠為我們需要的列中的特定行創建所需的輸出。
上述查詢的細分
讓我們將這個查詢分成四個部分以便于消化。
注意順序!1、3、2、4!
第1節
在本節中,我們定義了一個名為“poolyContracts”的表,其中我們計算了來自三個Pooly合約地址的空地址的所有單個tokenId,因此僅包括使用erc721.“ERC721_evt_Transfer”表鑄造的NFT。然后,我們將它們按第一列分組,從而返回每個池智能合約的鑄造NFT。
poolyContracts表
第2節
在這個代碼塊中,我們強制查詢只顯示三個合約地址中的每一個。我們通過使用“按1分組”命令來做到這一點,即按第一列的唯一條目對結果進行分組。
第二個表使用“groupby1”命令返回每個合約地址的1個
如果沒有groupby命令,查詢將返回與這些合約地址相關的所有傳輸事件,但我們只需要每個出現一次。你將在下一節中看到原因。
第二個表返回一長串沒有“groupby1”命令的合約地址
此外,我們將contract_address列重命名為maxNFT_Supply,以便我們可以定義將該表與哪個列連接到poolyContracts表中。
第3節
這就是魔法發生的地方。
在本節中,我們現在可以從連接表中調用列。我們稱之為:
合約地址
nfts_purchased
maxNFT_Supply
maxNFT_Supply
你會注意到,我們基本上使用第1、3和4列檢索相同的數據3次,而且第3和4列甚至是相同的列!這是可能的,因為我們連接了兩個表。如果在連接表之前調用contract_address兩次,查詢編輯器將返回錯誤消息。
接下來,你還會注意到第1、3和4列都嵌入了CASEWHEN子句。因為我們創建的前兩個表中的每一個只有一個用于每個智能合約的唯一行,所以我們不能使用CASEWHEN語句來指定是否出現特定的智能合約地址,在其位置返回其他內容。
未按nft_supply排序結果的完整表
你將在此處看到第一列,我們告訴查詢編輯器將每個智能合約地址替換為相應NFT的名稱!
在第三列中,我們將其替換為Pooly網站上列出的已知最大NFT數量。
在第四列中,我們使用一個公式來計算剩余NFT供應的百分比。在這些語句中,至少有一個用于算術運算的數字需要包含一位小數。如果這不包括在內,SQL查詢將被解釋為想要返回整數,這意味著我們不會為這些計算獲得任何小數。通過包含“?.0”,我們向服務器表明我們希望此計算返回一個十進制數。
第4節
最后,我們指出我們希望輸出按第三列的降序排序。
按nft_supply降序排序后的全表
這張表也做好了。保存你的查詢,對表格進行所需的任何更改并將其添加到儀表板。
將表添加到儀表板
查詢6:隨時間籌集的ETH時間序列圖
在我們的最終查詢中,我們將創建一個時間序列圖表,顯示隨著時間的推移通過NFT銷售籌集的ETH數量。
select??block_timeastime,??sum(value/1e18)over(orderbydate_trunc('minute',block_time)asc)ascumu_value_ethfromethereum.transactionswhere("to"='\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'or"to"='\x3545192b340F50d77403DC0A64cf2b32F03d00A9'or"to"='\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523')anddate_trunc('day',block_time)<'2022-06-25’
隨著時間的推移,ETH的累計NFT銷售額。
這是一段較短的代碼,但它包含over命令,這是聚合累積值的重要命令。
在這個查詢中,我們首先選擇block_time,然后我們以分鐘為間隔將ETH值與block_time相加,我們直接按升序排序,并將列命名為cumu_value_eth。
sum(value/1e18)over(orderbydate_trunc('minute',block_time)asc)ascumu_value_eth
此外,我們還在結尾處添加了另一個過濾器,其中規定對于這個查詢,封鎖時間不應超過2022-06-25,根據Pooly網站,這大概是募捐活動結束的時間。這樣,我們的區域圖將只顯示活動的數據,而不是添加一條平線,隨著時間的推移,平線將拖入永恒。
要創建區域圖,點擊"新可視化",然后在下拉菜單中選擇"區域圖",最后點擊"添加可視化"。
創建面積圖可視化
你的面積圖應該會自動出現,并帶有Dune預先選擇的相關設置。
面積圖可視化設置并添加到儀表板
如果未預先選擇它們,你可以使用圖表下方的設置,直到看起來正確為止。
最后,保存你的查詢并再次按“添加到儀表板”。
第3部分:清理儀表板
我們構建了很多查詢,并直接將它們添加到我們的儀表板中。好吧,讓我們來看看它的樣子。將最后一個圖表添加到儀表板后,只需單擊儀表板名稱即可。
添加可視化后,單擊儀表板的名稱將其打開
而且,讓我們看看……
清理前的儀表板
這肯定需要在它呈現之前進行清理。
在儀表板屏幕的右上角,單擊“編輯”開始編輯。
單擊右上角的編輯按鈕以編輯儀表板格式
從這里,你可以在移動元素時將單個元素拖放到背景中由紅色框顯示的網格上,并且可以通過拖動左下角的圖標來調整每個元素的大小。簡單的!
可視化和其他元素支持拖放和調整大小
要將文本和圖像添加到儀表板,請按儀表板編輯屏幕右上角的“添加文本小部件”。
單擊“添加文本小部件”以添加文本小部件
在整理時,你可能會注意到這兩個查詢看起來相同,并且兩者都沒有真正提供任何有價值的信息......:
兩個計數器顯示了計算ETH美元價值的不同方法
因為我們不知道PoolTogether何時或如何提取智能合約中的ETH,所以我們可以堅持Pooly網站是如何做的。我們將刪除正確的查詢并將其替換為另一個查詢。
我們開始吧,最后的儀表板:
最后的儀表板
這看起來比以前好多了,而且它也遵循了與Pooly網站相同的格式!
結束
DuneAnalytics是一個強大的平臺,可以在合適的人手中提供深度區塊鏈數據能力。我希望通過這篇文章,我能夠教你基礎知識。從這里開始,你可以接受更大的挑戰并制作更好的儀表板。
尊敬的用戶: 由于節點升級,CoinW將暫停ICP的充值與提幣功能,節點升級完成后將同步開啟充值與提幣功能,不再另行通知.
1900/1/1 0:00:00ForesightNews消息,BNBChain公布第五批Web3加速器計劃「最有價值建設者」的第五批27個入圍項目名單,涵蓋DeFi、音樂和NFT、游戲和元宇宙、基礎設施和工具、安全等領域.
1900/1/1 0:00:00IOTA通過其修改后的股權證明算法快速概率共識在完全不同的批準交易級別上運行。IOTA不是通過單個節點完成交易驗證,而是在所有參與者之間傳輸交易以分配處理時間.
1900/1/1 0:00:00一位加密貨幣分析師表示,由于宏觀事件的獨特組合,比特幣可能已經觸底。他說,目前的底部為長期投資者提供了買入機會。過去兩周,機構對加密貨幣的投資蓬勃發展,達到近10億美元.
1900/1/1 0:00:00貨幣—一種社會激勵的新方法,發表自比特幣雜志,2014年1月10日。在激勵生產活動方面,除市場激勵、機構激勵之外,加密貨幣激勵是一種具有重要補充價值的新興方法,具有互聯網支持和去中心化兩方面優勢.
1900/1/1 0:00:00一、項目介紹 作為世界上第一家提供數字槍支交易平臺的供應商,我們的NFT槍支稀缺、備受追捧,并且與現實世界中的同類產品相得益彰.
1900/1/1 0:00:00