마법책에 오신 것을 환영합니다. 블록체인을 길들이기 위한 마법의 주문을 외워보세요.
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
하위 프로젝트에 대한 자세한 내용을 보려면 이 토론을 방문하여 질문을 하십시오.
바로 업무를 시작하고 싶으신가요? 시작하려면 여기의 가이드를 따르세요.
Dune의 엔진에 대한 주문을 테스트하기 위해 복잡한 로컬 설정이 필요하지 않습니다. PR을 보내면 CI 파이프라인이 이를 실행하고 테스트하며, 작업이 성공적으로 완료되면 dune.com에서 직접 PR이 생성한 데이터를 쿼리할 수 있습니다.
라이브 테이블에 대해 쿼리를 작성하고 테스트 스키마를 사용하여 PR이 생성한 테이블을 가져오기만 하면 됩니다.
test_schema.git_dunesql_{{commit_hash}}_{{table_name}}
dbt run initial model(s)
아래에서 dbt slim ci
작업의 로그를 보면 정확한 이름을 쉽게 찾을 수 있습니다.
참고: CI 파이프라인에 구축된 테스트 테이블은 최대 24시간 동안 존재합니다. 테이블이 없으면 파이프라인을 트리거하여 다시 실행하고 테스트 테이블을 다시 생성합니다.
우리는 커뮤니티와 연결하기 위해 Discord를 사용합니다. 질문이 있거나 특정 PR에 대한 도움을 요청하려면 Dune's Discord의 주문서 채널로 이동하세요. 우리는 여러분이 실천을 통해 배우고, 활발한 커뮤니티를 활용하여 여러분이 나아갈 수 있도록 돕도록 권장합니다.
git config --global core.autocrlf true
로 설정하세요. 추가 정보조금 아래로 스크롤하면 이 동영상 버전을 볼 수 있습니다.
CLI(명령줄 인터페이스) 내에서 주문서 저장소로 이동합니다.
cd userdirectorygithubspellbook
# Change this to wherever spellbook is stored locally on your machine.
Spellbook Repo에 있는 pipfile을 사용하여 아래 설치 명령을 실행하여 Pipenv를 생성합니다.
pipenv install
설치가 실패하는 경우, 한 가지 이유는 스크립트가 정적 Python 버전을 찾고 잘못된 Python 버전에 대한 오류가 발생할 가능성이 꽤 높기 때문일 수 있습니다. 해당 오류가 발생하면 다음을 사용하여 Python 버전을 확인하세요.
python --version
이제 텍스트 편집기 프로그램을 사용하여 스펠북 디렉터리 내의 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로 컴파일하고 dune 앱에서 실행하고 유효성을 검사하려면 다음을 수행하세요.
dbt compile
각 Spellbook 하위 프로젝트에는 dbt에 명령 실행 방법을 알려주는 데 도움이 되는 profiles.yml
파일이 포함되어 있습니다. 프로필은 여기와 같은 각 하위 프로젝트 디렉터리에 있습니다. Dune 팀이 의도적으로 수행하지 않는 한 이는 수정할 필요가 없습니다.
profiles.yml
파일이 각 하위 프로젝트의 루트 디렉터리에 저장되기 때문에 사용자는 예상대로 dbt compile
실행하려면 명령줄에서 하위 프로젝트당 루트 디렉터리에 있어야 합니다 .
dbt compile은 JINJA 및 SQL 템플릿 SQL을 Dune UI에서 실행할 수 있는 일반 SQL로 컴파일합니다. 이제 주문서 디렉터리에 Dune에 있는 모든 모델의 일반 SQL 버전이 포함된 target
이라는 폴더가 있습니다. 이러한 모든 작업을 완료하기 전에 저장소를 변경한 경우 이제 적어도 컴파일 프로세스가 올바르게 작동하는지 확인할 수 있습니다. 큰 오류가 있으면 컴파일 프로세스가 완료되지 않습니다. 사전에 디렉터리를 변경하지 않은 경우 이제 저장소 내에서 파일 추가, 편집 또는 삭제를 시작할 수 있습니다. 그런 다음 디렉터리 작업이 끝나면 dbt compile
다시 실행하고 dune.com에서 일반 언어 SQL 쿼리를 테스트하세요.
컴퓨터에 이 설치를 한 번 완료한 경우 dbt로 돌아가려면 간단히 마법서 저장소로 이동하여 pipenv shell
실행하고 dbt compile
다시 실행할 수 있습니다.
이제 dbt 모델 문과 테스트 문을 일반 SQL로 컴파일할 수 있습니다. 이를 통해 일반적인 dune.com 환경에서 해당 쿼리를 테스트할 수 있으므로 주문을 개발하는 동안 더 나은 경험을 얻을 수 있습니다. 쿼리를 실행하면 오타, 논리적 오류 또는 불일치에 대한 피드백이 즉시 제공됩니다. 이는 결국 이러한 주문을 더 빠르게 배포하고 잠재적인 실수를 피하는 데 도움이 될 것입니다.
dbt에서 주문을 만들 때 고려해야 할 몇 가지 새로운 개념이 있습니다. 마법사가 접하게 되는 가장 일반적인 것들은 참조, 소스, 신선도 및 테스트입니다.
각 쿼리의 본문에서 테이블은 refs(ex {{ ref('1inch_ethereum') }}
또는 소스(ex {{ source('ethereum', 'traces') }}
로 참조됩니다. Refs는 다른 dbt 모델을 참조하며 모델 자체가 별칭이 지정된 경우에도 1inch_ethereum.sql
과 같은 파일 이름을 참조해야 합니다. 소스는 dbt에서 생성되지 않은 "원시" 데이터 또는 테이블/뷰를 참조합니다. 참조와 소스를 사용하면 종속성 트리를 자동으로 구축할 수 있습니다.
소스와 모델은 테스트 및 기타 속성이 정의된 Schema.yml 파일에 정의됩니다.
가장 좋은 방법은 모든 새 모델의 기본 키에 고유한 테스트와 non_null 테스트를 추가하는 것입니다. 마찬가지로, 모든 새로운 소스에 신선도 검사를 추가해야 합니다(하지만 소스가 다른 곳에서 사용되는 경우 신선도를 다시 테스트하지 않으려고 노력합니다).
테이블과 열에 설명을 추가하면 사람들이 테이블을 찾고 사용하는 데 도움이 됩니다.
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 문서 문서를 참조하세요.
미리보기로 다음과 같은 작업을 수행할 수 있습니다.