欢迎来到咒语书。施展魔法来驯服区块链。
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 文档。
作为预览,您可以执行以下操作: