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

ความคิดเห็น: EVM โดยไม่ต้องกำหนดเวอร์ชัน

星球君的朋友们
Odaily资深作者
บทความนี้มีประมาณ 1576 คำ การอ่านทั้งหมดใช้เวลาประมาณ 3 นาที
หากเรามีโอกาสออกแบบ EVM ใหม่ ปรับปรุงความเข้ากันได้แบบย้อนกลับ ทำให้เป็นมิตรกับการอัปเกรด
สรุปโดย AI
หากเรามีโอกาสออกแบบ EVM ใหม่ ปรับปรุงความเข้ากันได้แบบย้อนกลับ ทำให้เป็นมิตรกับการอัปเกรด

หมายเหตุบรรณาธิการ: บทความนี้มาจากผู้ที่ชื่นชอบ Ethereum (ID: Ethfans)หมายเหตุบรรณาธิการ: บทความนี้มาจาก

ผู้ที่ชื่นชอบ Ethereum (ID: Ethfans)

ผู้เขียน: Wei Tang แปล: A Jian พิมพ์ซ้ำโดย Odaily โดยได้รับอนุญาต

หากเรามีโอกาสออกแบบ EVM ใหม่ ปรับปรุงความเข้ากันได้แบบย้อนกลับ ทำให้เป็นมิตรกับการอัปเกรดฟีเจอร์มากขึ้น และเพิกเฉยต่อสัมภาระในอดีตที่เรามีอยู่โดยสิ้นเชิง เราจะทำอย่างไร

ในบทความนี้ ฉันจะสำรวจคำถามนี้และบันทึกคำอธิบายทางเทคนิคและปรัชญาการออกแบบที่พัฒนาขึ้นจากคำถามนี้

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

เว็บไม่มีเวอร์ชันและมีมานานหลายทศวรรษแล้ว ดังนั้นฉันคิดว่าเราต้องการสร้าง EVM ที่ไม่มีความแตกต่างของเวอร์ชัน

เราต้องการให้แน่ใจว่าเครื่องเสมือนนี้มีความเข้ากันได้แบบย้อนหลังที่ดี (นี่เป็นคุณสมบัติที่จำเป็น) กล่าวคือ อย่างน้อยก็สามารถเข้ากันได้ดีกับสัญญาที่มีอยู่ของเรา (ใน EVM ปัจจุบัน แม้แต่การเปลี่ยนแปลงปริมาณการใช้ก๊าซของ opcode เดียวก็อาจทำลายสัญญาที่มีอยู่ได้) และสามารถเพิ่มฟังก์ชันใหม่ได้อย่างง่ายดาย

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

opcode ไม่ถูกต้อง

  • การเปลี่ยนแปลงที่ง่ายที่สุดและอาจสำคัญที่สุดในการออกแบบ EVM แบบถาวรคือการเพิ่มกระบวนการตรวจสอบสำหรับการปรับใช้สัญญา ลำดับไบต์ทั้งหมดไม่ใช่รหัส EVM ที่ถูกต้อง และรหัส opcode ที่ไม่ถูกต้องใดๆ ไม่ควรปรับใช้กับห่วงโซ่ เนื่องจากในอนาคต รหัสเหล่านี้อาจถูกกำหนดให้เป็นรหัส opcode ใหม่ที่มีฟังก์ชันอื่น

  • รายละเอียดทางเทคนิคของการตรวจสอบนี้ได้รับการบันทึกไว้เป็นครั้งแรกใน EIP-1712 โดยสังเขป ก่อนดำเนินการฟังก์ชันการเปลี่ยนสถานะที่สร้างโดยสัญญา (หรือเพิ่มรหัสสัญญาให้กับสถานะ) จะดำเนินการตรวจสอบต่อไปนี้:

  • ข้าม bytecode ของรหัส

  • หากรหัสเป็นรหัส opcode PUSH(n) ให้ข้าม n ไบต์ถัดไป

มิฉะนั้นจะเกิดข้อผิดพลาด (กับดัก)

การตรวจสอบข้างต้นค่อนข้างคล้ายกับการตรวจสอบปลายทางข้าม โปรดทราบว่าสำหรับข้อยกเว้น เราใช้ "กับดัก" ที่นี่ ซึ่งเราจะอธิบายรายละเอียดด้านล่าง

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

โพรบคุณลักษณะ

  • หาก EVM คือการปรับความแตกต่างของเวอร์ชันให้ราบรื่น การเรียกใช้โค้ดที่ใช้ EVM ควรมีความสามารถในการตรวจสอบว่าสภาพแวดล้อมพื้นฐานสนับสนุนคุณลักษณะเฉพาะหรือไม่ ด้วยบทบาทของ EVM เราหวังเสมอว่าการทำงานของ opcode ที่กำหนดไว้แล้วจะไม่เปลี่ยนแปลง และ opcode ใหม่จะถูกนำมาใช้เพื่อเพิ่มฟังก์ชันการทำงาน และอาจมีการใช้สัญญาบางอย่างก่อนที่จะแนะนำฟังก์ชันบางอย่าง สัญญาเหล่านี้สามารถกำหนดเวลารูทีนย่อยทางเลือกให้ทำงานเมื่อ EVM ไม่รองรับฟีเจอร์ และเริ่มใช้ฟีเจอร์ใหม่ทันทีที่ฮาร์ดฟอร์กเปิดใช้งาน องค์ประกอบการตรวจสอบการทำงานเป็นเหมือนจัมเปอร์ที่จะใช้ที่นี่

  • opcode นี้ใช้อาร์กิวเมนต์สแต็ก จะตรวจสอบว่าพารามิเตอร์อยู่ระหว่าง 0 ถึง 2^8 หรือไม่ และจับข้อผิดพลาดหากไม่ใช่

หากไม่สนับสนุนอาร์กิวเมนต์ (ตีความว่าเป็น opcode) ให้กด 0x0 กลับเข้าไปในสแต็ก หรือกด 0x1

ข้อยกเว้นและกับดัก

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

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

ปริมาณการใช้ก๊าซ
开发者
ETH
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก:
https://t.me/Odaily_News
กลุ่มสนทนา:
https://t.me/Odaily_GoldenApe
บัญชีทางการ:
https://twitter.com/OdailyChina
สารบัญบทความ
อันดับบทความร้อน
Daily
Weekly
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android