คำเตือนความเสี่ยง: ระวังความเสี่ยงจากการระดมทุนที่ผิดกฎหมายในนาม 'สกุลเงินเสมือน' 'บล็อกเชน' — จากห้าหน่วยงานรวมถึงคณะกรรมการกำกับดูแลการธนาคารและการประกันภัย
ข่าวสาร
ค้นพบ
ค้นหา
เข้าสู่ระบบ
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
ดูตลาด
ต้องอ่าน "การสอนระดับพี่เลี้ยง": วิธีใช้ Dune เพื่อวิเคราะห์ข้อมูล blockchain
AllRcode重构
特邀专栏作者
2022-10-04 04:51
บทความนี้มีประมาณ 20487 คำ การอ่านทั้งหมดใช้เวลาประมาณ 30 นาที
100 ภาพสอนวิธีใช้ Dune เพื่อวิเคราะห์ข้อมูล blockchain

ผู้เขียนต้นฉบับ: 0xPhillan

ผู้เขียนต้นฉบับ: 0xPhillan

ที่มา: web3edge

แปลต้นฉบับ: เก่ายัปปี้Dune น่าจะเป็นเครื่องมือวิเคราะห์ข้อมูลบล็อกเชนที่ทรงพลังที่สุดในปัจจุบันที่มีให้สำหรับคนทั่วไป และที่ดีที่สุดคือ:ฟรี!

ด้วย Dune คุณสามารถเข้าถึงข้อมูล blockchain ได้เกือบเรียลไทม์ผ่านฐานข้อมูลสาธารณะที่สามารถสืบค้นได้โดยใช้ SQL

นี่เป็นพลังงานที่ทรงพลังมาก

Dune ถอดรหัสข้อมูลบล็อกเชนก่อนที่จะเพิ่มลงในฐานข้อมูล ซึ่งหมายความว่าคุณไม่จำเป็นต้องค้นหารหัสไบต์ด้วยตัวเอง แต่คุณสามารถใช้เบราว์เซอร์ของ Dune เพื่อเรียกดูชุดข้อมูล สัญญาอัจฉริยะ เหตุการณ์ หรือการโทรเฉพาะได้!

Dune เพิ่งเปิดตัวเครื่องยนต์ V2 ซึ่งปรับปรุงประสิทธิภาพถึง 10 เท่า ตอนนี้เป็นเวลาที่คุณจะเรียนรู้วิธีใช้ Dune

  • ในคู่มือนี้ คุณจะได้เรียนรู้:

  • ส่วนที่ 1: อินเทอร์เฟซ Dune

  • ตอนที่ 2: สร้างแบบสอบถามและกราฟของคุณเองโดยใช้ SQL - เริ่มต้นด้วยพื้นฐาน

ส่วนที่ 3: จัดระเบียบทุกอย่างลงในแดชบอร์ด

เริ่มกันเลย!

ชื่อระดับแรก

สอบถาม

  • แผงควบคุม

  • สอบถาม

  • ส้อม

  • ส้อม

  • ตัวแก้ไขแบบสอบถาม

  • เบราว์เซอร์ชุดข้อมูลและการจัดประเภทข้อมูล

บันทึกแบบสอบถามแยกของคุณ

  • ส่วนที่ 2: สร้างแบบสอบถามแรกของคุณ

  • ตัดสินใจว่าจะสร้างแบบสอบถามใด

  • กำลังมองหาข้อมูลที่ถูกต้อง

พร้อมสร้างแบบสอบถามแรกของคุณใน Dune

คำถามที่ 1: การระดมทุนใน ETH

แบบสอบถาม 2: ระดมทุนในสกุลเงิน USD

ข้อความค้นหา 2a: การระดมทุนในสกุลเงิน USD ที่มูลค่า ETH ปัจจุบัน

ข้อความค้นหา 2b: การระดมทุนในสกุลเงิน USD ในรูปของมูลค่า ETH ณ เวลาที่ซื้อ

แบบสอบถาม 3: จำนวนผู้สนับสนุนทั้งหมด

แบบสอบถาม 4:

ข้อความค้นหา 4a: ลีดเดอร์บอร์ดโดยใช้ erc721 สิ่งที่เป็นนามธรรม

Query 4b: ลีดเดอร์บอร์ดโดยใช้ poolysupporter ตารางการถอดรหัส

ข้อความค้นหา 6: กราฟอนุกรมเวลาของ ETH เพิ่มขึ้นเมื่อเวลาผ่านไป

ส่วนที่ 3: การทำความสะอาดแดชบอร์ด

เสร็จ

ชื่อเรื่องรอง

ส่วนที่ 1: ภาพรวม Dune และคุณสมบัติ

เมื่อคุณเปิดเว็บไซต์ Dune.com เป็นครั้งแรก คุณจะเห็นหน้าต่างด้านล่าง มีตัวเปลี่ยนมุมมองที่ด้านบนสุดของหน้าต่างนี้ที่ให้คุณหมุนเวียนผ่านแดชบอร์ด คิวรี และวิซาร์ด จากนั้นพื้นที่มุมมองรายละเอียดที่คุณสามารถดูรายการแดชบอร์ด คิวรี และวิซาร์ด (ผู้ใช้) ทางด้านซ้ายและการค้นหาบางส่วน - การตั้งค่าที่เกี่ยวข้องกับด้านขวา

แผงควบคุม

ใน Dune ทุกแดชบอร์ดเป็นแบบสาธารณะ ซึ่งหมายความว่าทุกคนสามารถดูและคัดลอกทุกสิ่งที่คุณสร้างหรือใครก็ตามที่สร้าง! ซึ่งช่วยลดเวลาในการสร้างแดชบอร์ดได้อย่างมาก และช่วยให้คุณเรียนรู้จากข้อความค้นหาของผู้ใช้รายอื่น

สอบถาม

หากคุณจำได้ว่าฉันเคยกล่าวไว้ว่าแดชบอร์ดคือชุดของข้อความค้นหา หากคุณคลิกที่ชื่อขององค์ประกอบแดชบอร์ด คุณจะถูกนำไปที่แบบสอบถาม SQL สำหรับแผนภูมินั้น:

คำอธิบายภาพ

สองตัวอย่างหน้าจอตัวแก้ไขแบบสอบถามแดชบอร์ด

ที่นี่เราสามารถเห็นสององค์ประกอบหลักบนหน้าจอ: ข้อความค้นหา (ด้านบน; กล่องดำ) และกราฟผลลัพธ์ (ด้านล่าง) ถูกต้องแล้ว ไม่ว่าคุณจะคลิกที่ไทล์หรือแผนภูมิใด คุณสามารถดูได้ว่าผู้ใช้สร้างแผนภูมินั้นอย่างไร

หากคุณต้องการบันทึกแดชบอร์ดทั้งหมดหรือเฉพาะแบบสอบถามกราฟไปยังบัญชีของคุณเอง คุณสามารถคลิก "Fork" ที่มุมขวาบน และทุกอย่างบนหน้าจอที่แยกจะถูกคัดลอกไปยังหน้าต่างใหม่ซึ่งคุณสามารถแก้ไขและบันทึกมุมมองได้ ไปยังบัญชีของคุณ

คำอธิบายภาพ

สอบถามราคา Ethereum

มาแยกกราฟราคา Ethereum กันเถอะ! หลังจากกด "Fork" บนแบบสอบถาม คุณจะถูกนำไปที่ตัวแก้ไขแบบสอบถามพร้อมกับโค้ดก่อนหน้าที่คัดลอกมา!

ตัวแก้ไขแบบสอบถาม

  1. ขอแนะนำให้คุณรู้จักกับองค์ประกอบต่างๆ บนหน้าจอที่นี่:

  2. ค้นหาตำแหน่งและชื่อ - สามารถเปลี่ยนชื่อได้หลังจากคลิกบันทึก!

  3. เบราว์เซอร์ชุดข้อมูล - ค้นหาชุดข้อมูลเฉพาะ

  4. หน้าต่างแบบสอบถาม - ป้อนแบบสอบถาม SQL ของคุณที่นี่

  5. ตัวเลือกการแสดงภาพ - เลือกว่าจะดูผลการสืบค้น แผนภูมิเส้นแยก หรือสร้างการแสดงภาพใหม่

  6. เรียกใช้ - เรียกใช้แบบสอบถามในหน้าต่างแบบสอบถาม

  7. บันทึก - บันทึกแบบสอบถาม (แยก) ของคุณ!

คำอธิบายภาพ

ภาพรวมตัวแก้ไขแบบสอบถาม Dune

เบราว์เซอร์ชุดข้อมูลและหมวดหมู่ข้อมูล

  1. มาดูเบราว์เซอร์ชุดข้อมูลให้ละเอียดยิ่งขึ้น มีพื้นที่ทำงานหกส่วนในเบราว์เซอร์ชุดข้อมูล:

  2. การเลือกโซ่

  3. การค้นหาชุดข้อมูล

  4. เรียกดูข้อมูล blockchain ดิบ

  5. เรียกดูและถอดรหัสข้อมูลสัญญา

  6. เรียกดูข้อมูลที่จัดทำโดยชุมชน

คำอธิบายภาพ

ภาพรวมเบราว์เซอร์ชุดข้อมูล Dune

ในการเลือกชุดข้อมูล คุณสามารถเลือกเชนที่ต้องการแยกวิเคราะห์ได้ การเลือก "Dune Engine V2 (เบต้า)" ช่วยให้คุณเข้าถึงการปรับปรุงล่าสุดของ Dune ซึ่งรวมถึงการค้นหาแบบหลายเชนและการเพิ่มประสิทธิภาพ 10 เท่า

คำอธิบายภาพ

หากคุณเลือกเครือข่ายอื่น การเลือกหมวดหมู่ (รายการที่ 3-6 ในภาพด้านบน) จะหายไป และคุณจะเห็นรายการการโทรตามสัญญาและกิจกรรมที่คุณสามารถโต้ตอบได้

คำอธิบายภาพ

เลือก "1. อีเธอเรียม"

ค้นหา

หมายเหตุ: Dune Engine V2 และฟังก์ชันการค้นหาแบบเก่าแสดงผลลัพธ์ต่างกัน ในขณะที่การค้นหาแบบเก่าส่งคืนรายการผลลัพธ์ทั้งหมด Dune Engine V2 ส่งคืนรายการผลลัพธ์ที่ซ้อนกัน เราจะใช้เครื่องยนต์ V2!

คำอธิบายภาพ

ผลการค้นหา "1. Ethereum" และ "7. Dune Engine V2 (เบต้า)"

หากคุณคลิกที่ข้อมูลบล็อกเชนดิบ คุณสามารถค้นหาข้อความค้นหาสำหรับบล็อกเชนต่างๆ ที่ Dune รองรับในโครงสร้างข้อมูลที่ซ้อนกัน โดยเลือกตารางดิบก่อน จากนั้นเลือกคอลัมน์ตารางที่ต้องการตรวจสอบเพิ่มเติม ภายในแต่ละระดับการซ้อน คุณยังสามารถกรองผลการค้นหาเฉพาะเจาะจงที่คุณต้องการได้ด้วยการเลือก

คำอธิบายภาพ

Dune Engine V2 (เบต้า) ภาพรวมข้อมูล Raw Blockchain

นี่เป็นวิธีที่ง่ายและรวดเร็วในการรับข้อมูลบล็อกเชนขั้นสูง

ถอดรหัสรายการ

คุณจะสังเกตเห็นอีกครั้งว่าผลการค้นหาซ้อนกัน ที่ระดับสูงสุด มีโปรเจ็กต์ที่คุณสามารถค้นหาได้ ที่ระดับล่าง คุณสามารถกรองหาสัญญาอัจฉริยะเฉพาะภายในโปรเจ็กต์นั้น และสุดท้าย เราจะเห็นตารางต่างๆ ที่สร้างจากสัญญาอัจฉริยะนั้น หากคุณคลิกที่ตารางใด ๆ คุณจะเห็นรายการเช่นเดียวกับข้อมูลบล็อกเชนดั้งเดิม

ภาพรวมโครงการถอดรหัส Dune Engine V2 (เบต้า)

สรุป

สรุป

ข้อมูลสรุปอาจเปรียบได้กับตารางแบบกำหนดเองที่รวมและรวมการสืบค้นข้อมูลและบล็อกข้อมูลต่างๆ เพื่อสร้างตารางที่ไม่ซ้ำใคร ข้อมูลสรุปช่วยให้ผู้ใช้ค้นหาข้อมูลที่ต้องการได้ง่ายขึ้นโดยไม่ต้องรวมข้อมูลต่างๆ ด้วยตนเอง

  • โดยทั่วไป บทสรุปสามารถแบ่งออกเป็นสองประเภท:

  • สรุปภาค: ข้อมูลเฉพาะภาค

จากเมนูย่อย สรุป คุณสามารถดูรายการสรุปที่มีแท็กซึ่งระบุว่าสรุปเป็นเฉพาะแผนกหรือเฉพาะโครงการ

ภาพรวมสรุป Dune Engine V2 (เบต้า)

ชุมชน

ชุมชน

คุณอาจสงสัยว่าเหตุใดจึงมีเพียงรายการเดียวในส่วนชุมชน ("แฟลชบอท") - นั่นเป็นเพราะ Dune Engine V2 เพิ่งเปิดตัว! เมื่อเวลาผ่านไป เราคาดว่าจะเห็นชุดข้อมูลชุมชนที่สร้างขึ้นโดยสมาชิกชุมชนที่เชื่อถือได้มากขึ้นเรื่อยๆ

คำอธิบายภาพ

ภาพรวมของชุมชน Dune Engine V2 (เบต้า)

ในภาพด้านล่าง คุณสามารถดูสรุปวิธีการรวมข้อมูลใน Dune ตั้งแต่การเปิดตัว Dune Engine V2: สี่หมวดหมู่ข้อมูลหลัก ได้แก่ ข้อมูลบล็อกเชนดิบ รายการถอดรหัส ข้อมูลสรุป และชุมชนซึ่งมีบล็อกเชน A ต่างๆ ข้อมูลที่สามารถบันทึกประเภทข้อมูลต่างๆ

คำอธิบายภาพ

ภาพรวมของแท็บในเบราว์เซอร์ข้อมูล Dune Engine V2 (เบต้า)

ลองบันทึกแบบสอบถามนี้ก่อน หลังจากคลิกบันทึก มีบางสิ่งเกิดขึ้น ขั้นแรก ตั้งชื่อแบบสอบถามของคุณ

คำอธิบายภาพ

บันทึกป๊อปอัปแบบสอบถาม

(1) ตำแหน่งและชื่อของคิวรีมีการอัปเดต และ (2) คิวรีของคุณกำลังทำงานอยู่ ซึ่งหมายความว่า Dune ได้รับข้อมูลล่าสุดจากฐานข้อมูลของพวกเขา ซึ่งได้รับการอัปเดตเป็นประจำด้วยข้อมูลล่าสุดจากบล็อกเชนต่างๆ หลังจากคิวรีทำงานเสร็จแล้ว คุณจะเห็นผลลัพธ์ของคิวรี (3)

คำอธิบายภาพ

จากที่นี่ หากคุณคลิกที่ (1) ผลลัพธ์ของคิวรี แผนภูมิเส้น หรือการแสดงภาพใหม่ กล่อง (2) ผลลัพธ์/การแสดงภาพจะอัปเดตด้วย (3) การตั้งค่าการเลือกที่แสดงด้านล่าง ที่นี่ยังมีปุ่ม "เพิ่มในแดชบอร์ด" เพื่อเพิ่มผลการสืบค้นหรือการแสดงภาพไปยังแดชบอร์ดใหม่หรือแดชบอร์ดที่มีอยู่ได้อย่างรวดเร็ว เช่นเดียวกับแดชบอร์ด Ethereum ของ @hildobby ก่อนหน้านี้!

คำอธิบายภาพ

หากคุณคลิก (1) วงกลมที่มุมบนขวา จากนั้นคลิก (2) "ข้อความค้นหาของฉัน" รายการคำถามสำหรับบัญชีของคุณจะเปิดขึ้น

คำอธิบายภาพ

รายการคำถามประกอบด้วยคำถามทั้งหมดที่คุณเคยบันทึกไว้ในบัญชีของคุณ ในภาพหน้าจอด้านล่าง เราจะเห็นข้อความค้นหาล่าสุดที่สร้างขึ้น:

คำอธิบายภาพ

รายการของข้อความค้นหาที่มีข้อความค้นหาล่าสุดจะถูกเก็บไว้ที่ด้านบนสุด

ยินดีด้วย คุณได้เรียนรู้การใช้ Visual Forking และบันทึกข้อความค้นหาแรกของคุณแล้ว!

มาทำให้มือของเราสกปรกและสร้างแดชบอร์ดซึ่งเป็นชุดของแบบสอบถามและการแสดงภาพข้อมูลตั้งแต่เริ่มต้นโดยไม่ต้องแยกส่วน ส่วนนี้จะสอนคุณว่าจะค้นหารายละเอียดบล็อกเชนที่ถูกต้องได้จากที่ใดเพื่อค้นหาโครงการเฉพาะของคุณ และสอนพื้นฐานของ SQL

ชื่อระดับแรก

ส่วนที่ 2: สร้างแบบสอบถามแรกของคุณ

  1. จุดประสงค์ของส่วนนี้คือเพื่อสอนคุณ:

  2. วิธีค้นหาข้อมูลที่ถูกต้องที่คุณต้องการสำหรับโครงการเฉพาะ

แต่ก่อนอื่น เราต้องตัดสินใจว่าแดชบอร์ดมีไว้เพื่ออะไร Pooly NFT ของโปรโตคอล Pool Together DeFi เป็นขั้นตอนแรก

คำอธิบายภาพ

หากเราค้นหาคำว่า "Pooly" บน Dune เราจะพบเครื่องมือติดตาม Pooly NFT ที่สร้างโดยชุมชน

คำอธิบายภาพ

เราสามารถคลิกหนึ่งในแดชบอร์ด Pooly ที่สร้างโดย @0xbills แล้วคลิก "Fork" เพื่อทำงาน...

คำอธิบายภาพ

@0xbills ผ่าน https://dune.com/0xbills/Pooly-NFT

แต่ถ้าเราสร้างมันใหม่ตั้งแต่ต้น เราจะได้เรียนรู้วิธีการเป็นนักสืบบล็อกเชนและเรียนรู้ SQL บางส่วนไปพร้อมกัน! ดังนั้นเราจึงจำเป็นต้องสร้างแบบสอบถามของเราเองตั้งแต่เริ่มต้น

ขั้นแรก ให้ตัดสินใจว่าเราต้องการใช้แผนภูมิใดบนแดชบอร์ด มาสร้างมุมมอง Pooly ที่สร้างขึ้นบนหน้าแรกกันใหม่กันเถอะ! เมื่อดูภาพหน้าจอสองภาพด้านล่างอย่างใกล้ชิด เราจะเห็นเมตริกบางอย่างที่อ้างอิงจากข้อมูลบนเครือข่าย

หน้า Landing Page Pooly NFT พร้อมตัวติดตามกองทุน

ลีดเดอร์บอร์ด Pooly NFT

คำอธิบายภาพ

ตัวเลือกและอุปทานของ Mint Pooly NFT

  • เราจะเห็นว่า:

  • การระดมทุนเทียบกับเป้าหมายการระดมทุนใน ETH

  • เงินทุนที่ได้รับเทียบกับเป้าหมายการระดมทุนในสกุลเงิน USD

  • จำนวนผู้สนับสนุนทั้งหมด (ที่อยู่เฉพาะที่ซื้อ Pooly)

  • ลีดเดอร์บอร์ดประกอบด้วยที่อยู่ จำนวน NFT ที่ซื้อโดยแต่ละที่อยู่ และ ETH ทั้งหมดตามลำดับจากมากไปน้อย

อุปทานสูงสุดและอุปทานคงเหลือของ NFT ทั้งสามประเภท

  • มันสุดยอดมาก! แต่นี่เป็นเพียงภาพรวมของเวลาเท่านั้น เรามาท้าทายตัวเองกันอีกครั้ง:

สร้างกราฟอนุกรมเวลาของ ETH ที่เพิ่มขึ้นเมื่อเวลาผ่านไป

เราไม่สามารถสร้างมุมมองในลักษณะเดียวกับเว็บไซต์ Pooly ได้ แต่เราสามารถรวบรวมข้อมูลในปริมาณที่เท่ากัน (และมากกว่านั้น!) เพื่อสร้างแดชบอร์ดของเรา

กำลังมองหาข้อมูลที่ถูกต้อง

  • ก่อนที่เราจะเริ่มใช้ Dune เราต้องหาข้อมูลที่ถูกต้องเสียก่อน จากเว็บไซต์เราจะเห็นว่า PoolTogether ขาย NFT สามชุด:

  • Backer – 1 ใน 9 ของสะสมแบบสุ่มมูลค่า 0.1 ETH

  • นักกฎหมาย – 1 ETH สำหรับงานศิลปะเพียงชิ้นเดียว

กรรมการ - 75 ETH สำหรับงานศิลปะเพียงชิ้นเดียว

ไปที่ Etherscan และดูว่าเราสามารถหาสัญญาอัจฉริยะที่เกี่ยวข้องกับ Pooly ได้หรือไม่ หลังจากเปิด Etherscan.io ให้พิมพ์ "Pooly" เพื่อดูว่าเจ้าของสัญญาอัจฉริยะเหล่านี้ได้ลงทะเบียนไว้บน Etherscan หรือไม่

คำอธิบายภาพ

ค้นหา Pooly บน Etherscan

เปิดคอลเลกชันแต่ละรายการจากสามคอลเล็กชันและคัดลอกที่อยู่ของสัญญาอัจฉริยะโดยคลิกไอคอนคัดลอกที่ปรากฏขึ้นเมื่อคุณวางเมาส์เหนือที่อยู่นั้น ที่ด้านล่างของหน้า เรายังสามารถดูธุรกรรมล่าสุดทั้งหมด ซึ่งจะช่วยในการแก้ปัญหาในภายหลัง

คำอธิบายภาพ

ค้นหาที่อยู่ของสัญญา Pooly ผ่าน Etherscan

เราต้องการที่อยู่ตามสัญญาเหล่านี้เพื่อดึงข้อมูลที่ถูกต้องจาก Dune และเป็นพื้นฐานของคำถามทั้งหมดของเรา:

0x90B3832e2F2aDe2FE382a911805B6933C056D6ed

1.0 ETH Pooly Lawyer:

0x3545192b340F50d77403DC0A64cf2b32F03d00A9

ผู้สนับสนุน 0.1 ETH Pooly:

0x5663e3E096f1743e77B8F71b5DE0CF9Dfd058523

75 ETH Pooly ผู้ตัดสิน:

ขั้นแรก ไปที่ dune.com แล้วคลิก "ข้อความค้นหาใหม่" ที่มุมขวาบนของหน้าจอ

คำอธิบายภาพ

การดำเนินการนี้จะเปิดตัวแก้ไขแบบสอบถามและเราสามารถเริ่มทำงานกับข้อความค้นหาของเราได้!

คำอธิบายภาพ

หน้าต่างข้อความค้นหาใหม่ที่ไม่ถูกแตะต้อง

คำถามที่ 1: การระดมทุนใน ETH

ก่อนอื่น เปลี่ยนจาก "7. Dune Engine V2 (เบต้า)" เป็น "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 แล้วกด Run (หรือ CTRL+Enter):

  • โค้ดด้านบนเป็นแบบสอบถาม SQL ที่แยกวิเคราะห์ฐานข้อมูล Dune สำหรับข้อมูลเฉพาะที่เราร้องขอ คุณสามารถคิดว่าฐานข้อมูลของ Dune เป็นคอลเลกชันของตารางต่างๆ ซึ่งแต่ละตารางจะมีข้อมูลเฉพาะที่คุณอาจต้องการแยกออกมา เมื่อใช้ SQL คุณสามารถบรรลุ:

  • ระบุข้อมูลที่คุณต้องการ (คอลัมน์ใดในตาราง)

  • คุณต้องการแปลงข้อมูล

  • คุณต้องการดึงข้อมูลจากตารางใด

กรองข้อมูลหรือไม่

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

คุณจะได้ตารางขนาดใหญ่ที่มีข้อมูลมากมาย:

คำอธิบายภาพ

ทีนี้มาดูรหัส SQL:

คำอธิบายภาพ

การสลายรหัส SQL
รหัสนี้หมายถึง "เลือกคอลัมน์ทั้งหมดจากตารางธุรกรรมในหมวดหมู่ ether ซึ่งค่าของคอลัมน์ถึงคือ

คุณสามารถดูคอลัมน์ในตารางได้โดยไม่ต้องเรียกใช้แบบสอบถาม Data Browser ให้คุณสำรวจส่วนหัวต่างๆ ผ่านฟังก์ชันการค้นหาที่ดี:

คำอธิบายภาพ

ค้นหาตารางใน "Ethereum" โดยใช้ Data Browser

เราสามารถลบแถวที่ 3 ออกทั้งหมดเพื่อลบตัวกรอง อย่างไรก็ตาม วิธีนี้จะทำให้ได้ตารางขนาดใหญ่และการสืบค้นใช้เวลานานกว่าจะเสร็จสมบูรณ์ ยิ่งข้อความค้นหาของคุณแม่นยำมากเท่าไหร่ มันก็จะยิ่งทำงานเร็วขึ้นเท่านั้น!

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

ตอนนี้เรามีคอลัมน์ "ค่า" เพียงคอลัมน์เดียวแทนที่จะเป็นหลายคอลัมน์อย่างที่เราเห็นก่อนหน้านี้:

คำอธิบายภาพ

ส่งกลับรายการทั้งหมดในคอลัมน์ "ค่า"

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

อย่างไรก็ตาม คุณอาจสังเกตเห็นว่าค่าเหล่านี้ดูเหมือนจะมีขนาดใหญ่มาก นั่นเป็นเพราะสกุลเงินเหล่านี้อยู่ใน Wei ไม่ใช่ ETH! ในการแก้ไขปัญหานี้ เราสามารถใช้ตัวดำเนินการทางคณิตศาสตร์กับคอลัมน์ "value" ได้:

มันดูไม่ดีกว่าเหรอ! 1e18 ใน SQL เหมือนกับ 10^18 เราแค่บอกให้ Dune หารตัวเลขนี้ด้วย 1,000,000,000,000,000,000 เพื่อให้เราเห็นค่าใน ETH แทนที่จะเป็น Wei

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

เยี่ยมมาก ตอนนี้เราสามารถเห็นจำนวน ETH ทั้งหมดที่ใช้ใน Pooly2 แล้ว! เนื่องจากเราต้องการได้รับค่าใช้จ่ายทั้งหมดของสัญญาอัจฉริยะ Pooly NFT ทั้งสามรายการ เราจึงจำเป็นต้องเพิ่มอีกสองบรรทัดเพื่อรวมรายละเอียดเกี่ยวกับสัญญาอัจฉริยะอื่นๆ:

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

คำอธิบายภาพ

ผลลัพธ์สุดท้าย

คำสั่ง "หรือ" ทำงานร่วมกับคำสั่ง "where" และระบุว่าเมื่อกรองค่าในคอลัมน์ "to" หากพบค่าแรกหรือที่สองหรือสาม ควรพิจารณาแถว

ตอนนี้เราเห็นว่ามีการใช้ ETH ทั้งหมด 773.7 ETH สำหรับสัญญา Pooly ทั้งสามฉบับ น่าทึ่ง! ไปที่เว็บไซต์ Pooly เพื่อดูว่าถูกต้องหรือไม่:

เปรียบเทียบผลลัพธ์ของเรากับข้อมูลอย่างเป็นทางการบนหน้า Pooly NFT บรรลุเป้าหมายการระดมทุน - ยินดีด้วย!

เมื่อแบบสอบถามของเราเสร็จสมบูรณ์แล้ว เราต้องตั้งค่าตัวนับเพื่อแสดงบนแดชบอร์ดในภายหลัง ใต้กล่องผลการสืบค้น คลิกการแสดงภาพใหม่ จากนั้นคลิก ตัวนับ ในเมนูดรอปดาวน์ที่ปรากฏขึ้น

คำอธิบายภาพ

สุดท้าย คลิกเพิ่มการแสดงภาพ:

คำอธิบายภาพ

ตัวนับจะปรากฏขึ้น และหากคุณเลื่อนลงมา คุณจะเห็นการตั้งค่าต่างๆ เพียงปรับการตั้งค่าตามที่คุณต้องการ

คำอธิบายภาพ

เมื่อเสร็จแล้ว ให้คลิก (1) เพิ่มในแดชบอร์ด แล้วเลือก (2) แดชบอร์ดใหม่ จากนั้น (3) ตั้งชื่อแดชบอร์ดของคุณ และ (4) คลิก บันทึกแดชบอร์ด แดชบอร์ดใหม่จะปรากฏในรายการแดชบอร์ดของคุณ จากที่นี่ คลิก (5) เพิ่มบนแดชบอร์ดที่คุณต้องการเพิ่มการแสดงภาพ เมื่อเพิ่มแล้ว ป้ายกำกับจะเปลี่ยนจาก "เพิ่ม" เป็น "เพิ่ม"

คำอธิบายภาพ

หากคุณคลิกที่ชื่อแดชบอร์ด ("Pooly NFT by 0xPhillan") ในเมนูย่อยนี้ คุณจะเข้าสู่แดชบอร์ดที่แสดงเครื่องมือติดตามของเรา

คำอธิบายภาพ

เพิ่มแดชบอร์ดภาพ

ทำได้ดี!

เมื่อเราตั้งค่าการสืบค้นทั้งหมดแล้ว เราจะกลับไปแก้ไขแดชบอร์ดของเรา

แบบสอบถาม 2: ระดมทุนในสกุลเงิน USD

  1. เรามีสองวิธีในการแก้ปัญหานี้:

  2. ใช้มูลค่าปัจจุบันของเงิน USD ที่ใช้ในการซื้อ NFT

หากเราดูสัญญาอัจฉริยะบน Etherscan เราจะเห็นว่า ETH ส่วนใหญ่ 776.5 ETH ถูกย้ายออกจากสัญญาอัจฉริยะ โดยเหลือ 299.2 ETH ในสัญญาอัจฉริยะ Poly NFT ขณะที่เขียนบทความนี้

คำอธิบายภาพ

Pooly1/2/3 ยอดคงเหลือ ETH ของสัญญาอัจฉริยะบน Etherscan.io

หากเราดูที่ภาพหน้าจอเว็บไซต์ Pooly ก่อนหน้านี้ 776.5 ETH มีมูลค่า $1,411,249 ($1,817/ETH) หมายความว่าเจ้าของสัญญาอัจฉริยะของ Pooly อาจเก็บเงินเป็น ETH แทนที่จะเป็น USD

  1. ท้ายที่สุด ยากที่จะบอกว่าวิธีใดที่ Pooly ใช้ แต่วิธีคำนวณค่าเงินดอลลาร์ทั้งสองวิธีน่าสนใจ:

  2. มูลค่าปัจจุบันบอกเราว่าตอนนี้เงินมีมูลค่าเท่าไร

มูลค่า ณ เวลาที่ซื้อจะบอกเราถึงจำนวนเงินที่คาดหวังของผู้ซื้อ

งั้น...มาสร้างกันเถอะ!

แบบสอบถาม 2a: ระดมทุนในสกุลเงิน USD ที่มูลค่า ETH ปัจจุบัน

ขั้นแรก ให้แยกข้อความค้นหาที่เราเพิ่งสร้างขึ้น:

คำอธิบายภาพ

แยกแบบสอบถามก่อนหน้า

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

  3. กรองคอลัมน์สัญลักษณ์สำหรับ "WETH"

  4. ดูเฉพาะรายการเวลาในช่วง 1 ชั่วโมงที่ผ่านมา (ซึ่งจะทำให้การค้นหาเร็วขึ้นอย่างมาก)

  5. เรียงลำดับจากมากไปหาน้อย (ใหม่สุดก่อน)

เพื่อให้เข้าใจโค้ดนี้ได้ดีขึ้น มาทำการปรับเปลี่ยนข้อความค้นหาเล็กน้อย (1) แทนที่ "ราคา" ด้วย * (ส่งคืนคอลัมน์ทั้งหมด) และ (2) เลือกเฉพาะแถวที่ 2 ถึง 5 ของรหัส จากนั้น (3) เรียกใช้การเลือก:

คำอธิบายภาพ

ในผลลัพธ์คิวรี คุณจะเห็นตารางที่สมบูรณ์พร้อมห้าคอลัมน์ ก่อนอื่นมาตรวจสอบที่อยู่ของสัญญาใน Etherscan.io:

0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

คำอธิบายภาพ

WETH Smart Contract บน Etherscan.io

หันความสนใจกลับไปที่ตารางก่อนหน้า:

คำอธิบายภาพ

ตารางผลการสืบค้น แบบสอบถามก่อนหน้าของเรา

ที่นี่เรามีคอลัมน์ชื่อ "นาทีต่อนาที" ซึ่งติดตามมูลค่าของ 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

คำอธิบายภาพ

ใช้แบบสอบถามอัตราแลกเปลี่ยน ETH-USD เมื่อซื้อ NFT

มาแบ่งรหัสนี้ออกเป็นสามส่วน:

คำอธิบายภาพ

แบ่งคำถามออกเป็นสามส่วน

ส่วนที่ 1

ที่นี่เราสร้างตารางแรกที่เราจะอ้างอิง สิ่งที่เราทำคือสร้างตารางเสริมที่เราเรียกว่า "poolyTransactions" ซึ่งจะเก็บ block_time และ value_eth จากตาราง ethereum.transactions (ค่าใน wei หารด้วย 10^18 เพื่อแปลงเป็น ETH เรากำหนดเอง ชื่อ). สำหรับตารางนี้ เรากรองที่อยู่ Pooly สามรายการที่เราทราบ

  • นี่คือคำอธิบายทีละบรรทัด:

  • บรรทัดที่ 1: ใช้ poolyTransaction เป็น - กำหนดตารางรองชื่อ "poolyTransaction" ด้วยแอตทริบิวต์ต่อไปนี้

  • บรรทัดที่ 3-11: เลือกคอลัมน์และตัวกรองที่จะรวมไว้ในตาราง ethereum.transcations

บรรทัดที่ 5: value/1e18 เป็น value_eth - ที่นี่เราเปลี่ยนชื่อคอลัมน์เป็น "value_eth" เพื่อให้เราอ้างอิงโดยตรงในส่วนที่ 2 แทนการคำนวณอื่นๆ

บทที่ 2

นี่คือที่ที่เราสร้างตารางผลลัพธ์ คุณจะสังเกตเห็นว่าเรากำลังสร้างตารางจาก poolyTransactions ซึ่งเป็นตารางเสริมที่เราสร้างในส่วนที่ 1 แต่เรายังอ้างอิงถึงคอลัมน์ชื่อ "ราคา" ที่เรายังไม่ได้กำหนดอีกด้วย ราคาถูกกำหนดหลังจากบรรทัดที่ 19 เท่านั้น! เป็นไปได้เพราะเราเข้าร่วม poolyTransactions ในส่วนที่ 3 ด้วยผลลัพธ์บางส่วนจากตาราง price.usd โดยพื้นฐานแล้วเรากำลังสร้างส่วนถัดไปของตารางโดยใช้ตารางเสริม poolyTransactions และตารางที่เราสร้างจาก price.usd

ส่วนที่ 3

  • นี่คือที่ที่เรากำหนดตารางที่จะเข้าร่วมกับตารางอื่น คีย์เวิร์ด "left join" ช่วยให้เราทำสิ่งนี้ได้:

  • บรรทัดที่ 18: left join - คำสำคัญที่ใช้เพื่อระบุว่าเราต้องการรวมตารางแรกของเรา (ตารางซ้าย) กับอีกตารางหนึ่ง (ตารางขวา) ซึ่งหมายความว่าตารางแรกที่เรากำหนดไว้ในส่วนที่ 1 จะทำหน้าที่เป็นตารางฐาน

  • บรรทัดที่ 19-20: ที่นี่ เรากำหนดตารางที่เราต้องการสร้างจาก price.usd ในบรรทัดที่ 20 เราจำกัดระยะเวลาเป็น "2022-05-01" เนื่องจาก Pooly smart contract จะเริ่มใช้ในเดือนพฤษภาคมเท่านั้น ดังนั้นหากเราจำกัดกรอบเวลาให้เล็กลง การสืบค้นข้อมูลจะเร่งกระบวนการได้อย่างมาก

  • บรรทัดที่ 22: บน data_trunc('minute', block_time) = minutes – นี่คือบรรทัดที่รวมตารางเสริมของเรา (ส่วนที่ 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 Live

สุดท้าย เปลี่ยนตัวนับการแสดงภาพและเพิ่มลงในแดชบอร์ดอีกครั้ง

ปรับการตั้งค่าการแสดงภาพของตัวนับและเพิ่มไปยังแดชบอร์ด

คำอธิบายภาพ

เพิ่มตัวนับลงในแดชบอร์ดแล้ว

แบบสอบถาม 4a: ลีดเดอร์บอร์ดโดยใช้ erc721 สรุป

ต่อไป มาสร้างลีดเดอร์บอร์ดซึ่งประกอบด้วยที่อยู่ จำนวน NFT ที่ซื้อโดยแต่ละที่อยู่ และ ETH ทั้งหมดตามลำดับจากมากไปน้อย

หากต้องการดูลีดเดอร์บอร์ด เราต้องการข้อมูลสามส่วน อันดับแรกคือที่อยู่ของผู้ซื้อ จากนั้นจำนวน NFT ที่ซื้อ และสุดท้ายคือจำนวน ETH ที่ใช้ในการซื้อ NFT ทั้งหมด

คำอธิบายภาพ

คอลัมน์พูลลีดเดอร์บอร์ด

เราทำสิ่งนี้ด้วยแบบสอบถามต่อไปนี้:

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

คำอธิบายภาพ

ตารางลีดเดอร์บอร์ดพูล

คุณจะสังเกตเห็นว่าสิ่งนี้คล้ายกับข้อความค้นหาใน "เงินเป็น USD ด้วยมูลค่า ETH เมื่อซื้อ" เนื่องจากเราใช้วิธีการเดียวกัน: ขั้นแรกเรารวบรวมข้อมูลธุรกรรมในตาราง poolyTransactions จากนั้นเราจะปล่อยให้สองตารางแรก - มันมีค่าการแมปทั่วไปอยู่

ที่นี่ สำหรับตารางที่สอง เราใช้ erc721 ตาราง "ERC721_evt_Transfer" เป็นข้อมูลสรุปที่ดูแลโดย Dune ที่ติดตามการถ่ายโอน NFT ทั้งหมดบน Ethereum หากเราใช้เบราว์เซอร์ชุดข้อมูล ให้ป้อน "erc721" และเลื่อนไปที่ "ERC721_evt_Transfer" เราจะเห็นทุกอย่างที่อยู่ในตารางนั้น เรายังสามารถเน้นคำสั่งสำหรับตารางที่สองและดูว่าผลลัพธ์คืออะไร:

นอกจากนี้ คุณจะสังเกตเห็นว่าวิธีกำหนดตัวกรองนั้นค่อนข้างพิเศษ ตัวกรองสามตัวแรกอยู่ในวงเล็บ ในขณะที่ตัวกรองตัวสุดท้ายอยู่นอกวงเล็บ

คำอธิบายภาพ

วงเล็บกำหนดลำดับการคำนวณและ/หรือคำสั่งตัวกรอง เช่นเดียวกับเมื่อดำเนินการคำสั่งเลขคณิตใน SQL หากเราไม่ใส่คำสั่งสามรายการแรก และเงื่อนไขจะใช้กับการตั้งค่าตัวกรองสุดท้ายเท่านั้น

คำอธิบายภาพ

การประเมินโดยไม่มีวงเล็บ

เนื่องจากเราต้องการใช้ตัวกรองจากที่อยู่ null กับผลลัพธ์ทั้งหมดจากตัวกรองก่อนหน้า เราจำเป็นต้องใส่วงเล็บ

สุดท้าย เนื่องจากเราใช้คำสั่ง "COUNT" เราจึงจำเป็นต้องระบุว่าจะนับในคอลัมน์ใด (เช่น ตัวแปรใดที่จะรวมจำนวนนับเข้าไป) ในการดำเนินการนี้ เราใช้คำสั่ง "จัดกลุ่มตาม" เพื่อระบุว่าเราต้องการจัดกลุ่มจำนวน "tokenId" ลงในคอลัมน์แรกในตาราง ซึ่งก็คือ "evt_tx_hash""ERC721_evt_Transfer "ดังที่ได้กล่าวไว้ก่อนหน้านี้ เราต้องการค่าการแม็ปทั่วไปเพื่อแมปตารางที่สองกับตาราง ที่นี่เราใช้แฮชของธุรกรรมเพื่อจับคู่จำนวน NFT ที่ซื้อต่อธุรกรรมกับตาราง poolyTransactions ของเรา ครั้งนี้เรายังขอแฮชของธุรกรรมด้วย ในที่สุดเราก็จะได้ erc721"nfts"ตาราง (ที่เราตั้งชื่อว่า

) ถูกแมปกับตาราง poolyTransactions ของเรา ซึ่งรวมเฉพาะธุรกรรมสำหรับการซื้อ poolys

สุดท้าย เราบอกให้ Dune เป็น "ORDER BY 3 desc" ซึ่งหมายความว่าคอลัมน์ที่สามของตารางเอาต์พุตของเราควรเรียงลำดับจากมากไปหาน้อย:

คำอธิบายภาพ

สุดยอด! ลีดเดอร์บอร์ดของเราเสร็จสมบูรณ์แล้ว ลองเปรียบเทียบสิ่งนี้กับลีดเดอร์บอร์ดบนเว็บไซต์ Pooly NFT:

คำอธิบายภาพ

เปรียบเทียบลีดเดอร์บอร์ดการค้นหา Dune กับลีดเดอร์บอร์ดเว็บไซต์ Pooly

ตัวเลขทั้งหมดไม่เหมือนกัน แต่เราสามารถเห็นได้จากรายการนี้ว่าที่อยู่ NFT ที่ซื้อและ ETH ทั้งหมดที่ใช้ไปมีตัวเลขเดียวกัน นี่เป็นปัญหาเรื่องเวลาในการซิงค์อีกครั้งระหว่าง Dune และข้อมูล blockchain แบบเรียลไทม์ ไม่มีอะไรต้องกังวล

อย่าลืมบันทึกแบบสอบถามของคุณและเพิ่มลงในแดชบอร์ด

Query 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

วิธีการเหมือนกับด้านบน ยกเว้นว่าการใช้ตารางนี้ เราสามารถส่งคืนแฮชของธุรกรรมทั้งหมดที่เรียกฟังก์ชัน mintNFT ได้โดยตรง แทนที่จะใช้แอดเดรสว่างเพื่อระบุธุรกรรมจาก erc721 ตาราง "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!

ในส่วนนี้ เรากำหนดตารางชื่อ "poolyContracts" ซึ่งเราจะนับโทเค็นแต่ละรายการทั้งหมดจากที่อยู่ว่างของที่อยู่สัญญา Pooly สามรายการ ดังนั้นจึงรวมเฉพาะ NFT ที่สร้างขึ้นโดยใช้ตาราง erc721."ERC721_evt_Transfer" จากนั้นเราจะจัดกลุ่มตามคอลัมน์แรก จึงส่งคืน NFT ที่สร้างเสร็จสำหรับสัญญาสมาร์ทพูลแต่ละรายการ

คำอธิบายภาพ

ตาราง poolyContracts

ในบล็อกรหัสนี้ เราบังคับให้ข้อความค้นหาแสดงเฉพาะที่อยู่สัญญาแต่ละรายการจากสามรายการเท่านั้น เราทำได้โดยใช้คำสั่ง "group by 1" ซึ่งจัดกลุ่มผลลัพธ์ตามรายการที่ไม่ซ้ำกันของคอลัมน์แรก

คำอธิบายภาพ

หากไม่มีการจัดกลุ่มตามคำสั่ง แบบสอบถามจะส่งคืนเหตุการณ์การถ่ายโอนทั้งหมดที่เกี่ยวข้องกับที่อยู่สัญญาเหล่านี้ แต่เราต้องการเพียงเหตุการณ์เดียวจากแต่ละรายการ คุณจะเห็นว่าทำไมในส่วนถัดไป

คำอธิบายภาพ

ตารางที่สองแสดงรายการที่อยู่ตามสัญญาจำนวนมากโดยไม่มีคำสั่ง "จัดกลุ่มตาม 1"

นอกจากนี้ เราได้เปลี่ยนชื่อคอลัมน์ contract_address เป็น maxNFT_Supply เพื่อให้เราสามารถกำหนดคอลัมน์ที่จะเข้าร่วมตารางนี้ด้วยในตาราง poolyContracts

ส่วนที่ 3

นี่คือที่ที่เวทมนตร์เกิดขึ้น

  • ในส่วนนี้ เราสามารถเรียกคอลัมน์จากตารางรวมได้แล้ว เราเรียกมันว่า:

  • nfts_purchased

  • maxNFT_Supply

  • maxNFT_Supply

ที่อยู่ตามสัญญา

ถัดไป คุณจะสังเกตเห็นว่าคอลัมน์ 1, 3 และ 4 มีคำสั่ง CASE WHEN ฝังอยู่ เนื่องจากแต่ละตารางในสองตารางแรกที่เราสร้างขึ้นมีเพียงหนึ่งแถวที่ไม่ซ้ำกันสำหรับสัญญาอัจฉริยะแต่ละรายการ เราจึงไม่สามารถใช้คำสั่ง CASE WHEN เพื่อระบุว่าที่อยู่ของสัญญาอัจฉริยะเฉพาะนั้นเกิดขึ้นหรือไม่ (หนึ่งในสามตัวเลือก) โดยที่ Location จะส่งคืนอย่างอื่น

คำอธิบายภาพ

ตารางผลลัพธ์แบบเต็มไม่ได้จัดเรียงตาม nft_supply

คุณจะเห็นคอลัมน์แรกที่นี่ เรากำลังบอกเครื่องมือแก้ไขแบบสอบถามให้แทนที่ที่อยู่สัญญาอัจฉริยะแต่ละรายการด้วยชื่อของ NFT ที่สอดคล้องกัน!

ในคอลัมน์ที่สาม เราแทนที่ด้วยจำนวน NFTs ที่รู้จักมากที่สุดในเว็บไซต์ Pooly

ในคอลัมน์ที่สี่ เราใช้สูตรเพื่อคำนวณเปอร์เซ็นต์ของการจัดหา NFT ที่เหลืออยู่ ในข้อความเหล่านี้ ตัวเลขอย่างน้อยหนึ่งตัวที่ใช้สำหรับการคำนวณทางคณิตศาสตร์ต้องมีตำแหน่งทศนิยม หากไม่ได้รวมไว้ การสืบค้น SQL จะถูกตีความว่าต้องการส่งคืนจำนวนเต็ม ซึ่งหมายความว่าเราจะไม่ได้รับทศนิยมสำหรับการคำนวณเหล่านี้ โดยการรวม ".0" เรากำลังแสดงให้เซิร์ฟเวอร์ทราบว่าเราต้องการให้การคำนวณนี้ส่งคืนตัวเลขทศนิยม

สุดท้าย เราระบุว่าเราต้องการให้ผลลัพธ์เรียงตามลำดับจากมากไปน้อย (มากไปน้อย) ตามคอลัมน์ที่สาม

คำอธิบายภาพ

โต๊ะนี้ก็พร้อม บันทึกแบบสอบถามของคุณ ทำการเปลี่ยนแปลงที่ต้องการในตาราง และเพิ่มลงในแดชบอร์ด

คำอธิบายภาพ

เพิ่มตารางไปยังแดชบอร์ด

ในคำถามสุดท้าย เราจะสร้างกราฟอนุกรมเวลาที่แสดงจำนวน ETH ที่เพิ่มขึ้นจากการขาย NFT เมื่อเวลาผ่านไป

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
กลุ่มสมาชิก
https://t.me/Odaily_News
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
บัญชีทางการ
https://twitter.com/OdailyChina
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
สรุปโดย AI
กลับไปด้านบน
100 ภาพสอนวิธีใช้ Dune เพื่อวิเคราะห์ข้อมูล blockchain
คลังบทความของผู้เขียน
AllRcode重构
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android