Bem-vindo ao Livro de Feitiços. Lance um encantamento mágico para domar o blockchain.
Spellbook é a camada de interpretação de Dune, construída para e pela comunidade.
Spellbook é um projeto dbt. Cada modelo é uma consulta SQL simples com menor açúcar sintático (destinado a capturar dependências e ajudar a construir as tabelas resultantes), e faz uma pequena parte da tarefa de transformar registros brutos e decodificados em dados interpretáveis de blockchain.
Spellbook é construído para e pela comunidade, você está convidado a preencher quaisquer lacunas que encontrar enviando um PR, criando problemas para propor pequenas alterações ou rastrear bugs, ou participar de discussões para ajudar a orientar o futuro deste projeto.
O Spellbook tem muitas partes móveis e princípios de design específicos para contribuir para a camada de interpretação de dados do Dune. A fim de preparar os colaboradores para participarem de forma mais eficiente, o diretório de documentos contém um amplo conjunto de tópicos para responder a perguntas comuns e fornecer informações sobre por que o repositório está configurado como está. Por favor, leia e consulte esta seção ao desenvolver no Spellbook e surgirem dúvidas. A equipe do Dune também retornará a esses documentos para responder perguntas frequentes, para ajudar a aumentar a conscientização e manter as comunicações limpas.
Para dimensionar o Spellbook, o repositório introduziu subprojetos para quebrar um pouco as linhagens DBT complexas e manter as áreas de foco limpas. Isso também ajudará a orquestração downstream a manter os feitiços atualizados na produção. Os subprojetos DBT no Spellbook são simplesmente vários projetos DBT em um repositório. A estrutura atual dos projetos:
dbt_subprojects
daily_spellbook
hourly_spellbook
dex
dex
ou dex_aggregator
, incluindo feitiços upstream para ajudar a construir os feitiços finais em nível de setornft
nft
, incluindo feitiços upstream para ajudar a construir os feitiços finais de nível de setorsolana
tokens
Para obter mais informações sobre subprojetos, visite esta discussão e faça qualquer pergunta lá.
Quer ir direto ao trabalho? Siga o guia aqui para começar.
Você não precisa de uma configuração local complexa para testar feitiços no motor do Dune. Depois de enviar um PR, nosso pipeline de CI irá executá-lo e testá-lo e, se o trabalho for concluído com sucesso, você poderá consultar os dados que seu PR criou diretamente em dune.com.
Basta escrever uma consulta como faria para qualquer uma de nossas tabelas ativas e usar o esquema de teste para buscar as tabelas que seu PR criou.
test_schema.git_dunesql_{{commit_hash}}_{{table_name}}
Você pode encontrar os nomes exatos facilmente observando os logs da ação dbt slim ci
, em dbt run initial model(s)
.
Observação: as tabelas de teste criadas no pipeline de CI existirão por aproximadamente 24 horas. Se a sua tabela não existir, acione o pipeline para ser executado novamente e recrie a tabela de teste.
Usamos o Discord para nos conectar com nossa comunidade. Acesse o canal do livro de feitiços no Discord de Dune para tirar dúvidas ou pedir ajuda com um PR específico. Incentivamos você a aprender fazendo e aproveitar nossa comunidade vibrante para ajudá-lo a seguir em frente.
git config --global core.autocrlf true
. mais informaçõesVocê pode assistir à versão em vídeo se rolar um pouco para baixo.
Navegue até o repositório do livro de feitiços em sua CLI (interface de linha de comando).
cd userdirectorygithubspellbook
# Change this to wherever spellbook is stored locally on your machine.
Usando o pipfile localizado no repositório do Spellbook, execute o comando de instalação abaixo para criar um pipenv.
pipenv install
Se a instalação falhar, um motivo provável é que nosso script procura uma versão estática do python e a probabilidade de um erro para uma versão errada do python é muito alta. Se esse erro ocorrer, verifique sua versão do python com:
python --version
Agora use qualquer programa de edição de texto para alterar a versão do python no pipfile dentro do diretório do livro de feitiços para a sua versão do python. Você precisa ter pelo menos python 3.9. Se você alterou a versão do python no pipfile, execute pipenv install
novamente.
Agora você está pronto para ativar o ambiente virtual deste projeto. Execute o seguinte comando para entrar no ambiente:
pipenv shell
Agora você criou um ambiente virtual para este projeto. Você pode ler mais sobre ambientes virtuais aqui.
Dentro do repositório Spellbook, existem vários projetos dbt, localizados no diretório raiz. Navegue até o projeto correto, dependendo do seu caso de uso.
cd ../spellbook/dbt_subprojects/<subproject_name>/
Cada subprojeto possui seu próprio arquivo de projeto dbt com configurações variadas. Depois que sua CLI navegar para o diretório correto do projeto, siga as etapas abaixo:
Para limpar o projeto dbt
dbt clean
Para extrair as dependências do projeto dbt, execute:
dbt deps
Para compilar modelos em SQL bruto, para executar no aplicativo Dune e validar:
dbt compile
Cada subprojeto do Spellbook inclui um arquivo profiles.yml
, que ajuda a informar ao dbt como executar comandos. O perfil está localizado em cada diretório de subprojeto, como aqui. Isso nunca deve precisar ser modificado, a menos que seja feito intencionalmente pela equipe do Dune.
Devido ao arquivo profiles.yml
ser armazenado no diretório raiz de cada subprojeto, é por isso que os usuários devem estar no diretório raiz de cada subprojeto na linha de comando para executar dbt compile
conforme esperado.
A compilação dbt compilará o SQL modelado JINJA e SQL em SQL simples que pode ser executado na UI do Dune. Seu diretório do livro de feitiços agora possui uma pasta chamada target
contendo versões SQL simples de todos os modelos no Dune. Se você fez alterações no repositório antes de concluir todas essas ações, agora você pode ter certeza de que pelo menos o processo de compilação funciona corretamente; se houver grandes erros, o processo de compilação não será concluído. Se você ainda não fez alterações no diretório, agora você pode começar a adicionar, editar ou excluir arquivos no repositório. Depois, simplesmente execute dbt compile
novamente quando terminar seu trabalho no diretório e teste as consultas sql em linguagem simples em dune.com.
Se você fez esta instalação em sua máquina uma vez, para voltar ao dbt, simplesmente navegue até o repositório do livro de feitiços, execute pipenv shell
e você poderá executar dbt compile
novamente.
Agora você tem a capacidade de compilar suas instruções de modelo dbt e instruções de teste em SQL simples. Isso permite que você teste essas consultas no ambiente habitual do dune.com e, portanto, deve levar a uma melhor experiência durante o desenvolvimento de feitiços. A execução das consultas fornecerá feedback imediato sobre erros de digitação, erros lógicos ou incompatibilidades. Isso, por sua vez, nos ajudará a implantar esses feitiços mais rapidamente e a evitar possíveis erros.
Existem alguns novos conceitos a serem considerados ao fazer feitiços em dbt. Os mais comuns que os assistentes encontrarão são referências, fontes, atualização e testes.
No corpo de cada consulta, as tabelas são chamadas de refs, ex {{ ref('1inch_ethereum') }}
ou fontes, ex {{ source('ethereum', 'traces') }}
. Refs referem-se a outros modelos dbt e devem referir-se ao nome do arquivo como 1inch_ethereum.sql
, mesmo que o próprio modelo tenha um alias. As fontes referem-se a dados "brutos" ou tabelas/visualizações não geradas pelo dbt. O uso de referências e fontes nos permite construir árvores de dependência automaticamente.
Fontes e modelos são definidos em arquivos schema.yml onde testes e outros atributos são definidos.
A prática recomendada é adicionar testes exclusivos e testes não nulos à chave primária para cada novo modelo. Da mesma forma, uma verificação de atualização deve ser adicionada a cada nova fonte (embora tentaremos não testar novamente a atualização se a fonte for usada em outro lugar).
Adicionar descrições a tabelas e colunas ajudará as pessoas a encontrar e usar suas tabelas.
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
Veja links para mais documentos sobre dbt abaixo.
Para gerar documentação e visualizá-la como um site, execute os seguintes comandos:
dbt docs generate
dbt docs serve
Você deve ter configurado o dbt com dbt init
, mas não precisa de credenciais de banco de dados para executar esses comandos.Consulte a documentação do dbt docs para obter mais informações sobre como contribuir com a documentação.
Como pré-visualização, você pode fazer coisas como: