BTC
ETH
HTX
SOL
BNB
ดูตลาด
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

อ่าน 8 สถานะที่ธุรกรรม Ethereum อาจพบได้ในบทความเดียว

区块链大本营
特邀专栏作者
บทความนี้มีประมาณ 3253 คำ การอ่านทั้งหมดใช้เวลาประมาณ 5 นาที
ในบทความนี้ เราจะมุ่งเน้นไปที่วงจรการทำธุรกรรมที่ซับซ้อนบน Ethereum ความท้าทายสำหรับนักพัฒนา
สรุปโดย AI
ในบทความนี้ เราจะมุ่งเน้นไปที่วงจรการทำธุรกรรมที่ซับซ้อนบน Ethereum ความท้าทายสำหรับนักพัฒนา

หมายเหตุบรรณาธิการ: บทความนี้มาจากค่ายบล็อคเชน (ID: blockchain_camp)หมายเหตุบรรณาธิการ: บทความนี้มาจาก

ค่ายบล็อคเชน (ID: blockchain_camp)

ค่ายบล็อคเชน (ID: blockchain_camp)

, ผู้แต่ง: dfuse, ทำซ้ำโดย Odaily โดยได้รับอนุญาต

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

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

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

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

อินเทอร์เฟซ Dapp วันนี้

ผู้ใช้มักต้องอัปเดตข้อมูลระหว่างการทำธุรกรรม (เช่น ทราบเมื่อการถ่ายโอนเสร็จสิ้น) ดังนั้น dapp จะวางปุ่ม "รีเฟรช" บนอินเทอร์เฟซ (หรือรีเฟรชหน้าโดยอัตโนมัติสำหรับผู้ใช้เป็นระยะๆ) หรือผู้ใช้ ต้องคลิกที่ปุ่มรีเฟรชของเบราว์เซอร์โดยตรงเพื่อรับการอัปเดต

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

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

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

  • เหตุใดจึงไม่ใช้อินเทอร์เฟซตามเหตุการณ์บนเครือข่าย

  • สำหรับนักพัฒนา dapp การทำ Static Page หรือ Poll เป็นเพียงสองตัวเลือกที่มีอยู่ ซึ่งสะท้อนถึงธรรมชาติของ API ที่โหนด Ethereum ให้มา หากมีอินเทอร์เฟซตามเหตุการณ์บนเครือข่าย ซึ่งสามารถรับการอัปเดตสถานะธุรกรรมที่ส่งไปยังเชนและให้ข้อเสนอแนะตามเวลาจริงแก่ผู้ใช้ dapps สามารถมอบประสบการณ์ผู้ใช้ที่ดีกว่า ในขณะที่โหนด Ethereum มาตรฐานไม่ได้ให้ข้อมูลแบบเรียลไทม์ที่สมบูรณ์ ข้อมูลการทำธุรกรรม

  • โหนด Ethereum ให้การอ่านสตรีมของกิจกรรมบนเครือข่าย แต่ฟังก์ชันการทำงานมีจำกัดและใช้ได้เฉพาะผ่านฟังก์ชัน PUB/SUB โดยใช้อินเทอร์เฟซ JSON-RPC ของ Ethereum (ไม่สามารถใช้งานได้เมื่อใช้ GraphQL) อินเทอร์เฟซ PUB/SUB ช่วยให้ dapps ได้รับการแจ้งเตือนสำหรับเหตุการณ์บางประเภท:

  • newHeads - ทุกครั้งที่เพิ่มส่วนหัวของบล็อกใหม่เข้ากับเชน

newPendingTransactions - แฮชของธุรกรรมทั้งหมดที่เข้าสู่สถานะรอดำเนินการและลงนามโดยคีย์ที่มีอยู่ในโหนด (และสิ่งนี้เกิดขึ้นได้ยากในโหนดสาธารณะ)

การซิงค์ - ระบุเมื่อโหนดเริ่มหรือหยุดการซิงค์

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

วงจรการทำธุรกรรม Ethereum

ธุรกรรม Ethereum มีวงจรชีวิตที่ซับซ้อน ธุรกรรมแต่ละรายการจะผ่านหลายสถานะ (สถานะ) ผ่านการเปลี่ยนแปลงสถานะต่างๆ ตลอดกระบวนการ และอาจเดินหน้าหรือย้อนกลับ

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

  • สถานะการซื้อขาย

  • ตั้งแต่การส่งธุรกรรม Ethereum ไปจนถึงการเข้าสู่บล็อก (ด้วยความน่าจะเป็นที่จะสำเร็จ) จะต้องผ่านสถานะต่างๆ ดังต่อไปนี้:

  • UNKNOWN (ไม่รู้จัก): ธุรกรรมที่ไม่ได้ตรวจพบหรือประมวลผลโดยเครือข่ายถูกกำหนดให้อยู่ในสถานะ UNKOWN

  1. รอดำเนินการ: การทำธุรกรรมกำลังรอการหยิบและดำเนินการโดยนักขุดในสิ่งที่เราเรียกว่า mempool นักขุดมักจะเลือกธุรกรรมที่ราคาน้ำมันสูงขึ้นก่อน ดังนั้นธุรกรรมที่ราคาน้ำมันต่ำกว่าอาจอยู่ในสถานะรอดำเนินการเป็นเวลานาน ธุรกรรมที่มีราคาน้ำมันต่ำสุดอาจไม่สามารถเลือกได้ ซึ่งจะปล่อยให้อยู่ในสถานะรอดำเนินการอย่างไม่มีกำหนด

  2. IN_BLOCK: เมื่อนักขุดเลือกธุรกรรมสำเร็จและประมวลผลเป็นบล็อก ธุรกรรมจะเข้าสู่สถานะ IN_BLOCK หากธุรกรรมเข้าสู่สถานะ IN_BLOCK แต่การบล็อกนั้นอยู่ในสถานะ Forks ธุรกรรมอาจกลับสู่สถานะรอดำเนินการ

ธุรกรรมอื่นจากผู้ส่งเดียวกันกับ nonce เดียวกันเข้าสู่สถานะ IN_BLOCK หรือ



ธุรกรรมอื่นจากผู้ส่งรายเดียวกันที่มี nonce เดียวกัน แต่ราคาก๊าซสูงขึ้น 12% เข้าสู่สถานะรอดำเนินการ

แผนภาพด้านล่างแสดงสถานะเหล่านี้และการเปลี่ยนระหว่างสถานะเหล่านี้

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

  • การเปลี่ยนสถานะ

  • ดังที่แสดงในรูปด้านบน การเปลี่ยนระหว่างสถานะจะถูกกำหนดโดยชื่อ

  • POOLED (ลงในกลุ่ม): ธุรกรรมในสถานะ UNKOWN (ไม่ทราบ) เข้าสู่กลุ่มธุรกรรมที่รอให้นักขุดเลือก เรียกว่า POOLED และเข้าสู่สถานะ PENDING (รอดำเนินการ) ธุรกรรมในสถานะ REPLACED หากเงื่อนไขการเปลี่ยนไม่เป็นจริงอีกต่อไป (ตัวอย่าง: ในบางกรณี ธุรกรรมที่มีราคาก๊าซต่ำใน IN_BLOCK จะถูก fork และแทนที่ด้วย nonce เดียวกัน และส่ง หากธุรกรรมของอดีตคือ ยังคงลอยอยู่บนเครือข่าย) นอกจากนี้ยังสามารถเปลี่ยนเป็นสถานะ POOLED ได้อีก

  • MINED (ขุด): ธุรกรรมที่ขุดได้คือธุรกรรมที่ดำเนินการโดยนักขุดซึ่งสร้างบล็อก เมื่อขุดได้ ธุรกรรมจะถือว่าอยู่ในสถานะ IN_BLOCK เนื่องจากลักษณะเครือข่าย Ethereum แบบเพียร์ทูเพียร์ จากมุมมองของโหนดที่กำหนด ธุรกรรมสามารถเข้าสู่สถานะ IN_BLOCK ได้โดยตรงจากสถานะ UNKNOWN (ไม่รู้จัก) โดยไม่ต้องผ่านสถานะ PENDING (รอดำเนินการ) อย่างชัดเจน ด้วยเหตุผลเดียวกัน ธุรกรรมยังสามารถเปลี่ยนโดยตรงจากสถานะ REPLACED เป็นสถานะ IN_BLOCK โดยไม่ผ่านสถานะ PENDING ซึ่งได้รับการตรวจสอบจากมุมมองของโหนดที่กำหนด

FORKED (forked): เมื่อธุรกรรมที่ขุดได้อยู่ในบล็อกที่ถูกเพิกถอนโดยเครือข่าย ธุรกรรมนั้นจะถูก forked ธุรกรรมทั้งหมดในบล็อกนั้นจะถูกแยกจากกัน จากสถานะ IN_BLOCK (บล็อกขาเข้า) กลับสู่สถานะ PENDING (รอดำเนินการ)

ยืนยัน: การทำธุรกรรมในสถานะ IN_BLOCK จะได้รับการยืนยันทุกครั้งที่มีการขุดบล็อกย่อยที่ตามมา

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

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

ติดตามสถานะการทำธุรกรรมได้อย่างง่ายดาย

แพลตฟอร์ม dfuse มอบอินเทอร์เฟซที่หลากหลายซึ่งสามารถตรวจสอบการสตรีมได้ ซึ่งสนับสนุนการติดตามโดยละเอียดแบบเรียลไทม์ของวงจรชีวิตของธุรกรรม Ethereum API ตัวติดตามสถานะการทำธุรกรรมของ dfuse Ethereum ช่วยให้นักพัฒนาสามารถส่งธุรกรรม Ethereum และรับการอัปเดตสถานะแบบละเอียดทันทีในช่องข้อมูลเดียวกัน ติดตามความคืบหน้าของธุรกรรมตลอดวงจรชีวิต

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

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

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

ด้วย dfuse dapps จำเป็นต้องได้รับการอัปเดตการสตรีมผ่านการเชื่อมต่อเพียงครั้งเดียวเท่านั้น และ dfuse จะติดตามธุรกรรมให้คุณผ่านจุดพลิกผันต่างๆ จนกว่าชะตากรรมจะสิ้นสุด

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

  • แพลตฟอร์มที่ทันสมัยสำหรับ Dapps ขั้นสูง

  • Lifecycle API เป็นเพียงส่วนเล็กๆ และสำคัญของแพลตฟอร์ม dfuse dfuse ให้ชั้นโครงสร้างพื้นฐานที่ทันสมัยสมบูรณ์แบบสำหรับ dapps กล่าวคือ:

  • เร็ว,

  • ปรับขนาดได้

ETH
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก:
https://t.me/Odaily_News
กลุ่มสนทนา:
https://t.me/Odaily_GoldenApe
บัญชีทางการ:
https://twitter.com/OdailyChina
สารบัญบทความ
คลังบทความของผู้เขียน
区块链大本营
อันดับบทความร้อน
Daily
Weekly
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android