

Tác giả gốc: 0xPhillan
Tác giả gốc: 0xPhillan
Nguồn gốc: web3edge
Bản dịch gốc: yuppie giàDune có lẽ là công cụ phân tích dữ liệu blockchain mạnh mẽ nhất hiện có cho đại chúng và trên hết:miễn phí!
Với Dune, bạn có quyền truy cập gần thời gian thực vào dữ liệu chuỗi khối thông qua cơ sở dữ liệu công cộng có thể được truy vấn bằng SQL.
Đây là năng lượng rất mạnh mẽ.
Dune giải mã dữ liệu chuỗi khối trước khi thêm nó vào cơ sở dữ liệu, điều đó có nghĩa là bạn không cần phải tự mình tìm ra mã byte. Thay vào đó, bạn có thể sử dụng trình duyệt của Dune để duyệt các tập dữ liệu, hợp đồng thông minh cụ thể, sự kiện hoặc cuộc gọi!
Dune mới ra mắt engine V2 cải thiện hiệu năng gấp 10 lần, giờ là lúc bạn học cách sử dụng Dune.
Trong hướng dẫn này, bạn sẽ học:
Phần 1: Giao diện Dune
Phần 2: Xây dựng các truy vấn và đồ thị của riêng bạn bằng cách sử dụng SQL - bắt đầu từ những điều cơ bản
Phần 3: Sắp xếp mọi thứ vào bảng điều khiển
hãy bắt đầu!
tiêu đề cấp đầu tiên
Hỏi thăm
bảng điều khiển
Hỏi thăm
cái nĩa
cái nĩa
trình soạn thảo truy vấn
Trình duyệt tập dữ liệu và phân loại dữ liệu
Lưu truy vấn rẽ nhánh của bạn
Phần 2: Xây dựng truy vấn đầu tiên của bạn
quyết định những truy vấn để xây dựng
tìm kiếm thông tin phù hợp
Sẵn sàng tạo truy vấn đầu tiên của bạn trong Dune
Truy vấn 1: Tiền được huy động bằng ETH
Truy vấn 2: Vốn huy động bằng USD
Truy vấn 2a: Gây quỹ bằng USD theo giá trị ETH hiện tại
Truy vấn 2b: Gây quỹ bằng USD theo giá trị ETH tại thời điểm mua
Truy vấn 3: Tổng số người ủng hộ
Truy vấn 4:
Truy vấn 4a: bảng thành tích sử dụng erc721. trừu tượng
Truy vấn 4b: bảng thành tích sử dụng poolysupporter. bảng giải mã
Truy vấn 6: Biểu đồ chuỗi thời gian của ETH tăng theo thời gian
Phần 3: Dọn dẹp Dashboard
Hoàn thành
tiêu đề phụ
Phần 1: Tổng quan về Dune và các tính năng
Khi mở trang web Dune.com lần đầu tiên, bạn sẽ thấy cửa sổ bên dưới. Có một trình thay đổi chế độ xem ở đầu cửa sổ này cho phép bạn duyệt qua các bảng thông tin, truy vấn và trình hướng dẫn, sau đó là khu vực xem chi tiết nơi bạn có thể xem danh sách các bảng thông tin, truy vấn và trình hướng dẫn (người dùng) ở bên trái và một số tìm kiếm - cài đặt liên quan đến bên phải.
bảng điều khiển
Trong Dune, mọi bảng điều khiển đều công khai. Điều này có nghĩa là bất kỳ ai cũng có thể xem và sao chép mọi thứ bạn xây dựng hoặc bất kỳ ai khác xây dựng! Điều này giúp giảm đáng kể thời gian tạo trang tổng quan và cho phép bạn học hỏi từ các truy vấn của người dùng khác.
Hỏi thăm
Nếu bạn còn nhớ, tôi đã đề cập rằng trang tổng quan là một tập hợp các truy vấn. Nếu bạn nhấp vào tiêu đề của bất kỳ thành phần bảng điều khiển nào, bạn sẽ được đưa đến truy vấn SQL cho biểu đồ đó:
Mô tả hình ảnh
Hai ví dụ về màn hình trình soạn thảo truy vấn bảng điều khiển
Ở đây chúng ta có thể thấy hai yếu tố chính trên màn hình: truy vấn (trên cùng; hộp đen) và biểu đồ đầu ra (dưới cùng). Đúng vậy: bất kể bạn nhấp vào ô hoặc biểu đồ nào, bạn có thể xem cách người dùng tạo biểu đồ đó.
Nếu bạn muốn lưu toàn bộ trang tổng quan hoặc chỉ truy vấn biểu đồ vào tài khoản của riêng mình, bạn có thể nhấp vào "Rẽ nhánh" ở góc trên bên phải và mọi thứ trên màn hình rẽ nhánh sẽ được sao chép sang một cửa sổ mới nơi bạn có thể chỉnh sửa và lưu chế độ xem vào tài khoản của bạn.
Mô tả hình ảnh
Truy vấn giá Ethereum
Hãy fork biểu đồ giá Ethereum! Sau khi nhấn "Fork" trên truy vấn, bạn sẽ được đưa đến trình chỉnh sửa truy vấn với mã trước đó được sao chép vào!
trình soạn thảo truy vấn
Hãy để tôi giới thiệu cho bạn các yếu tố trên màn hình khác nhau ở đây:
Truy vấn vị trí và tên - tên có thể được thay đổi sau khi nhấp vào lưu!
Dataset Browser - tìm kiếm một tập dữ liệu cụ thể
Cửa sổ truy vấn - nhập truy vấn SQL của bạn tại đây
Bộ chọn trực quan hóa - chọn xem kết quả truy vấn, biểu đồ đường phân nhánh hay tạo trực quan hóa mới
chạy - chạy truy vấn trong cửa sổ truy vấn
lưu - Lưu truy vấn (phân nhánh) của bạn!
Mô tả hình ảnh
Tổng quan về Trình soạn thảo Truy vấn Dune
Trình duyệt tập dữ liệu và danh mục dữ liệu
Chúng ta hãy xem xét kỹ hơn trình duyệt tập dữ liệu. Có sáu khu vực chức năng trong trình duyệt tập dữ liệu:
lựa chọn chuỗi
Tìm kiếm tập dữ liệu
Duyệt dữ liệu chuỗi khối thô
Duyệt và giải mã dữ liệu hợp đồng
Duyệt dữ liệu được cung cấp bởi cộng đồng
Mô tả hình ảnh
Tổng quan về trình duyệt bộ dữ liệu Dune
Trong lựa chọn tập dữ liệu, bạn có thể chọn chuỗi nào bạn muốn phân tích cú pháp. Việc chọn "Dune Engine V2 (Beta)" sẽ cho phép bạn truy cập vào các cải tiến mới nhất của Dune, bao gồm các truy vấn đa chuỗi và tăng hiệu suất gấp 10 lần.
Mô tả hình ảnh
Nếu bạn chọn một chuỗi khác, lựa chọn danh mục (mục 3-6 trong hình trên) sẽ biến mất và bạn sẽ thấy danh sách các cuộc gọi hợp đồng và sự kiện mà bạn có thể tương tác.
Mô tả hình ảnh
Chọn "1. Ethereum"
tìm kiếm
Lưu ý: Dune Engine V2 và chức năng tìm kiếm cũ trả về kết quả khác nhau. Trong khi tìm kiếm cũ trả về một danh sách tất cả các kết quả, Dune Engine V2 trả về một danh sách kết quả lồng nhau. Chúng tôi sẽ sử dụng động cơ V2!
Mô tả hình ảnh
Kết quả tìm kiếm cho "1. Ethereum" và "7. Dune Engine V2 (Beta)"
Nếu nhấp vào dữ liệu chuỗi khối thô, bạn có thể dễ dàng tìm thấy các truy vấn cho các chuỗi khối khác nhau mà Dune hỗ trợ trong các cấu trúc dữ liệu lồng nhau, trước tiên bằng cách chọn bảng thô và từ đó chọn các cột bảng cụ thể mà bạn muốn điều tra thêm. Trong mỗi cấp độ lồng nhau, bằng cách chọn, bạn cũng có thể lọc các kết quả tìm kiếm cụ thể mà bạn đang tìm kiếm.
Mô tả hình ảnh
Dune Engine V2 (Beta) Tổng quan về dữ liệu chuỗi khối thô
Đây là một cách rất nhanh chóng và dễ dàng để có được dữ liệu chuỗi khối nâng cao.
mục giải mã
Bạn sẽ nhận thấy một lần nữa rằng các kết quả tìm kiếm được lồng vào nhau. Ở cấp độ cao nhất, có những dự án mà bạn có thể tìm kiếm, ở cấp độ thấp hơn, bạn có thể lọc một hợp đồng thông minh cụ thể trong dự án đó và cuối cùng chúng ta thấy các bảng khác nhau được tạo từ hợp đồng thông minh đó. Nếu bạn nhấp vào bất kỳ bảng nào, bạn sẽ thấy một danh sách, giống như dữ liệu ban đầu của chuỗi khối.
Tổng quan về dự án giải mã Dune Engine V2 (beta)
Bản tóm tắt
Bản tóm tắt
Một bản tóm tắt có thể được coi là một bảng tùy chỉnh tham gia và kết hợp nhiều truy vấn và khối dữ liệu khác nhau để tạo thành một bảng duy nhất. Tóm tắt giúp người dùng truy vấn dữ liệu cụ thể mà họ đang tìm kiếm dễ dàng hơn mà không cần phải kết hợp nhiều dữ liệu theo cách thủ công.
Nói chung, tóm tắt có thể được chia thành hai loại:
Tóm tắt ngành: Dữ liệu cụ thể theo ngành
Từ menu con Tóm tắt, bạn có thể xem danh sách tóm tắt với các thẻ chỉ định xem tóm tắt là dành riêng cho bộ phận hay dành riêng cho dự án.
Tổng quan tóm tắt Dune Engine V2 (Beta)
Cộng đồng
Cộng đồng
Bạn có thể thắc mắc tại sao chỉ có một mục trong phần cộng đồng ("flashbots") - đó là vì Dune Engine V2 vừa được phát hành! Theo thời gian, chúng ta có thể thấy ngày càng nhiều bộ dữ liệu cộng đồng được xây dựng bởi các thành viên cộng đồng đáng tin cậy.
Mô tả hình ảnh
Tổng quan về cộng đồng Dune Engine V2 (Beta)
Trong hình ảnh bên dưới, bạn có thể thấy tóm tắt về cách dữ liệu trong Dune được tổng hợp kể từ khi phát hành Dune Engine V2: bốn loại dữ liệu chính là dữ liệu chuỗi khối thô, mục đã giải mã, bản tóm tắt và cộng đồng chứa nhiều chuỗi khối A khác nhau dữ liệu có thể lưu các loại dữ liệu khác nhau.
Mô tả hình ảnh
Tổng quan về các tab trong trình duyệt dữ liệu Dune Engine V2 (beta)
Trước tiên, hãy lưu truy vấn này. Sau khi nhấp vào lưu, một vài điều xảy ra. Đầu tiên, đặt tên cho truy vấn của bạn.
Mô tả hình ảnh
Lưu cửa sổ bật lên truy vấn
(1) Vị trí và tên truy vấn được cập nhật và (2) truy vấn của bạn đang chạy. Điều này có nghĩa là Dune đang lấy dữ liệu mới nhất từ cơ sở dữ liệu của họ, được cập nhật thường xuyên với dữ liệu mới nhất từ các chuỗi khối khác nhau. Sau khi truy vấn chạy xong, bạn sẽ thấy kết quả truy vấn (3).
Mô tả hình ảnh
Từ đây, nếu bạn nhấp vào bất kỳ (1) Kết quả truy vấn, Biểu đồ đường hoặc Hình ảnh hóa mới, hộp (2) Kết quả/Hình ảnh hóa sẽ cập nhật với (3) cài đặt lựa chọn được hiển thị bên dưới. Tại đây, cũng có nút "Thêm vào Trang tổng quan" để nhanh chóng thêm kết quả truy vấn hoặc hình ảnh hóa của bạn vào trang tổng quan mới hoặc hiện có - giống như trang tổng quan Ethereum của @hildobby trước đây!
Mô tả hình ảnh
Nếu bạn nhấp vào (1) vòng tròn ở góc trên bên phải và sau đó (2) "Truy vấn của tôi", một danh sách các yêu cầu cho tài khoản của bạn sẽ mở ra.
Mô tả hình ảnh
Danh sách truy vấn bao gồm tất cả các truy vấn bạn đã từng lưu trong tài khoản của mình. Trong ảnh chụp màn hình trên cùng bên dưới, chúng ta có thể thấy truy vấn mới nhất được tạo:
Mô tả hình ảnh
Một danh sách các truy vấn với các truy vấn gần đây nhất được giữ ở trên cùng
Xin chúc mừng, bạn đã học cách sử dụng phân nhánh trực quan và đã lưu truy vấn đầu tiên của mình!
Hãy bắt tay vào xây dựng một bảng điều khiển—một tập hợp các truy vấn và hình ảnh hóa—từ đầu mà không cần chuyển đổi. Phần này sẽ hướng dẫn bạn nơi tìm chi tiết chuỗi khối chính xác để tra cứu cho dự án cụ thể của bạn và hướng dẫn bạn những điều cơ bản về SQL.
tiêu đề cấp đầu tiên
Phần 2: Xây dựng truy vấn đầu tiên của bạn
Mục đích của phần này là dạy cho bạn:
Cách tìm thông tin chính xác bạn cần cho một dự án cụ thể
Nhưng trước tiên, chúng ta cần quyết định bảng điều khiển dùng để làm gì. Pooly NFT của giao thức Pool Together DeFi là bước đầu tiên.
Mô tả hình ảnh
Nếu chúng tôi tìm kiếm "Pooly" trên Dune, chắc chắn, chúng tôi có thể tìm thấy một số trình theo dõi Pooly NFT do cộng đồng tạo ra.
Mô tả hình ảnh
Chúng tôi có thể nhấp vào một trong các bảng điều khiển Pooly được tạo bởi @0xbills và nhấp vào "Fork" để bắt đầu hoạt động...
Mô tả hình ảnh
@0xbills qua https://dune.com/0xbills/Pooly-NFT
Nhưng nếu chúng ta xây dựng nó từ đầu, chúng ta sẽ học cách trở thành thám tử blockchain và đồng thời học một số SQL! Do đó, chúng ta cần xây dựng truy vấn của riêng mình từ đầu.
Trước tiên, hãy quyết định biểu đồ nào chúng tôi muốn sử dụng trên trang tổng quan của mình. Hãy cùng xây dựng lại view mà Pooly đã xây dựng trên trang chủ của mình! Xem xét kỹ hơn hai ảnh chụp màn hình bên dưới, chúng ta có thể thấy một số chỉ số dựa trên dữ liệu trên chuỗi.
Trang đích Pooly NFT với trình theo dõi tiền
Bảng xếp hạng Pooly NFT
Mô tả hình ảnh
Tùy chọn và nguồn cung Pooly NFT Mint
Chúng tôi có thể thấy điều đó:
Số tiền huy động được so với mục tiêu tài trợ bằng ETH
Số tiền huy động được so với mục tiêu tài trợ bằng USD
Tổng số người ủng hộ (địa chỉ duy nhất nơi Pooly được mua)
Bảng xếp hạng bao gồm địa chỉ, số lượng NFT được mua theo từng địa chỉ và tổng số ETH theo thứ tự giảm dần
Nguồn cung tối đa và nguồn cung còn lại của từng loại trong số ba loại NFT
Không phải là nó siêu tuyệt vời! Nhưng đây chỉ là những bức ảnh chụp nhanh trong thời gian. Hãy cũng đặt ra cho mình một thử thách khác:
Tạo biểu đồ chuỗi thời gian của ETH tăng theo thời gian
Hiện tại, chúng tôi không thể xây dựng chế độ xem theo cách giống như trang web Pooly, nhưng chúng tôi có thể thu thập cùng một lượng dữ liệu (và thậm chí nhiều hơn nữa!) để xây dựng trang tổng quan của mình.
tìm kiếm thông tin phù hợp
Trước khi có thể bắt đầu sử dụng Dune, chúng ta cần tìm đúng thông tin. Từ trang web, chúng ta có thể thấy rằng PoolTogether đang bán ba bộ NFT:
Người ủng hộ – 1 trong 9 vật phẩm sưu tầm ngẫu nhiên trị giá 0,1 ETH
Luật sư – 1 ETH chỉ cho một tác phẩm nghệ thuật
Giám khảo - 75 ETH chỉ cho một tác phẩm nghệ thuật
Hãy chuyển sang Etherscan và xem liệu chúng ta có thể tìm thấy hợp đồng thông minh liên quan đến Pooly hay không. Sau khi mở Etherscan.io, hãy nhập "Pooly" để xem chủ sở hữu của các hợp đồng thông minh này đã đăng ký chúng trên Etherscan chưa.
Mô tả hình ảnh
Tìm kiếm Pooly trên Etherscan
Mở từng bộ sưu tập trong số ba bộ sưu tập và sao chép địa chỉ hợp đồng thông minh bằng cách nhấp vào biểu tượng sao chép xuất hiện khi bạn di chuột qua địa chỉ đó. Ở cuối trang, chúng tôi cũng có thể xem tất cả các giao dịch gần đây, điều này sẽ giúp khắc phục sự cố sau này.
Mô tả hình ảnh
Tìm địa chỉ hợp đồng Pooly thông qua Etherscan
Chúng tôi sẽ cần các địa chỉ hợp đồng này để lấy dữ liệu chính xác từ Dune và chúng tạo thành cơ sở cho tất cả các truy vấn của chúng tôi:
0x90B3832e2F2aDe2FE382a911805B6933C056D6ed
1.0 ETH Pooly Lawyer:
0x3545192b340F50d77403DC0A64cf2b32F03d00A9
0,1 ETH Những người ủng hộ Pooly:
0x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523
75 ETH Thẩm phán Pooly:
Đầu tiên, điều hướng đến dune.com và nhấp vào "Truy vấn mới" ở góc trên bên phải màn hình.
Mô tả hình ảnh
Thao tác này sẽ mở trình chỉnh sửa truy vấn và chúng ta có thể bắt đầu làm việc với các truy vấn của mình!
Mô tả hình ảnh
cửa sổ truy vấn mới và chưa được xử lý
Truy vấn 1: Tiền được huy động bằng ETH
Đầu tiên, thay đổi từ "7. Dune Engine V2 (Beta)" thành "1. Ethereum" ở góc trên bên trái. Pooly có trên Ethereum, vì vậy chúng tôi chỉ cần dữ liệu Ethereum cho truy vấn này. Ngoài ra, "1. Ethereum" đã trưởng thành hơn so với Dune Engine V2, mới bước vào giai đoạn thử nghiệm.
select SUM("value"/1e18) from ethereum.transactions
where "to" = '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'
or "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
or "to" = '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'
Đối với truy vấn đầu tiên của chúng tôi, chúng tôi sẽ xây dựng một bộ đếm hiển thị số tiền huy động được bằng ETH. Để thực hiện việc này, hãy sao chép đoạn mã sau vào trường truy vấn của Dune và nhấn Run (hoặc CTRL+Enter):
Đoạn mã trên là một truy vấn SQL phân tích cơ sở dữ liệu của Dune cho dữ liệu cụ thể mà chúng tôi yêu cầu. Bạn có thể coi cơ sở dữ liệu của Dune là một tập hợp các bảng khác nhau, mỗi bảng chứa thông tin cụ thể mà bạn có thể muốn trích xuất. Sử dụng SQL, bạn có thể đạt được:
Chỉ định dữ liệu bạn muốn (cột nào trong bảng)
Bạn có muốn chuyển đổi dữ liệu
Bạn muốn lấy dữ liệu từ bảng nào
Có lọc dữ liệu hay không
select * from ethereum.transactions
where "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
Bạn sẽ nhận được một bảng lớn với rất nhiều thông tin:
Mô tả hình ảnh
Bây giờ hãy xem mã SQL:
Mô tả hình ảnh
phân tách mã SQL
Mã này có nghĩa là "chọn tất cả các cột từ bảng giao dịch trong danh mục ether, trong đó giá trị của cột tới là
Bạn có thể xem các cột trong bảng mà không cần chạy truy vấn. Trình duyệt dữ liệu cho phép bạn khám phá các tiêu đề khác nhau thông qua chức năng tìm kiếm tiện lợi của nó:
Mô tả hình ảnh
Tìm kiếm các bảng trong "Ethereum" bằng Trình duyệt dữ liệu
Chúng tôi có thể xóa hoàn toàn hàng 3 để xóa bộ lọc, tuy nhiên, điều này sẽ trả về một bảng lớn và truy vấn sẽ mất nhiều thời gian để hoàn thành. Truy vấn của bạn càng chính xác, chúng sẽ chạy càng nhanh!
select "value" from ethereum.transactions
where "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
Bây giờ chúng ta chỉ có một cột "giá trị" thay vì nhiều cột như chúng ta đã thấy trước đây:
Mô tả hình ảnh
Trả về tất cả các mục trong cột "giá trị"
select "value"/1e18 from ethereum.transactions
where "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
Tuy nhiên, bạn có thể nhận thấy rằng những giá trị này dường như rất lớn. Đó là bởi vì chúng có mệnh giá bằng Wei chứ không phải ETH! Để khắc phục điều này, chúng ta chỉ cần áp dụng các toán tử số học cho cột "giá trị":
Không phải nó trông tốt hơn nhiều sao! 1e18 trong SQL giống như 10^18, chúng tôi chỉ yêu cầu Dune chia số này cho 1.000.000.000.000.000.000 để chúng tôi thấy giá trị bằng ETH thay vì Wei.
select SUM("value"/1e18) from ethereum.transactions
where "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
Tuyệt vời, giờ đây chúng ta có thể thấy tổng số ETH đã chi cho Pooly2! Vì chúng tôi muốn có được tổng chi tiêu của cả ba hợp đồng thông minh Pooly NFT, chúng tôi cần thêm hai dòng nữa để bao gồm thông tin chi tiết về các hợp đồng thông minh khác:
select SUM("value"/1e18) from ethereum.transactions
where "to" = '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'
or "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
or "to" = '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'
Mô tả hình ảnh
đầu ra cuối cùng
Lệnh "hoặc" hoạt động cùng với lệnh "where" và chỉ định rằng khi lọc các giá trị trong cột "đến", nếu tìm thấy giá trị thứ nhất hoặc thứ hai hoặc thứ ba, thì hàng đó sẽ được xem xét.
Bây giờ chúng ta thấy rằng tổng cộng 773,7 ETH đã được chi cho cả ba hợp đồng Pooly. Kinh ngạc! Hãy vào trang web Pooly để xem có đúng không nhé:
So sánh đầu ra của chúng tôi với dữ liệu chính thức trên trang Pooly NFT. Đã đạt được mục tiêu tài trợ - Xin chúc mừng!
Bây giờ, truy vấn của chúng ta đã hoàn tất, chúng ta cần thiết lập một bộ đếm để hiển thị truy vấn đó trên trang tổng quan sau này. Bên dưới hộp kết quả truy vấn, bấm vào hình ảnh trực quan mới, rồi bấm vào Bộ đếm trong menu thả xuống xuất hiện.
Mô tả hình ảnh
Cuối cùng, nhấp vào Thêm trực quan hóa:
Mô tả hình ảnh
Một bộ đếm sẽ xuất hiện và nếu bạn cuộn xuống, bạn sẽ thấy các cài đặt khác nhau. Chỉ cần điều chỉnh các cài đặt theo ý thích của bạn.
Mô tả hình ảnh
Sau khi hoàn tất, hãy nhấp vào (1) Thêm vào Trang tổng quan và chọn (2) Trang tổng quan mới. Sau đó (3) đặt tên cho trang tổng quan của bạn và (4) nhấp vào Lưu trang tổng quan. Trang tổng quan mới sẽ xuất hiện trong danh sách trang tổng quan của bạn. Từ đây, nhấp vào (5) Thêm trên bảng điều khiển mà bạn muốn thêm trực quan hóa vào. Sau khi thêm, nhãn sẽ thay đổi từ "đã thêm" thành "đã thêm".
Mô tả hình ảnh
Nếu bạn nhấp vào tên của bảng điều khiển ("Pooly NFT của 0xPhillan") trong menu con này, bạn sẽ được đưa đến bảng điều khiển hiển thị trình theo dõi của chúng tôi.
Mô tả hình ảnh
Đã thêm bảng điều khiển trực quan
Làm tốt!
Khi chúng tôi đã thiết lập tất cả các truy vấn của mình, chúng tôi sẽ quay lại chỉnh sửa trang tổng quan của mình.
Truy vấn 2: Vốn huy động bằng USD
Chúng ta có hai cách để giải quyết vấn đề này:
Sử dụng giá trị hiện tại của số tiền USD được sử dụng để mua NFT
Nếu chúng ta xem xét hợp đồng thông minh trên Etherscan, chúng ta có thể thấy rằng phần lớn trong số 776,5 ETH đã được chuyển ra khỏi hợp đồng thông minh, chỉ còn lại 299,2 ETH trong hợp đồng thông minh Poly NFT khi viết bài này.
Mô tả hình ảnh
Số dư ETH hợp đồng thông minh Pooly1/2/3 trên Etherscan.io
Nếu chúng ta xem ảnh chụp màn hình trang web Pooly trước đó, 776,5 ETH trị giá 1.411.249 USD (1.817 USD/ETH), ngụ ý rằng chủ sở hữu hợp đồng thông minh Pooly có thể đang giữ tiền bằng ETH, thay vì USD.
Cuối cùng, thật khó để nói Pooly sử dụng cách tiếp cận nào, nhưng cả hai cách tính giá trị đồng đô la đều thú vị:
Giá trị hiện tại cho chúng ta biết giá trị hiện tại của các quỹ
Giá trị tại thời điểm mua cho chúng tôi biết số tiền dự kiến của người mua
Vì vậy... chúng ta hãy cùng nhau sáng tạo!
Truy vấn 2a: Tiền huy động bằng USD theo giá trị ETH hiện tại
Đầu tiên, rẽ nhánh truy vấn chúng ta vừa tạo:
Mô tả hình ảnh
Ngã ba truy vấn trước đó
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'
Sau đó điều chỉnh mã của bạn để trông như thế này:
Bạn sẽ nhận thấy rằng chúng tôi đã thêm một toán tử nhân * và một khối mã lớn sau lệnh SUM("value"/1e18).
Trong Dune, bạn có thể đánh dấu các phần cụ thể của truy vấn và chỉ chạy phần đó bằng cách nhấp vào Chạy lựa chọn. Hãy (1) chỉ đánh dấu các dòng bên trong ngoặc và (2) chạy vùng chọn:
Bằng cách chọn một phần của truy vấn, bạn chỉ có thể chạy phần đã chọn.
Hãy phá vỡ khối mã này:
Mô tả hình ảnh
Sự cố của mã trước đó
Chọn cột "Giá" từ bảng price.usd
Lọc cột biểu tượng cho "WETH"
Chỉ xem các mục nhập thời gian trong 1 giờ qua (điều này sẽ tăng tốc đáng kể các truy vấn)
Sắp xếp theo thứ tự giảm dần (mới nhất trước)
Để hiểu rõ hơn về mã này, hãy thực hiện một số điều chỉnh nhỏ đối với truy vấn. (1) thay thế "giá" bằng * (trả về tất cả các cột) và (2) chỉ chọn các hàng từ 2 đến 5 của mã, sau đó (3) chạy phần chọn:
Mô tả hình ảnh
Trong kết quả truy vấn, bạn sẽ thấy một bảng hoàn chỉnh với năm cột. Trước tiên, hãy kiểm tra địa chỉ hợp đồng trong Etherscan.io:
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Mô tả hình ảnh
Hợp đồng thông minh WETH trên Etherscan.io
Hãy chuyển sự chú ý của chúng ta trở lại bảng trước:
Mô tả hình ảnh
bảng kết quả truy vấn truy vấn trước đó của chúng tôi
Ở đây, chúng tôi có một cột gọi là "phút phút" theo dõi giá trị của ETH sang USD mỗi phút. Vì chúng tôi giới hạn các truy vấn của mình ở "khoảng thời gian 1 giờ", nên chúng tôi chỉ nhận được dữ liệu về giờ gần đây nhất hiện có. Đối với mục đích của chúng tôi, chúng tôi thực sự chỉ cần mục nhập dữ liệu gần đây nhất, vì vậy việc giới hạn truy vấn này trong một giờ qua sẽ tăng tốc đáng kể. Ví dụ: bạn cũng có thể thay đổi thành "1 ngày", "3 ngày" hoặc "1 tuần" để có thêm dữ liệu lịch sử.
Hãy hoàn nguyên mã của chúng ta về những gì chúng ta đã thay đổi ở đầu phần này và chạy truy vấn:
Mô tả hình ảnh
lưu truy vấn
Đối với điều này, chúng tôi sẽ sử dụng lại bộ đếm, vì vậy hãy cuộn xuống và (1) nhấp vào bộ đếm đã được phân nhánh từ truy vấn trước đó của chúng tôi, (2) điều chỉnh nguồn dữ liệu và (3) thay đổi nhãn.
Mô tả hình ảnh
Khi bạn hoàn tất, hãy nhớ lưu và thêm vào trang tổng quan của chúng tôi:
Mô tả hình ảnh
Sau khi thêm vào sẽ có dạng như hình bên dưới. Đừng lo lắng, chúng tôi sẽ dọn dẹp nó ở cuối hướng dẫn này. Bây giờ, đừng lo lắng về ngoại hình!
Mô tả hình ảnh
Bảng điều khiển với truy vấn thứ hai được thêm vào
Truy vấn 2b: Tiền huy động bằng USD, giá trị ETH tại thời điểm mua
Một lần nữa, hãy rẽ nhánh truy vấn trước đó để chuẩn bị cho truy vấn tiếp theo của chúng ta:
Mô tả hình ảnh
Từ mã rẽ nhánh, chúng tôi làm như sau:
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
Mô tả hình ảnh
Sử dụng truy vấn tỷ giá hối đoái ETH-USD khi mua NFT
Hãy chia mã này thành ba phần:
Mô tả hình ảnh
Chia truy vấn thành ba phần
Phần 1
Ở đây chúng tôi xây dựng bảng đầu tiên chúng tôi sẽ tham khảo. Những gì chúng tôi đã làm ở đây là tạo một bảng phụ trợ mà chúng tôi gọi là "poolyTransactions" sẽ giữ block_time và value_eth từ bảng ethereum.transactions (giá trị trong wei được chia cho 10^18 để chuyển đổi thành ETH, chúng tôi cung cấp cho nó tùy chỉnh tên). Đối với bảng này, chúng tôi lọc ba địa chỉ Pooly mà chúng tôi biết.
Ở đây nó được giải thích từng dòng một:
Dòng 1: Sử dụng poolyTransaction làm - Xác định bảng phụ có tên "poolyTransaction" với các thuộc tính sau
Dòng 3-11: Chọn các cột và bộ lọc để đưa vào bảng ethereum.transcations
Dòng 5: value/1e18 là value_eth - ở đây chúng ta đổi tên cột thành "value_eth" để có thể tham khảo trực tiếp ở phần 2 thay vì thực hiện các phép tính khác
chương 2
Đây là nơi chúng tôi tạo bảng đầu ra. Bạn sẽ nhận thấy rằng chúng ta đang tạo một bảng từ poolyTransactions, bảng phụ mà chúng ta đã tạo trong Phần 1, nhưng chúng ta cũng đang tham chiếu đến một cột có tên là "giá" mà chúng ta chưa xác định. Giá thực sự chỉ được xác định sau dòng 19! Điều này có thể thực hiện được vì chúng ta đã tham gia poolyTransactions trong Phần 3 với một số kết quả từ bảng price.usd. Vì vậy, về cơ bản, chúng tôi đang tạo phần tiếp theo của bảng bằng cách sử dụng bảng phụ trợ poolyTransactions và bảng mà chúng tôi đã tạo từ price.usd.
Phần 3
Đây là nơi chúng tôi xác định một bảng sẽ được nối với một bảng khác. Từ khóa "tham gia bên trái" cho phép chúng tôi thực hiện việc này:
Dòng 18: nối trái - Từ khóa được sử dụng để chỉ ra rằng chúng tôi muốn nối bảng đầu tiên của chúng tôi (bảng bên trái) với một bảng khác (bảng bên phải). Điều này có nghĩa là bảng đầu tiên mà chúng ta đã xác định trong Phần 1 đóng vai trò là bảng cơ sở.
Dòng 19-20: Ở đây chúng tôi xác định bảng mà chúng tôi muốn tạo từ price.usd. Ở dòng 20, chúng tôi giới hạn thời lượng là "2022-05-01" vì hợp đồng thông minh Pooly chỉ được triển khai vào tháng 5, vì vậy nếu chúng tôi giới hạn nó trong khung thời gian nhỏ hơn, quá trình truy vấn dữ liệu có thể được tăng tốc đáng kể.
Dòng 22: on data_trunc('minute', block_time) = phút – Đây là dòng nối bảng phụ của chúng ta (phần 1) với bảng giá (phần 3 dòng 19-20). Nội dung đang nói ở đây là lấy cột "block_time" từ bảng phụ của chúng ta và chỉ cắt ngắn cột đó thành phút, tức là loại bỏ tất cả dữ liệu khác không phải là phút (ví dụ: giây, mili giây, v.v.). Bảng price.usd đã được cắt ngắn thành phút, vì vậy không cần chuyển đổi thêm ở đây. Sau đó, cột phút trong Prices.usd được đối sánh với cột phút trong bảng phụ trợ của chúng tôi, do đó chỉ định giá chính xác từ Prices.usd cho dấu thời gian phút tương ứng trong poolyTransactions.
Mô tả hình ảnh
Để hình dung rõ hơn về phần thứ ba, tôi đã sắp xếp lại các phần để dễ hiểu hơn:
Mô tả hình ảnh
Trực quan hóa từng bước của lệnh kết nối
(1) Chúng tôi tạo bảng poolyTransactions, sau đó (2) chúng tôi yêu cầu SQL nối bảng này với một bảng khác và (3) chúng tôi xác định bảng này là các cột giá và phút từ bảng Prices.usd. Sau đó (4) tham gia bảng price.usd này mà chúng tôi đã tạo vào poolyTransactions của bảng bên trái, sử dụng thời gian tính bằng phút làm biến ánh xạ. Để tham gia các bảng, cả hai bảng phải có các mục giống hệt nhau, nếu chúng ta cắt biến block_time thành phút, chúng ta sẽ tạo các phút khớp giữa hai bảng. Bằng cách này, (5) bảng poolyTransactions được cập nhật để bao gồm một cột giá có giá trị giá khớp với ngày tương ứng.
Bây giờ hãy thêm bộ đếm, lưu và thêm vào bảng điều khiển!
Thêm trực quan hóa bộ đếm vào truy vấn
Thiết lập trực quan hóa bộ đếm và được thêm vào bảng điều khiển
Mô tả hình ảnh
Trực quan hóa bộ đếm được thêm vào bảng điều khiển
Truy vấn 3: Tổng số người ủng hộ
Để thực hiện điều này, trước tiên hãy mở truy vấn đầu tiên của chúng ta, rẽ nhánh truy vấn đó và nhớ lưu cả bước này.
Mô tả hình ảnh
Ở đây chúng tôi chỉ cần thay đổi dòng đầu tiên:
select COUNT(DISTINCT "from") from ethereum.transactions
where "to" = '\x90B3832e2F2aDe2FE382a911805B6933C056D6ed'
or "to" = '\x3545192b340F50d77403DC0A64cf2b32F03d00A9'
or "to" = '\x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523'
Mô tả hình ảnh
Biến COUNT đếm tất cả các giao dịch, trong khi từ khóa DISTINCT đảm bảo rằng mỗi mục duy nhất chỉ được tính một lần. Kết quả chúng tôi nhận được là 4660 người ủng hộ duy nhất. Nếu so sánh điều này với những người ủng hộ duy nhất trên trang web Pooly, chúng tôi thấy rằng họ khá thân thiết:
Mô tả hình ảnh
Dữ liệu người hỗ trợ trực tiếp Pooly
Cuối cùng, thay đổi bộ đếm trực quan hóa và thêm lại vào bảng điều khiển.
Điều chỉnh cài đặt trực quan của bộ đếm và thêm vào bảng điều khiển
Mô tả hình ảnh
Đã thêm bộ đếm vào bảng điều khiển
Truy vấn 4a: bảng thành tích sử dụng erc721, tóm tắt
Tiếp theo, hãy tạo bảng thành tích bao gồm các địa chỉ, số lượng NFT được mua theo từng địa chỉ và tổng số ETH theo thứ tự giảm dần.
Để xem bảng xếp hạng, chúng tôi cần ba thông tin. Đầu tiên là địa chỉ của người mua, sau đó là số lượng NFT đã mua và cuối cùng là số ETH đã chi để mua tất cả NFT.
Mô tả hình ảnh
Cột bảng xếp hạng Pooly
Chúng tôi làm điều này với truy vấn sau:
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
Mô tả hình ảnh
Bảng xếp hạng Pooly
Bạn sẽ nhận thấy rằng điều này rất giống với truy vấn trong "Được tài trợ bằng USD với giá trị ETH khi mua", điều này là do chúng tôi sử dụng cùng một phương pháp: trước tiên chúng tôi thu thập dữ liệu giao dịch trong bảng poolyTransactions, sau đó chúng tôi để lại hai bảng đầu tiên - nó có một giá trị ánh xạ chung trên đó.
Ở đây, đối với bảng thứ hai, chúng tôi sử dụng erc721. Bảng "ERC721_evt_Transfer" là một bản tóm tắt do Dune duy trì để theo dõi tất cả các lần chuyển NFT trên Ethereum. Nếu chúng tôi sử dụng trình duyệt tập dữ liệu, hãy nhập "erc721". và cuộn đến "ERC721_evt_Transfer", chúng ta có thể thấy mọi thứ có trong bảng cụ thể đó. Chúng ta cũng có thể đánh dấu lệnh cho bảng thứ hai và xem đầu ra là gì:
Bạn cũng sẽ nhận thấy rằng cách xác định bộ lọc hơi đặc biệt. Ba bộ lọc đầu tiên hiện được đặt trong dấu ngoặc đơn, trong khi bộ lọc cuối cùng nằm ngoài dấu ngoặc đơn.
Mô tả hình ảnh
Dấu ngoặc đơn xác định thứ tự của các lệnh tính toán và/hoặc lọc, giống như khi thực hiện các lệnh số học trong SQL. Nếu chúng tôi không đính kèm ba câu lệnh đầu tiên, thì điều kiện và sẽ chỉ áp dụng cho cài đặt bộ lọc cuối cùng.
Mô tả hình ảnh
Đánh giá không có dấu ngoặc đơn
Vì chúng tôi muốn áp dụng bộ lọc từ địa chỉ null cho tất cả các kết quả từ bộ lọc trước đó, nên chúng tôi cần thêm dấu ngoặc đơn.
Cuối cùng, vì chúng ta đang sử dụng lệnh "COUNT", nên chúng ta cần chỉ định cột nào sẽ được đếm (nghĩa là biến nào để tổng hợp số đếm vào). Để thực hiện việc này, chúng tôi sử dụng lệnh "nhóm theo" để cho biết rằng chúng tôi muốn nhóm số lượng "tokenId" vào cột đầu tiên trong bảng, đó là "evt_tx_hash"."ERC721_evt_Transfer "Như đã đề cập trước đó, chúng ta cần một giá trị ánh xạ chung để ánh xạ bảng thứ hai sang bảng. Ở đây, chúng tôi sử dụng hàm băm giao dịch để ánh xạ số lượng NFT đã mua trên mỗi giao dịch vào bảng poolyTransactions của chúng tôi, lần này chúng tôi cũng yêu cầu hàm băm giao dịch. Vì vậy, cuối cùng, chúng tôi sẽ erc721."nfts"bảng (mà chúng tôi đặt tên là
) được ánh xạ tới bảng poolyTransactions của chúng tôi, bảng này chỉ bao gồm các giao dịch để mua pooly.
Cuối cùng, chúng tôi yêu cầu Dune "ĐẶT HÀNG THEO 3 desc", có nghĩa là cột thứ ba trong bảng đầu ra của chúng tôi phải theo thứ tự giảm dần:
Mô tả hình ảnh
Tuyệt vời! Bảng xếp hạng của chúng tôi đã hoàn tất. Hãy so sánh điều này với bảng xếp hạng trên trang web Pooly NFT:
Mô tả hình ảnh
So sánh bảng xếp hạng truy vấn Dune với bảng xếp hạng trang web Pooly
Không phải tất cả các số đều giống nhau, nhưng chúng ta có thể thấy từ danh sách này rằng một số địa chỉ, NFT đã mua và tổng số ETH đã chi tiêu có cùng số. Đây lại là vấn đề về thời gian đồng bộ hóa giữa Dune và dữ liệu chuỗi khối thời gian thực, không có gì phải lo lắng.
Hãy nhớ lưu truy vấn của bạn và thêm nó vào bảng điều khiển.
Truy vấn 4b: Bảng giải mã bảng thành tích sử dụng 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
Phương pháp này giống như trên, ngoại trừ việc sử dụng bảng này, chúng ta có thể trực tiếp trả về tất cả các hàm băm giao dịch gọi hàm mintNFT, thay vì sử dụng một địa chỉ trống để xác định các giao dịch từ erc721. Bảng "ERC721_evt_Transfer" là một giao dịch đúc tiền.
Mô tả hình ảnh
Sử dụng những người ủng hộ hồ bơi. thay vì erc721
Bộ dữ liệu poolysupporter cho phép chúng tôi thực hiện các truy vấn cụ thể và chi tiết hơn vì chúng tôi có thể tham khảo các cuộc gọi hợp đồng cụ thể.
Hãy so sánh kết quả của hai bảng để chắc chắn rằng không có gì sai:
Bạn thấy đấy, đầu ra là như nhau.
Hãy nhớ lưu truy vấn của bạn và thêm nó vào bảng điều khiển.
Trong phiên bản thay thế của truy vấn 4, chúng tôi sử dụng hàm poolysupporter. Bạn có thể đã thấy rằng khi tìm kiếm pooly trong trình khám phá tập dữ liệu, bạn cũng thấy một chức năng có tên là "PoolyNFT_call_maxNFT".
Mô tả hình ảnh
Bạn có thể kết luận rằng bạn có thể sử dụng lệnh gọi hàm này để truy xuất trực tiếp NFT được đúc tối đa.
Mô tả hình ảnh
Thật không may, điều này là không thể: chức năng này là chức năng "đọc", vì vậy không có bản ghi trên chuỗi về thời điểm chức năng này được gọi. Xem Etherscan bên dưới:
Mô tả hình ảnh
maxNFT là một chức năng đọc, nó không để lại bất kỳ bản ghi nào trên chuỗi khối
Thay vào đó, chúng tôi phải nhập dữ liệu maxNFT theo cách thủ công cho từng hợp đồng thông minh:
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
Mô tả hình ảnh
Yêu cầu cung cấp Pooly NFT
Đây là nơi bạn phải có một chút sáng tạo. Thêm thủ công các số vào các mục nhập bảng cụ thể trong SQL là một nhiệm vụ khó khăn, tôi đã phải áp dụng một số thủ thuật để có được điều này nhằm để lại một bảng dễ đọc.
Lý do cho bảng thứ hai là SQL không cho phép bạn gọi cột hai lần trong một truy vấn. Trong thực tế, chúng ta cần gọi một cột nhiều lần và chuyển đổi từng lệnh gọi cột riêng biệt. Tuy nhiên, nối các bảng cho phép chúng tôi gọi các cột trong bảng thứ hai nhiều lần, cho phép chúng tôi tạo đầu ra mong muốn cho một hàng cụ thể trong cột mà chúng tôi cần.
Mô tả hình ảnh
Phân tích truy vấn trên
Hãy chia truy vấn này thành bốn phần để dễ hiểu hơn.
Hãy chú ý đến thứ tự! 1, 3, 2, 4!
Trong phần này, chúng tôi xác định một bảng có tên là "poolyContracts" trong đó chúng tôi đếm tất cả các tokenId riêng lẻ từ các địa chỉ trống của ba địa chỉ hợp đồng Pooly, do đó chỉ bao gồm các NFT được đúc bằng bảng erc721."ERC721_evt_Transfer". Sau đó, chúng tôi nhóm chúng theo cột đầu tiên, do đó trả lại NFT đã đúc cho mỗi hợp đồng thông minh nhóm.
Mô tả hình ảnh
bảng poolyContracts
Trong khối mã này, chúng tôi buộc truy vấn chỉ hiển thị từng địa chỉ trong số ba địa chỉ hợp đồng. Chúng tôi thực hiện việc này bằng cách sử dụng lệnh "nhóm theo 1", lệnh này nhóm các kết quả theo các mục nhập duy nhất của cột đầu tiên.
Mô tả hình ảnh
Nếu không có nhóm theo lệnh, truy vấn sẽ trả về tất cả các sự kiện chuyển giao liên quan đến các địa chỉ hợp đồng này, nhưng chúng tôi chỉ cần một lần xuất hiện của mỗi sự kiện. Bạn sẽ thấy lý do tại sao trong phần tiếp theo.
Mô tả hình ảnh
Bảng thứ hai trả về một danh sách dài các địa chỉ hợp đồng mà không có lệnh "nhóm theo 1"
Ngoài ra, chúng tôi đã đổi tên cột contract_address thành maxNFT_Supply để chúng tôi có thể xác định cột nào sẽ tham gia bảng này trong bảng poolyContracts.
Phần 3
Đây là nơi phép màu xảy ra.
Trong phần này, bây giờ chúng ta có thể gọi các cột từ bảng nối. Chúng ta gọi nó:
nfts_purchased
maxNFT_Supply
maxNFT_Supply
địa chỉ hợp đồng
Tiếp theo, bạn cũng sẽ nhận thấy rằng các cột 1, 3 và 4 có các mệnh đề CASE WHEN được nhúng. Vì mỗi bảng trong số hai bảng đầu tiên mà chúng tôi tạo chỉ có một hàng duy nhất cho mỗi hợp đồng thông minh, nên chúng tôi không thể sử dụng câu lệnh CASE WHEN để chỉ định liệu một địa chỉ hợp đồng thông minh cụ thể có xảy ra hay không (một trong ba tùy chọn), trong đó Vị trí trả về một thứ khác.
Mô tả hình ảnh
Bảng kết quả đầy đủ không được sắp xếp theo nft_supply
Bạn sẽ thấy cột đầu tiên ở đây, chúng tôi yêu cầu trình chỉnh sửa truy vấn thay thế từng địa chỉ hợp đồng thông minh bằng tên của NFT tương ứng!
Trong cột thứ ba, chúng tôi thay thế nó bằng số lượng NFT lớn nhất đã biết được liệt kê trên trang web Pooly.
Trong cột thứ tư, chúng tôi sử dụng công thức để tính phần trăm nguồn cung NFT còn lại. Trong các câu lệnh này, ít nhất một số được sử dụng cho các phép toán số học cần chứa một vị trí thập phân. Nếu điều này không được bao gồm, truy vấn SQL sẽ được hiểu là muốn trả về số nguyên, có nghĩa là chúng tôi sẽ không nhận được bất kỳ số thập phân nào cho các tính toán này. Bằng cách bao gồm ".0", chúng tôi đang cho máy chủ biết rằng chúng tôi muốn phép tính này trả về một số thập phân.
Cuối cùng, chúng tôi chỉ ra rằng chúng tôi muốn đầu ra được sắp xếp theo thứ tự giảm dần (lớn nhất đến nhỏ nhất) theo cột thứ ba.
Mô tả hình ảnh
Bảng này cũng đã sẵn sàng. Lưu truy vấn của bạn, thực hiện bất kỳ thay đổi mong muốn nào đối với bảng và thêm nó vào bảng điều khiển.
Mô tả hình ảnh
Thêm bảng vào bảng điều khiển
Trong truy vấn cuối cùng của chúng tôi, chúng tôi sẽ tạo biểu đồ chuỗi thời gian hiển thị số lượng ETH được huy động thông qua doanh số NFT theo thời gian.
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’
