Module 6 Exercise_ Tips & Tricks
บทนำ
นี่คือบททดสอบ ที่เราจะได้เรียนรู้ว่า 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
เพื่อเพิ่มประสิทธิภาพให้ดีมากยิ่วขึ้น, ขอแนะนำให้ใช้งาน 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
หมายเหตุ: ไม่ใช่ทุกคนที่สามารถใช้งานได้ง่ายกว่า หรือบางคนก็สามารถแสดงหรือเข้าถึงข้อมูลที่ต้องการได้อย่างชัดเจนมากยิ่งขึ้น คุณจะสามารถเรียนรู้ด้วยรายการที่คุณคิดว่าเหมาะสม อย่างน้อยสองหรือสามรายการ
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 ได้ตามนี้:
ถ้าต้องการปรับต่าง chainTypes :
ถ้าต้องการใช้ตัวแปร types :
ไม่ต้องใช้ตัวแปร types:
การดึง block
การได้รับ block hash ที่ความสูง `h`, เราสามารถ run const blockHash = await api.rpc.chain.getBlockHash(h)
ต่อไป:
การเข้าดึง block ภายนอก
การเข้าดึง block ภายนอกทั้งหมด:
สำหรับการเข้าดึง block ภายนอกที่เจาะจง: (เปลี่ยน 1 ไปเป็นเลขภายนอกของ block ที่ต้องการ)
การตรวจสอบ args (ข้อมูลสำหรับทำธุรกรรม) types, กด enter:
คุณควรจะเห็น Vec / array. ขนาดของ array หมายถึง จำนวน arg ภายนอก และ arg แต่ละอัน และข้อมูล metadata ควรจะกำหนด ‘name’, ‘type’, ‘typeName’. สำหรับ `type` เป็นสิ่งที่พวกเราจะมองเห็น ตัวอย่างเช่น ‘MultiAddress’ เป็น interface อย่างนึงจาก Polkadot/api.
การดึง events มาที่ความสูงของ block
Events ไม่สามารถนำออกมาจาก block ได้ แต่ว่า Events สามารถถูกดึงไปใช้ได้ พวกเราสามารถ ‘lock’ API ?เจาะจงความสูงของ block ซึ่งเป็นสิ่งที่เรามีอยู่แล้วบน blockHash (จากก่อนหน้านี้) เริ่มต้นที่:
ต่อมา:
ถัดไป, การระบุ Events ที่สนใจ เช่น event หมายเลข 4:
สุดท้าย, enter:
และคุณควรจะเห็นตามรายละเอียดข้างล่างดังนี้
คุณสมบัติ Type Safe
“Type safe” มักหมายถึงภาษาที่มั่นใจ เพราะว่าการดำเนินการเป็นไปตามข้อมูลที่ถูกต้อง ก่อนที่การดำเนินการจะเสร็จสมบูรณ์ มันอาจจะ compile time หรือ run time.
ใน Polkadot, everything has a type. หมายความว่าตัวแปรสามารถสร้างความต้องการ type cast. ตามตัวอย่างดังนี้:
Logging
การล็อกข้อมูลกับ CLI จากภายในฟังก์ชัน mappings เมื่อโหนด subql กำลัง run คำสั่ง logger.info สามารถถูกใช้งาน:
เมื่อ run โหนด subql บนเครื่องผ่านคำสั่ง ระดับการถูก log สามารถถูกปรับ เพื่อช่วยในการแก้ปัญหา
การแก้ไข bug
การแก้ไข bug ของโปรเจค SubQuery เช่น การสั่งให้ code ทำงาน , การตั้งค่า breakpoints, และการตรวจสอบตัวแปร คุณจะต้องใช้ตัวตรวจสอบ Node.js เพื่อเชื่อมเครื่องมือการพัฒนาของ Chrome
● How to debug a SubQuery project?
การแก้ไข bug โหนด subql บนเครื่อง, — debug flag สามารถถูกใช้จากคำสั่งได้ดังนี้
การเปลี่ยนขนาด batch block
การใช้ batch block ขนาดเล็ก สามารถลดการใช้หน่วยความจำได้ และไม่ปล่อยให้ผู้ใช้งานต้องอยู่กับการดึงข้อมูลขนาดใหญ่ หรือในอีกความหมายนึง แอพพลิเคชันของคุณ สามารถตอบสนองได้ดีขึ้น
● How to change the batch block size
การเปลี่ยน block เริ่มต้น
หมายเหตุ: events เริ่มต้นที่จะเกิดขึ้นบน block ที่มีความสูงมากกว่าของ block ดังนั้นวิธีเดียวที่จะสามารถทดลองการเชื่อมโยงฟังก์ชัน mapping คือการปรับจุดเริ่มต้นของความสูงของ block






