ทำความเข้าใจค่าธรรมเนียมแก๊ส Ethereum: base fee, priority fee และ gas limit
เรียนรู้ความหมายของหน่วยแก๊ส ขีดจำกัดแก๊ส base fee, priority fee และค่าธรรมเนียมสูงสุด พร้อมคำนวณต้นทุนจริงของธุรกรรม Ethereum
ในคู่มือนี้แก๊สวัดงานประมวลผล ไม่ใช่จำนวนเงินที่ส่ง
สรุปสั้น
ค่าธรรมเนียมแก๊สของ Ethereum คำนวณจากปริมาณแก๊สที่ธุรกรรมใช้จริงคูณด้วยราคาแก๊สที่มีผลในบล็อกที่บรรจุธุรกรรมนั้น โปรโตคอลกำหนดและเผา base fee ส่วน priority fee อาจตกเป็นของผู้ตรวจสอบความถูกต้อง ค่าธรรมเนียมสูงสุดเป็นเพดานราคา ไม่จำเป็นต้องเป็นราคาที่คุณจ่ายจริง
แก๊สวัดงานประมวลผล ไม่ใช่จำนวนเงินที่ส่ง
บน Ethereum แก๊สเป็นหน่วยที่ใช้วัดงานประมวลผลซึ่ง EVM ต้องทำเพื่อจัดการธุรกรรม การส่ง ETH แบบง่ายใช้การประมวลผลค่อนข้างน้อย ส่วนการโอนโทเคนหรือเรียกใช้เงื่อนไขหลายข้อของสัญญาอัจฉริยะอาจต้องใช้มากกว่า ดังนั้นธุรกรรมสองรายการที่ส่ง ETH จำนวนเท่ากันอาจใช้แก๊สไม่เท่ากันหากทำงานต่างกัน
หน่วยแก๊สบอกปริมาณงาน ส่วนราคาแก๊สบอกจำนวน ETH ที่เสนอจ่ายต่อหนึ่งหน่วย เมื่อนำสองค่านี้มาคูณกันจะได้ค่าธรรมเนียม gas limit คือจำนวนหน่วยสูงสุดที่ธุรกรรมได้รับอนุญาตให้ใช้ ส่วน maxFeePerGas คือเพดานราคาต่อหน่วย ฟิลด์เหล่านี้มีความหมายต่างกัน ไม่ใช่ตัวเลือกที่ใช้แทนกันได้ของ “ค่าธรรมเนียมสูงสุด” ค่าเดียว
บทความนี้อธิบายธุรกรรม EIP-1559 ทั่วไปบน Ethereum mainnet บล็อกเชนอื่นและเครือข่ายเลเยอร์ 2 อาจมีโครงสร้างค่าธรรมเนียม สินทรัพย์ที่ใช้จ่าย และชื่อฟิลด์ต่างกัน อย่านำคำศัพท์ของ Ethereum ไปใช้กับทุกเครือข่ายโดยอัตโนมัติ คู่มือแก๊สของ Ethereum.org และ คู่มือธุรกรรม อธิบายฟิลด์เหล่านี้
ปริมาณแก๊สที่ใช้ขึ้นอยู่กับงานของธุรกรรม
EVM กำหนดต้นทุนแก๊สให้กับการประมวลผลและการเปลี่ยนสถานะ การเรียกสัญญาอาจมีการเรียกใช้ฟังก์ชัน อ่านหรือเขียนข้อมูลจัดเก็บ และบันทึกเหตุการณ์ ซึ่งเป็นงานเพิ่มเติมจากการโอนแบบง่าย จำนวนการทำงานที่มากขึ้นหรือเส้นทางประมวลผลที่ยาวขึ้นอาจใช้แก๊สมากขึ้น ปริมาณแก๊สไม่ได้คำนวณจากการคูณจำนวน ETH ที่ส่งหรือราคาตลาดของโทเคน
การโอน ETH การโอนโทเคน และการเรียก dApp ทำงานคนละแบบ การเรียกสัญญาอาจเรียกใช้ฟังก์ชันเพิ่มเติมและอ่านหรือแก้ไขข้อมูลจัดเก็บ จึงอาจใช้แก๊สมากกว่าการโอนแบบง่าย ใบเสร็จของธุรกรรมที่ถูกบรรจุในบล็อกระบุปริมาณแก๊สที่ใช้จริง
Ethereum.org ยกตัวอย่าง 21,000 gas สำหรับการโอน ETH มาตรฐาน ตัวเลขนี้เป็นข้อมูลอ้างอิงสำหรับการโอนแบบง่าย ไม่ใช่ gas limit ที่นำไปใช้กับการเรียกสัญญาทั่วไปได้ เพราะปริมาณงานขึ้นอยู่กับฟังก์ชันและการเข้าถึงข้อมูลจัดเก็บที่เรียกใช้
แก๊สบนเครือข่ายยังต่างจากค่าถอนของผู้ให้บริการด้วย กระดานเทรดอาจบวกค่าใช้จ่ายดำเนินงานหรือใช้ตารางค่าธรรมเนียมของตนเอง ส่วนแก๊สบนเชนชำระค่าประมวลผลที่เครือข่ายทำ เมื่อหน้าถอนแสดงยอดเดียว ให้ตรวจสอบว่ายอดนั้นรวมค่าธรรมเนียมแพลตฟอร์มกับต้นทุนเครือข่ายหรือไม่
gas limit และแก๊สที่ใช้จริงเป็นคนละค่า
gas limit คือจำนวนหน่วยแก๊สสูงสุดที่ธุรกรรมได้รับอนุญาตให้ใช้ ส่วน gas used คือปริมาณที่ใช้จริงเมื่อการประมวลผลเสร็จสิ้น การตั้ง limit ให้สูงขึ้นไม่ได้หมายความว่าจะถูกคิดเงินทุกหน่วยใน limit ธุรกรรมที่ถูกรวมในบล็อกจะคิดค่าธรรมเนียมตามแก๊สที่ใช้จริงและราคาแก๊สที่มีผล หน่วยใน limit ที่ไม่ได้ใช้จะไม่ถูกใช้ไป
หากธุรกรรมนั้นใช้แก๊สหมดระหว่างประมวลผล gas limit ทั้งหมดจะถูกใช้และธุรกรรมจะล้มเหลว การเปลี่ยนสถานะจะถูกย้อนกลับ แต่การประมวลผลยังมีค่าธรรมเนียม การตั้ง limit สูงขึ้นเปิดทางให้ทำงานได้มากขึ้น แต่เพิ่มวงเงินความเสี่ยงด้านต้นทุนแก๊สสูงสุดด้วย: gasLimit × maxFeePerGas ยอดที่เรียกเก็บจริงยังขึ้นอยู่กับแก๊สที่ใช้จริงและราคาแก๊สที่มีผล
gas limit คือเพดาน ไม่ใช่ค่าคาดการณ์ปริมาณที่ใช้จริง limit ไม่ใช่ราคาต่อหน่วย และการเพิ่มราคาไม่ช่วยแก้จำนวนหน่วยแก๊สที่ไม่พอ หากไม่เข้าใจว่าการเรียกนั้นจะทำอะไร ให้อ่านคำแนะนำอย่างเป็นทางการจากวอลเล็ตหรือแอปก่อน อย่าปรับ limit โดยเดาสุ่ม
base fee เปลี่ยนตามความต้องการพื้นที่ในบล็อก
สำหรับธุรกรรม EIP-1559 base fee คือราคาต่อแก๊สที่โปรโตคอลกำหนดสำหรับบล็อก ธุรกรรมต้องตั้งค่าธรรมเนียมสูงสุดให้ครอบคลุม base fee ของบล็อกที่จะบรรจุธุรกรรม โปรโตคอลปรับ base fee จากบล็อกหนึ่งไปยังอีกบล็อกตามปริมาณแก๊สที่บล็อกก่อนหน้าใช้เมื่อเทียบกับเป้าหมาย จึงขึ้นหรือลงได้และไม่ใช่อัตราคงที่ถาวร
ส่วนของ base fee สำหรับแก๊สที่ใช้จริงจะถูกเผา ผู้ตรวจสอบความถูกต้องไม่ได้รับส่วนนี้เป็นทิป base fee เปลี่ยนจากบล็อกหนึ่งไปยังอีกบล็อก ธุรกรรมที่รอดำเนินการจึงอาจเจอ base fee ตอนถูกบรรจุในบล็อกต่างจากตอนส่ง
gwei เป็นหน่วยย่อยของ ETH: 1 gwei เท่ากับ 0.000000001 ETH หากใช้แก๊สเท่าเดิม ราคาต่อหน่วยที่สูงขึ้นก็เพิ่มต้นทุนใน ETH ได้ หากราคาต่อหน่วยเท่าเดิม การใช้แก๊สมากขึ้นก็เพิ่มต้นทุนได้เช่นกัน ทั้งสองอย่างเปลี่ยนค่าธรรมเนียมที่คิดเป็น ETH โดยไม่เกี่ยวกับราคา ETH ในสกุลดอลลาร์
priority fee คือทิปที่อาจช่วยให้ธุรกรรมถูกบรรจุเร็วขึ้น
priority fee คือทิปต่อแก๊สที่เสนอให้ผู้ตรวจสอบความถูกต้องซึ่งบรรจุธุรกรรม ผู้ใช้แข่งขันกันเพื่อพื้นที่บล็อกที่มีจำกัด ทิปที่สูงขึ้นจึงอาจทำให้ธุรกรรมน่าสนใจขึ้นเมื่อเงื่อนไขอื่นใกล้เคียงกัน ทิปแสดงความเร่งด่วน แต่ไม่รับประกันว่าจะได้อยู่ในบล็อกใดหรือภายในเวลาใด
ค่า priority fee ที่สูงบนหน้าจอไม่ได้หมายความว่าธุรกรรมต้องใช้หน่วยแก๊สมากขึ้น priority fee เปลี่ยนราคาต่อหน่วย ส่วน gas limit จำกัดปริมาณงานที่อนุญาต การเรียกสัญญาที่ซับซ้อนยังล้มเหลวได้หากมีแก๊สไม่พอ แม้ตั้งทิปสูง ในทางกลับกัน มีหน่วยแก๊สพอก็ไม่ช่วยหากเพดานราคาครอบคลุม base fee ของบล็อกไม่ได้
ผู้ตรวจสอบความถูกต้องพิจารณาพื้นที่บล็อกและเงื่อนไขธุรกรรมอื่นในการเลือกธุรกรรม base fee และพื้นที่บล็อกที่มีอยู่เปลี่ยนแปลงตามเวลา ทิปที่สูงขึ้นจึงไม่รับประกันว่าจะถูกบรรจุในเวลาที่กำหนด ข้อกำหนด EIP-1559 กำหนดบทบาทของ base fee และ priority fee แยกกัน และจำกัดราคาแก๊สที่มีผลรวมไม่ให้เกินค่าธรรมเนียมสูงสุด
ค่าธรรมเนียมสูงสุดคือเพดานราคา ไม่ใช่ราคาจริง
maxFeePerGas คือราคาสูงสุดต่อหนึ่งหน่วยแก๊สที่คุณยอมรับ ส่วน maxPriorityFeePerGas คือทิปสูงสุดต่อหน่วย เมื่อธุรกรรมถูกรวมในบล็อก ราคาที่มีผลคือ base fee บวกกับทิปที่ยังอยู่ภายใต้เพดานทั้งสอง ค่า tip จริงถูกจำกัดให้ไม่เกินค่าที่น้อยกว่าระหว่าง maxPriorityFeePerGas และ maxFeePerGas - baseFee ดังนั้นราคาที่มีผลจึงไม่เกิน max fee
ตัวอย่างเช่น max fee คือ 30 gwei, max tip คือ 2 gwei และ base fee ของบล็อกคือ 18 gwei ทิปที่ใช้ได้คือ 2 gwei ทำให้ราคาที่มีผลเท่ากับ 20 gwei ธุรกรรมไม่ได้จ่าย 30 gwei โดยอัตโนมัติเพียงเพราะตั้งค่าสูงสุดไว้เท่านั้น หาก base fee เพิ่มเป็น 31 gwei เพดาน 30 gwei จะไม่ครอบคลุมบล็อกนั้น จึงบรรจุธุรกรรมในบล็อกดังกล่าวไม่ได้
เมื่อ base fee เข้าใกล้ max fee พื้นที่สำหรับทิปจะเหลือน้อยลง แม้ตั้งเพดานทิป 5 gwei ไว้ แต่ถ้า maxFeePerGas - baseFee เหลือเพียง 1 gwei ทิปจริงก็ไม่เกิน 1 gwei ควรอ่านเพดานทั้งสองพร้อมกับ base fee ปัจจุบัน

ลองคำนวณค่าธรรมเนียมจากตัวอย่าง
ตัวเลขต่อไปนี้เป็นสมมติฐานเพื่อแสดงวิธีคำนวณเท่านั้น สมมติว่าธุรกรรมมี gas limit 30,000 หน่วย ใช้จริง 24,000 หน่วย และอยู่ในบล็อกที่มี base fee 18 gwei ตั้ง max tip ที่ 2 gwei และ max fee ที่ 30 gwei ทิปจริงคือ min(2, 30 - 18) = 2 gwei ดังนั้นราคาที่มีผลคือ 18 + 2 = 20 gwei
ค่าแก๊สจริงคือ 24,000 × 20 = 480,000 gwei เนื่องจาก 1 ETH เท่ากับ 1,000,000,000 gwei ค่านี้จึงเท่ากับ 0.00048 ETH ส่วน base fee คือ 24,000 × 18 = 432,000 gwei หรือ 0.000432 ETH ส่วนทิปคือ 24,000 × 2 = 48,000 gwei หรือ 0.000048 ETH เมื่อนำสองส่วนมารวมกันจะได้ค่าแก๊สจริง 0.00048 ETH
หากคูณ gas limit เต็มจำนวนกับ max fee จะได้ 30,000 × 30 = 900,000 gwei หรือ 0.0009 ETH ซึ่งเป็นเพดานต้นทุนแก๊สภายใต้การตั้งค่านี้ หากใช้ limit และราคาสูงสุดต่อหน่วยเต็มทั้งหมด ค่านี้ไม่ใช่ค่าธรรมเนียมจริงในตัวอย่าง จำนวน ETH ที่ส่งให้ผู้รับเป็นคนละส่วนกับค่าแก๊ส อย่ามองเพดานนี้เป็นยอดตัดแน่นอนหรือคิดว่าค่าธรรมเนียมเป็นเปอร์เซ็นต์ของยอดโอน ตัวเลขนี้มีไว้ประกอบคำอธิบาย ไม่ใช่ราคาเครือข่ายปัจจุบัน
ธุรกรรมที่ล้มเหลวก็ยังอาจใช้แก๊ส
อย่าคิดว่าข้อความ “ล้มเหลว” ในวอลเล็ตหมายความว่าจะคืนค่าแก๊สให้ทั้งหมด หากธุรกรรมถูกบรรจุในบล็อกและ EVM เริ่มประมวลผลก่อนย้อนกลับ การเปลี่ยนสถานะอาจถูกยกเลิก แต่แก๊สที่ใช้ไปยังมีค่าธรรมเนียม หากธุรกรรมนั้นใช้แก๊สหมดระหว่างประมวลผล gas limit ทั้งหมดจะถูกใช้ การประมวลผลเกิดขึ้นแล้วแม้ไม่ได้ผลลัพธ์ตามต้องการ
กรณีที่ธุรกรรมไม่ผ่านการตรวจสอบความถูกต้องก่อนถูกบรรจุในบล็อกต่างออกไป ตัวอย่างเช่น การส่ง ETH ด้วย gas limit ต่ำกว่าที่จำเป็นอาจถูกปฏิเสธก่อนเข้าสู่บล็อก กรณีนั้นจะไม่มีการใช้แก๊สในการประมวลผล “ถูกปฏิเสธก่อนบรรจุ” กับ “ถูกบรรจุแล้วประมวลผลย้อนกลับ” จึงเป็นคนละสถานะ
ตรวจสอบสถานะ ปริมาณแก๊สที่ใช้ ราคาแก๊สที่มีผล และผลการประมวลผลจาก transaction hash ข้อความสั้น ๆ ในวอลเล็ตอาจไม่บอกสาเหตุทั้งหมด Ethereum.org แยกการปฏิเสธก่อนบรรจุออกจากกรณีที่แก๊สหมดระหว่างประมวลผล
อ่าน limit ราคา และจำนวนเงินที่ส่งแยกกัน
ก่อนลงนาม ให้ยืนยันเครือข่ายและตรวจว่าธุรกรรมเป็นการโอนแบบง่ายหรือการเรียกสัญญา วอลเล็ตอาจแสดงค่าธรรมเนียมโดยประมาณ gas limit ค่า base fee โดยประมาณ เพดาน priority fee เพดาน max fee และจำนวน ETH หรือโทเคนที่จะส่ง ค่าเหล่านี้ตอบคนละคำถาม หากหน้าจอแสดงเพียงต้นทุนแก๊สสูงสุด ให้เปิดรายละเอียดดูว่าเป็นเพดานใด อย่าคิดว่านั่นคือยอดที่จะถูกหักแน่นอน
ค่าประมาณอัตโนมัติของวอลเล็ตช่วยให้ส่งธุรกรรมได้โดยไม่ต้องปรับฟิลด์ค่าธรรมเนียมเอง แต่ยังเป็นการคาดการณ์จากสภาพเครือข่าย ณ เวลานั้น จึงไม่รับประกันเวลาหรือค่าใช้จ่ายสุดท้าย เพดานราคาที่ต่ำอาจทำให้ธุรกรรมรออยู่ การเพิ่ม limit หรือทิปโดยไม่เข้าใจการเรียกอาจเพิ่มต้นทุนที่เป็นไปได้โดยไม่แก้ปัญหาจริง ตรวจค่าปัจจุบันและลงนามเมื่อเข้าใจธุรกรรมแล้วเท่านั้น
คำอธิบายนี้ครอบคลุมเส้นทางธุรกรรมมาตรฐานบน Ethereum mainnet เลเยอร์ 2 หรือบล็อกเชนอื่นอาจแสดงค่าธรรมเนียมข้อมูลเพิ่มเติม ใช้สินทรัพย์อื่นชำระ หรือคิดค่าธรรมเนียมต่างออกไป อย่านำสูตรของ Ethereum ไปใช้กับเครือข่ายอื่นโดยไม่ตรวจเอกสารประกอบ ดูเรื่องเครือข่ายปลายทางและที่อยู่ได้ที่ รายการตรวจสอบการโอนคริปโต และเรื่องสิทธิ์แยกต่างหากที่สัญญาอาจใช้โทเคนได้ที่ คู่มือการอนุมัติโทเคน
คำถามที่พบบ่อย
Q1ทำไมธุรกรรมที่ล้มเหลวจึงยังอาจเสีย ETH?
หากธุรกรรมถูกบรรจุในบล็อกและเริ่มประมวลผลแล้ว การคำนวณอาจใช้แก๊สแม้การเปลี่ยนสถานะจะถูกย้อนกลับ ตรวจ transaction hash เพื่อแยกความล้มเหลวระหว่างประมวลผลจากการปฏิเสธก่อนบรรจุ
Q2maxFeePerGas คือราคาแก๊สจริงที่วอลเล็ตแสดงใช่ไหม?
ไม่ใช่ เป็นเพดานราคาต่อหน่วย ราคาแก๊สที่มีผลรวม base fee ของบล็อกที่บรรจุธุรกรรมกับทิปที่ยังอยู่ใต้เพดาน ดังนั้นธุรกรรมอาจจ่ายต่ำกว่าค่าสูงสุด
Q3ธุรกรรมบน Ethereum mainnet จ่ายค่าแก๊สเป็น ETH หรือไม่?
ธุรกรรมมาตรฐานบน Ethereum mainnet จ่ายค่าแก๊สเป็น ether ซึ่งเป็นสินทรัพย์ประจำเครือข่าย หากวอลเล็ตแสดงโทเคนอื่นหรือผู้สนับสนุนรายที่สาม ให้ตรวจว่ามีกลไกชำระค่าธรรมเนียมแยกต่างหากหรือไม่ เครือข่ายอื่นอาจใช้กฎต่างกัน
แหล่งข้อมูลและการอ่านเพิ่มเติม
รายงานปัญหา
เราจะเตรียมอีเมลพร้อมลิงก์บทความนี้ Mark จะได้รับรายงานเมื่อคุณส่งอีเมลแล้วเท่านั้น
ตรวจสอบอย่างรวดเร็ว
อ่านคู่มือจบแล้ว ลองตอบคำถาม 3 ข้อ
คำถาม 01
gasLimit หมายถึงอะไร?
เลือกคำตอบเพื่อดูคำอธิบาย