เรียนรู้เกี่ยวกับประเภทธุรกรรมใหม่บน Ethereum ในบทความเดียว
บทความนี้มาจากMycryptoบทความนี้มาจาก

ผู้เขียนต้นฉบับ: Maarten Zuidhoorn เรียบเรียงโดย Katie Ku นักแปล Odaily
มีธุรกรรมหลายประเภทบน Ethereum เช่น การส่ง ETH ไปยังที่อยู่ การปรับใช้สัญญา และอื่นๆ ก่อนการอัปเกรดเครือข่ายเบอร์ลิน มีธุรกรรมสี่ประเภทที่แตกต่างกันบน Ethereum:
ธุรกรรมปกติกับที่อยู่ที่รับข้อมูล ฟิลด์ข้อมูล ฯลฯ
สำหรับธุรกรรมการปรับใช้สัญญาโดยไม่มีที่อยู่ปลายทาง ฟิลด์ข้อมูลจะใช้สำหรับรหัสสัญญา
ธุรกรรมด้วยวิธีลายเซ็น v-value แต่ไม่รวม chain ID (pre-EIP-155)
ธุรกรรมที่มีลายเซ็น v-value แต่รวม chain ID
ไคลเอนต์ Ethereum ห้องสมุดและเครื่องมืออื่น ๆ ที่แตกต่างกันวิเคราะห์ธุรกรรมแต่ละรายการและทำความเข้าใจธุรกรรมแต่ละประเภท แม้ว่าธุรกรรมจะมีเพียงสี่ประเภท แต่ก็มีความซับซ้อนและสถานการณ์มากมายที่ต้องจัดการ ช่างเทคนิคควรตรวจสอบฟิลด์ทั้งหมดในธุรกรรมเพื่อดูว่าเป็นธุรกรรมประเภทใด นี่เป็นกุญแจสำคัญสำหรับธุรกรรมประเภทใหม่ เช่น ประเภทธุรกรรมก่อน EIP-2718 เช่น ธุรกรรมเมตาและธุรกรรมหลายซิก
ในบทความนี้ เราจะให้รายละเอียดเกี่ยวกับมาตรฐานบางส่วนที่รวมอยู่ในการอัปเกรดเบอร์ลิน รวมถึงมาตรฐานอื่นๆ ที่อาจมีในอนาคต
ชื่อเรื่องรอง
ซองธุรกรรมมาตรฐาน
RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])
Ethereum มีรูปแบบการทำธุรกรรม ธุรกรรมแต่ละรายการรวมถึง nonce, ราคาก๊าซ, ขีดจำกัดก๊าซ, ที่อยู่ปลายทาง, มูลค่า, ข้อมูล, v, r และ s ฟิลด์เหล่านี้เข้ารหัส RLP ดังนี้:
TransactionType || TransactionPayload
EIP-2718 กำหนดขอบเขตกว้างใหม่สำหรับธุรกรรมประเภท ในมาตรฐานใหม่ ธุรกรรมมีลักษณะดังนี้:
โดยที่ฟิลด์ถูกกำหนดเป็น:
ประเภทธุรกรรม: ตัวเลขระหว่าง 0 ถึง 0x7f มีทั้งหมด 128 ประเภทธุรกรรมที่เป็นไปได้
เพย์โหลดของธุรกรรม: อาร์เรย์ไบต์ตามอำเภอใจตามที่กำหนดโดยประเภทธุรกรรม
ฟิลด์เหล่านี้เชื่อมต่อกันและรวมกันเพื่อสร้างธุรกรรมประเภทหนึ่ง มาตรฐานไม่ได้อธิบายถึงรูปแบบของเพย์โหลดของธุรกรรม มันสามารถเป็นชุดของไบต์ใดก็ได้ตามอำเภอใจ เข้ารหัสโดยตัวเข้ารหัสที่กำหนดโดยประเภทธุรกรรมใหม่ (เช่น RLP, SSZ เป็นต้น) เลือกการต่อข้อมูลไบต์อย่างง่ายเนื่องจากการอ่านไบต์แรกของอาร์เรย์ไบต์ไม่ต้องการไลบรารีหรือเครื่องมือใดๆ คุณไม่จำเป็นต้องใช้โปรแกรมแยกวิเคราะห์ RLP หรือ SSZ เพื่อตรวจสอบประเภทธุรกรรม
ตัวอย่างที่ดีของความซับซ้อนที่เพิ่มขึ้นคือ EIP-155 ซึ่งแนะนำการป้องกันการตอบกลับโดยใช้รหัสลูกโซ่ในการทำธุรกรรม การเพิ่มฟิลด์ใหม่ให้กับพารามิเตอร์การทำธุรกรรมจะทำลายความเข้ากันได้แบบย้อนหลัง ดังนั้น chain ID จะถูกเข้ารหัสในพารามิเตอร์การกู้คืน (v) ของลายเซ็นการทำธุรกรรม (v) ด้วย EIP-2718 เราสามารถสร้างประเภทธุรกรรมใหม่เพื่อรักษาความเข้ากันได้แบบย้อนหลัง
ชื่อเรื่องรอง
ความเข้ากันได้ย้อนหลังและธุรกรรมดิบ
ธีมใหญ่ของ EIP-2718 คือความเข้ากันได้แบบย้อนกลับ EIP-2718 อยู่ในโหมดความเข้ากันได้แบบย้อนกลับเต็มรูปแบบ ซึ่งหมายความว่าเครื่องมือ ไลบรารี กระเป๋าเงิน (ฮาร์ดแวร์) และธุรกรรมใดๆ ที่มีอยู่สามารถใช้งานได้ แต่จะไม่สามารถใช้ "คุณสมบัติ" ใหม่ที่มีให้โดย EIP-2718 และมาตรฐาน . รูปแบบธุรกรรมเก่า (ปัจจุบันเรียกว่าธุรกรรมดิบ) ยังคงใช้ได้สำหรับธุรกรรมใหม่บนเครือข่าย Ethereum
จำนวนสูงสุดของประเภทธุรกรรมใหม่ 0x7f ถูกเลือกเพื่อรักษาความเข้ากันได้ย้อนหลังกับธุรกรรมเก่าเหล่านี้ ธุรกรรมที่เข้ารหัส RLP มักจะเริ่มต้นด้วยไบต์ที่ l และพารามิเตอร์มากกว่าหรือเท่ากับ 0xc0 ดังนั้นธุรกรรมที่พิมพ์จะไม่ชนกับธุรกรรมเก่า และธุรกรรมที่พิมพ์สามารถแยกความแตกต่างได้เพียงแค่ตรวจสอบไบต์แรกและธุรกรรมเก่า
EIP-2718 เองไม่ได้กำหนดประเภทธุรกรรมใด ๆ แต่มีข้อเสนอบางประการสำหรับมาตรฐานใหม่:
EIP-1559: การเปลี่ยนแปลงค่าธรรมเนียมตลาดเชน ETH1.0;
EIP-2711: การสนับสนุน การหมดอายุ และธุรกรรมแบบกลุ่ม ซึ่งสร้างโดยนักพัฒนา Micah Zoltu ซึ่งเป็นเหตุผลว่าทำไม EIP-2718 จึงถูกสร้างขึ้น
บางส่วนของเกณฑ์เหล่านี้มีรายละเอียดเพิ่มเติมด้านล่าง
ชื่อเรื่องรอง
เหตุใดจึงจำเป็นต้องมีประเภทธุรกรรมใหม่
EIP-2711 เพิ่มฟังก์ชันนี้ในเครือข่าย Ethereum ในขณะที่รักษาความเข้ากันได้ย้อนหลังกับธุรกรรมประเภทดั้งเดิม (ตามที่อธิบายไว้ในส่วนก่อนหน้า) ไม่จำเป็นต้องมีสัญญาอัจฉริยะหรือโหนดเฉพาะในการรัน อย่างไรก็ตาม ปัจจุบัน EIP-2711 ยังคงเป็นฉบับร่างและยังไม่ชัดเจนว่า EIP นี้จะเข้าร่วมเครือข่าย Ethereum ในเร็วๆ นี้หรือไม่ นอกจากนี้ยังอาจแบ่งออกเป็น EIP ขนาดเล็กหลายรายการ (เช่น EIP-3074)
ชื่อเรื่องรอง
รูปแบบธุรกรรมใหม่สำหรับ EIP-1559
0x02 || RLP([chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, accessList, signatureYParity, signatureR, signatureS])
ใน EIP-1559 วิธีการทำงานของแก๊สได้เปลี่ยนไปอย่างมาก แทนที่จะจ่ายก๊าซทั้งหมดให้กับคนงานเหมือง ก๊าซส่วนหนึ่งจะถูกเผา เราไม่ได้ให้รายละเอียดการเปลี่ยนแปลงทั้งหมดใน EIP-1559 แต่ระบุรูปแบบธุรกรรมใหม่:
การเปลี่ยนแปลงที่โดดเด่นที่สุดคือ:
ราคาก๊าซถูกแทนที่ด้วย "ค่าธรรมเนียมลำดับความสำคัญสูงสุดต่อก๊าซ" และ "ค่าธรรมเนียมสูงสุดต่อก๊าซ"
รหัสเชนถูกเข้ารหัสแยกกันแทนที่จะรวมอยู่ในค่า v ลายเซ็น สิ่งนี้แทนที่ EIP-155 เป็นหลักด้วยการใช้งานที่ง่ายกว่า
ค่าลายเซ็น v ตอนนี้เป็นพาริตีบิตอย่างง่าย ("พาริตี Y ลายเซ็น") ซึ่งเป็น 0 หรือ 1 ขึ้นอยู่กับว่าควรใช้จุดใดบนเส้นโค้งวงรี
เนื่องจาก EIP-1559 เปลี่ยนแปลงวิธีการทำงานของค่าธรรมเนียมก๊าซอย่างมีนัยสำคัญ จึงไม่สามารถใช้งานร่วมกับธุรกรรมดิบได้โดยตรง เพื่อรักษาความเข้ากันได้ย้อนหลัง EIP-1559 อธิบายวิธีการอัปเกรดธุรกรรมดิบเป็นธุรกรรมที่เข้ากันได้กับ EIP-1559 โดยใช้ราคาก๊าซดิบเป็นค่าธรรมเนียมลำดับความสำคัญสูงสุดและค่าธรรมเนียมก๊าซสูงสุดต่อก๊าซ
ชื่อเรื่องรอง
ธุรกรรมเมตาดิบและธุรกรรมแบทช์
Metatransactions มีมาสองสามปีแล้ว แต่จนถึงตอนนี้ก็ยังต้องใช้สัญญาอัจฉริยะ เช่นเดียวกับธุรกรรมที่หมดอายุ จำเป็นต้องส่ง ETH ไปยังสัญญาอัจฉริยะ ซึ่งต้องรองรับธุรกรรมเมตาโดยเฉพาะ
0x02 || RLP([...SenderPayload, ...SenderSignature, ...GasPayerPayload, ...GasPayerSignature])
EIP-2711 เปิดใช้งานธุรกรรมเมตาแบบเนทีฟ (เรียกว่าธุรกรรมที่ได้รับการสนับสนุน) และธุรกรรมแบบแบตช์โดยไม่จำเป็นต้องใช้สัญญาอัจฉริยะ รูปแบบธุรกรรมใหม่ถูกกำหนดด้วยประเภทธุรกรรม 0x02 (แม้ว่าจะอาจมีการเปลี่ยนแปลงเนื่องจาก EIP-1559 ใช้ประเภทธุรกรรมเดียวกัน) การทำธุรกรรมมีดังนี้:
[1, ChildTransaction[], nonce, ChainId, ValidUntil, gasLimit, gasPrice]
โดยพื้นฐานแล้ว EIP-2711 จะมีส่วนบรรทุก (ทางเลือก) และลายเซ็นของผู้จ่ายก๊าซ บัญชีนี้จะใช้ในการชำระค่าก๊าซในการทำธุรกรรม ตัวอย่างเช่น สามารถส่งโทเค็น ERC-20 จากที่อยู่โดยที่ที่อยู่นั้นไม่มี ETH เพย์โหลดของผู้ส่ง ลายเซ็น ฯลฯ ถูกกำหนดตามประเภทย่อยของธุรกรรม ตัวอย่างเช่น สำหรับธุรกรรมที่มีประเภทธุรกรรม 1 เพย์โหลดของผู้ส่งถูกกำหนดเป็น:
ชื่อเรื่องรอง
สรุป
สรุป
ธุรกรรมแบบพิมพ์ทำให้เครือข่าย Ethereum มีความเป็นไปได้มากมาย สามารถสร้างได้โดยไม่ต้องเพิ่มความซับซ้อนให้กับไคลเอนต์ Ethereum ไลบรารี และเครื่องมืออื่น ๆ ที่มีให้


