ทำไมฉันยังมี ETH อยู่ในกระเป๋าเงินของฉัน แต่ไม่สามารถยืนยันการทำธุรกรรมได้?
หมายเหตุบรรณาธิการ: บทความนี้มาจากบล็อกบีตส์ BlockBeats (ID: BlockBeats)พิมพ์ซ้ำโดย Odaily โดยได้รับอนุญาต
หมายเหตุบรรณาธิการ: บทความนี้มาจาก
บล็อกบีตส์ BlockBeats (ID: BlockBeats)
บล็อกบีตส์ BlockBeats (ID: BlockBeats)
เมื่อ Uniswap แจกจ่ายเงินไปยังที่อยู่ของผู้ใช้มากกว่า 200,000 ที่อยู่ หลายคนอาจคิดว่า "ค่าน้ำมันนี้สูงเกินไป"
วันนั้นเป็นวันที่น่าจดจำในประวัติศาสตร์ของ Ethereum ข้อเสนอแก๊สสูงถึง 1,000 GWEI ซึ่งเป็นจุดสูงสุดในประวัติศาสตร์
เช้าวันประวัติศาสตร์และวันสิ้นลมแห่งชาติ หลายคนเจอปัญหาค่าน้ำมัน ค่าน้ำมันแพงไม่ใช่ปัญหาอีกต่อไป ปัญหาคือค่าน้ำมันสูงสุดที่แนะนำเข้ากระเป๋าไม่สามารถขายได้ภายในเวลาที่กำหนด . Metamask ของทุกคนแสดงให้เห็นว่าพวกเขาทั้งหมดกำลังรอดำเนินการอยู่ และการวนเป็นวงกลมก็น่ารำคาญ
เหตุใดคุณจึงไม่สามารถใช้จำนวนค่าธรรมเนียมน้ำมันเริ่มต้น แต่ก็ยังไม่สามารถซื้อขายได้ทันที? . บทความนี้จะอธิบายรายละเอียดเกี่ยวกับกลไกอัตราการทำธุรกรรมของ Ethereum และปัญหาที่พบในการเริ่มต้นการทำธุรกรรมบน Ethereum
ชื่อเรื่องรอง
ตรรกะของแก๊ส
เรื่องนี้ต้องเริ่มต้นด้วยบัญชี Ethereum ก่อน
มีบัญชีสองประเภทในเครือข่าย Ethereum บัญชีภายนอกและบัญชีสัญญา
บัญชีภายนอกคือบัญชีที่ใช้โดยผู้ใช้ ซึ่งควบคุมโดยเจ้าของคีย์ส่วนตัว บัญชีสัญญาหมายถึงสัญญาอัจฉริยะที่มีตรรกะของแอปพลิเคชันซึ่งควบคุมโดยรหัสสัญญา (มักเป็นเจ้าของโดยฝ่ายโครงการ) เมื่อผู้ใช้ใช้แอปพลิเคชัน DeFi พวกเขากำลังใช้บัญชีของตนเองเพื่อโต้ตอบกับสัญญาอัจฉริยะของโครงการ DeFi
บัญชีต่างๆ สามารถโต้ตอบได้ตามต้องการ สามารถโอนระหว่างกระเป๋าเงินได้ และสัญญายังสามารถโทรหากันได้ ทุกการโต้ตอบบนห่วงโซ่จำเป็นต้องใช้ปริมาณการคำนวณ ปริมาณของการคำนวณที่ใช้จะพิจารณาจากความยากในการคำนวณ และแก๊สเป็นหน่วยวัดของปริมาณการคำนวณ ตัวอย่างเช่น การเติมนั้นค่อนข้างง่ายและต้องใช้แก๊ส 3 แก๊ส ในขณะที่การดำเนินการแบ่งค่อนข้างซับซ้อนและต้องใช้แก๊ส 5 แก๊ส
เพื่อหลีกเลี่ยงการกระจุกตัวของโหนดทั้งหมด บล็อกเชนที่ใช้สถาปัตยกรรมแบบกระจายศูนย์จะจำกัดความจุของแต่ละบล็อกอย่างเข้มงวด ตัวอย่างเช่น Block Size Limit ของ Bitcoin และ Block Gas Limit ของ Ethereum ตอนที่ Rhythm BlockBeats เขียนบทความ ขีดจำกัดของ Block Gas ของแต่ละบล็อกใน Ethereum คือประมาณ 12,000,000 Gas ซึ่งเป็นขีดจำกัดบนของจำนวนการคำนวณทั้งหมดของแต่ละบล็อก โดยเฉลี่ยแล้ว บล็อกจะถูกสร้างขึ้นทุกๆ 15 วินาที เมื่อความต้องการในการทำธุรกรรมเกินความจุของบล็อก ผู้ใช้จำเป็นต้องแข่งขันกันเพื่อแย่งชิงทรัพยากรในแต่ละบล็อกเพื่อให้ธุรกรรมของพวกเขาได้รับการยืนยันในห่วงโซ่โดยเร็วที่สุด ในเวลานี้ ผู้ใช้จะเสนอราคาสำหรับ Gas และนักขุดจะจัดลำดับความสำคัญของธุรกรรมที่มีราคา Gas สูงเป็นบล็อกๆ
โดยปกติแล้วผู้ใช้จะเห็นว่ากระเป๋าเงินจะเพิ่มตัวเลือกในการปรับ Gas Limit เมื่อทำการโอน ต่างจาก Block Gas Limit ตรงที่ Gas Limit หมายถึงขีดจำกัดบนของการใช้ Gas ที่ผู้ใช้สามารถยอมรับได้สำหรับการทำธุรกรรม เนื่องจากบางครั้งอาจมีช่องโหว่ในสัญญา ธุรกรรมจะถูกคำนวณเป็นลูปไม่สิ้นสุด หากไม่มีการจำกัดแก๊ส ธุรกรรมนี้จะใช้ ETH ทั้งหมดในกระเป๋าเงินของผู้ใช้ ค่าธรรมเนียมที่นักขุดมักจะเรียกเก็บจะถูกชำระตามจำนวนการคำนวณที่ใช้เมื่อทำธุรกรรมจริง (Gas ที่ใช้โดยธุรกรรม) และ ETH ที่เหลืออยู่ใน Gas Limit จะถูกส่งคืนไปยังบัญชีของผู้ใช้
ดังนั้น เราสามารถสรุปได้ว่าปริมาณ ETH ที่ใช้ (ต้นทุน Ether) = ค่าธรรมเนียมการทำธุรกรรม (ค่าธรรมเนียมก๊าซ/ค่าธรรมเนียมการทำธุรกรรม) = ปริมาณก๊าซที่ใช้ในแต่ละธุรกรรม (ก๊าซที่ใช้โดยการทำธุรกรรม) * ราคาก๊าซ (ราคาก๊าซ)
หลังจากทำความเข้าใจกลไกค่าธรรมเนียมและประเภทบัญชีของ Ethereum แล้ว เรามาดูปัญหาที่ผู้ใช้มักพบเมื่อทำการซื้อขายกันชื่อเรื่องรอง
ธุรกรรมที่รอดำเนินการ/เร่งรัด?
เมื่อใดก็ตามที่ผู้ใช้เริ่มทำธุรกรรม ธุรกรรมนั้นจะถูกใส่ลงในกลุ่มธุรกรรม (Mempool) ดังที่กล่าวไว้ข้างต้น นักขุดจะให้ความสำคัญกับการทำธุรกรรมบรรจุภัณฑ์ด้วยราคาก๊าซสูงสุดในกลุ่ม (ลักษณะการแสวงหาผลกำไรของนักขุด) ดังนั้นราคาก๊าซที่กำหนดโดยผู้ใช้จะกำหนดความเร็วที่ธุรกรรมถูกบรรจุและดำเนินการ เมื่อเครือข่ายแออัดเนื่องจากราคาน้ำมันที่พุ่งสูงขึ้น ธุรกรรมของผู้ใช้อาจรอการยืนยันเป็นเวลานาน เพื่อส่งธุรกรรมที่รอดำเนินการให้เร็วที่สุดเท่าที่จะเป็นไปได้ ผู้ใช้สามารถเลือกที่จะจ่าย Gas Price มากขึ้นเพื่อเร่งการทำธุรกรรม (บันทึกจังหวะ: เข้าใจว่าเป็นการให้รางวัลแก่นักขุดมากขึ้นเพื่อให้บรรลุวัตถุประสงค์ในการกระโดดเข้าคิว)
เมื่อผู้ใช้ต้องการเร่งการทำธุรกรรม ในกระเป๋าเงิน Ethereum ผู้ใช้สามารถเลือกตัวเลือกการทำธุรกรรมแบบเร่งและจะต้องจ่ายค่าธรรมเนียม Gas ที่สูงขึ้น หลังจากที่ผู้ใช้ตกลงก็เท่ากับการเริ่มต้นการทำธุรกรรมใหม่ และ ธุรกรรมใหม่ เหมือนกับค่า Nonce ของธุรกรรมที่จะได้รับการยืนยัน
เนื่องจากกฎระเบียบของเครือข่าย Ethereum ค่า Nonce นั้นต่อเนื่องและไม่สามารถข้ามได้ และค่า Nonce ของแต่ละธุรกรรมในที่อยู่เดียวกันจะไม่สามารถทำซ้ำได้ ดังนั้น นักขุดจะทำการบรรจุธุรกรรมที่สร้างขึ้นใหม่หลังจากที่ธุรกรรมใหม่ถูกบรรจุ และยืนยันราคาก๊าซที่ต่ำกว่าก่อนหน้านี้ การทำธุรกรรมจะถูกยกเลิก
หากผู้ใช้ไม่ต้องการเร่งความเร็วของธุรกรรม ตราบใดที่ธุรกรรมยังไม่ถูกแยกออกจากกลุ่มธุรกรรม ผู้ใช้สามารถเลือกที่จะยกเลิกธุรกรรมเมื่อใดก็ได้ ตรรกะของการยกเลิกธุรกรรมจะเหมือนกับการเร่งธุรกรรม ผู้ใช้เริ่มต้นธุรกรรมด้วยราคาแก๊สที่สูงขึ้น แต่ Nonce เหมือนกับธุรกรรมที่จะได้รับการยืนยัน แต่จำนวนธุรกรรมกลายเป็น 0 ดังนั้นโดยพื้นฐานแล้ว ต้นทุน ของการยกเลิกธุรกรรมจะเหมือนกับต้นทุนในการเร่งธุรกรรม ต้นทุน
ควรสังเกตว่าก่อนที่การยืนยันธุรกรรมที่รอดำเนินการจะเสร็จสมบูรณ์ ธุรกรรมต่อไปนี้จำเป็นต้องรอในแถว ดังนั้นผู้ใช้จึงไม่ควรเริ่มธุรกรรมหลายรายการซ้ำๆ เนื่องจากเวลารอนาน
ชื่อเรื่องรอง
ธุรกรรมล้มเหลว (ล้มเหลว)
Rhythm BlockBeats พบว่าสาเหตุที่พบบ่อยที่สุดสำหรับการทำธุรกรรมล้มเหลวคือการทำธุรกรรมแก๊สหมด (Out of Gas) กล่าวคือ การคำนวณธุรกรรมนี้เกินค่า Gas Limit ที่ผู้ใช้กำหนด โดยทั่วไป ในกรณีนี้ สถานะการทำธุรกรรมจะแสดงเป็นล้มเหลว ซึ่งบ่งชี้ว่าแก๊สหมดแล้ว และแก๊สที่จ่ายไปจะไม่ได้รับเงินคืน
ผู้ใช้บางคนอาจคิดว่ามันไม่ยุติธรรม แต่โดยพื้นฐานแล้วคนงานเหมืองกำลังคำนวณงานอยู่แล้ว แต่ก๊าซไม่เพียงพอหลังจากการคำนวณครึ่งหนึ่ง ดังนั้นคนงานเหมืองทำได้เพียงยอมแพ้และทำงานต่อไป แต่งานก่อนหน้านี้จำเป็นต้อง จะได้รับค่าจ้าง "เงินเดือน" ดังนั้นการทำงานก่อนหน้านี้ น่าจะเป็นที่เข้าใจได้ว่าค่าน้ำมันไม่สามารถขอคืนได้ ในกรณีนี้ ผู้ใช้สามารถเริ่มต้นธุรกรรมใหม่และเพิ่มขีดจำกัดแก๊สของธุรกรรมนี้เท่านั้น
อีกกรณีของความล้มเหลวในการทำธุรกรรมคือเมื่อผู้ใช้เริ่มต้นการโอนธุรกรรมไปยังสัญญาอัจฉริยะ แต่ข้อผิดพลาดบางอย่างทำให้ไม่สามารถดำเนินการตามสัญญาได้ การทำธุรกรรมจะส่งกลับ Bad Instruction
ตัวอย่างเช่น เมื่อผู้ใช้เข้าร่วมในแคมเปญคราวด์ฟันดิ้ง สถานการณ์ต่อไปนี้อาจเกิดขึ้น:
โควต้าเต็มแล้ว
หรือผู้ใช้ไม่ได้รับการอนุญาตพิเศษ;
หรือโทเค็นการสมัครสมาชิกมากเกินไปและอื่น ๆ
ในเวลานี้ ขีดจำกัดของแก๊สที่ผู้ใช้ตั้งไว้จะหมดลง ซึ่งจะนำไปสู่ความล้มเหลวในการทำธุรกรรมในที่สุด
อย่างไรก็ตาม หลังจากการ hard fork ของ Ethereum Byzantine ได้มีการเพิ่มผู้ให้บริการรายใหม่ Reverted (EIP-140) เมื่อเกิดข้อผิดพลาดในสัญญาและการทำธุรกรรมล้มเหลว การทำธุรกรรมจะไม่ใช้ก๊าซทั้งหมดที่กำหนดโดยขีดจำกัดก๊าซ สัญญาจะหยุดดำเนินการและคืนเงินค่าธรรมเนียมก๊าซที่เหลืออยู่ และแจ้งให้ผู้ใช้ทราบถึงเหตุผลของข้อผิดพลาด
แน่นอนว่าหากจำนวน ETH ในกระเป๋าเงินของผู้ใช้ไม่เพียงพอที่จะชำระค่าธรรมเนียมแก๊ส การทำธุรกรรมก็จะถือว่าล้มเหลวเช่นกัน


