Sitemap
SubQuery-th

About SubQuery

Module 6 Exercise_ Tips & Tricks

4 min readMar 29, 2022

--

Press enter or click to view image in full size

บทนำ

นี่คือบททดสอบ ที่เราจะได้เรียนรู้ว่า SubQuery Project คืออะไร วิธีการปรับใช้ โปรเจค กับโปรเจคของ SubQuery และเรียนรู้เกี่ยวกับ SubQuery Explorer

ข้อกำหนดเบื้องต้น

ไม่มี

Block v Events v Calls

เพื่อให้กระบวนการโปรเจค SubQuery และดัชนีข้อมูลเป็นไปอย่างรวดเร็วและมีประสิทธิภาพมากที่สุด จำเป็นต้องเข้าใจว่าสิ่งต่างๆ ทำงานอย่างไรภายใต้ SubQuery มีตัวจัดการ 3 ตัวในการประมวลผลข้อมูลบล็อคเชน นั่นก็คือ block handlers, event handlers, และ call handlers.

Block handlers นั้นไม่มีประสิทธิภาพมากเพียงพอ พวกเราตรวจสอบทุกบล็อกเพื่อดึงข้อมูลในการสร้างดัชนี ซึ่งหมายความว่าด้วยบล็อกมากกว่า7 ล้านบล็อก หากแต่ละบล็อกสามารถจัดทำดัชนีได้ภายใน 10 มิลลิวินาที การดำเนินการนี้จะใช้เวลามากกว่า 8 วันในการจัดทำดัชนีบล็อกเชนทั้งหมด ดังนั้นจึงแนะนำให้หลีกเลี่ยงการใช้งาน Block handlers หากเป็นไปได้

Event and call handlers เป็นตัวจัดการที่แนะนำให้ใช้ ร่วมกับ mapping filters เนื่องจากทำให้เกิดประสิทธิภาพที่ดีมากขึ้น mapping filters จะช่วยให้โครงการจัดทำดัชนีเฉพาะบล็อกที่ตรงตามเกณฑ์การกรอง ตัวอย่างเช่น ด้านล่างแสดงตัวกรองที่จัดทำ staking module และวิธีการให้ Rewarded

Press enter or click to view image in full size

เพื่อเพิ่มประสิทธิภาพให้ดีมากยิ่วขึ้น, ขอแนะนำให้ใช้งาน dictionary

การใช้งาน dictionary

แนวคิดของ dictionary ถูกนำมาใช้ใน modules (เช่น Module 5 “Overriding endpoints) แต่ขอกล่าวไว้ ณ ที่นี้อีกครั้ง เนื่องจากมีความสำคัญอย่างมาก

● Understanding how a dictionary works

Event & Extrinsic Names

คำถามยอดนิยมในการสร้างโปรเจ็กต์ SubQuery คือเราจะรู้ได้อย่างไรว่าข้อมูลใดบ้างที่เราสามารถดึงออกมาจากบล็อคเชนของ Polkadot ได้ ซึ่งมีหลายตัวเลือกดังนี้:

1. เอกสารอ้างอิง Polkadot

2. Polkadot blockchain explorer

3. การโต้ตอบกับ Polkadot API โดยตรง

หมายเหตุ: ตัวเลือกเหล่านี้อาจใช้กับบล็อคเชนอื่นๆ ได้เช่นกัน.

เอกสารอ้างอิง Polkadot

เอกสารอ้างอิง Polkadot สามารถหาเพิ่มเติมได้ที่: https://polkadot.js.org/docs/. โดยเฉพาะอย่างยิ่ง;

● Events: https://polkadot.js.org/docs/substrate/events/

● Extrinsics: https://polkadot.js.org/docs/substrate/extrinsics/

Polkadot Explorer

Polkadot blockchain explorer เป็นเครื่องมือในการทำความคุ้นเคยกับข้อมูลที่สามารถดึงออกมาได้ มีหลายตัวเลือกให้เลือกดังนี้:

https://polkadot.js.org/apps/#/explorer

● https://polkadot.subscan.io/

● https://polkascan.io/polkadot

● https://dotscanner.com/polkadot/search

● https://polkastats.io/

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

Polkadot API

2 วิธีก่อนหน้านี้ จะเป็นการทำความเข้าใจว่า มีข้อมูลบล็อกเชนใดอยู่บ้างและเป็นข้อมูลบล็อกเชนประเภทใดบ้าง (ซึ่งทั้งสองข้อมูลมีความสำคัญพอๆ กัน) นั้นเป็นสิ่งที่ดีมากๆ แต่การเรียนรู้ที่จะเชื่อมต่อข้อมูลโดยตรงกับ Polkadot API ผ่านคำสั่งนั่น มีข้อดีหลายประการ

ประการแรก สามารถทำให้การเข้าถึงข้อกำหนดของ API ที่ทันสมัยที่สุด เนื่องจาก documentation ต่างๆ อาจล้าสมัยบ้างบางส่วน

ประการที่สอง ช่วยให้นักพัฒนาเข้าใจอาร์กิวเมนต์และประเภทของอาร์กิวเมนต์ที่แน่นอน ซึ่งนี่เป็นสิ่งสำคัญอย่างยิ่งเมื่อมีปัญหาและจำเป็นต้องมีการแก้ไข Bug

Get Piyapoj Kasempakdeepong’s stories in your inbox

Join Medium for free to get updates from this writer.

และประการสุดท้าย สิ่งนี้จะมีประโยชน์มาก เมื่อรวมเข้ากับ chains แบบกำหนดเอง ซึ่งบางครั้ง อาจจะไม่มีเอกสารประกอบ

การเชื่อมต่อ API

การเชื่อมต่อ API, สามารถ run ได้ตามนี้:

Press enter or click to view image in full size

ถ้าต้องการปรับต่าง chainTypes :

Press enter or click to view image in full size

ถ้าต้องการใช้ตัวแปร types :

Press enter or click to view image in full size

ไม่ต้องใช้ตัวแปร types:

Press enter or click to view image in full size

การดึง block

การได้รับ block hash ที่ความสูง `h`, เราสามารถ run const blockHash = await api.rpc.chain.getBlockHash(h)

Press enter or click to view image in full size

ต่อไป:

Press enter or click to view image in full size

การเข้าดึง block ภายนอก

การเข้าดึง block ภายนอกทั้งหมด:

Press enter or click to view image in full size

สำหรับการเข้าดึง block ภายนอกที่เจาะจง: (เปลี่ยน 1 ไปเป็นเลขภายนอกของ block ที่ต้องการ)

Press enter or click to view image in full size

การตรวจสอบ args (ข้อมูลสำหรับทำธุรกรรม) types, กด enter:

Press enter or click to view image in full size

คุณควรจะเห็น Vec / array. ขนาดของ array หมายถึง จำนวน arg ภายนอก และ arg แต่ละอัน และข้อมูล metadata ควรจะกำหนด ‘name’, ‘type’, ‘typeName’. สำหรับ `type` เป็นสิ่งที่พวกเราจะมองเห็น ตัวอย่างเช่น ‘MultiAddress’ เป็น interface อย่างนึงจาก Polkadot/api.

การดึง events มาที่ความสูงของ block

Events ไม่สามารถนำออกมาจาก block ได้ แต่ว่า Events สามารถถูกดึงไปใช้ได้ พวกเราสามารถ ‘lock’ API ?เจาะจงความสูงของ block ซึ่งเป็นสิ่งที่เรามีอยู่แล้วบน blockHash (จากก่อนหน้านี้) เริ่มต้นที่:

Press enter or click to view image in full size

ต่อมา:

Press enter or click to view image in full size

ถัดไป, การระบุ Events ที่สนใจ เช่น event หมายเลข 4:

Press enter or click to view image in full size
Press enter or click to view image in full size

สุดท้าย, enter:

Press enter or click to view image in full size

และคุณควรจะเห็นตามรายละเอียดข้างล่างดังนี้

Press enter or click to view image in full size

คุณสมบัติ Type Safe

“Type safe” มักหมายถึงภาษาที่มั่นใจ เพราะว่าการดำเนินการเป็นไปตามข้อมูลที่ถูกต้อง ก่อนที่การดำเนินการจะเสร็จสมบูรณ์ มันอาจจะ compile time หรือ run time.

ใน Polkadot, everything has a type. หมายความว่าตัวแปรสามารถสร้างความต้องการ type cast. ตามตัวอย่างดังนี้:

Press enter or click to view image in full size

Logging

การล็อกข้อมูลกับ CLI จากภายในฟังก์ชัน mappings เมื่อโหนด subql กำลัง run คำสั่ง logger.info สามารถถูกใช้งาน:

Press enter or click to view image in full size

เมื่อ run โหนด subql บนเครื่องผ่านคำสั่ง ระดับการถูก log สามารถถูกปรับ เพื่อช่วยในการแก้ปัญหา

● Subql CLI logging reference

การแก้ไข bug

การแก้ไข bug ของโปรเจค SubQuery เช่น การสั่งให้ code ทำงาน , การตั้งค่า breakpoints, และการตรวจสอบตัวแปร คุณจะต้องใช้ตัวตรวจสอบ Node.js เพื่อเชื่อมเครื่องมือการพัฒนาของ Chrome

● How to debug a SubQuery project?

การแก้ไข bug โหนด subql บนเครื่อง, — debug flag สามารถถูกใช้จากคำสั่งได้ดังนี้

Press enter or click to view image in full size

● Subql CLI debug reference.

การเปลี่ยนขนาด batch block

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

● How to change the batch block size

การเปลี่ยน block เริ่มต้น

หมายเหตุ: events เริ่มต้นที่จะเกิดขึ้นบน block ที่มีความสูงมากกว่าของ block ดังนั้นวิธีเดียวที่จะสามารถทดลองการเชื่อมโยงฟังก์ชัน mapping คือการปรับจุดเริ่มต้นของความสูงของ block

● How to start at a different block height?

--

--