มาแกะ code bsc-eth bridge กันเถอะ (Part 2 backend)
ต้องออกตัวก่อนว่า ตอนนี้ Golang ผมยังไม่แข็งเท่าไหร่ การแกะโค้ดครั้งนี้ก็จะกาวๆหน่อยละนะ
โอเค มาเริ่มจากส่วนนี้
เราน่าจะใช้ฟังชันก์ InitTables ในการกำหนด schema database ลองเข้าไปดูกัน
พอลองเข้าไปดูตารางจะกำหนด Schema แบบนี้
โอเค เราจะข้ามไปยัง Flow การทำงานก่อน แล้วค่อยกลับมาดูแต่ละตารางอีกทีดีกว่า
มีการสร้าง provider ของแต่ละเชน น่าจะเอาไว้ใช้ฟัง event แหละ โอเค ไปต่อกัน
ต่อมาเป็นการฟัง event
โอเค มาดูรายละเอียดกัน
ตัว executor เหมือนจะเป็น instance ของ contract แต่ละฝั่งเฉยๆ แล้ว observer ละ ?
การ new จะเป็นการกำหนด startBlock และ จำนวน block ที่ใช้คอนเฟิร์ม tx คำถามคือเลขพวกนี้เอาไปใช้ทำอะไรต่อ ? ไปดูการ start กัน
โอเค ทำหลายอย่างอยู่ มาเริ่มจากการ Fetch ละกัน
มาดูทีละขั้นกัน GetCurrentBlockLog ทำอะไรนะ ?
เป็นการดึงข้อมูล block ที่มี height สูงที่สุด จาก db มาแหะ พอลองไปดู db ก็พบว่ามีข้อมูลอยู่แล้ว
ข้อมูลถูกใส่เข้ามาใน db ยังไง ? อันนี้แกะ code ไปเรื่อยๆ คงเจอเอง โอเค มีการ checkError และถ้า error ให้เรียก fetchSleep เดาว่าตอนแรกที่ db ว่างคง error แหละนะ งั้นไปดูการทำงานของ fetchSleep กัน
เป็นการ sleep เฉยๆ แปลกๆแหะ ถ้า db ว่างก็จะวน sleep แบบนี้ไปเรื่อยๆเลยเหรอแล้วจะมี insert มาตอนไหนหว่า โอเค ไม่เป็นไร ไปต่อกันแล้วมาดูภาพรวมทีเดียวดีกว่า
จากนั้นมีการคำนวณ nextHeight และ เรียก fetchBlock กัน ลองไปดูการทำงาน fetchBlock กัน
โอเคมีหลายขั้นตอนอยู่ แต่ตอนแรกเค้าเอาหมายเลข block ต่อไป ไปใส่ใน function GetBlockAndTxEvents แล้ว มันทำงานยังไงนะ ?
เป็นการดึงข้อมูลของ block มาละนะ
ทีนี้เค้าเอา parentBlockHash ของ block ต่อไป มาเทียบกัน blockHash ของ block นี้ ซึ่งก็ควรเท่ากันละนะ แต่ถ้าไม่เท่ากันแสดงว่าเป็น block ที่ถูก fork ไปละ ซึ่งในเคสนี้เค้าเรียก function DeleteBlockAndTxEvents โดยส่ง currentBlockHeight ไป
แต่ DeleteBlockAndTxEvents ทำงานยังไงนะ ? ตัดจบตรงนี้ก่อนดีกว่า เดี๋ยวมาต่อกัน