Gas, Gas Price, Gas Limit คืออะไรใน Ethereum?

Pongsatorn Nitithammawoot
KULAPofficial
Published in
2 min readApr 30, 2019

ก่อนจะไปคำถามที่ว่า Gas คืออะไรใน Ethereum ต้องขอเล่าหน้าที่ของ Miner ก่อนซักเล็กน้อย

ใน Blockchain Network ต่าง ๆ ไม่ว่าจะเป็น Bitcoin, Ethereum หรือ อื่น ๆ (ที่ใช้ POW) จะมี Miner เพื่อคอยตรวจสอบข้อมูลของแต่ละ Transaction เพื่อนำ Transaction เหล่านั้นเข้า Block แล้วไปต่อกับ Block ก่อนหน้าจึงกลายเป็น Blockchain ซึ่งการทำหน้าที่ตรงนี้มีต้นทุนเกิดขึ้นจากการทำสิ่งที่เรียกว่า Proof of work (POW) โดยการใช้คอมพิวเตอร์มาคำนวนเพื่อแก้สมการบางอย่างแข่งกับเหล่า Miner ทั่วโลกเพื่อหาว่าใครจะได้เป็นผู้สร้าง Block นั้น

เมื่อเกิดการแข่งขันที่มีต้นทุน แน่นอนว่าสิ่งที่ตามมาคือ “ค่าธรรมเนียม”

โดยผู้ใช้ในระบบ Ethereum หรือ Blockchain อื่น ๆ จะต้องเป็นคนจ่ายค่าธรรมเนียมให้กับ Miner ที่ทำการตรวจสอบ Transaction ของตัวเองและนำ Transaction นั้นเข้า Block

ในระบบของ Blockchain จะค่อนข้างเป็นทุนนิยมเพราะ Miner มักจะทำการเลือก Transaction ที่ให้ค่าธรรมเนียมเยอะ ๆ มาทำก่อน แปลว่าใครจ่ายเยอะก็จะได้ตรวจสอบก่อน (Note: Miner สามารถเลือกได้ 3 แบบ 1. ค่าธรรมเนียมมากที่สุด 2. เลือกธุรกรรมที่จะขุดเองเลย 3. สุ่มเลือก :ขอบคุณข้อมูลจากพี่ Samret Wajanasathian)

ซึ่งใน Ethereum Network เรียกค่าธรรมเนียมนี้ว่า “Gas”

ซึ่งการคำนวน Gas ของ Ethereum จะประกอบไปด้วย 2 ตัวแปรคือ

  1. Gas Limit = จำนวน Gas สูงสุดที่ผู้ใช้ยอมรับได้ในการประมวลผล Transaction นั้น ๆ ซึ่งการคิด Gas จะคิดจาก EVM Operations ที่เกิดขึ้นจริง
  2. Gas Price = ราคาของ Gas ต่อหน่วยที่ผู้ใช้ยอมจ่ายให้กับ Miner ในการประมวลผล Transaction นั้น ๆ โดยมีหน่วยเป็น gwei (Giga wei) ซึ่ง 1 wei มีค่าเท่ากับ 1 wei = 1 ETH / 10 ^ 18ดังนั้น gwei ก็คือ 1 gwei = 1 ETH / 10 ^ 9 หรือ 1 gwei = 1 wei * 10 ^ 9 นั้นเอง

โดยจำนวน Gas ที่ใช้จะคิดตามความซับซ้อนของแต่ละ Transaction ไม่จำเป็นว่าจะต้องใช้เท่ากับ Gas Limit เสมอไป เช่น เราใส่ Gas Limit ไว้ 21000 แต่ใช้จริง ๆ แค่ 12000 (Gas Used) เราก็จะจ่ายค่าธรรมเนียมที่ 12000 คูณกับ Gas Price การคำนวนค่า Gas ของแต่ละ Transaction จะเป็นดังนี้

Fee = GasUsed * GasPrice

และหากว่าค่า Gas ที่ต้องใช้มากกว่า Gas Limit แล้ว Transaction นั้นก็จะ Error และจะถูกเก็บค่าธรรมเนียมฟรี ๆ

ตัวอย่างเช่น

นาย ก ทำการส่ง Token ABC ไปยัง นาย ข จำนวน 10 ABC โดยผ่าน function transfer ของ smart contract ABC ที่เป็น ERC20

โดย นาย ก ใส่ค่า Gas ไว้ที่

  • Gas Limit = 30000
  • Gas Price = 5 gwei

แต่ใช้ Gas จริง ๆ ที่ 21000 ค่าธรรมเนียมจึงเท่ากับ
21000 * (5 * 10 ^ 9) โดยที่ 5 * 10 ^ 9 คือการแปลง gwei ไปเป็น wei

= 105,000,000,000,000 wei
หรือเท่ากับ 0.000105 ETH (105,000,000,000,000 / 10 ^ 18)

ยังงงอยู่ไหมครับ ? ถ้ายังงงอยู่ผมจะลองสมมุติตัวอย่างง่าย ๆ

ลองสมมุติว่า Miner เป็นคนขับรถ และมีคนต้องการว่าจ้างคนขับรถให้ขับรถจากกรุงเทพไปส่งที่เชียงใหม่ โดยมีข้อแม้ว่าคนขับจะต้องใช้น้ำมันไม่เกิน 100 ลิตร (GasLimit) และจะจ่ายค่าน้ำมันให้ลิตรละ 50 บาท (GasPrice) แต่เมื่อขับไปถึงเชียงใหม่แล้วกลับใช้น้ำมันแค่ 75 คนขับรถจึงบอกว่างั้นจ่ายมาแค่ 75 * 50 บาทก็พอ

แต่หากว่าน้ำมันที่เติมไป 100 ลิตรดันหมดกลางทางการเดินทางครั้งนี้ก็จะล้มเหลว ( เปรียบได้เหมือนกับ Transaction นี้จะ Error)

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

--

--