위험 경고: '가상화폐', '블록체인'이라는 이름으로 불법 자금 모집 위험에 주의하세요. — 은행보험감독관리위원회 등 5개 부처
검색
로그인
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
시장 동향 보기
필독 "Nanny-Level Tutorial": Dune을 사용하여 블록체인 데이터를 분석하는 방법
AllRcode重构
特邀专栏作者
2022-10-04 04:51
이 기사는 약 20487자로, 전체를 읽는 데 약 30분이 소요됩니다
100개의 사진은 Dune을 사용하여 블록체인 데이터를 분석하는 방법을 알려줍니다.

원작자: 0xPhillan

원작자: 0xPhillan

원본 출처: web3edge

원래 번역: 오래된 yuppieDune은 현재 대중이 사용할 수 있는 가장 강력한 블록체인 데이터 분석 도구이며 무엇보다도 다음과 같습니다.무료!

Dune을 사용하면 SQL을 사용하여 쿼리할 수 있는 공용 데이터베이스를 통해 블록체인 데이터에 거의 실시간으로 액세스할 수 있습니다.

이것은 매우 강력한 에너지입니다.

Dune은 블록체인 데이터를 데이터베이스에 추가하기 전에 디코딩하므로 사용자가 직접 바이트코드를 알아낼 필요가 없습니다. 대신 Dune의 브라우저를 사용하여 데이터 세트, 특정 스마트 계약, 이벤트 또는 호출을 찾아볼 수 있습니다!

Dune은 최근 성능을 10배 향상시킨 V2 엔진을 출시했습니다. 이제 Dune 사용법을 익힐 때입니다.

  • 이 가이드에서는 다음을 배우게 됩니다.

  • 파트 1: Dune 인터페이스

  • 2부: SQL을 사용하여 고유한 쿼리 및 그래프 작성 - 기본 사항부터 시작

3부: 모든 것을 대시보드로 구성

시작하자!

첫 번째 레벨 제목

문의

  • 대시 보드

  • 문의

  • 포크

  • 포크

  • 쿼리 편집기

  • 데이터 세트 브라우저 및 데이터 분류

포크된 쿼리 저장

  • 파트 2: 첫 번째 쿼리 작성

  • 구축할 쿼리 결정

  • 올바른 정보를 찾고

Dune에서 첫 번째 쿼리를 작성할 준비가 되었습니다.

쿼리 1: ETH에서 모금된 자금

쿼리 2: USD로 모금된 자금

쿼리 2a: 현재 ETH 가치로 USD로 자금 조달

쿼리 2b: 구매 시점의 ETH 가치 측면에서 USD로 자금 조달

질의 3: 총 지지자 수

쿼리 4:

쿼리 4a: erc721을 사용하는 리더보드. 추출

쿼리 4b: poolysupporter를 사용하는 리더보드. 디코딩 테이블

쿼리 6: 시간 경과에 따라 발생한 ETH의 시계열 그래프

파트 3: 대시보드 정리

마치다

보조 제목

1부: 모래 언덕 및 기능 개요

Dune.com 웹 사이트를 처음 열면 아래와 같은 창이 나타납니다. 이 창의 맨 위에는 대시보드, 쿼리 및 마법사를 순환할 수 있는 뷰 체인저가 있고 왼쪽에는 대시보드, 쿼리 및 마법사(사용자) 목록을 볼 수 있는 세부 정보 보기 영역과 일부 검색이 있습니다. 오른쪽 관련 설정.

계기반

Dune에서는 모든 대시보드가 ​​공개됩니다. 이것은 누구나 당신이 구축한 모든 것 또는 다른 사람이 구축한 모든 것을 보고 복사할 수 있음을 의미합니다! 이렇게 하면 대시보드 생성 시간이 크게 단축되고 다른 사용자의 쿼리에서 배울 수 있습니다.

문의

대시보드는 쿼리 모음이라고 언급한 것을 기억하십니까? 대시보드 요소의 제목을 클릭하면 해당 차트에 대한 SQL 쿼리로 이동합니다.

이미지 설명

대시보드 쿼리 편집기 화면의 두 가지 예

여기에서 화면에서 두 가지 주요 요소인 쿼리(상단, 블랙 박스)와 출력 그래프(하단)를 볼 수 있습니다. 맞습니다. 어떤 타일이나 차트를 클릭하든 사용자가 해당 차트를 만든 방법을 볼 수 있습니다.

전체 대시보드 또는 그래프 쿼리만 자신의 계정에 저장하려는 경우 오른쪽 상단 모서리에 있는 "포크"를 클릭하면 포크된 화면의 모든 항목이 새 창에 복사되어 뷰를 편집하고 저장할 수 있습니다. 귀하의 계정에.

이미지 설명

이더리움 가격 쿼리

Ethereum 가격 차트를 포크합시다! 쿼리에서 "포크"를 누르면 이전 코드가 복사된 쿼리 편집기로 이동합니다!

쿼리 편집기

  1. 여기에서 다양한 화면 요소를 소개하겠습니다.

  2. 쿼리 위치 및 이름 - 저장을 클릭하면 이름을 변경할 수 있습니다!

  3. 데이터세트 브라우저 - 특정 데이터세트 검색

  4. 쿼리 창 - 여기에 SQL 쿼리를 입력하세요.

  5. 시각화 선택기 - 쿼리 결과를 볼지, 분기된 라인 차트를 볼지 또는 새 시각화를 생성할지 선택합니다.

  6. 실행 - 쿼리 창에서 쿼리를 실행합니다.

  7. 저장 - (포킹된) 쿼리를 저장하세요!

이미지 설명

듄 쿼리 편집기 개요

데이터 세트 브라우저 및 데이터 카테고리

  1. 데이터세트 브라우저를 자세히 살펴보겠습니다. 데이터세트 브라우저에는 6개의 기능 영역이 있습니다.

  2. 체인 선택

  3. 데이터세트 검색

  4. 원시 블록체인 데이터 찾아보기

  5. 계약 데이터 찾아보기 및 디코딩

  6. 커뮤니티에서 제공하는 데이터 찾아보기

이미지 설명

Dune 데이터세트 브라우저 개요

데이터 세트 선택에서 구문 분석하려는 체인을 선택할 수 있습니다. "Dune Engine V2(베타)"를 선택하면 다중 체인 쿼리 및 10배의 성능 향상을 포함하는 Dune의 최신 개선 사항에 액세스할 수 있습니다.

이미지 설명

다른 체인을 선택하면 카테고리 선택(위 이미지의 3~6번 항목)이 사라지고 상호작용할 수 있는 계약 호출 및 이벤트 목록이 표시됩니다.

이미지 설명

"1. 이더리움"을 선택합니다.

찾다

참고: Dune Engine V2와 이전 검색 기능은 결과를 다르게 반환합니다. 이전 검색은 모든 결과 목록을 반환했지만 Dune Engine V2는 중첩된 결과 목록을 반환했습니다. 우리는 V2 엔진을 사용할 것입니다!

이미지 설명

"1. Ethereum" 및 "7. Dune Engine V2(베타)"에 대한 검색 결과

원시 블록체인 데이터를 클릭하면 중첩된 데이터 구조에서 Dune이 지원하는 다양한 블록체인에 대한 쿼리를 먼저 찾을 수 있습니다. 먼저 원시 테이블을 선택하고 거기에서 추가로 조사하려는 특정 테이블 열을 선택합니다. 각 중첩 수준 내에서 선택하여 찾고 있는 특정 검색 결과를 필터링할 수도 있습니다.

이미지 설명

Dune Engine V2(베타) 원시 블록체인 데이터 개요

이것은 고급 블록체인 데이터를 얻는 매우 빠르고 쉬운 방법입니다.

항목을 디코딩

검색 결과가 중첩되어 있음을 다시 알 수 있습니다. 최상위 수준에는 검색할 수 있는 프로젝트가 있고, 하위 수준에는 해당 프로젝트 내에서 특정 스마트 계약을 필터링할 수 있으며 마지막으로 해당 스마트 계약에서 생성된 다양한 테이블이 표시됩니다. 임의의 테이블을 클릭하면 원본 블록체인 데이터와 마찬가지로 목록이 표시됩니다.

Dune Engine V2(베타) 디코딩 프로젝트 개요

요약

요약

요약은 다양한 쿼리와 데이터 블록을 조인하고 결합하여 고유한 테이블을 형성하는 사용자 지정 테이블로 생각할 수 있습니다. 요약은 사용자가 다양한 데이터를 수동으로 결합하지 않고도 원하는 특정 데이터를 보다 쉽게 ​​쿼리할 수 있도록 도와줍니다.

  • 일반적으로 요약은 두 가지 범주로 나눌 수 있습니다.

  • 부문 요약: 부문별 데이터

요약 하위 메뉴에서 요약이 부서별인지 프로젝트별인지 지정하는 태그가 있는 요약 목록을 볼 수 있습니다.

Dune Engine V2(베타) 요약 개요

지역 사회

지역 사회

커뮤니티 섹션("flashbots")에 항목이 하나만 있는 이유가 궁금할 수 있습니다. Dune Engine V2가 방금 출시되었기 때문입니다! 시간이 지남에 따라 신뢰할 수 있는 커뮤니티 구성원이 구축한 커뮤니티 데이터 세트가 점점 더 많아질 것으로 예상할 수 있습니다.

이미지 설명

Dune Engine V2(베타) 커뮤니티 개요

아래 이미지에서 Dune Engine V2 릴리스 이후 Dune의 데이터가 집계된 방식에 대한 요약을 볼 수 있습니다. 네 가지 주요 데이터 범주는 원시 블록체인 데이터, 디코딩된 항목, 요약 및 다양한 A 블록체인을 보유하는 커뮤니티입니다. 다양한 데이터 형식을 저장할 수 있는 데이터.

이미지 설명

Dune Engine V2(베타) 데이터 브라우저의 탭 개요

먼저 이 쿼리를 저장해 보겠습니다. 저장을 클릭하면 몇 가지 일이 발생합니다. 먼저 쿼리 이름을 지정합니다.

이미지 설명

쿼리 팝업 저장

(1) 쿼리 위치와 이름이 업데이트되고 (2) 쿼리가 실행 중입니다. 이는 Dune이 다양한 블록체인의 최신 데이터로 정기적으로 업데이트되는 데이터베이스에서 최신 데이터를 가져오고 있음을 의미합니다. 쿼리 실행이 완료되면 쿼리 결과(3)가 표시됩니다.

이미지 설명

여기에서 (1) 쿼리 결과, 선 차트 또는 새 시각화 중 하나를 클릭하면 (2) 결과/시각화 상자가 (3) 그 아래에 표시되는 선택 설정으로 업데이트됩니다. 여기에는 이전의 @hildobby의 Ethereum 대시보드처럼 쿼리 결과 또는 시각화를 신규 또는 기존 대시보드에 빠르게 추가할 수 있는 "대시보드에 추가" 버튼도 있습니다!

이미지 설명

(1) 오른쪽 상단의 원을 클릭한 다음 (2) "내 쿼리"를 클릭하면 계정에 대한 문의 목록이 열립니다.

이미지 설명

검색어 목록에는 계정에 저장한 모든 검색어가 포함됩니다. 아래의 상단 스크린샷에서 생성된 최신 쿼리를 볼 수 있습니다.

이미지 설명

가장 최근 쿼리가 포함된 쿼리 목록이 맨 위에 유지됩니다.

축하합니다. 시각적 분기를 사용하는 방법을 배웠고 첫 번째 쿼리를 저장했습니다!

손을 더럽혀 포크 없이 처음부터 대시보드(쿼리 및 시각화 모음)를 구축해 봅시다. 이 부분에서는 특정 프로젝트를 찾기 위해 올바른 블록체인 세부 정보를 찾을 수 있는 위치를 알려주고 SQL의 기본 사항을 알려줍니다.

첫 번째 레벨 제목

파트 2: 첫 번째 쿼리 작성

  1. 이 섹션의 목적은 다음을 가르치는 것입니다.

  2. 특정 프로젝트에 필요한 정확한 정보를 찾는 방법

그러나 먼저 대시보드의 용도를 결정해야 합니다. Pool Together DeFi 프로토콜의 Pooly NFT가 첫 번째 단계입니다.

이미지 설명

Dune에서 "Pooly"를 검색하면 커뮤니티에서 만든 Pooly NFT 추적기를 찾을 수 있습니다.

이미지 설명

@0xbills가 생성한 Pooly 대시보드 중 하나를 클릭하고 "Fork"를 클릭하여 작업을 시작할 수 있습니다...

이미지 설명

https://dune.com/0xbills/Pooly-NFT를 통한 @0xbills

그러나 우리가 그것을 처음부터 구축한다면, 우리는 블록체인 탐정이 되는 방법을 배우고 동시에 약간의 SQL을 배울 것입니다! 따라서 처음부터 자체 쿼리를 작성해야 합니다.

먼저 대시보드에서 사용할 차트를 결정하겠습니다. Pooly가 홈페이지에 구축한 View를 다시 만들어 봅시다! 아래 두 스크린샷을 자세히 살펴보면 온체인 데이터를 기반으로 한 몇 가지 지표를 볼 수 있습니다.

자금 추적기가 있는 Pooly NFT 랜딩 페이지

풀 NFT 리더보드

이미지 설명

Pooly NFT 민트 옵션 및 공급

  • 우리는 다음을 볼 수 있습니다.

  • 모금된 자금과 ETH의 자금 조달 목표

  • 모금된 자금 대 자금 조달 목표(USD)

  • 총 후원자 수(풀리를 구매한 고유 주소)

  • 순위표에는 주소, 각 주소에서 구매한 NFT 수, 총 ETH가 내림차순으로 포함됩니다.

세 가지 NFT 유형 각각의 최대 공급량 및 남은 공급량

  • 엄청나게 굉장하지 않습니까! 그러나 이것들은 시간의 스냅샷일 뿐입니다. 우리 자신에게 또 다른 도전을 해보자:

시간 경과에 따라 상승하는 ETH의 시계열 그래프 만들기

지금 상태로는 Pooly 웹사이트와 같은 방식으로 보기를 만들 수는 없지만 대시보드를 만들기 위해 같은 양의 데이터(더 많은 것!)를 캡처할 수 있습니다.

올바른 정보를 찾고

  • Dune을 사용하기 전에 올바른 정보를 찾아야 합니다. 웹사이트에서 PoolTogether가 세 세트의 NFT를 판매하고 있음을 알 수 있습니다.

  • 후원자 – 0.1 ETH 상당의 무작위 수집품 9개 중 1개

  • 변호사 – 단 한 작품에 1 ETH

심사위원 - 하나의 작품에 대해 75 ETH

Etherscan으로 이동하여 Pooly 관련 스마트 계약을 찾을 수 있는지 살펴보겠습니다. Etherscan.io를 연 후 "Pooly"를 입력하여 이 스마트 계약의 소유자가 Etherscan에 등록했는지 확인합니다.

이미지 설명

Etherscan에서 Pooly 검색

세 개의 컬렉션을 각각 열고 해당 주소 위로 마우스를 가져갈 때 나타나는 복사 아이콘을 클릭하여 스마트 계약 주소를 복사합니다. 페이지 하단에는 나중에 문제를 해결하는 데 도움이 되는 최근 거래도 모두 표시됩니다.

이미지 설명

Etherscan을 통해 Pooly 컨트랙트 주소 찾기

Dune에서 올바른 데이터를 가져오려면 이러한 계약 주소가 필요하며 모든 쿼리의 기초를 형성합니다.

0x90B3832e2F2aDe2FE382a911805B6933C056D6ed

1.0 ETH Pooly Lawyer:

0x3545192b340F50d77403DC0A64cf2b32F03d00A9

0.1 ETH 풀 지지자:

0x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523

75 ETH 풀 심사위원:

먼저 dune.com으로 이동하여 화면 오른쪽 상단에 있는 "새 쿼리"를 클릭합니다.

이미지 설명

이렇게 하면 쿼리 편집기가 열리고 쿼리 작업을 시작할 수 있습니다!

이미지 설명

새롭고 손대지 않은 새 쿼리 창

쿼리 1: ETH에서 모금된 자금

먼저 왼쪽 상단의 "7.Dune Engine V2(Beta)"에서 "1.Ethereum"으로 변경합니다. Pooly는 Ethereum에 있으므로 이 쿼리에는 Ethereum 데이터만 필요합니다. 또한 "1. Ethereum"은 이제 막 베타 단계에 진입한 Dune Engine V2보다 더 성숙합니다.

select SUM("value"/1e18) from ethereum.transactions
where "to" = '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'
or "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
or "to" = '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'

첫 번째 쿼리의 경우 ETH로 표시되는 모금된 자금을 보여주는 카운터를 만들 것입니다. 이렇게 하려면 다음 코드를 Dune의 쿼리 필드에 복사하고 실행(또는 CTRL+Enter)을 누릅니다.

  • 위의 코드는 우리가 요청한 특정 데이터에 대해 Dune의 데이터베이스를 구문 분석하는 SQL 쿼리입니다. Dune의 데이터베이스는 각각 추출하려는 특정 정보를 포함하는 다양한 테이블의 모음으로 생각할 수 있습니다. SQL을 사용하여 다음을 달성할 수 있습니다.

  • 원하는 데이터 지정(테이블의 열)

  • 데이터를 변환하시겠습니까?

  • 어떤 테이블에서 데이터를 가져오시겠습니까

데이터 필터링 여부

select * from ethereum.transactions
where "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'

많은 정보가 포함된 큰 테이블을 얻게 됩니다.

이미지 설명

이제 SQL 코드를 살펴보겠습니다.

이미지 설명

SQL 코드 분해
이 코드는 "이더 범주의 트랜잭션 테이블에서 모든 열을 선택합니다. 여기서 to 열의 값은

쿼리를 실행하지 않고 테이블의 열을 볼 수 있습니다. 데이터 브라우저를 사용하면 멋진 검색 기능을 통해 다양한 헤더를 탐색할 수 있습니다.

이미지 설명

데이터 브라우저를 사용하여 "Ethereum"에서 테이블 검색

필터를 제거하기 위해 행 3을 완전히 제거할 수 있지만 이렇게 하면 거대한 테이블이 반환되고 쿼리를 완료하는 데 시간이 오래 걸립니다. 쿼리가 정확할수록 실행 속도가 빨라집니다!

select "value" from ethereum.transactions
where "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'

이제 우리는 이전에 보았던 많은 열 대신 "값" 열이 하나만 있습니다.

이미지 설명

"값" 열의 모든 항목을 반환합니다.

select "value"/1e18 from ethereum.transactions
where "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'

그러나 이러한 값이 매우 큰 것처럼 보일 수 있습니다. ETH가 아닌 Wei로 표시되기 때문입니다! 이 문제를 해결하기 위해 산술 연산자를 "값" 열에 간단히 적용할 수 있습니다.

훨씬 보기 좋지 않나요! SQL의 1e18은 10^18과 같습니다. Dune에게 이 숫자를 1,000,000,000,000,000,000으로 나누라고 지시하면 Wei 대신 ETH에서 값을 볼 수 있습니다.

select SUM("value"/1e18) from ethereum.transactions
where "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'

좋습니다. 이제 Pooly2에 사용된 총 ETH 금액을 확인할 수 있습니다! 세 개의 Pooly NFT 스마트 계약 모두의 총 지출을 얻으려면 다른 스마트 계약에 대한 세부 정보를 포함하기 위해 두 줄을 더 추가해야 합니다.

select SUM("value"/1e18) from ethereum.transactions
where "to" = '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'
or "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
or "to" = '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'

이미지 설명

최종 출력

"or" 명령은 "where" 명령과 함께 작동하며 "to" 열의 값을 필터링할 때 첫 번째 또는 두 번째 또는 세 번째 값이 발견되면 해당 행을 고려하도록 지정합니다.

이제 총 773.7 ETH가 3개의 풀 계약 모두에 사용되었음을 알 수 있습니다. 놀라운! Pooly 웹 사이트로 이동하여 올바른지 확인하십시오.

우리의 결과를 Pooly NFT 페이지의 공식 데이터와 비교하십시오. 자금 조달 목표 달성 - 축하합니다!

이제 쿼리가 완료되었으므로 나중에 대시보드에 표시할 카운터를 설정해야 합니다. 쿼리 결과 상자 아래에서 새 시각화를 클릭한 다음 표시되는 드롭다운 메뉴에서 카운터를 클릭합니다.

이미지 설명

마지막으로 시각화 추가를 클릭합니다.

이미지 설명

카운터가 나타나며 아래로 스크롤하면 다양한 설정이 보입니다. 원하는 대로 설정을 조정하면 됩니다.

이미지 설명

완료되면 (1) 대시보드에 추가를 클릭하고 (2) 새 대시보드를 선택합니다. 그런 다음 (3) 대시보드 이름을 지정하고 (4) 대시보드 저장을 클릭합니다. 새 대시보드가 ​​대시보드 목록에 나타납니다. 여기에서 시각화를 추가하려는 대시보드에서 (5) 추가를 클릭합니다. 추가되면 레이블이 "추가됨"에서 "추가됨"으로 변경됩니다.

이미지 설명

이 하위 메뉴에서 대시보드 이름("0xPhillan의 Pooly NFT")을 클릭하면 추적기를 보여주는 대시보드로 이동합니다.

이미지 설명

시각적 대시보드 추가

잘하셨어요!

쿼리가 모두 설정되면 대시보드 편집으로 돌아갑니다.

쿼리 2: USD로 모금된 자금

  1. 이 문제를 해결하는 두 가지 방법이 있습니다.

  2. NFT 구매에 사용된 USD 자금의 현재 가치 사용

Etherscan의 스마트 계약을 보면 대부분의 776.5 ETH가 스마트 계약에서 빠져나갔고 이 글을 쓰는 시점에서 299.2 ETH가 Poly NFT 스마트 계약에 남아 있음을 알 수 있습니다.

이미지 설명

Etherscan.io의 Pooly1/2/3 스마트 계약 ETH 잔액

이전 Pooly 웹사이트 스크린샷을 보면 776.5 ETH의 가치는 $1,411,249($1,817/ETH)이며 이는 Pooly 스마트 계약 소유자가 USD가 아닌 ETH에 자금을 보관하고 있음을 의미합니다.

  1. 궁극적으로 Pooly가 어떤 접근 방식을 취하는지 말하기는 어렵지만 달러 가치를 계산하는 두 가지 방법이 모두 흥미롭습니다.

  2. 현재 가치는 자금의 현재 가치를 알려줍니다.

구매 당시의 가치는 구매자의 예상 달러 금액을 알려줍니다.

그래서... 함께 만들어 봅시다!

쿼리 2a: 현재 ETH 가치로 USD로 모금된 자금

먼저 방금 만든 쿼리를 포크합니다.

이미지 설명

이전 쿼리 포크

select SUM("value"/1e18) * (
       SELECT "price" FROM prices.usd
       WHERE "symbol" = 'WETH'
       AND "minute" < now() - interval '1 hours'
       ORDER BY "minute" DESC
       LIMIT 1
   )
from ethereum.transactions
where "to" = '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'
or "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
or "to" = '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'

그런 다음 코드를 다음과 같이 조정하십시오.

SUM("value"/1e18) 명령 뒤에 곱셈 연산자 *와 큰 코드 블록을 추가했음을 알 수 있습니다.

Dune에서 쿼리의 특정 부분을 강조 표시하고 선택 실행을 클릭하여 해당 부분만 실행할 수 있습니다. (1) 괄호 안의 줄만 강조 표시하고 (2) 선택 항목을 실행해 보겠습니다.

쿼리의 일부를 선택하면 선택한 부분만 실행할 수 있습니다.

이 코드 블록을 분석해 보겠습니다.

이미지 설명

  1. 이전 코드의 고장

  2. price.usd 테이블에서 "Price" 열을 선택합니다.

  3. "WETH"에 대한 기호 열 필터링

  4. 지난 1시간 동안의 시간 항목만 확인합니다(이렇게 하면 쿼리 속도가 크게 향상됨).

  5. 내림차순으로 정렬(최신순)

이 코드를 더 잘 이해하기 위해 쿼리를 약간 조정해 보겠습니다. (1) "price"를 *(모든 열 반환)로 바꾸고 (2) 코드의 2~5행만 선택한 다음 (3) 선택을 실행합니다.

이미지 설명

쿼리 결과에서 5개의 열이 있는 전체 테이블을 볼 수 있습니다. 먼저 Etherscan.io에서 컨트랙트 주소를 확인합시다.

0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

이미지 설명

Etherscan.io의 WETH 스마트 계약

이전 표로 주의를 돌려 보겠습니다.

이미지 설명

쿼리 결과 테이블 이전 쿼리

여기에 매분 ETH에서 USD로의 가치를 추적하는 "분 분"이라는 열이 있습니다. 쿼리를 "1시간 간격"으로 제한하므로 사용 가능한 가장 최근 데이터만 가져옵니다. 목적상 가장 최근의 데이터 항목만 필요하므로 이 쿼리를 마지막 시간으로 제한하면 속도가 크게 향상됩니다. 예를 들어 더 많은 기록 데이터를 얻기 위해 "1일", "3일" 또는 "1주"로 변경할 수도 있습니다.

이 섹션의 시작 부분에서 변경한 코드로 되돌리고 쿼리를 실행해 보겠습니다.

이미지 설명

쿼리 저장

이를 위해 카운터를 다시 사용하므로 아래로 스크롤하여 (1) 이전 쿼리에서 분기된 카운터를 클릭하고 (2) 데이터 소스를 조정하고 (3) 레이블을 변경합니다.

이미지 설명

완료되면 대시보드에 저장하고 추가해야 합니다.

이미지 설명

추가하면 아래 이미지처럼 됩니다. 걱정하지 마세요. 이 가이드의 끝에서 정리할 것입니다. 이제 외모 걱정하지 마세요!

이미지 설명

두 번째 쿼리가 추가된 대시보드

쿼리 2b: USD로 모금된 자금, 구매 시점의 ETH 가치

다시, 이전 쿼리를 분기하여 다음 쿼리를 준비하겠습니다.

이미지 설명

포크된 코드에서 다음을 수행합니다.

with poolyTransactions as
(
select
   block_time,
   value/1e18 as value_eth
from ethereum.transactions
where "to" = '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'
or "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
or "to" = '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'
)
select
sum(value_eth * price)
from poolyTransactions tx
left join
   (select minute, price from prices.usd
             where symbol = 'WETH' and minute > '2022-05-01')
             as prices on date_trunc('minute', block_time) = minute

이미지 설명

NFT 구매 시 ETH-USD 환율 쿼리 사용

이 코드를 세 부분으로 나누겠습니다.

이미지 설명

쿼리를 세 부분으로 나눕니다.

섹션 1

여기에서 참조할 첫 번째 테이블을 만듭니다. 여기서 우리가 한 것은 ethereum.transactions 테이블의 block_time과 value_eth를 보유할 "poolyTransactions"라는 보조 테이블을 만드는 것입니다(wei의 값을 10^18로 나누어 ETH로 변환합니다. 이름). 이 테이블의 경우 우리가 알고 있는 세 개의 Pooly 주소를 필터링합니다.

  • 다음은 한 줄씩 설명합니다.

  • 1행: poolyTransaction을 다음과 같이 사용 - 다음 속성을 사용하여 "poolyTransaction"이라는 보조 테이블을 정의합니다.

  • 3-11행: ethereum.transcations 테이블에 포함할 열과 필터를 선택합니다.

5행: value/1e18 as value_eth - 여기서는 다른 계산을 수행하는 대신 섹션 2에서 직접 참조할 수 있도록 열 이름을 "value_eth"로 바꿉니다.

제 2 장

여기에서 출력 테이블을 생성합니다. 섹션 1에서 만든 보조 테이블 poolyTransactions에서 테이블을 만들고 있지만 아직 정의하지 않은 "가격"이라는 열도 참조하고 있음을 알 수 있습니다. 가격은 실제로 19행 이후에만 정의됩니다! 이는 섹션 3에서 price.usd 테이블의 일부 출력과 함께 poolyTransactions를 조인했기 때문에 가능합니다. 따라서 본질적으로 우리는 보조 테이블인 poolyTransactions와 price.usd로 만든 테이블을 사용하여 테이블의 다음 섹션을 생성합니다.

섹션 3

  • 여기에서 다른 테이블과 조인할 테이블을 정의합니다. "left join" 키워드를 사용하면 다음을 수행할 수 있습니다.

  • 18행: 왼쪽 조인 - 첫 번째 테이블(왼쪽 테이블)을 다른 테이블(오른쪽 테이블)과 조인하려는 것을 나타내는 데 사용되는 키워드입니다. 즉, 섹션 1에서 정의한 첫 번째 테이블이 기본 테이블 역할을 합니다.

  • 19-20행: 여기에서 price.usd에서 생성하려는 테이블을 정의합니다. 20행에서 Pooly 스마트 계약은 5월에만 배포되기 때문에 기간을 "2022-05-01"로 제한합니다. 따라서 더 짧은 시간 프레임으로 제한하면 데이터 쿼리 속도를 크게 높일 수 있습니다.

  • 라인 22: on data_trunc('minute', block_time) = minute – 이것은 보조 테이블(섹션 1)과 가격 테이블(섹션 3 라인 19-20)을 결합하는 라인입니다. 여기서 말하는 것은 보조 테이블에서 "block_time" 열을 가져와서 분으로만 자르는 것입니다. 즉, 분이 아닌 다른 모든 데이터(예: 초, 밀리초 등)를 삭제하는 것입니다. price.usd 테이블은 이미 분 단위로 잘렸으므로 여기에서 추가 변환이 필요하지 않습니다. 그런 다음 price.usd의 분 열이 보조 테이블의 분 열과 일치하므로 price.usd의 올바른 가격을 poolyTransactions의 해당 분 타임스탬프에 할당합니다.

이미지 설명

세 번째 섹션을 더 잘 시각화하기 위해 이해하기 쉽도록 섹션을 재구성했습니다.

이미지 설명

연결 명령의 각 단계 시각화

(1) poolyTransactions 테이블을 생성한 다음, (2) SQL에 다른 테이블과 조인하도록 지시하고, (3) 이를 price.usd 테이블의 분 및 가격 열로 정의합니다. 그런 다음 (4) 시간(분)을 매핑 변수로 사용하여 우리가 생성한 이 price.usd 테이블을 왼쪽 테이블 poolyTransactions에 조인합니다. 테이블을 조인하려면 두 테이블의 항목이 완전히 동일해야 합니다. block_time 변수를 분으로 자르면 두 테이블 간에 일치하는 분이 생성됩니다. 이렇게 하면 (5) 해당 날짜와 일치하는 가격 값이 있는 가격 열을 포함하도록 poolyTransactions 테이블이 업데이트됩니다.

이제 카운터를 추가하고 저장하고 대시보드에 추가하세요!

쿼리에 카운터 시각화 추가

카운터 시각화 설정 및 대시보드에 추가됨

이미지 설명

대시보드에 추가된 카운터 시각화

질의 3: 총 지지자 수

이렇게 하려면 먼저 첫 번째 쿼리를 열고 포크한 다음 이 단계도 저장해야 합니다.

이미지 설명

여기서는 첫 번째 줄만 변경합니다.

select COUNT(DISTINCT "from") from ethereum.transactions
where "to" = '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'
or "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
or "to" = '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'

이미지 설명

COUNT 변수는 모든 트랜잭션을 계산하는 반면 DISTINCT 키워드는 각 고유 항목이 한 번만 계산되도록 합니다. 우리가 얻은 결과는 4660명의 고유한 후원자였습니다. 이것을 Pooly 웹 사이트의 고유한 지지자와 비교하면 거의 비슷하다는 것을 알 수 있습니다.

이미지 설명

Pooly 라이브 서포터 데이터

마지막으로 시각화 카운터를 변경하고 대시보드에 다시 추가합니다.

카운터의 시각화 설정을 조정하고 대시보드에 추가

이미지 설명

대시보드에 추가된 카운터

쿼리 4a: erc721을 사용하는 순위표, 요약

다음으로 주소, 각 주소에서 구매한 NFT 수, 총 ETH로 구성된 순위표를 내림차순으로 작성해 보겠습니다.

순위표를 보려면 세 가지 정보가 필요합니다. 첫 번째는 구매자의 주소, 그 다음 구매한 NFT의 양, 마지막으로 모든 NFT를 구매하는 데 사용한 ETH의 양입니다.

이미지 설명

풀 리더보드 열

다음 쿼리로 이를 수행합니다.

with poolyTransactions as
(
select
   "from",
   hash,
   value/1e18 as value_eth
from ethereum.transactions
where "to" = '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'
or "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
or "to" = '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'
)
select
"from", nfts_purchased, value_eth
from poolyTransactions
left join
   (Select evt_tx_hash, COUNT("tokenId") as nfts_purchased
       From erc721."ERC721_evt_Transfer"
       Where (contract_address = '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'
       or contract_address = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
       or contract_address = '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523')
       and "from" = '\x0000000000000000000000000000000000000000'
       group by 1)
       as nfts
       on evt_tx_hash = hash
ORDER BY 3 desc

이미지 설명

풀 리더보드 테이블

이것이 "구매 시 ETH 값으로 USD로 자금 조달"의 쿼리와 매우 유사하다는 것을 알 수 있습니다. 이는 우리가 동일한 접근 방식을 사용하기 때문입니다. 먼저 poolyTransactions 테이블에서 트랜잭션 데이터를 수집한 다음 처음 Two 테이블을 남겨둡니다. - 공통 매핑 값이 있습니다.

여기서 두 번째 테이블의 경우 erc721을 사용합니다. "ERC721_evt_Transfer" 테이블은 Dune에서 유지 관리하는 다이제스트이며 ​​이더리움의 모든 NFT 전송을 추적합니다. 데이터세트 브라우저를 사용하는 경우 "erc721"을 입력합니다. "ERC721_evt_Transfer"로 스크롤하면 특정 테이블에 포함된 모든 것을 볼 수 있습니다. 두 번째 테이블에 대한 명령을 강조 표시하고 출력이 무엇인지 확인할 수도 있습니다.

또한 필터가 정의되는 방식이 약간 특별하다는 것을 알 수 있습니다. 처음 세 개의 필터는 이제 괄호로 묶이고 마지막 필터는 괄호 밖에 있습니다.

이미지 설명

괄호는 SQL에서 산술 명령을 수행할 때와 마찬가지로 계산 및/또는 필터 명령의 순서를 결정합니다. 처음 세 문을 묶지 않으면 and 조건은 마지막 필터 설정에만 적용됩니다.

이미지 설명

괄호 없는 평가

from null 주소 필터를 이전 필터의 모든 결과에 적용하려고 하므로 괄호를 추가해야 합니다.

마지막으로 "COUNT" 명령을 사용하고 있으므로 계산할 열(즉, 계산을 집계할 변수)을 지정해야 합니다. 이를 위해 "group by" 명령을 사용하여 "tokenId"의 수를 테이블의 첫 번째 열인 "evt_tx_hash"로 그룹화하려고 함을 나타냅니다."ERC721_evt_Transfer "앞에서 언급했듯이 두 번째 테이블을 테이블에 매핑하려면 공통 매핑 값이 필요합니다. 여기에서 거래 해시를 사용하여 거래당 구매한 NFT의 양을 poolyTransactions 테이블에 매핑합니다. 이번에는 거래 해시도 요청합니다. 그래서 결국 우리는 erc721이 될 것입니다."nfts"테이블(우리가 이름을

)는 pooly 구매 트랜잭션만 포함하는 poolyTransactions 테이블에 매핑됩니다.

마지막으로 Dune에 "ORDER BY 3 desc"라고 지시합니다. 이는 출력 테이블의 세 번째 열이 내림차순이어야 함을 의미합니다.

이미지 설명

엄청난! 리더보드가 완성되었습니다. 이것을 Pooly NFT 웹사이트의 순위표와 비교해 보겠습니다.

이미지 설명

Dune 쿼리 순위표를 Pooly 웹사이트 순위표와 비교

모든 숫자가 동일하지는 않지만 이 목록에서 일부 주소, 구매한 NFT 및 총 ETH 지출이 동일한 숫자임을 알 수 있습니다. 이것은 다시 Dune과 실시간 블록체인 데이터 사이의 동기화 타이밍 문제이므로 걱정할 필요가 없습니다.

쿼리를 저장하고 대시보드에 추가해야 합니다.

쿼리 4b: poolysupporter를 사용한 리더보드 디코딩 테이블

with poolyTransactions as
(
select
   "from",
   hash,
   value/1e18 as value_eth
from ethereum.transactions
where "to" = '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'
or "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
or "to" = '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'
)
select
"from", nfts_purchased, value_eth
from poolyTransactions
left join
   (Select call_tx_hash, "_numberOfTokens" as nfts_purchased
       From poolysupporters."PoolyNFT_call_mintNFT"
       where contract_address = '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'
       or contract_address = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
       or contract_address = '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'
       )
       as nfts
       on call_tx_hash = hash
ORDER BY 3 desc

이 테이블을 사용하면 erc721에서 트랜잭션을 결정하기 위해 빈 주소를 사용하는 대신 mintNFT 함수를 호출하는 모든 트랜잭션 해시를 직접 반환할 수 있다는 점을 제외하면 메서드는 위와 동일합니다. "ERC721_evt_Transfer" 테이블은 민트 트랜잭션입니다.

이미지 설명

풀 서포터를 사용하십시오. erc721 대신

poolysupporter 데이터 세트를 사용하면 특정 계약 호출을 참조할 수 있으므로 보다 구체적이고 자세한 쿼리를 만들 수 있습니다.

두 테이블의 결과를 비교하여 잘못된 것이 없는지 확인하겠습니다.

알다시피 출력은 동일합니다.

쿼리를 저장하고 대시보드에 추가해야 합니다.

쿼리 4의 대체 버전에서는 poolysupporter 함수를 사용합니다. 데이터셋 탐색기에서 pooly를 검색할 때 "PoolyNFT_call_maxNFT"라는 함수도 표시되는 것을 보셨을 것입니다.

이미지 설명

이 함수 호출을 사용하여 최대 발행된 NFT를 직접 검색할 수 있다는 결론을 내릴 수 있습니다.

이미지 설명

불행히도 이것은 불가능합니다. 이 기능은 "읽기" 기능이므로 이 기능이 호출된 시점에 대한 온체인 기록이 없습니다. 아래 Etherscan을 참조하십시오.

이미지 설명

maxNFT는 읽기 기능으로 블록체인에 기록을 남기지 않습니다.

대신 각 스마트 계약에 대해 maxNFT 데이터를 수동으로 입력해야 합니다.

with poolyContracts as
(
Select  contract_address,
       COUNT("tokenId") as nfts_purchased
           From erc721."ERC721_evt_Transfer"
           Where (contract_address = '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'
           or contract_address = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
           or contract_address = '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523')
           and "from" = '\x0000000000000000000000000000000000000000'
           group by 1
)
select
   CASE contract_address
       WHEN '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed' then 'Pooly_Supporter'
       WHEN '\x3545192b340F50d77403DC0A64cf2b32F03d00A9' then 'Pooly_Lawyer'
       WHEN '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523' then 'Pooly_Judge'
       END as NFT_name,
   nfts_purchased,
   CASE maxNFT_Supply
       WHEN '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed' then 10000
       WHEN '\x3545192b340F50d77403DC0A64cf2b32F03d00A9' then 100
       WHEN '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523' then 10
       END as NFT_Supply,
   CASE maxNFT_Supply
       WHEN '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed' then 100-(nfts_purchased/10000.0*100)
       WHEN '\x3545192b340F50d77403DC0A64cf2b32F03d00A9' then 100-(nfts_purchased/1000.0*100)
       WHEN '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523' then 100-(nfts_purchased/10.0*100)
       END as percent_supply_remaining
from poolyContracts
left join
   (
   Select  contract_address as maxNFT_Supply
           From erc721."ERC721_evt_Transfer"
           Where (contract_address = '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'
           or contract_address = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
           or contract_address = '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523')
           and "from" = '\x0000000000000000000000000000000000000000'
           group by 1
   )
   as maxNFT
   on maxNFT_Supply = contract_address
   
ORDER BY 3 desc

이미지 설명

Pooly NFT 공급 문의

이것은 당신이 약간의 창의력을 발휘해야 하는 곳입니다. SQL의 특정 테이블 항목에 수동으로 숫자를 추가하는 것은 어려운 작업입니다. 읽기 쉬운 테이블을 남기기 위해 몇 가지 트릭을 적용해야 했습니다.

두 번째 테이블이 있는 이유는 SQL이 단일 쿼리에서 열을 두 번 호출하는 것을 허용하지 않기 때문입니다. 실제로는 열을 여러 번 호출하고 각 열 호출을 개별적으로 변환해야 합니다. 그러나 조인 테이블을 사용하면 두 번째 테이블의 열을 여러 번 호출할 수 있으므로 필요한 열의 특정 행에 대해 원하는 출력을 생성할 수 있습니다.

이미지 설명

위 쿼리의 분석

더 쉽게 이해할 수 있도록 이 쿼리를 네 부분으로 나누겠습니다.

순서에 주의하세요! 1, 3, 2, 4!

이 섹션에서는 3개의 풀 계약 주소의 빈 주소에서 모든 개별 토큰 ID를 계산하는 "poolyContracts"라는 테이블을 정의하므로 erc721."ERC721_evt_Transfer" 테이블을 사용하여 발행된 NFT만 포함합니다. 그런 다음 첫 번째 열로 그룹화하여 각 풀 스마트 계약에 대해 생성된 NFT를 반환합니다.

이미지 설명

poolyContracts 테이블

이 코드 블록에서는 쿼리가 세 개의 계약 주소 각각만 표시하도록 강제합니다. 첫 번째 열의 고유 항목별로 결과를 그룹화하는 "group by 1" 명령을 사용하여 이 작업을 수행합니다.

이미지 설명

group by 명령이 없으면 쿼리는 이러한 계약 주소와 관련된 모든 전송 이벤트를 반환하지만 각각 한 번만 발생하면 됩니다. 다음 섹션에서 그 이유를 확인할 수 있습니다.

이미지 설명

두 번째 테이블은 "group by 1" 명령 없이 계약 주소의 긴 목록을 반환합니다.

또한 poolyContracts 테이블에서 이 테이블을 조인할 열을 정의할 수 있도록 contract_address 열의 이름을 maxNFT_Supply로 변경했습니다.

섹션 3

이것은 마술이 일어나는 곳입니다.

  • 이 섹션에서는 이제 조인 테이블에서 열을 호출할 수 있습니다. 우리는 그것을 호출:

  • nfts_purchased

  • maxNFT_Supply

  • maxNFT_Supply

계약 주소

다음으로 열 1, 3, 4에도 CASE WHEN 절이 포함되어 있음을 알 수 있습니다. 우리가 생성한 처음 두 테이블에는 각 스마트 계약에 대해 고유한 행이 하나만 있기 때문에 CASE WHEN 문을 사용하여 Location이 다른 것을 반환하는 특정 스마트 계약 주소(세 가지 옵션 중 하나)가 발생하는지 여부를 지정할 수 없습니다.

이미지 설명

nft_supply로 정렬되지 않은 전체 결과 테이블

여기에서 첫 번째 열을 볼 수 있습니다. 쿼리 편집기에 각 스마트 계약 주소를 해당 NFT의 이름으로 바꾸라고 지시하고 있습니다!

세 번째 열에서는 Pooly 웹사이트에 나열된 알려진 최대 NFT 수로 대체합니다.

네 번째 열에서는 공식을 사용하여 남은 NFT 공급량의 백분율을 계산합니다. 이러한 명령문에서 산술 연산에 사용되는 하나 이상의 숫자는 소수점 이하 자릿수를 포함해야 합니다. 이것이 포함되지 않은 경우 SQL 쿼리는 정수를 반환하려는 것으로 해석되며, 이는 이러한 계산에 대해 소수점 이하 자릿수를 얻지 못함을 의미합니다. ".0"을 포함하면 이 계산에서 십진수를 반환할 것임을 서버에 알리는 것입니다.

마지막으로 출력을 세 번째 열을 기준으로 내림차순(내림차순)으로 정렬하도록 지정합니다.

이미지 설명

이 테이블도 준비되어 있습니다. 쿼리를 저장하고 테이블을 원하는 대로 변경한 다음 대시보드에 추가합니다.

이미지 설명

대시보드에 테이블 추가

마지막 쿼리에서는 시간 경과에 따라 NFT 판매를 통해 모금된 ETH의 양을 보여주는 시계열 그래프를 생성합니다.

select
   block_time as time,
   sum(value/1e18) over (order by date_trunc('minute', block_time) asc) as cumu_value_eth
from ethereum.transactions
where ("to" = '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'
or "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
or "to" = '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523')
and date_trunc('day', block_time) < '2022-06-25’

기본 지식
Odaily 공식 커뮤니티에 가입하세요