歡迎來到咒語書。施展魔法來馴服區塊鏈。
Spellbook 是 Dune 的解釋層,由社群為社群建構。
Spellbook 是一個 dbt 專案。每個模型都是一個帶有少量語法糖的簡單SQL 查詢(旨在捕獲依賴關係並幫助建立結果表),並完成將原始記錄和解碼記錄轉換為可解釋的區塊鏈資料的一小部分任務。
Spellbook 是為社區而構建的,歡迎您通過發送 PR、創建問題來提出小的更改或跟踪錯誤,或者參與討論來幫助引導該項目的未來,從而彌補您發現的任何差距。
Spellbook 有許多活動部件和特定的設計原則,有助於 Dune 的資料解釋層。為了讓貢獻者做好最有效參與的準備,文件目錄包含一系列廣泛的主題來回答常見問題並提供有關為何設定儲存庫的資訊。在 Spellbook 中進行開發並出現問題時,請閱讀並參考本節。 Dune 團隊也會連結回這些文件以經常回答問題,以幫助提高意識並保持溝通暢通。
為了擴展 Spellbook,該儲存庫引入了子項目來稍微打破複雜的 DBT 譜系並保持重點區域的乾淨。這也將有助於下游編排,使咒語在生產中保持新鮮。 Spellbook 中的 DBT 子項目只是一個儲存庫中的多個 DBT 項目。目前的專案結構:
dbt_subprojects
daily_spellbook
hourly_spellbook
dex
dex
或dex_aggregator
架構中的所有法術,包括幫助建構最終扇區級法術的上游法術nft
nft
模式中的法術,包括幫助建構最終扇區級法術的上游法術solana
tokens
有關子項目的更多信息,請訪問此討論並在那裡提出任何問題。
想要立即開始工作嗎?請按照此處的指南開始操作。
您不需要複雜的本地設定來測試沙丘引擎的咒語。一旦您發送 PR,我們的 CI 管道將運行並測試它,如果作業成功完成,您將能夠直接從 dune.com 查詢您的 PR 建立的資料。
只需像對我們的任何實時表一樣編寫查詢,然後使用測試模式來獲取您的 PR 創建的表。
test_schema.git_dunesql_{{commit_hash}}_{{table_name}}
您可以透過查看dbt slim ci
操作(位於dbt run initial model(s)
下)的日誌輕鬆找到確切的名稱。
請注意:CI 管道中建立的測試表將存在約 24 小時。如果您的表不存在,請觸發管道再次運行並重新建立測試表。
我們使用 Discord 與我們的社群建立聯繫。前往 Dune's Discord 上的法術書頻道詢問問題或尋求特定 PR 的協助。我們鼓勵您邊做邊學,並利用我們充滿活力的社區來幫助您前進。
git config --global core.autocrlf true
。更多資訊如果向下滾動一點,您可以觀看此影片版本。
導航至 CLI(命令列介面)中的拼字書儲存庫。
cd userdirectorygithubspellbook
# Change this to wherever spellbook is stored locally on your machine.
使用位於spellbook儲存庫中的pip文件,執行以下安裝命令來建立pipenv。
pipenv install
如果安裝失敗,一個可能的原因是我們的腳本尋找靜態 python 版本,而錯誤 python 版本出錯的可能性非常高。如果發生該錯誤,請檢查您的 python 版本:
python --version
現在使用任何文字編輯器程式將spellbook 目錄中pipfile 中的python 版本變更為您的python 版本。您至少需要有 python 3.9。如果您變更了 pipfile 中的 python 版本,請再次執行pipenv install
。
您現在已準備好啟動該項目的虛擬環境。執行以下命令進入環境:
pipenv shell
您現在已經為此專案建立了一個虛擬環境。您可以在此處閱讀有關虛擬環境的更多資訊。
在 Spellbook 儲存庫中,有多個 dbt 項目,位於根目錄中。根據您的用例導航到正確的項目。
cd ../spellbook/dbt_subprojects/<subproject_name>/
每個子項目都有自己的 dbt 專案文件,並具有不同的配置。 CLI 導覽至正確的專案目錄後,請依照下列步驟操作:
清理 dbt 項目
dbt clean
若要提取 dbt 專案依賴項,請執行:
dbt deps
要將模型編譯為原始 SQL,在沙丘應用程式上運行並驗證:
dbt compile
每個 Spellbook 子專案都包含一個profiles.yml
文件,該文件有助於告訴 dbt 如何執行命令。設定檔位於每個子項目目錄中,例如此處。這永遠不需要修改,除非沙丘團隊有意這樣做。
由於profiles.yml
檔案儲存在每個子專案的根目錄中,這就是為什麼使用者必須在命令列上位於每個子專案的根目錄中才能按預期執行dbt compile
。
dbtcompile 會將 JINJA 和 SQL 模板化 SQL 編譯為可以在 Dune UI 中執行的純 SQL。您的拼字簿目錄現在有一個名為target
的資料夾,其中包含 Dune 中所有模型的純 SQL 版本。如果您在完成所有這些操作之前對儲存庫進行了更改,那麼您現在可以確定至少編譯過程正常工作,如果存在大錯誤,編譯過程將無法完成。如果您事先沒有對目錄進行更改,現在可以開始在儲存庫中新增、編輯或刪除檔案。然後,完成目錄中的工作後,只需再次執行dbt compile
即可,並在 dune.com 上測試純語言 SQL 查詢。
如果您已經在電腦上完成此安裝一次,請返回 dbt,只需導航至拼字書儲存庫,並執行pipenv shell
,然後可以再次執行dbt compile
。
現在您可以將 dbt 模型語句和測試語句編譯為純 SQL。這允許您在通常的 dune.com 環境中測試這些查詢,因此在開發咒語時應該會帶來更好的體驗。執行查詢將立即為您提供有關拼字錯誤、邏輯錯誤或不匹配的回饋。這反過來將幫助我們更快地部署這些法術並避免任何潛在的錯誤。
在 dbt 中製作咒語時需要考慮幾個新概念。嚮導最常見的內容是參考、來源、新鮮度和測試。
在每個查詢的正文中,表格稱為 refs,例如{{ ref('1inch_ethereum') }}
或資料來源,例如{{ source('ethereum', 'traces') }}
。引用引用其他 dbt 模型,它們應該引用像1inch_ethereum.sql
這樣的檔名,即使模型本身是別名的。來源是指非 dbt 產生的「原始」資料或表格/視圖。使用引用和來源允許我們自動建立依賴關係樹。
來源和模型在 schema.yml 檔案中定義,其中定義了測試和其他屬性。
最佳實踐是將唯一測試和非空測試新增到每個新模型的主鍵中。同樣,應為每個新來源添加新鮮度檢查(儘管如果該來源在其他地方使用,我們將嘗試不重新測試新鮮度)。
在表格和欄位中新增描述將幫助人們找到和使用您的表格。
models :
- name : 1inch_ethereum
description : " Trades on 1inch, a DEX aggregator "
columns :
- name : tx_hash
description : " Table primary key: a transaction hash (tx_hash) is a unique identifier for a transaction. "
data_tests :
- unique
- not_null
sources :
- name : ethereum
freshness :
warn_after : { count: 12, period: hour }
error_after : { count: 24, period: hour }
tables :
- name : traces
請參閱下面有關 dbt 的更多文件的連結。
若要產生文件並將其作為網站查看,請執行以下命令:
dbt docs generate
dbt docs serve
您必須使用dbt init
設定 dbt,但不需要資料庫憑證來執行這些命令。有關如何為文件做出貢獻的更多信息,請參閱 dbt docs 文件。
作為預覽,您可以執行以下操作: