ภาพรวมของแนวคิดการสรุปบัญชีใน Ethereum

ขั้นสูง11/7/2024, 1:34:06 AM
รายงานนี้ให้ภาพรวมของโมเดลบัญชีปัจจุบันของ Ethereum โดยเฉพาะผลกระทบต่อความถูกต้องของธุรกรรม ว่าแนวคิดการสรุปบัญชีหมายถึงอะไร และกรอบการคิดเชิงบัญชีเป็นอย่างไร เราจะโฟกัสที่การเข้าถึงของ EOA ด้วยการประเมิน EIPs 5086, 3074, และ 7702 และสรุปด้วยว่าทั้งหมดนี้มีผลต่ออนาคตของการทำธุรกรรมบน Ethereum อย่างไร

แนวคิดการสรุปบัญชีมุ่งหวังที่จะปรับปรุงประสบการณ์ของผู้ใช้และนักพัฒนาทั่วทั้งระบบ Ethereum พร้อมกับการทำให้ประสบการณ์ในเครือข่ายเป็นไปได้มากขึ้นและสนุกสนานกว่าสำหรับผู้ใช้ นอกจากนี้ยังเพิ่มความสามารถให้แก่นักพัฒนาในการทำสิ่งที่มีประสิทธิภาพมากขึ้นบน Ethereum และให้บริการแก่ผู้ใช้อย่างมีความหมายมากขึ้น

การจัดหมวดหมู่ของวิธีการสรุปบัญชีของเรามีดังนี้:

  1. การเพิ่มประสิทธิภาพ / ความสามารถในการโปรแกรม EOA: ซึ่งรวมถึงการเปลี่ยนแปลงระดับโปรโตคอลที่ช่วยให้ EOA (บัญชีที่เป็นเอกฉันท์) สามารถกำหนดกฎความถูกต้องของตัวเองได้ ตามที่รู้จักกันในวงการพัฒนา EOA มักเป็นบัญชีที่เกี่ยวข้องกับผู้ใช้ท้ายประเภทต่าง ๆ ดังนั้น การแก้ไขปัญหาด้วยวิธีนี้จะช่วยเสริมสร้างความควบคุมของบัญชีผู้ใช้ท้ายโดยให้มีการควบคุมมากกว่าว่าจะจัดการได้ในปัจจุบัน
  2. การแปลง / การย้าย EOA: วิธีการนี้รวมถึงข้อเสนอที่มีวัตถุประสงค์เพื่อแปลง EOA ให้เป็น CA (บัญชีสัญญา) สิ่งที่สำคัญของวิธีการนี้คือบัญชีสัญญาได้รับประโยชน์ส่วนใหญ่ที่เสนอโดยบัญชีสมาร์ท ดังนั้นไม่ควรที่จะซับซ้อนเรื่องใดๆ เพิ่มเติม; ทุกคนควรใช้บัญชีสัญญาเป็นบัญชีหลักของตนเอง (ผ่านกระเป๋าสมาร์ทคอนแทร็ค)

วิธีการนี้มีกลไกที่อนุญาตให้ EOA ทำการเปลี่ยนแปลงเป็น CA โดยไม่ต้องย้ายสินทรัพย์ เช่นEIP 7377และEIP 5003 (เมื่อพิจารณาร่วมกับ EIP 3074)

  1. บัญชีสมาร์ท: กลุ่มของข้อเสนอเหล่านี้รวมถึงการออกแบบที่ทำให้ทั้ง EOAs และ CAs สามารถทำหน้าที่เสมือน "บัญชีสมาร์ท" โดยอนุญาตให้พวกเขาทำใหม่กฎความถูกต้องของพวกเขาอย่างสมบูรณ์

มีข้อเสนอต่าง ๆ ที่ผ่านมาเคยมีการสร้างบัญชีฉลาดและการสรุปบัญชีที่เข้มงวดที่ระดับโปรโตคอล;EIP-86และEIP-2938เป็นบางส่วนของสิ่งที่ถูกอ้างอิงมากขึ้น อย่างไรก็ตาม มีการต่อต้านอย่างมากเนื่องจากความซับซ้อนที่ถูกนำเข้ามาโดยการออกแบบนี้และความคิดเห็นข้างส่วนใหญ่ว่า Ethereum ยังไม่พร้อมสำหรับความซับซ้อนเช่นนี้

หลังจากที่วิทาลิคเปิดเผยเรื่องนี้อีกครั้งหลังจากการผสานERC-4337ได้ถูกเสนอเป็นรุ่นที่เปิดใช้เวอร์ชันของมาตรฐานบัญชีอัจฉริยะที่เป็นการเลือกเข้าใช้งาน เช่นกับโครงสร้าง PBS (Proposer-Builder Separation) สำหรับ MEV (Maximal Extractable Value) ดังนั้นผู้ใช้ที่ต้องการเข้าถึงประโยชน์ของบัญชีอัจฉริยะสามารถใช้ท่อไอพี ERC-4337 เพื่อนิยามตนเองในตรรกะของบัญชีและกฎความถูกต้องของธุรกรรมในโครงสร้างที่เรียกว่า UserOperation (หรือ UserOps สำหรับสั้น)

ERC 4337 นำประโยชน์ของบัญชีอัจฉริยะมาสู่ Ethereum ในปัจจุบันโดยไม่จำต้องตั้งเป็นกฎหมายอย่างซับซ้อน โดยทำหน้าที่เป็นทางเลือกนอกโปรโตคอลสำหรับบัญชีอัจฉริยะที่ตั้งเป็นกฎหมายอยู่ อย่างไรก็ตามนี้ไม่ได้หมายความว่าโครงสร้างพื้นฐานเป็นที่เหมาะสมในสถานะปัจจุบันของมันเอง เนื่องจากความซับซ้อนของมันยังคงเป็นจุดอ่อนที่สำคัญ

เพื่อจัดการกับความซับซ้อนนี้,RIP 7560ถูกเขียนขึ้นในรูปแบบที่ถูกบูรณาการเป็นเวอร์ชันศักยภาพเภท ERC 4337 ทั่ว Ethereum และ L2s ซึ่งทำให้รับมรดกจากระบบเครือข่ายการต้านสิบิลของเครือข่ายแทนที่จะต้องกำหนดชุดกฎระเบียบใหม่ (เช่น ERC 4337 ทำกับ ERC 7562)

ในรายงานนี้เราจะเน้นการสำรวจความสามารถในการโปรแกรม EOA การประเมินผลวิธีต่างๆ ที่อธิบายวิธีการแก้ไขปัญหาในบรรทัดนี้และอภิปรายคุณสมบัติและข้อเสียของแต่ละวิธีการ ในส่วนที่ 2 และ 3 ของซีรีย์นี้เราจะพูดถึงวิธีการแก้ไขปัญหาในกลุ่มอื่น ๆ สองของแนวคิดการสรุปบัญชีที่กำลังสำรวจอยู่ใน Ethereum

คู่มือเบื้องต้นเกี่ยวกับบัญชีและธุรกรรม Ethereum

เพื่อหาสิ่งที่สามารถถอดรายละเอียดได้ เราต้องมีภาพรวม (บางส่วน) ของการออกแบบบัญชีปัจจุบัน ส่วนนี้จะบริการเป็นการทบทวนของบัญชีบน Ethereum และวิธีที่ธุรกรรมของพวกเขาถูกตรวจสอบและดำเนินการ

บัญชี Ethereum เป็นส่วนประกอบที่มียอดเงิน ether (ETH) และความสามารถในการส่งธุรกรรมบนบล็อกเชน Ethereum พวกเขาถูกแทนด้วย "ที่อยู่" ฐานสิบหก ตัวอักษรฮีกซาเดึกซิมัล ซึ่งทำหน้าที่เป็นตัวชี้ที่ไม่ซ้ำซากของสิทธิ์การถือครองและธุรกรรมของบัญชี

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

  1. nonce: เคาน์เตอร์เชิงเส้นที่ใช้เพื่อแสดงจำนวนการทำธุรกรรมออกจากบัญชี นอกจากนี้ยังเป็นสิ่งสำคัญในการป้องกันการโจมตีแบบเล่นซ้ำ
  2. balance: จำนวน ether (ETH) ที่มีค่าในหน่วย wei ที่เป็นเจ้าของโดยบัญชี
  3. codeHash: แฮชของรหัสปฏิบัติการ EVM ที่มีอยู่ในบัญชี EVM (Ethereum Virtual Machine) เป็นสภาพแวดล้อมการดําเนินการตามความต้องการของ Ethereum ที่รับผิดชอบในการจัดการการเปลี่ยนสถานะที่ซับซ้อนนอกเหนือจากธุรกรรม "ส่ง" อย่างง่าย เนื้อหารหัสของบัญชีได้รับการตั้งโปรแกรมอย่างไม่เปลี่ยนแปลงเพื่อดําเนินการเปลี่ยนสถานะในรูปแบบเฉพาะบน Ethereum blockchain ผ่าน EVM
  4. storageHash: การเข้ารหัสของรากการจัดเก็บบัญชี ใช้เพื่อแทนเนื้อหาการจัดเก็บของบัญชีในรูปแบบของการเข้ารหัส 256 บิตของต้นไม้ merkle patricia trie's root node อย่างง่าย ๆ คือการเข้ารหัสของข้อมูลตัวแปรสถานะที่เกี่ยวข้องกับเนื้อหาของโค้ดบัญชี

เนื้อหาของสี่ฟิลด์เหล่านี้ถูกใช้ในการกำหนดประเภทของบัญชีและในที่สุดก็ไปสู่การกำหนดขอบเขตของความสามารถของมัน ดังนั้น ประเภทของบัญชี Ethereum มีสองประเภท:

  1. บัญชีที่เป็นเจ้าของภายนอก (EOAs) - ซึ่งถูกเริ่มต้นในรูปแบบคีย์คริปโตกราฟิก:
  • คีย์ส่วนตัวที่เป็นตัวเข้ารหัสและมีลักษณะสุ่มได้อย่างเป็นพิสัย 64 อักขระฮ็อกซ์ และคู่ค้าของมัน;
  • คีย์สาธารณะที่ได้รับจากคีย์ส่วนตัวโดยใช้ ECDSA (Elliptic Curve Digital Signature Algorithm)

EOAs มีฟิลด์ codeHash และ storageHash ที่ว่างเปล่าและสามารถควบคุมได้โดยทุกคนที่มีคีย์ส่วนตัวเท่านั้น ที่อยู่ของพวกเขาสามารถรับได้จากคีย์สาธารณะที่เกี่ยวข้องโดยนําหน้า "0x" เป็นอักขระยี่สิบตัวสุดท้ายของแฮช keccak-256 ของคีย์สาธารณะของบัญชี

  1. บัญชีสัญญา (CAs) - ซึ่งสามารถสร้างได้เฉพาะโดย EOA ที่มีอยู่ก่อน การเริ่มต้นเกิดจาก EOA การจัดลงโค้ดที่สามารถดำเนินการบน EVM โค้ดเนื้อหา (ที่จัดเก็บเป็น codeHash) ถูกฝังอยู่ใน EVM และรับผิดชอบการควบคุมบัญชีโดยกำหนดตรรกะและการติดต่อของมัน

ธุรกรรมของพวกเขาเป็นระบบดึงเอาเท่านั้นและขึ้นอยู่กับตรรกะของรหัสที่พวกเขาประยุกต์ใช้

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

ที่อยู่ของ CA ได้รับการสร้างขึ้นจากที่อยู่ผู้สร้างและ nonce ของมันจนถึงจุดที่สัญญาถูกติดตั้ง

ธุรกรรม

เร็ว ๆ นี้เราได้อธิบายบัญชีเป็นสิ่งที่มีความสามารถในการส่งธุรกรรมข้าม Ethereum ดังนั้นเราสามารถเข้าใจได้ว่าจุดประสงค์หลักของบัญชีคือการส่งและรับธุรกรรม ในขณะที่บล็อกเชนทำหน้าที่เป็นสมุดรายชื่อที่บันทึกประวัติธุรกรรมและอธิบายวิธีการเปลี่ยนแปลงเขตข้อมูลบัญชีตามกฎหมายที่อธิบายไว้ในข้อกำหนดโปรโตคอลบล็อกเชน

ดังนั้น "ธุรกรรม" เหล่านี้คืออะไร?

ธุรกรรมคือการดำเนินการที่ส่งมาจากบัญชี ซึ่งทำให้เกิดการเปลี่ยนแปลงใน “สถานะ” ของเครือข่าย พวกเขาคือคำสั่งที่ถูกเข้ารหัสด้วยวิธีการสัญลักษณ์จากบัญชี ซึ่งส่งผลให้เกิดการอัพเดตสถานะทั่วเครือข่ายเมื่อถูกปฏิบัติ

การได้รับอนุญาตโดยไม่จำเป็นต้องเสียค่าสิ่งที่ผิดหวังเกิดขึ้น การจัดการกับสิ่งเหล่านี้จำเป็นต้องกำหนดหลักเกณฑ์ที่เข้มงวด (หรือกฎความถูกต้อง) สำหรับการปฏิสัมพันธ์ในสภาวะเช่นนี้

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

บัญชีและความถูกต้องของธุรกรรม

บน Ethereum บัญชีผู้ใช้จะถูกปรับแต่งให้ใช้งานง่าย เนื่องจากมีการติดต่อกับผู้ใช้สุดท้าย พวกเขาสามารถส่งธุรกรรมในลักษณะที่เฉพาะเจาะจงและทำงานอิสระได้อย่างสมบูรณ์ พวกเขายังสามารถสร้างขึ้นในรูปแบบท้องถิ่น วิธีที่พบบ่อยคือการใช้ผู้ให้บริการกระเป๋าเงิน เช่น MetaMask, Rainbow, Rabby เป็นต้น

อีกด้านหนึ่ง บัญชีสัญญาสามารถส่งธุรกรรมที่ได้รับอนุญาตจากตรรกะของตัวเองเท่านั้น ตามคำเรียกเข้ามา นอกจากนี้ สามารถสร้างได้เฉพาะโดย EOA ที่มียอดเงินเพียงพอในการชำระเงินสำหรับการจัดเก็บสถานะของมัน

คำอธิบายระดับสูงกว่านั้นคือ EOAs สามารถเก็บยอดคงเหลือได้เท่านั้น ในขณะที่ CAs สามารถเก็บยอดคงเหลือและตรรกะที่กำหนดวิธีการใช้เงินได้

คุณสมบัติเหล่านี้เกิดจากพารามิเตอร์ตรรกะต่อไปนี้ที่กำหนดกฎเกณฑ์ในการดำเนินการของบัญชีที่ต้องปฏิบัติ

  1. ตรรกะการรับรองความถูกต้อง - ใช้ในการกำหนดวิธีที่บัญชีพิสูจน์ตัวตนกับเครือข่ายขณะที่เปลี่ยนยอดเงินและ/หรือตรรกะ
  2. ตรรกะการให้สิทธิ์ - ใช้ในการกำหนดนโยบายการเข้าถึงบัญชี นั่นคือใครสามารถเข้าถึงและทำการเปลี่ยนแปลงยอดเงินและ/หรือตรรกะของบัญชี
  3. ตรรกะของ Nonce - ซึ่งกำหนดลำดับในการดำเนินการธุรกรรมจากบัญชี
  4. ตรรกะการชำระค่า Gas - ใช้กำหนดผู้รับผิดชอบในการชำระค่า Gas สำหรับการตกลงการชำระเงิน
  5. ตรรกะการดำเนินการ - ใช้ในการกำหนดรูปแบบของธุรกรรมที่บัญชีสามารถส่งได้หรือวิธีการดำเนินการของธุรกรรม

พารามิเตอร์เหล่านี้ถูกออกแบบให้เป็นแบบเคร่งครัดสำหรับบัญชีผู้ใช้เท่านั้น:

  • การรับรองและอนุญาตถูกจัดให้โดยคีย์ส่วนตัวที่ใช้ ECDSA นั่นคือผู้ใช้ที่ต้องการที่จะส่งธุรกรรมจากบัญชี EOA ของตนต้องใช้คีย์ส่วนตัวของตนเพื่อเข้าถึงบัญชีและแสดงว่าพวกเขามีสิทธิ์ในการดำเนินการทำการเปลี่ยนแปลงใด ๆ กับยอดเงิน
  • ตรรกะนอนซ์นี้ดำเนินการตามแผนการนับลำดับที่อนุญาตให้มีการดำเนินการเพียงหนึ่งรายการต่อนอนซ์ที่ไม่ซ้ำกันเพื่อดำเนินการต่อเนื่องต่อบัญชี
  • ตรรกะการชำระค่า Gas ระบุว่าค่าธรรมเนียม Gas สำหรับธุรกรรมต้องถูกชำระโดยบัญชีผู้ส่ง/บัญชีต้นทาง
  • ตรรกะการดำเนินการระบุว่า EOAs สามารถส่งแบบธุรกรรมต่อไปนี้เท่านั้น:
  1. การโอนทั่วไประหว่างสองบัญชี EOA
  2. การส่งตัวลงทะเบียน
  3. การเรียกใช้สัญญาที่เป้าหมายถึงตรรกะของบัญชีสัญญาที่ถูกติดตั้ง

โดยทั่วไปแล้ว ตรรกะการดำเนินการของ EOAs จำกัดพวกเขาให้ทำธุรกรรมหนึ่งต่อลายเซ็นต่อมูลค่า

ส่วนอื่น ๆ ก็มีความยืดหยุ่นมากขึ้นเกี่ยวกับพารามิเตอร์เหล่านี้:

  • การตรวจสอบตัวตนไม่จำเป็น เนื่องจากธุรกรรมของพวกเขาเป็นการดึงขึ้นมาตามธรรมชาติ
  • การให้สิทธิ์สำหรับ CA สามารถทำได้ในรูปแบบสองรูปแบบ:
  1. สามารถ "เรียก" โค้ดเนื้อหาของ CAs (หรือดำเนินการสัญญาอัจฉริยะของมัน) ซึ่งขึ้นอยู่กับตรรกะของสัญญาอัจฉริยะของบัญชีและองค์ประกอบของมัน
  2. ความสามารถในการทำการเปลี่ยนแปลงเนื้อหาของภายในรหัส CA ซึ่งขึ้นอยู่กับว่ารหัสเนื้อหาสามารถอัปเกรดได้หรือไม่

ในกรณีที่สามารถปฏิบัติได้มากที่สุด ตรรกะที่ใช้ในกรณีนี้คือ แผนการลายเซ็นที่หลายอย่างที่ระบุว่าจำเป็นต้องมีลายเซ็นที่ถูกต้อง M ของ N (เมื่อ M < N) จากบัญชีที่เฉพาะเจาะจง (โดยทั่วไปจะเป็นบัญชีภายนอก) เพื่อให้การเปลี่ยนแปลงของตรรกะของ CA เป็นไปได้

  • การจัดลำดับธุรกรรมของพวกเขาเชื่อมโยงกันอย่างหลวกหน้าว่าง. CA เองสามารถส่งธุรกรรมไปยังผู้โทรเรียกหลายคนในหลายเรียก เจ้าของแต่ละเรียกจะถูก จำกัด โดยอิงตามความสามารถของตนเอง
  • การชำระเงิน Gas มักถูกจัดการโดยผู้เรียกใช้ตัวตรวจสอบของ CA
  • ตรรกะการดำเนินการของ CAs มีความหลากหลายมากขึ้นเพื่อเปิดโอกาสให้มีการปรับปรุง UX เช่น ธุรกรรม multicall และ ธุรกรรม atomic

ในการประเมินคุณลักษณะเหล่านี้ เราพบว่าทุกประเภทของบัญชีถูกออกแบบให้มีการตัดสินใจระหว่างความอิสระและความสามารถในการโปรแกรม

EOAs มีอิสระอย่างเต็มที่ แต่ความสามารถในการตั้งโปรแกรมได้จํากัด พวกเขาสามารถอนุมัติและส่งธุรกรรมได้ทุกเมื่อที่ต้องการ แต่ธุรกรรมเหล่านี้ต้องเป็นไปตามรูปแบบที่เข้มงวดจึงจะถือว่าถูกต้อง CA มีความสามารถในการตั้งโปรแกรมได้เต็มรูปแบบ (จํากัด โดยการออกแบบของ EVM เท่านั้น) แต่ความเป็นอิสระที่ จํากัด ธุรกรรมของพวกเขาไม่จําเป็นต้องทําตามรูปแบบที่เข้มงวดใด ๆ แต่สามารถส่งออกได้เนื่องจากตรรกะของพวกเขาถูกเรียกก่อน

ในหัวข้อย่อยต่อไปเราจะศึกษาผลกระทบของการเลือกออกแบบเหล่านี้เพื่อเข้าใจเต็มความหมายของการพิจารณาของแต่ละ EIP ที่ได้ถูกพูดถึงในซีรีส์นี้

Ethereum’s account dilemma

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

เหมือนที่เรากล่าวไว้ก่อนหน้านี้ EOAs ถูกออกแบบให้เป็นบัญชีชั้นนำที่เน้นการใช้งานสำหรับผู้ใช้งานสุดท้าย แอปพลิเคชันถูกออกแบบให้สามารถปฏิสัมพันธ์กับบัญชีเหล่านี้ได้อย่างง่ายดาย ไม่มีความซับซ้อนเกือบจะไม่มีค่าใช้จ่ายในการสร้างบัญชีเหล่านี้ อย่างไรก็ตามความเรียบง่ายของมันมาพร้อมกับการสูญเสียความเป็นเอกลักษณ์อย่างมากเนื่องจากถูกออกแบบให้เป็นอัตรายากันอย่างเคร่งครัด

บางส่วนของความกังวลเกี่ยวกับพวกเขาคือ:

  1. ความเสี่ยงต่อการโจมตีด้วยเทคโนโลยีควอนตัม - การใช้ระบบลายเซ็น ECDSA โดยคู่คีย์ของพวกเขาไม่ได้รับการป้องกันจากการโจมตีด้วยเทคโนโลยีควอนตัม และด้วยไทม์ไลน์ที่เหมาะสมอย่างแน่นอนในการที่ระบบควอนตัมสำหรับเชิงอุตสาหกรรมจะถูกพัฒนาขึ้นภายใน 5-10 ปี นี้เป็นอันตรายอย่างมากต่อ Ethereum และแอปพลิเคชันของมันที่พึ่งพากับระบบ ECDSA สำหรับพิสูจน์และรักษาความปลอดภัยทางการเข้ารหัสของมันอย่างมาก
  2. ขาดการแสดงออก - รูปแบบที่มีความเคร่งครัดของกฎความถูกต้องของบัญชีชนิด EOA ทำให้ผู้ใช้ไม่สามารถแสดงการทำธุรกรรมของพวกเขาได้โดยสั้นกระชับมากขึ้นผ่านคุณลักษณะเช่นความอะตอมิคของการทำธุรกรรมแบบ batch และการมอบหมายทำธุรกรรม
  3. ความยั่งยืนในตนเอง – ทุกคนมีส่วนแบ่งที่ยุติธรรมของช่วงเวลา "ฉันหมดแก๊ส" ระหว่างการทําธุรกรรม นี่เป็นเพราะข้อกําหนดที่ EOAs ชําระก๊าซสําหรับการทําธุรกรรมด้วยตนเองซึ่งจะไม่ถามมากนักว่าอีเธอร์ (ETH) ไม่ใช่สกุลเงินก๊าซที่ยอมรับได้เพียงอย่างเดียวหรือไม่ แม้ว่านี่จะเป็นปัญหาทั่วไปเกี่ยวกับเครื่องสถานะตามบัญชี (และแม้แต่เครื่องที่ใช้ UTXO) แต่ Ethereum ก็ตั้งใจที่จะแตกต่างกันเสมอ

ไม่ใช่ทุกคนที่ต้องการ (หรือจะสามารถ) ถือ ETH เสมอ (ฉันหมายถึงดูการเคลื่อนไหวของราคานั้น) ดังนั้นวิธีแก้ปัญหาที่เป็นไปได้คือการอนุญาตให้มีสกุลเงินก๊าซหลายสกุล (ยากเกินไปแบ่งค่าคงที่มากเกินไปตามที่อธิบายไว้ในส่วน "สกุลเงิน" ที่นี่), หรือเพื่ออนุญาตให้การชำระเงินในรูปแบบแก๊สสามารถเรียกเก็บได้โดยบัญชีอื่นที่ไม่ใช่บัญชีต้นทางของธุรกรรม

ในอีกด้านหนึ่งของสเปกตรัมบัญชี CA กําหนดเป้าหมายนักพัฒนาและฐานผู้ใช้ด้านเทคนิคมากขึ้น พวกเขาทําหน้าที่เป็นยานพาหนะสําหรับสัญญาอัจฉริยะ (เช่นเราถือว่าสัญญาอัจฉริยะเป็นเนื้อหาตรรกะหรือรหัสที่มีอยู่) และสามารถใช้รูปแบบธุรกรรมใหม่ตามที่เปิดใช้งานโดย EVM

อย่างไรก็ตาม สำหรับคุณลักษณะเหล่านี้ทั้งหมดพวกเขาก็คือบัญชีชั้นสองที่ได้รับการมองว่าเป็นสิ่งที่ยิ่งใหญ่แต่ก็ไม่มีอิสระ บางข้อเสียของพวกเขามีดังนี้:

  1. ขาดความเป็นอิสระอย่างสมบูรณ์ - CAs ไม่สามารถเริ่มทำธุรกรรมได้ พวกเขาสามารถส่งธุรกรรมออกไปตามการเรียกใช้ในแบบที่เฉพาะเจาะจงเท่านั้น
  2. ความอ่อนไหวต่อข้อผิดพลาดของมนุษย์ในตรรกะของพวกเขา - ความหยิ่งรอบไม่ได้นำไปสู่การกำหนดค่าค่าคงที่ที่ไม่ถูกต้องและตรรกะอื่น ๆ ที่นั้น ซึ่งได้นำไปสู่การสูญเสียมหาศาลเป็นพันล้านดอลลาร์เนื่องจากการใช้ช่องโหว่และการโจมตีสมาร์ทคอนแทรค อย่างไรก็ตาม นี่เป็นเรื่องที่แตกต่างเกือบทั้งหมดซึ่งอยู่พร้อมกันกับขอบเขตของเราที่นี่

หลังจากที่ได้ทบทวนการเลือกออกแบบที่นำไปสู่ปัญหาที่กำหนดไว้ในส่วนย่อยนี้แล้ว เราสามารถดำเนินการประเมินวิธีการที่เสนอ

ไทม์ไลน์ของแนวคิดการสรุปบัญชี

แนวคิดของนามธรรมบัญชี (ผ่านบัญชีอัจฉริยะอย่างน้อย) เป็นส่วนสําคัญของแผนงานของ Ethereum มาโดยตลอด ตํานานคือความซับซ้อนโดยรอบการใช้งานขู่ว่าจะชะลอการเปิดตัวของ Ethereum ต่อไปดังนั้นจึงถูกทิ้งสําหรับการออกแบบปัจจุบันด้วยบัญชีที่แตกต่างกันซึ่งมีฟังก์ชันการทํางานที่แตกต่างกัน มันล่าช้าอีกครั้งโดยการมุ่งเน้นของ Ethereum ใน The Merge และตอนนี้กําลังกลับมาเป็นส่วนหนึ่งของการอัพเกรดครั้งใหญ่ครั้งต่อไปของเครือข่าย Pectra อย่างไรก็ตามความซับซ้อนของมันยังคงถือเป็นข้อเสียเปรียบที่สําคัญที่ป้องกันไม่ให้มีการประดิษฐานโดยเฉพาะอย่างยิ่งเมื่อ Ethereum ได้เปลี่ยนไปใช้แผนงานที่มีการรวบรวมเป็นศูนย์กลาง

ความต้องการขณะนี้เป็นสองส่วน:

  1. มาตรฐานบัญชีต้องมีการแสดงออกมากขึ้น แต่ไม่สูญเสียความอิสระ มาตรฐานใหม่ที่ปิดช่องโหว่ระหว่างมาตรฐาน EOA และ CA
  2. มาตรฐานใหม่จะต้องเชื่อมสะพานระหว่าง EOAs และ CAs โดยยังคงเป็นไปได้ที่สอดคล้องกับ Ethereum และระบบนอ L2 ของมันอย่างสมบูรณ์

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

แนวคิดการสรุปบัญชีมีเป้าหมายที่จะรวมคุณสมบัติที่ดีที่สุดของบัญชีภายในและบัญชีภายนอกเข้าด้วยกันในมาตรฐานบัญชีใหม่ - บัญชีอัจฉริยะ ซึ่งอนุญาตให้มีการแยกแยะสมบัติของบัญชีใดๆ เป็นเต็มหรือบางส่วนเป็นตัวบางอย่างไปยังตรรกะการตรวจสอบและการกระทำ ดังนั้นบัญชีสามารถกำหนดกฎความถูกต้องของตนเองได้ - ตามที่ EVM อนุญาต - อย่างเช่นบัญชีสัญญา ในขณะที่ยังคงเป็นอิสระอย่างเต็มที่เหมือนกับบัญชีที่เป็นเจ้าของภายนอก

มักมีความสับสนเกี่ยวกับความแตกต่างระหว่างบัญชีฉลาดและกระเป๋าเงินสมาร์ทคอนแทร็ค ดังนั้นเราจะอธิบายโดยชัดเจนถึงความแตกต่างเหล่านี้ด้านล่าง

  • บัญชีฉลาดคือบัญชี Ethereum ที่ถูกสร้างขึ้นเพื่อให้มีความสามารถในการโปรแกรมและอิสระในการดำเนินการเทียบเท่ากัน ความคิดคือทั้งสอง บัญชีบุคคล (EOAs) และ บัญชีค่า (CAs) สามารถกลายเป็นบัญชีฉลาดได้โดยง่ายๆ โดยการใช้กลไกบางอย่าง (เช่น ERC 4337) ที่อนุญาตให้พวกเขาแทนกฎความถูกต้องที่ถูกบังคับจากเครือข่ายด้วยกฎความถูกต้องที่ทำขึ้นเพื่อตอบสนองตามความเหมาะสม
  • ในทางกลับกันกระเป๋าเงินสัญญาอัจฉริยะเป็นเพียงผู้ให้บริการกระเป๋าเงินที่ทําหน้าที่เป็นอินเทอร์เฟซสําหรับบัญชีสัญญา (ใช่กระเป๋าเงินไม่ใช่บัญชี)

การทำให้กระเป๋าเงินสมาร์ทคอนแทรกต์เข้าสู่การค้าหลายๆ ด้านทำให้ผู้ใช้ที่ไม่เชี่ยวชาญด้านเทคนิคมีโอกาสใช้ประโยชน์จากคุณสมบัติที่พวกเขามี อย่างไรก็ตาม พวกเขายังคงเผชิญกับอุปสรรค์ที่เกี่ยวข้องกับ CAs

กลับไปที่การสนทนา ก่อนหน้านี้เราได้กล่าวถึงพารามิเตอร์ที่ใช้ในการกําหนดกฎความถูกต้องของการทําธุรกรรมของบัญชี:

  • การตรวจสอบ
  • การอนุญาต
  • ตรรกะ Nonce
  • ตรรกะการชำระค่า Gas
  • ตรรกะการดำเนินงาน

ค่าของพารามิเตอร์ 4 ค่าแรกสามารถเรียกรวมกันได้เป็นตรรกะการตรวจสอบบัญชี ซึ่งเป็นการตรวจสอบที่เกิดขึ้นก่อนที่การดำเนินการของธุรกรรมจะเริ่มต้น

พารามิเตอร์สุดท้ายกําหนดวิธีดําเนินการธุรกรรมเพื่อดําเนินการต่อ

ในการแนะนำ เราได้ให้ภาพรวมระดับสูงของทิวทัศน์ AA ปัจจุบันในรูปแบบของการจัดประเภทของต่าง ๆ สำหรับการออกแบบที่เสนออย่างต่าง ๆ เราจะใส่ใจกับคลาสแรกของ sol ชั่วคราวสำหรับการลงทุนของ Ethereum's account dilemma- EOA programmability

EOA ที่สามารถโปรแกรมได้

เรื่องที่น่าสนใจที่สุดของ Ethereum คือระบบนิเวศ DeFi ที่ยังเป็นเด็ก ๆ แต่มีชีวิตชีวาที่มีหลากหลายแอปพลิเคชันที่กระจายแบบไม่มีผู้ควบคุม ซึ่งเป็นจุดรวมเงินสำคัญ ส่วนใหญ่ของ DApps เหล่านี้ถูกจัดเตรียมให้บริการ EOAs ดังนั้นพวกเขายากที่จะเชื่อมต่อกับ CAs และบัญชีสมาร์ท แม้ว่ากระเป๋าสมาร์ทคอนแทร็คจะช่วย CAs ในกรณีนี้ แต่พวกเขามาพร้อมกับข้อจำกัดของตัวเองและ UX ที่แตกต่างกันอย่างสิ้นเชิง

โซลูชันชั่วคราวที่กําลังสํารวจในขณะที่ทั้ง DApps และผู้ให้บริการกระเป๋าเงินคุ้นเคยกับมาตรฐานบัญชีอัจฉริยะคือการให้การปรับปรุงชั่วคราวแก่ EOAs ที่ช่วยให้พวกเขาสามารถเอาชนะข้อ จํากัด ที่กําหนดไว้ส่วนใหญ่ไม่ว่าจะเป็นการตรวจสอบความถูกต้องหรือตรรกะการดําเนินการ

ต่อไปนี้เราจะพิจารณาข้อมูลสเปคของ EIP สามฉบับที่ให้เส้นทางที่สามารถดำเนินการไปยัง EOA programmability ได้; จากที่รู้จักน้อยกว่าEIP 5806, สำหรับคนที่ทะเยอทะยานEIP 3074และในที่สุดก็ถึงชัยชนะEIP 7702.

การโปรแกรมเมอร์ใช้งานผ่าน EIP-5806

ข้อเสนอนี้มีจุดมุ่งหมายที่จะนำความสามารถมากขึ้นสู่มาตรฐาน EOA โดยการอนุญาตให้มันทำการเรียก delegate ไปยังตัวต้นแบบบัญชีของสัญญา (สัญญาอัจฉริยะของมัน) ซึ่งทำให้สัญญาอัจฉริยะถูกดำเนินการในบริบทของ EOA ผู้เรียกหรือก็คือ EOA ยังคงควบคุมตรรกะการตรวจสอบของมันในขณะที่ตรรกะการดำเนินการของมันถูกจัดการโดยตรรกะต้นแบบ CA ที่เกี่ยวข้อง

ก่อนที่เราจะดำเนินไปอีกต่อไป ให้เราไปเที่ยววัยระวังของวงการวิวัฒนาการของ Ethereum กันEIP-7.

EIP-7 ข้อเสนอให้สร้างคำสั่ง 0xf4/DELEgateCALL ซึ่งใช้ส่งการโทรข้อความเข้าบัญชีหลักด้วยตรรกะของบัญชีรอง พร้อมทั้งรักษาค่าของฟิลด์ [sender] และ [value] ของบัญชีหลัก

กล่าวอีกอย่าง บัญชีหลัก “รับมรดก” (หรือยืมถ้าคุณต้องการ) ตรรกะของบัญชีย่อมสมความกับบัญชีรองเป็นระยะเวลาบาง ๆ ตามที่ระบุไว้ในการเรียกข้อความ ดังนั้นตรรกะของบัญชีหลักก็จะถูกดำเนินการในบริบทของบัญชรอง

รหัสโอป๊คนี้ช่วยให้นักพัฒนา dApp สามารถแบ่งตามตัวแยกต่างๆของโลจิกของแอปพลิเคชันของพวกเขาได้ โดยยังคงมีความเชื่อมโยงกัน เพื่อให้สามารถหลีกเลี่ยงข้อจำกัดขนาดโค้ดและข้อจำกัดของแก๊สได้อย่างง่ายดาย

EIP-5806 สรุป

ดี ดังนั้น delegate calls ทำให้ CAs สามารถทำงานร่วมกันได้อย่างไรบ้าง? นั่นคือ EIP-5806 ใช้ EIP-7 เป็นแรงบันดาลใจเพื่อ предложитьการขยายฟังก์ชั่นของ delegate call ไปสู่ EOAs ด้วย; กล่าวคือ ให้เราให้ EOAs สามารถทำงานร่วมกับ CAs ได้เช่นกัน เพราะทำไมไม่呢

ข้อมูลสเปค

EIP 5806 นำเสนอเป็นวิธีใหม่รองรับตามมาตรฐาน EIP-2718ประเภทการทำธุรกรรมที่ถูกแพ็คตามนี้:

rlp([chainID, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, data, access_list, signature_y_parity, signature_r, signature_s]).

ธุรกรรมเหล่านี้ถูกออกแบบมาเพื่อให้ฟิลด์ [to] – ซึ่งแทนที่อยู่ผู้รับ – สามารถรับเฉพาะที่อยู่เป็นข้อมูลขนาด 20 ไบต์เท่านั้น ซึ่งทำให้ผู้ส่งไม่สามารถใช้คำสั่ง CREATE ได้

แรงจูงใจของทุกส่วนประกอบของระบบ RLP คือดังต่อไปนี้:

  • chainID: ไอดีที่เป็นไปตามมาตรฐาน EIP-115 ของเครือข่ายปัจจุบันที่ขยายความยาวให้เป็น 32 ไบต์ ค่านี้ช่วยป้องกันการโจมตีแบบเล่นซ้ำ ดังนั้นจึงไม่สามารถทำซ้ำการทำธุรกรรมบนเครือข่ายเดิมบนเครือข่าย EVM สำรองที่มีประวัติคล้ายกันและมีความปลอดภัยในเชิงเศรษฐกิจน้อยกว่า
  • nonce: ตัวระบุที่ไม่ซ้ำกันสำหรับแต่ละธุรกรรมซึ่งยังให้ความปกป้องจากการโจมตีแบบเล่นซ้ำ
  • max_priority_fee_per_gas และ max_fee_per_gas: ค่าค่าธรรมเนียมแก๊สที่ธุรกรรม EIP-5806 ต้องจ่ายสำหรับการสั่งซื้อและการรวมอย่างเหมาะสม
  • gas_limit: จำนวน gas สูงสุดที่ธุรกรรมประเภท 5806 ตัวเดียวสามารถใช้ได้
  • ปลายทาง: ผู้รับธุรกรรม
  • ข้อมูล: เนื้อหาโค้ดปฏิบัติการ
  • access_list: ตัวแทนที่ได้รับอนุญาตเงื่อนไขในการดำเนินการธุรกรรม EIP-5806
  • signature_y_parity, signature_r และ signature_s: สามค่าที่ร่วมกันแทนลายเซ็นต์ secp256k1 บนข้อความ - keccak256 (TX_TYPE || rlp ([chainID, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, data, access_list]))

ในขณะที่การห่อหุ้มการทำธุรกรรม EIP-5806 ในซอง EIP-2718 ช่วยให้เข้ากันได้ยิ่งกับเวอร์ชันย้อนหลังได้มาก การใช้งาน EOA ไม่เทียบเท่ากับ CA ดังนั้นจำเป็นต้องกำหนดข้อจำกัดบางอย่างในวิธีที่ EOA ใช้ delegate call เพื่อป้องกันการเสียหายที่ไม่เปลี่ยนแปลง

การจำกัดเหล่านี้เป็นเป้าหมายของ opcodes ต่อไปนี้:

  • SSTORE/0x55: opcode นี้ช่วยให้บัญชีสามารถบันทึกค่าลงในที่เก็บข้อมูลได้ มีข้อ จํากัด ในการทําธุรกรรม EIP-5806 เพื่อป้องกันไม่ให้ EOAs ตั้งค่า / เข้าถึงที่เก็บข้อมูลโดยใช้การเรียกผู้รับมอบสิทธิ์ดังนั้นจึงป้องกันปัญหาที่อาจเกิดขึ้นในอนาคตเนื่องจากการโยกย้ายบัญชี
  • CREATE/0xF0, CREATE2/0xF5 และ SELFDESTRUCT/0xFF: opcodes เหล่านี้อนุญาตให้ผู้โทรสร้างบัญชีใหม่ได้อย่างกว้างขวาง การเข้าถึงสิ่งเหล่านี้ถูก จํากัด เพื่อป้องกันการเปลี่ยนแปลง nonce ของ EOA ในกรอบการดําเนินการที่แตกต่างกัน (การสร้าง / ทําลายสัญญาในกรณีนี้) ในขณะที่กําลังทําธุรกรรม EIP-5806 เพื่อป้องกันการยกเลิกความคาดหวังว่าธุรกรรมจะดําเนินการอย่างต่อเนื่อง

กรณีการใช้งานที่เป็นไปได้

ความสามารถหลักของ EIP 5806 คือการสรุปการดำเนินการสำหรับ EOAs โดยให้ EOAs สามารถที่จะเชื่อถือได้ในการติดต่อสื่อสารกับสัญญาอัจฉริยะเกินกว่าการเรียกใช้งานเรียบง่าย ๆ ไปยังตรรกะของพวกเขา ซึ่งให้คุณสมบัติเช่น:

  • การดำเนินการที่เป็นเงื่อนไขของธุรกรรม
  • การแบทช์ธุรกรรม
  • ธุรกรรม Multicall (เช่น อนุมัติและเรียกใช้)

วิจารณ์

การเปลี่ยนแปลงที่เสนอโดย EIP-5806 ในขณะที่เปิดใช้คุณลักษณะที่จำเป็น ไม่ได้เป็นสิ่งใหม่เป็นพิเศษมาก; ความเป็นอยู่ของมันขึ้นอยู่กับ EIP-7 ที่ทำงานอยู่แล้ว สิ่งนี้ทำให้มันผ่านไปบางส่วนของอุปสรรคที่อาจเกิดขึ้นได้หลายอย่าง

หนึ่งในข้อกังวลหลักที่เปล่งออกมาในช่วงแรกคือความเสี่ยงที่อาจเกิดขึ้นในการอนุญาตให้ EOAs เข้าถึงพื้นที่เก็บข้อมูลและเปลี่ยนแปลงได้เช่นเดียวกับ CA ในปัจจุบัน สิ่งนี้ทําลายความแปรปรวนของเครือข่ายจํานวนมากเกี่ยวกับวิธีที่ EOAs ทําธุรกรรมและได้รับการจัดการโดยการแนะนําข้อ จํากัด ที่กล่าวถึงในส่วนย่อยก่อนหน้า

การวิพากษ์วิจารณ์ครั้งที่สอง (ซึ่งเป็นดาบสองคมเล็กน้อย) คือความเรียบง่ายของ EIP-5806 มีความรู้สึกบางอย่างว่ารางวัลเนื่องจากการยอมรับ EIP-5806 อาจไม่คุ้มค่ากับค่าใช้จ่ายเนื่องจากมันเปิดใช้งานเฉพาะการดําเนินการที่เป็นนามธรรมและไม่มากอื่น ๆ ข้อ จํากัด ความถูกต้องอื่น ๆ ทั้งหมดยังคงกําหนดเครือข่ายสําหรับ EOAs ซึ่งเลือกใช้ EIP-5806 ตรงกันข้ามกับ EIPs อื่น ๆ ที่ค่อนข้างคล้ายกันซึ่งเราพูดถึงในส่วนย่อยต่อไปนี้

ความสามารถในการโปรแกรมแบบ EIP-3074

EIP-3074 ข้อเสนอให้ EOAs สามารถมอบหมายงานการตรวจสอบส่วนใหญ่ของตนเองให้กับบัญชีสัญญาที่เชี่ยวชาญ เรียกว่า invokers โดยการใช้ตรรกะการอนุญาตของตัวหลักสำหรับรูปแบบของธุรกรรมที่เฉพาะเจาะจง

มันทำได้โดยการลงนามเข้ากันกับนโยบายการเข้าถึงของพวกเขาให้กับสัญญาผู้เรียกร้องซึ่งจากนั้นก็กลายเป็นความรับผิดที่กำหนดนโยบายการเข้าถึงของ EOA

EIP นี้เสนอให้เพิ่ม opcode สองตัวใหม่เข้าสู่ EVM:

  • [AUTH] ซึ่งกำหนดค่าตัวแปรของบัญชี [authorized] ให้ทำงานแทนบัญชี [authority] คนที่สอง โดยอ้างอิงจากลายเซ็น ECDSA ของบัญชีคนที่สอง
  • [AUTHCALL] ซึ่งส่ง / ดำเนินการโทรไปยังบัญชี [authority] จาก / เป็นบัญชี [authorized]

รหัสนี้สองรหัสอนุญาตให้ EOA มอบหมายควบคุมไปยัง CA ที่กำหนดไว้ล่วงหน้า และเป็นได้อย่างนั้น โดยไม่ต้องแสดงสัญญาและต้องรับผิดชอบต้นทุนและผลที่เกี่ยวข้องกับมัน

ข้อมูลจำเพาะ

EIP-3074 ช่วยให้ธุรกรรมสามารถใช้รูปแบบการเซ็นต์ [MAGIC] เพื่อป้องกันการชนกับรูปแบบการเซ็นต์ธุรกรรมอื่น ๆ บัญชีที่ใช้งานอยู่เพื่อส่งคำสั่ง [AUTHCALL] ถูกกำหนดให้เป็นฟิลด์ตัวแปรบริบทที่ชื่อ [authorized] ที่มีอยู่เฉพาะในธุรกรรมเดียวและต้องถูกกำหนดใหม่สำหรับ [AUTHCALL] ใหม่ทุกครั้ง

ก่อนที่จะตอบความซับซ้อนของแต่ละคำสั่งโค้ด นี่คือสิ่งที่เกี่ยวข้องกับธุรกรรม EIP-3074:

  • [authority]: บัญชีที่ลงลายมือหลัก (EOA) ที่มอบหมายการเข้าถึง/ควบคุมไปยังบัญชีที่สองซึ่งทั่วไปแล้วเป็นบัญชีสัญญา
  • [authorized]: บัญชีที่ [AUTHCALL] จะถูกส่งให้ดำเนินการ กล่าวคือ นั่นคือบัญชีที่แลม่วงของ [authority] ที่ใช้ประมวลผลตามตรวจสอบที่กำหนดโดย [invoker]
  • [invoker]: สัญญาย่อยหมายถึงการจัดการการโต้ตอบระหว่างบัญชี [ที่ได้รับอนุญาต] และตรรกะของ [AUTHCALL] โดยเฉพาะอย่างยิ่งในกรณีที่ตรรกะหลักของรหัสสัญญาหลังคือการสนับสนุนก๊าซ

สัญญา Invoker จะได้รับข้อความ [AUTH] พร้อมค่า [COMMIT] จาก [authority] โดยค่านี้จะกำหนดข้อจำกัดที่บัญชีต้องการวางไว้ในการดำเนินการ [AUTHCALL] ของ [authorized]

ดังนั้น invokers มีหน้าที่รับผิดชอบในการตรวจสอบให้แน่ใจว่า [contract_code] ที่กําหนดไว้ในบัญชี [ที่ได้รับอนุญาต] นั้นไม่เป็นอันตรายและมีความสามารถในการตอบสนองตัวแปรที่วางไว้โดยบัญชีการลงนามหลักในค่า [COMMIT]

โอ๊ปโค้ด [AUTH] มีอินพุตสามสต็อก; หรือง่ายๆ ก็คือถูกกำหนดโดยอินพุตสามอย่างที่คำนวณเป็นเอาต์พุตเดียว อินพุตเหล่านี้คือ:

  1. authority: ซึ่งเป็นที่อยู่ของ EOA ที่สร้างลายเซ็น
  2. offset
  3. ความยาว

ข้อมูลสองข้อมูลล่าสุดถูกใช้ในการอธิบายช่วงของหน่วยความจำที่สามารถแก้ไขได้ตั้งแต่ 0 ถึง 97 เมื่อ:

  1. [memory(offset : offset+1)] – [yParity]
  2. [memory(offset+1 : offset+33] – [r]
  3. [memory(offset+33 : offset+65)] - [s]
  4. [memory(offset+65 : offset+97)] – [COMMIT]

ตัวแปร [yParity], [r] และ [s] ถูกตีความรวมกันเป็นลายเซ็น ECDSA, [magic], บนเส้น曲 secp256k1 ของข้อความ:

[keccak256 (MAGIC || chainID || nonce || ที่อยู่ผู้เรียก || COMMIT)]

ที่:

  • [MAGIC] เป็นลายเซ็น ECDSA ที่เกิดจากการรวมกันของตัวแปร:
    • [chainID] ซึ่งเป็นตัวระบุที่สอดคล้องกับ EIP 115 ของเชนปัจจุบันที่ใช้เพื่อให้การป้องกันการโจมตีแบบเล่นซ้ําบนเชน EVM สํารองที่มีประวัติคล้ายกันและมีความปลอดภัยทางเศรษฐกิจน้อยกว่า
    • [nonce] ซึ่งเป็นที่อยู่ปัจจุบันของผู้ลงนามในธุรกรรม NONCE ด้านซ้ายบุนวมถึง 32 ไบต์
    • [invokerAddress] คือที่อยู่ของสัญญาที่มีตัวตนสำหรับการดำเนินการ [AUTH]
  • [COMMIT] เป็นค่าที่มีขนาด 32 ไบต์ที่ใช้ระบุเงื่อนไขการถูกต้องของธุรกรรมเพิ่มเติมในตรรกะก่อนการประมวลผลของผู้เรียกใช้งาน

หากลายเซ็นที่คำนวณได้ถูกต้องและที่อยู่ของผู้เซ็นเท่ากับ [authority] ฟิลด์ [authorized] จะถูกอัปเดตเป็นค่าที่ให้มาจาก [authority] หากไม่เป็นไปตามเงื่อนไขเหล่านี้ใด ๆ [authorized] ฟิลด์ยังคงเป็นไปตามสถานะก่อนหน้าของมันหรือเป็นค่าที่ไม่ได้ตั้งไว้

ค่าแก๊สสำหรับตัวดำเนินการนี้ถูกคำนวณเป็นผลรวมของ:

  1. ค่าธรรมเนียมคงที่สำหรับการเตรียมข้อมูล [ecrecover] และเพิ่มเติมสำหรับการคำนวณ keccak256 hash และตรรกะเพิ่มเติมบางประการ, มูลค่า 3100 หน่วย
  2. ค่าส่งเสริมหน่วยความจำที่คำนวณอย่างเดียวกับคำสั่ง [RETURN] และใช้เมื่อมีการขยายหน่วยความจำเกินขอบเขตที่กำหนดของการจัดสรรปัจจุบัน (97 หน่วย)
  3. ค่าใช้จ่ายคงที่ของ 100 หน่วยถูกเกิดขึ้นสำหรับ [authority] ที่อบอุ่นและ 2600 หน่วยสำหรับที่เย็นเพื่อป้องกันการโจมตีที่เกิดจากการกำหนดราคาผิดพลาดของ opcodes ที่เข้าถึงสถานะ

[AUTH] ถูกนําไปใช้เพื่อไม่ปรับเปลี่ยนหน่วยความจํา และใช้ค่าของ [authority] เป็นอาร์กิวเมนต์เพื่อให้การตรวจสอบค่าจากลายเซ็นที่ให้มาเป็นเรื่องเล็กน้อย

โอปโคด [AUTHCALL] มีการป้อนข้อมูลสามารถของรูปแบบชุดเดียวที่ใช้ในการคำนวณผลลัพธ์ของสามารถชุดเดียว

มันมีตรรกะเดียวกับ [CALL] opcode กล่าวคือ; ใช้เพื่อส่งข้อความเรียกเข้าบัญชีและเรียกใช้ตรรกะเฉพาะในสัญญา ค่าเบี่ยงเบนเพียงอย่างเดียวในตรรกะของพวกเขาคือ [AUTHCALL] ได้รับการออกแบบมาเพื่อตั้งค่าของ [CALLER] ก่อนดําเนินการ

ดังนั้น [AUTHCALL] ใช้โดย [authority] เพื่อเรียกใช้พฤติกรรมที่เกี่ยวข้องกับ [authorized] โดยมีการตรวจสอบตามตรรกะต่อไปนี้:

  1. ตรวจสอบค่าของ [อนุญาต] หากไม่ได้ตั้งค่าการดําเนินการจะถือว่าไม่ถูกต้องและเฟรมจะออกทันที สิ่งนี้ช่วยป้องกันการเรียกเก็บเงินที่ไม่เป็นธรรมเนื่องจากความล้มเหลวที่ไม่เคยมีมาก่อน
  2. ตรวจสอบค่าใช้จ่ายในการใช้ก๊าซของพฤติกรรมที่ตั้งใจของ [authorized]
  3. ตรวจสอบค่าที่สอดคล้องกับ EIP-150 ของตัวถูกดําเนินการ [ก๊าซ]
  4. ตรวจสอบความพร้อมของต้นทุนก๊าซทั้งหมด -- [มูลค่า] - ในยอดคงเหลือของ [อํานาจ]
  5. การดำเนินการเกิดขึ้นหลังจากหัก [value] จากยอดเงินในบัญชีของ [authority] หาก [value] มากกว่ายอดเงินคงเหลือของพวกเขา การดำเนินการนี้จะโมฆะ

ค่าแก๊สสำหรับ [AUTHCALL] คำนวณเป็นผลรวมของ:

  • ค่าใช้จ่ายคงที่สำหรับการเรียกใช้ [warm_storage_read]
  • ค่าใช้จ่ายในการขยายหน่วยความจํา [memory_expansion_fee]; ซึ่งคํานวณคล้ายกับค่าก๊าซสําหรับ [CALL] opcode
  • ต้นทุนแบบไดนามิก [dynamic_gas]
  • ค่าการดำเนินการของฟังก์ชันย่อย [subcall_gas]

ข้อมูลที่ส่งคืนจาก [AUTHCALL] สามารถเข้าถึงได้ผ่าน:

  • [RETURNDATASIZE] - ซึ่งผลักดันขนาดของตัวเก็บข้อมูลที่ส่งกลับลงในสแต็กเอาท์พูล
  • [RETURNDATACOPY] - ซึ่งคัดลอกข้อมูลจากตัวเลือกข้อมูลที่ส่งกลับไปยังหน่วยความจำ

เพื่อรวมทุกอย่างพร้อมกับการพูดน้อยลงเกี่ยวกับเทคโนโลยี ธุรกรรม Ethereum 通常ระบุค่าสองค่า

  1. tx.origin - ซึ่งให้การอนุญาตสำหรับธุรกรรม
  2. msg.sender - ที่ธุรกรรมเกิดขึ้นจริง ๆ

ใน EOAs ตามที่กล่าวไว้ก่อนหน้านี้ การอนุญาตเชื่อมต่อกับการดำเนินการเป็นสิ่งที่แนบแน่นกัน นั่นคือ (tx.origin == msg.sender) สัญญาต่อเนื่องที่เรียบง่ายนี้เป็นสาเหตุของส่วนใหญ่ของปัญหาที่เราอธิบายไว้ในส่วนย่อย "บัญชีและความถูกต้องของธุรกรรม" ในรายงานนี้

ข้อความ [AUTH] จาก [authority] ช่วยให้สามารถเบียดเทียบฟังก์ชัน tx.origin ไปยัง [authorized] ได้ โดยยังคงเป็น msg.sender อย่างไรก็ตาม มันยังช่วยให้กำหนดข้อจำกัดในสิทธิพิเศษนี้โดยใช้ค่า [COMMIT] ได้

[AUTHCALL] จากนั้นอนุญาตให้ [authorized] เข้าถึงตรรกะของสัญญา โดยใช้ [invoker] เป็นผู้กลางเพื่อให้แน่ใจว่าสัญญาที่ต้องการเข้าถึงไม่เป็นอันตราย กล่าวคือ สำหรับทุก [AUTHCALL] [authorized] ต้องระบุ [invoker] โดยเฉพาะสำหรับ [COMMIT] ของพวกเขา

กรณีการใช้งานที่เป็นไปได้

EIP 3074 เป็นผู้รับผิดชอบหลักในการอนุญาตให้ EOAs มอบหมายตัวตนการอนุญาตของพวกเขาให้กับบัญชีที่แตกต่างกัน อย่างไรก็ตามการออกแบบเปิดของมันช่วยให้สามารถทำได้มากขึ้นในบริบทที่แตกต่างกัน

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

  • ตรรกะ Nonce: EIP-3074 ช่วยให้ EOAs nonce ยังคงไม่ถูกแตะต้องหลังจากส่งข้อความ [AUTH] ในขณะเดียวกัน nonce สําหรับทุก [AUTHCALL] ขึ้นอยู่กับสิ่งที่ invoker มีปฏิสัมพันธ์ด้วย ด้วยวิธีนี้จะช่วยให้สามารถขนาน nonce สําหรับ EOAs เพื่อให้พวกเขาสามารถส่ง [AUTHCALL] ที่ไม่ทับซ้อนกันได้หลายตัวตามที่พวกเขาต้องการ
  • ตรรกะการชำระค่า Gas: ตามที่ระบุใน EIP ผู้เรียกใช้สามารถออกแบบให้สนับสนุนค่าใช้จ่ายแก๊สได้ ดังนั้นค่าธรรมเนียมแก๊สสำหรับ [COMMIT] ของผู้ใช้สามารถหักจากต้นทางของธุรกรรมหรือจากบัญชีที่สนับสนุนใด ๆ ไม่ว่าจะเป็นบัญชีส่วนบุคคลหรือบริการเรือธรรมนูญ (บริการสนับสนุนค่าใช้จ่ายแก๊ส)

นอกจากนี้ ตรรกะการดำเนินการถูกสรุปอย่างสร้างสรรค์ หลังจากที่ผู้เรียกใช้ (ซึ่งเป็น CA) ตอนนี้รับผิดชอบในการดำเนินการร้องขอธุรกรรมแทน EOA

วิจารณ์

  • Invoker Centralisation

การอ้างหนึ่งในผู้เขียน: “ฉันไม่คาดหวังว่ากระเป๋าเงินจะเปิดเผยฟังก์ชันในการลงลายเซ็นกับผู้เรียกร้องอย่างอิสระ …”. ปัญหาที่ใหญ่ที่สุดที่ถูกตั้งคำถามโดยการดำเนินการ 3074 คือนวัตกรรมที่ปราศจากมันจะมีแนวโน้มที่จะเข้ากันได้และการไหลที่เป็นเอกสิทธิ์; อย่างที่มีการวิวัฒนาการปัจจุบันของ Ethereum’s MEV และ PBS markets.

โดยค่าเริ่มต้นสัญญา invoker จะต้องได้รับการตรวจสอบอย่างมากเพื่อป้องกันการโจมตีที่เลวร้ายยิ่งกว่าที่เป็นไปได้ในปัจจุบัน สิ่งนี้จะมีแนวโน้มที่จะเป็นระบบนิเวศอย่างหลีกเลี่ยงไม่ได้ซึ่งสัญญา invoker จํานวนหนึ่งที่พัฒนาโดยผู้มีอิทธิพลจะถูกนํามาใช้เป็นค่าเริ่มต้นสําหรับนักพัฒนากระเป๋าเงิน ดังนั้นจึงเป็นการแลกเปลี่ยนระหว่างการใช้เส้นทางการกระจายอํานาจอย่างหนักในการตรวจสอบและสนับสนุนสัญญา invoker อย่างต่อเนื่องซึ่งมีความเสี่ยงต่อความปลอดภัยของผู้ใช้ หรือเพียงแค่ใช้สัญญา Invoker จากแหล่งที่จัดตั้งขึ้นและมีชื่อเสียงพร้อมการรับประกันที่ดีกว่าสําหรับความปลอดภัยของผู้ใช้และการกํากับดูแลความปลอดภัยของสัญญาน้อยลง

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

  • ปัญหาความเข้ากันได้ย้อนหลัง

EIP-3074 ดึงดูดรูปแบบลายเซ็น ECDSA เนื่องจากยังคงถือว่าถูกต้องมากกว่ารูปแบบการอนุญาตที่แนะนําผ่านผู้เรียกใช้ ในขณะที่มีข้อโต้แย้งว่าความต้านทานควอนตัมไม่ใช่ปัญหาที่ชัดเจนในขณะนี้และมีความเสี่ยงที่เลวร้ายกว่ามากในอนาคตที่ ECDSA เสียหายได้ เป้าหมายที่ค่อนข้างไม่มีสถานะของ Ethereum คือการนําหน้าปัญหาดังกล่าวเสมอ อาจเสียสละควอนตัมและการเซ็นเซอร์สําหรับการปรับปรุงเล็กน้อยใน UX อาจไม่ใช่ตัวเลือกที่ดีที่สุดในอนาคตอันใกล้

จุดอื่น ๆ ในอาร์กิวเมนต์เกี่ยวกับความเข้ากันได้ในอนาคตคือในขณะที่กำไรจาก 3074 ยังไม่ได้ถูกประเมิน ERC-4337 (ซึ่งไม่ต้องการการเปลี่ยนแปลงโปรโตคอลใด ๆ) มีตลาดที่ดีมากแล้ว ดังนั้นคุณต้องเข้ากันได้กับมันเช่นกันเพื่อหลีกเลี่ยงการแบ่งส่วนของระบบนิเวศ

แม้ว่าจะมีแผนการสรุปบัญชีภายในระบบ คำสั่ง [AUTH] และ [AUTHCALL] ใน EVM ก็จะกลายเป็นล้าสมัยในที่สุด ซึ่งทำให้ Ethereum ต้องมีหนี้สินทางเทคนิคมากมายเพื่อส่งมอบการปรับปรุง UX ที่ไม่มีคุณค่าน้อย

  • ECDSA Scheme Irrevocability

หลังจากส่งข้อความ [AUTH] และมอบหมายควบคุม คาดว่า EOA จะหลีกเลี่ยงระบบการอนุมัติด้วยกุญแจส่วนตัวแบบปกติ เนื่องจากการส่งธุรกรรม “ปกติ” ทำให้การอนุญาตที่มอบหมายให้กับผู้เรียกใช้ทุกคนถูกเพิกถอน

ดังนั้น โครงร่าง ECDSA ยังคงเป็นเท่าเทียมกับการรับรองจากโครงร่างใดๆ ที่สัญญาที่เกี่ยวข้องอาจเปิดใช้งาน ซึ่งหมายความว่า การสูญเสียกุญแจส่วนตัวจะ导致การสูญเสียทั้งหมดของสินทรัพย์ในบัญชี

ความสามารถในการโปรแกรมเมอร์ผ่าน EIP-7702

ข้อเสนอนี้เริ่มต้นจากการกำหนดเป็นรูปแบบที่เล็กน้อยของ EIP 3074 และไม่ได้หมายถึงเพื่อที่จะเป็นการอัปเดตให้กับมัน มันถูกเกิดขึ้นเพื่อแก้ไขปัญหาความไมประสงค์ของ EIP 3074 โดยเฉพาะอย่างยิ่งความกังวลเกี่ยวกับความไมเข้ากันได้กับระบบนิเวศ 4337 ที่กำลังพัฒนาและแนวคิดการสรุปบัญชี RIP 7560

วิธีการทำงานของมันคือการเพิ่มประเภทธุรกรรมที่เป็นไปตามมาตรฐาน EIP 2718 ใหม่ - [SET_CODE_TX_TYPE] - ซึ่งช่วยให้ EOA สามารถทำงานเป็นบัญชีสมาร์ทสำหรับธุรกรรมที่ระบุไว้ได้

การออกแบบนี้ทำให้มีคุณสมบัติเดียวกันกับ EIP 5806 และอื่น ๆ อีกบางอย่าง พร้อมทั้งยังเหมาะสมกับแผนถนนการสรุปบัญชีธรรมชาติและโครงการที่มีอยู่

ข้อกำหนด

EIP-7702 ช่วยให้ EOA สามารถ "นำเข้า" เนื้อหาของโค้ดของสัญญาผ่านการทำธุรกรรมที่เป็นไปตามมาตรฐาน [SET_CODE_TX_TYPE] 2718 ของรูปแบบ:

rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, value, data, access_list, authorization_list, signature_y_parity, signature_r, signature_s])

โหลดซีพร้อมกับ EIP 5806 ทั้งหมด ยกเว้นว่ามันนำเสนอ "รายการการอนุญาต" รายการนี้เป็นลำดับของค่าที่มีรูปแบบเป็น

[[chain_id, address, nonce, y_parity, r, s], …]

ที่แต่ละตัวเรียกค่า [address] ในแต่ละตัว

ก่อนดําเนินการต่อฝ่ายที่เกี่ยวข้องใน SET_CODE_TX_TYPE ได้แก่ :

  • [authority]: ซึ่งเป็นบัญชีที่ทำการเซ็นต์ EOA/ หลัก
  • [address]: ซึ่งเป็นที่อยู่ของบัญชีที่มีรหัสที่สามารถมอบหมายให้ผู้อื่นได้

เมื่อ [authority] ลงนาม SET_CODE_TX_TYPE ที่ระบุ [address] จะสร้างตัวกำหนดการมอบหมาย นี่คือ "โปรแกรมชี้" ซึ่งทำให้คำขอการเรียกรหาโค้ดทั้งหมดเนื่องจากการกระทำของ [authority] ที่ทุกช่วงเวลาถูกนำไปสู่โค้ดที่สามารถสังเกตได้ของ [address]

สำหรับทุกคู่ [chain_id, address, nonce, y_parity, r, s] การไหลของตรรกะของธุรกรรมประเภท 7702 คือดังนี้:

  1. การตรวจสอบลายเซ็นของ [authority] จากแฮชที่ให้ไว้โดยใช้: authority = ecrecover(keccak(MAGIC || rlp([chain_id, address, nonce])), y_parity, r, s]
  2. ป้องกันการโจมตีทับกันของโฆษณา cross-chain และเวกเตอร์การโจมตีอื่น ๆโดยการตรวจสอบ ID ของโซ่
  3. ตรวจสอบว่า [authority] มีเนื้อหาของรหัสอยู่แล้วหรือไม่
  4. ตรวจสอบนอนซ์เพื่อให้แน่ใจว่านอนซ์ของ [authority] เท่ากับนอนซ์ที่รวมในทูเพิล
  5. หากธุรกรรมเป็นธุรกรรม SET_CODE_TX_TYPE แรกของ [authority] จะมีการเรียกเก็บค่าธรรมเนียม PER_EMPTY_ACCOUNT_COST ในกรณีที่ยอดเงินในบัญชีน้อยกว่าค่าธรรมเนียมนี้ การดำเนินการจะถูกยกเลิก
  6. การกำหนดการมอบหมายเกิดขึ้น โดยที่รหัสของ [authority] ถูกตั้งเป็นตัวชี้ของ [address]
  7. ค่านอนซ์ของผู้ลงนาม - [authority] - เพิ่มขึ้นหนึ่ง
  8. [authority] ถูกเพิ่มเข้าไปในรายการที่เข้าถึงที่อยู่ ซึ่ง (การทำให้ง่าย) เป็นเซตของที่อยู่ที่ถูกสร้างขึ้นให้มีลักษณะที่การย้อนกลับของขอบเขตของธุรกรรมจากพวกเขาทำให้พวกเขา (ที่อยู่) กลับไปสู่สถานะก่อนหน้าที่พวกเขาเข้าไปในขอบเขตที่ถูกย้อนกลับ นี้ถูกกำหนดไว้ในEIP-2929เพื่อเปิดใช้งานการแคชค่าที่ใช้ซ้ำได้ และป้องกันค่าใช้จ่ายที่ไม่จำเป็น

ฮึก! เพื่อผูกมันกลับมา; EIP นี้ช่วยให้ EOAs ส่งธุรกรรมที่ตั้งตัวชี้ไปยังโค้ดของสัญญา ทำให้พวกเขาสามารถนำตรรกะนี้มาใช้เป็นของตัวเองในธุรกรรมต่อไปได้ ดังนั้นมันจึงแข็งแกร่งกว่า EIP 5806 เพราะมันช่วยให้ EOAs มีเนื้อหาของโค้ดได้ตลอดเวลาที่พวกเขาต้องการ (ไม่เหมือนกับ EIP 5806 ที่อนุญาตให้ EOAs ส่ง delegate-calls เท่านั้น)

กรณีการใช้งานที่เป็นไปได้ / กรณีการใช้งานที่เหมาะสม

  • แนวคิดการดำเนินการ

หากว่าจะอ้างว่ามันไม่ใช่การสรุปอีกต่อไปเนื่องจาก EOA ทำงานกับตรรกะที่มันต้องการจะดำเนินการเอง แต่มันก็ยังไม่ใช่ "เจ้าของหลัก" ของตรรกะดังกล่าว นอกจากนี้มันไม่มีตรรกะอยู่ภายในโดยตรง เพียงแค่ระบุตัวชี้ชวนไปยังตรรกะ (เพื่อลดความซับซ้อนของการคำนวณ) ดังนั้นเราเรียกมันว่า การสรุปการดำเนินการ!

  • การสนับสนุน Gas

ในขณะที่ข้อกำหนด require(msg.sender == tx.origin) ถูกแตกต่างเพื่ออนุญาตให้สปอนเซอร์ตนเอง แต่ EIP ยังอนุญาตให้การผสานของตัวแทนการทำธุรกรรมที่ได้รับการสปอนเซอร์ อย่างไรก็ตาม ข้อจำกัดคือตัวแทนเช่นนี้ต้องมีระบบที่เกี่ยวข้องกับชื่อเสียงหรือฐานะเพื่อป้องกันการโจมตีเพื่อทำให้เสียหาย

  • นโยบายการเข้าถึงที่มีเงื่อนไข

EOAs สามารถชี้ไปยังส่วนที่เฉพาะของโค้ดบัญชีได้อย่างเดียว ดังนั้นเฉพาะตรรกะของส่วนนั้นที่สามารถใช้ได้ในบริบทของพวกเขาเท่านั้น

นี่ยังช่วยให้มีการมีคีย์ย่อยซึ่งทำให้เกิด "การลดระดับสิทธิ" ซึ่งจะทำให้ dAPPs บางอย่างมีการเข้าถึงยอดเงินในบัญชีภายใต้เงื่อนไขที่เฉพาะเจาะจง เช่น คุณสามารถนึกภาพถึงการอนุญาตให้ใช้ ERC-20 โทเคน แต่ไม่ใช้ ETH หรือใช้ได้สูงสุด 1% ของยอดคงเหลือต่อวัน หรือเชื่อมต่อเพียงกับแอปพลิเคชันที่เฉพาะเจาะจงเท่านั้น

  • การติดตั้งสัญญาอัจฉริยะที่เชื่อมโยงโซ่

ธุรกรรม EIP-7702 อาจอนุญาตให้ผู้ใช้เข้าถึง opcode CREATE2 และใช้เพื่อปรับใช้ bytecode ไปยังที่อยู่โดยไม่มีพารามิเตอร์ที่ จํากัด อื่น ๆ เช่นตรรกะตลาดค่าธรรมเนียม (เช่น EIP-1559 และ EIP-4844) สิ่งนี้ช่วยให้ที่อยู่สามารถกู้คืนและใช้ในเครื่องสถานะหลายเครื่องด้วย bytecode เดียวกันโดยที่บัญชีในแต่ละห่วงโซ่จะรับผิดชอบในการกําหนดพารามิเตอร์ตัวแปรบริบทอื่น ๆ

วิจารณ์

  • ขาดความเข้ากันได้ย้อนหลัง

ในขณะที่ EIP-7702 ยังคงเป็นเหตุการณ์ล่าสุดมากมาย มีการออกแบบและทดสอบสำหรับความขึ้นอยู่กับขึ้นอยู่กับปัญหาและข้อเสียหายที่เป็นไปได้ แต่โมเดลขนาดเล็กที่ลดน้อย มีความยืดหยุ่นมากมาย และด้วยเหตุนี้ มีประโยชน์ในบริบทที่แตกต่าง อย่างไรก็ตาม มันทำให้เกิดการลักษณะที่ผิดและไม่สามารถย้อนกลับได้ทันที

บางส่วนของตรรกะของมันรวมถึง:

  1. การเปลี่ยนแปลง Nonce EOA ระหว่างการทำธุรกรรมกลาง: EIP-7702 ไม่จำกัดการใช้ opcodes เพื่อให้แน่ใจว่าคงสภาพไว้ ซึ่งหมายความว่า EOA สามารถนำ opcodes เช่น CREATE, CREATE2 และ SSTORE มาประยุกต์ใช้ในระหว่างการดำเนินการ EIP-7702 ซึ่งจะทำให้ nonce ของ EOA สามารถเพิ่มขึ้นในบริบทที่แตกต่างกันได้
  2. การอนุญาตให้บัญชีที่มีค่า codeHash ที่ไม่เท่ากับศูนย์เป็นผู้เริ่มต้นธุรกรรม: EIP-3607 ได้ถูกนำมาใช้เพื่อลดความเสี่ยงที่อาจเกิดขึ้นจาก "การชนที่อยู่" ระหว่าง EOAs และ CAs การชนที่อยู่เกิดขึ้นเมื่อค่า 160 บิตของที่อยู่ของ EOA เท่ากับที่อยู่ของ CA อย่างสิ้นเชิง

ผู้ใช้ส่วนใหญ่ไม่รู้เรื่องเนื้อหาที่อยู่ในบัญชี (หรือแม้แต่ความแตกต่างระหว่างบัญชีและที่อยู่!) ดังนั้นการอนุญาตให้การชนที่อยู่เกิดขึ้นหมายความว่า EOA สามารถปลอมตัวเป็น CA และดึงเงินของผู้ใช้ในระหว่างที่ยาวนานเพื่อขโมยเงินทั้งหมด EIP-3607 แก้ปัญหานี้โดยกำหนดว่าบัญชีที่มีโค้ดไม่ควรสามารถใช้เงินในยอดเงินของตนโดยใช้ตรรกะการอนุญาตของตนเอง อย่างไรก็ตาม EIP 7702 ทำลายสถานะอันตรายนี้เพื่อให้ EOAs สามารถเป็นอิสระได้แม้ว่าจะได้รับความสามารถในการโปรแกรมบางส่วน

  • ความคล้ายคลึงกับ EIP-3074

การลงชื่อเซ็นที่ที่อยู่ของบัญชีแทนเนื้อหาของรหัสเป็นเรื่องที่คล้ายกับระบบของ 3074 กับผู้เรียกใช้ มันไม่ให้การรับรองที่เข้มงวดเกี่ยวกับความสอดคล้องของเนื้อหาของรหัสที่เกี่ยวข้องกันข้ามเชื่อมโยงเนื่องจากที่อยู่สามารถมีเนื้อหาของรหัสที่แตกต่างกันบนเชื่อมโยงที่แตกต่างกัน นี่หมายความว่า ที่อยู่ที่มีเนื้อหาของรหัสที่มีตรรกะเดียวกันบนเชื่อมโยงหนึ่งอาจเป็นฉุกเฉินหรือเป็นอันตรายอย่างสิ้นเชิงบนเชื่อมโยงอื่น ๆ และสิ่งนี้อาจทำให้เกิดความเสียหายต่อเงินทุนของผู้ใช้

สรุป

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

การอนุญาตให้บัญชี EOA ทำการเรียกใช้โค้ดในทุกลักษณะ ทำให้ความสามารถของบัญชีขยายตัวอย่างมาก แต่ความสามารถใหม่นี้มาพร้อมกับความเสี่ยงและความไม่แน่นอนที่สำคัญ การแก้ปัญหาเหล่านี้เป็นสิ่งสำคัญในการนำเสนอการอัปเกรดที่มีประโยชน์ที่สุดสำหรับผู้ใช้ Ethereum โดยไม่มีการโต้แย้งใด ๆ

วัฒนธรรมการสนทนาเปิดเผยของ Ethereum ทำให้มันเป็นที่ทดสอบที่ยอดเยี่ยมสำหรับนวัตกรรมเช่นนี้เนื่องจากเกือบทุกผลของการออกแบบถูกถอดรหัสอย่างละเอียดโดยผู้เชี่ยวชาญด้านวิชาการ การพิจารณาอย่างละเอียดนี้ควรช่วยลดความเสี่ยงของการกระทำผิดจากเหตุการณ์ที่ตรงกันข้าม

ปัจจุบัน EIP-7702 เป็นลูกโปสเตอร์สําหรับกลไกที่พยายามนําความสามารถในการตั้งโปรแกรม EVM มาสู่ EOAs โดยได้รับการทําเครื่องหมายว่าทดแทนสล็อตของ EIP 3074 ในการอัพเกรด Pectra มันสืบทอดการออกแบบแบบเปิดของกลไกของ 3074 ในขณะที่ลดพื้นผิวการโจมตี / ความเสี่ยงลงอย่างมาก นอกจากนี้ยังช่วยให้มากขึ้นโดยการหลีกเลี่ยงข้อ จํากัด ของ 3074 กับ opcodes บางประเภท

ในขณะที่ยังมีการปรับปรุงบางส่วนในการออกแบบของข้อเสนอ มันได้รับความเห็นชอบและสนับสนุนจากนักพัฒนาโดยเฉพาะอย่างยิ่งเนื่องจากมีการสนับสนุนโดยตรงจาก Vitalik แล้ว

ภายในชุมชนมีข้อเรียกร้องว่าวิธีการสรุปบัญชีนี้อาจดีกว่าสมาร์ทแอคเคาท์ บทวิจารณ์นี้เน้นว่าถนัดมากขึ้นและไม่ซับซ้อนเท่านั้น และว่า EOAs ถูกบัญทึกไว้แล้ว อย่างไรก็ตามเราต้องจำไว้ว่าความปลอดภัยในอนาคตของการต้านทานควอนตัมเมื่อไหร่ก็ตามทุกระดับของเครือข่าย Ethereum ความปลอดภัยที่เกี่ยวกับควอนตัมนี้ไม่เป็นไปตามหลักโมเดลบัญชีปัจจุบันเนื่องจากการใช้ระบบลายเซ็นของ ECDSA สำหรับการยินยอม EOA

ดังนั้น ความสามารถในการโปรแกรม EOA ควรถูกมองเป็นขั้นตอนบนเส้นทางสู่บัญชีสมาร์ทและไม่ใช่เป้าหมาย มันทำให้ EOA มีพลังมากขึ้นและทำให้ผู้ใช้และนักพัฒนามีประสบการณ์ที่ดีขึ้น พร้อมทั้งยังเหมาะสมกับเป้าหมายของแนวคิดการสรุปบัญชีสมาร์ท

ในรายงานถัดไปของเราเราจะสำรวจโครงการย้าย EOA เพื่อดูว่ามันเหมาะกับโครงสร้างแนวคิดการสรุปบัญชีอย่างไร อยู่รอดูต่อไป!

Disclaimer:

  1. บทความนี้พิมพ์ซ้ําจาก [2077.xyz], สิทธิ์ประกอบการเป็นของผู้เขียนต้นฉบับ [ zhev]. หากมีการคัดค้านการพิมพ์นี้ โปรดติดต่อGate Learnทีม และพวกเขาจะดำเนินการโดยเร่งด่วน
  2. ข้อจํากัดความรับผิดชอบความรับผิด: มุมมองและความคิดเห็นที่แสดงในบทความนี้เป็นเพียงของผู้เขียนและไม่ถือเป็นคําแนะนําการลงทุนใด ๆ
  3. การแปลบทความเป็นภาษาอื่น ๆ ทำโดยทีม Gate Learn หากไม่ได้กล่าวถึง การคัดลอก การแพร่กระจาย หรือการลอกเลียนบทความที่ถูกแปลนั้นถูกห้าม

ภาพรวมของแนวคิดการสรุปบัญชีใน Ethereum

ขั้นสูง11/7/2024, 1:34:06 AM
รายงานนี้ให้ภาพรวมของโมเดลบัญชีปัจจุบันของ Ethereum โดยเฉพาะผลกระทบต่อความถูกต้องของธุรกรรม ว่าแนวคิดการสรุปบัญชีหมายถึงอะไร และกรอบการคิดเชิงบัญชีเป็นอย่างไร เราจะโฟกัสที่การเข้าถึงของ EOA ด้วยการประเมิน EIPs 5086, 3074, และ 7702 และสรุปด้วยว่าทั้งหมดนี้มีผลต่ออนาคตของการทำธุรกรรมบน Ethereum อย่างไร

แนวคิดการสรุปบัญชีมุ่งหวังที่จะปรับปรุงประสบการณ์ของผู้ใช้และนักพัฒนาทั่วทั้งระบบ Ethereum พร้อมกับการทำให้ประสบการณ์ในเครือข่ายเป็นไปได้มากขึ้นและสนุกสนานกว่าสำหรับผู้ใช้ นอกจากนี้ยังเพิ่มความสามารถให้แก่นักพัฒนาในการทำสิ่งที่มีประสิทธิภาพมากขึ้นบน Ethereum และให้บริการแก่ผู้ใช้อย่างมีความหมายมากขึ้น

การจัดหมวดหมู่ของวิธีการสรุปบัญชีของเรามีดังนี้:

  1. การเพิ่มประสิทธิภาพ / ความสามารถในการโปรแกรม EOA: ซึ่งรวมถึงการเปลี่ยนแปลงระดับโปรโตคอลที่ช่วยให้ EOA (บัญชีที่เป็นเอกฉันท์) สามารถกำหนดกฎความถูกต้องของตัวเองได้ ตามที่รู้จักกันในวงการพัฒนา EOA มักเป็นบัญชีที่เกี่ยวข้องกับผู้ใช้ท้ายประเภทต่าง ๆ ดังนั้น การแก้ไขปัญหาด้วยวิธีนี้จะช่วยเสริมสร้างความควบคุมของบัญชีผู้ใช้ท้ายโดยให้มีการควบคุมมากกว่าว่าจะจัดการได้ในปัจจุบัน
  2. การแปลง / การย้าย EOA: วิธีการนี้รวมถึงข้อเสนอที่มีวัตถุประสงค์เพื่อแปลง EOA ให้เป็น CA (บัญชีสัญญา) สิ่งที่สำคัญของวิธีการนี้คือบัญชีสัญญาได้รับประโยชน์ส่วนใหญ่ที่เสนอโดยบัญชีสมาร์ท ดังนั้นไม่ควรที่จะซับซ้อนเรื่องใดๆ เพิ่มเติม; ทุกคนควรใช้บัญชีสัญญาเป็นบัญชีหลักของตนเอง (ผ่านกระเป๋าสมาร์ทคอนแทร็ค)

วิธีการนี้มีกลไกที่อนุญาตให้ EOA ทำการเปลี่ยนแปลงเป็น CA โดยไม่ต้องย้ายสินทรัพย์ เช่นEIP 7377และEIP 5003 (เมื่อพิจารณาร่วมกับ EIP 3074)

  1. บัญชีสมาร์ท: กลุ่มของข้อเสนอเหล่านี้รวมถึงการออกแบบที่ทำให้ทั้ง EOAs และ CAs สามารถทำหน้าที่เสมือน "บัญชีสมาร์ท" โดยอนุญาตให้พวกเขาทำใหม่กฎความถูกต้องของพวกเขาอย่างสมบูรณ์

มีข้อเสนอต่าง ๆ ที่ผ่านมาเคยมีการสร้างบัญชีฉลาดและการสรุปบัญชีที่เข้มงวดที่ระดับโปรโตคอล;EIP-86และEIP-2938เป็นบางส่วนของสิ่งที่ถูกอ้างอิงมากขึ้น อย่างไรก็ตาม มีการต่อต้านอย่างมากเนื่องจากความซับซ้อนที่ถูกนำเข้ามาโดยการออกแบบนี้และความคิดเห็นข้างส่วนใหญ่ว่า Ethereum ยังไม่พร้อมสำหรับความซับซ้อนเช่นนี้

หลังจากที่วิทาลิคเปิดเผยเรื่องนี้อีกครั้งหลังจากการผสานERC-4337ได้ถูกเสนอเป็นรุ่นที่เปิดใช้เวอร์ชันของมาตรฐานบัญชีอัจฉริยะที่เป็นการเลือกเข้าใช้งาน เช่นกับโครงสร้าง PBS (Proposer-Builder Separation) สำหรับ MEV (Maximal Extractable Value) ดังนั้นผู้ใช้ที่ต้องการเข้าถึงประโยชน์ของบัญชีอัจฉริยะสามารถใช้ท่อไอพี ERC-4337 เพื่อนิยามตนเองในตรรกะของบัญชีและกฎความถูกต้องของธุรกรรมในโครงสร้างที่เรียกว่า UserOperation (หรือ UserOps สำหรับสั้น)

ERC 4337 นำประโยชน์ของบัญชีอัจฉริยะมาสู่ Ethereum ในปัจจุบันโดยไม่จำต้องตั้งเป็นกฎหมายอย่างซับซ้อน โดยทำหน้าที่เป็นทางเลือกนอกโปรโตคอลสำหรับบัญชีอัจฉริยะที่ตั้งเป็นกฎหมายอยู่ อย่างไรก็ตามนี้ไม่ได้หมายความว่าโครงสร้างพื้นฐานเป็นที่เหมาะสมในสถานะปัจจุบันของมันเอง เนื่องจากความซับซ้อนของมันยังคงเป็นจุดอ่อนที่สำคัญ

เพื่อจัดการกับความซับซ้อนนี้,RIP 7560ถูกเขียนขึ้นในรูปแบบที่ถูกบูรณาการเป็นเวอร์ชันศักยภาพเภท ERC 4337 ทั่ว Ethereum และ L2s ซึ่งทำให้รับมรดกจากระบบเครือข่ายการต้านสิบิลของเครือข่ายแทนที่จะต้องกำหนดชุดกฎระเบียบใหม่ (เช่น ERC 4337 ทำกับ ERC 7562)

ในรายงานนี้เราจะเน้นการสำรวจความสามารถในการโปรแกรม EOA การประเมินผลวิธีต่างๆ ที่อธิบายวิธีการแก้ไขปัญหาในบรรทัดนี้และอภิปรายคุณสมบัติและข้อเสียของแต่ละวิธีการ ในส่วนที่ 2 และ 3 ของซีรีย์นี้เราจะพูดถึงวิธีการแก้ไขปัญหาในกลุ่มอื่น ๆ สองของแนวคิดการสรุปบัญชีที่กำลังสำรวจอยู่ใน Ethereum

คู่มือเบื้องต้นเกี่ยวกับบัญชีและธุรกรรม Ethereum

เพื่อหาสิ่งที่สามารถถอดรายละเอียดได้ เราต้องมีภาพรวม (บางส่วน) ของการออกแบบบัญชีปัจจุบัน ส่วนนี้จะบริการเป็นการทบทวนของบัญชีบน Ethereum และวิธีที่ธุรกรรมของพวกเขาถูกตรวจสอบและดำเนินการ

บัญชี Ethereum เป็นส่วนประกอบที่มียอดเงิน ether (ETH) และความสามารถในการส่งธุรกรรมบนบล็อกเชน Ethereum พวกเขาถูกแทนด้วย "ที่อยู่" ฐานสิบหก ตัวอักษรฮีกซาเดึกซิมัล ซึ่งทำหน้าที่เป็นตัวชี้ที่ไม่ซ้ำซากของสิทธิ์การถือครองและธุรกรรมของบัญชี

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

  1. nonce: เคาน์เตอร์เชิงเส้นที่ใช้เพื่อแสดงจำนวนการทำธุรกรรมออกจากบัญชี นอกจากนี้ยังเป็นสิ่งสำคัญในการป้องกันการโจมตีแบบเล่นซ้ำ
  2. balance: จำนวน ether (ETH) ที่มีค่าในหน่วย wei ที่เป็นเจ้าของโดยบัญชี
  3. codeHash: แฮชของรหัสปฏิบัติการ EVM ที่มีอยู่ในบัญชี EVM (Ethereum Virtual Machine) เป็นสภาพแวดล้อมการดําเนินการตามความต้องการของ Ethereum ที่รับผิดชอบในการจัดการการเปลี่ยนสถานะที่ซับซ้อนนอกเหนือจากธุรกรรม "ส่ง" อย่างง่าย เนื้อหารหัสของบัญชีได้รับการตั้งโปรแกรมอย่างไม่เปลี่ยนแปลงเพื่อดําเนินการเปลี่ยนสถานะในรูปแบบเฉพาะบน Ethereum blockchain ผ่าน EVM
  4. storageHash: การเข้ารหัสของรากการจัดเก็บบัญชี ใช้เพื่อแทนเนื้อหาการจัดเก็บของบัญชีในรูปแบบของการเข้ารหัส 256 บิตของต้นไม้ merkle patricia trie's root node อย่างง่าย ๆ คือการเข้ารหัสของข้อมูลตัวแปรสถานะที่เกี่ยวข้องกับเนื้อหาของโค้ดบัญชี

เนื้อหาของสี่ฟิลด์เหล่านี้ถูกใช้ในการกำหนดประเภทของบัญชีและในที่สุดก็ไปสู่การกำหนดขอบเขตของความสามารถของมัน ดังนั้น ประเภทของบัญชี Ethereum มีสองประเภท:

  1. บัญชีที่เป็นเจ้าของภายนอก (EOAs) - ซึ่งถูกเริ่มต้นในรูปแบบคีย์คริปโตกราฟิก:
  • คีย์ส่วนตัวที่เป็นตัวเข้ารหัสและมีลักษณะสุ่มได้อย่างเป็นพิสัย 64 อักขระฮ็อกซ์ และคู่ค้าของมัน;
  • คีย์สาธารณะที่ได้รับจากคีย์ส่วนตัวโดยใช้ ECDSA (Elliptic Curve Digital Signature Algorithm)

EOAs มีฟิลด์ codeHash และ storageHash ที่ว่างเปล่าและสามารถควบคุมได้โดยทุกคนที่มีคีย์ส่วนตัวเท่านั้น ที่อยู่ของพวกเขาสามารถรับได้จากคีย์สาธารณะที่เกี่ยวข้องโดยนําหน้า "0x" เป็นอักขระยี่สิบตัวสุดท้ายของแฮช keccak-256 ของคีย์สาธารณะของบัญชี

  1. บัญชีสัญญา (CAs) - ซึ่งสามารถสร้างได้เฉพาะโดย EOA ที่มีอยู่ก่อน การเริ่มต้นเกิดจาก EOA การจัดลงโค้ดที่สามารถดำเนินการบน EVM โค้ดเนื้อหา (ที่จัดเก็บเป็น codeHash) ถูกฝังอยู่ใน EVM และรับผิดชอบการควบคุมบัญชีโดยกำหนดตรรกะและการติดต่อของมัน

ธุรกรรมของพวกเขาเป็นระบบดึงเอาเท่านั้นและขึ้นอยู่กับตรรกะของรหัสที่พวกเขาประยุกต์ใช้

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

ที่อยู่ของ CA ได้รับการสร้างขึ้นจากที่อยู่ผู้สร้างและ nonce ของมันจนถึงจุดที่สัญญาถูกติดตั้ง

ธุรกรรม

เร็ว ๆ นี้เราได้อธิบายบัญชีเป็นสิ่งที่มีความสามารถในการส่งธุรกรรมข้าม Ethereum ดังนั้นเราสามารถเข้าใจได้ว่าจุดประสงค์หลักของบัญชีคือการส่งและรับธุรกรรม ในขณะที่บล็อกเชนทำหน้าที่เป็นสมุดรายชื่อที่บันทึกประวัติธุรกรรมและอธิบายวิธีการเปลี่ยนแปลงเขตข้อมูลบัญชีตามกฎหมายที่อธิบายไว้ในข้อกำหนดโปรโตคอลบล็อกเชน

ดังนั้น "ธุรกรรม" เหล่านี้คืออะไร?

ธุรกรรมคือการดำเนินการที่ส่งมาจากบัญชี ซึ่งทำให้เกิดการเปลี่ยนแปลงใน “สถานะ” ของเครือข่าย พวกเขาคือคำสั่งที่ถูกเข้ารหัสด้วยวิธีการสัญลักษณ์จากบัญชี ซึ่งส่งผลให้เกิดการอัพเดตสถานะทั่วเครือข่ายเมื่อถูกปฏิบัติ

การได้รับอนุญาตโดยไม่จำเป็นต้องเสียค่าสิ่งที่ผิดหวังเกิดขึ้น การจัดการกับสิ่งเหล่านี้จำเป็นต้องกำหนดหลักเกณฑ์ที่เข้มงวด (หรือกฎความถูกต้อง) สำหรับการปฏิสัมพันธ์ในสภาวะเช่นนี้

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

บัญชีและความถูกต้องของธุรกรรม

บน Ethereum บัญชีผู้ใช้จะถูกปรับแต่งให้ใช้งานง่าย เนื่องจากมีการติดต่อกับผู้ใช้สุดท้าย พวกเขาสามารถส่งธุรกรรมในลักษณะที่เฉพาะเจาะจงและทำงานอิสระได้อย่างสมบูรณ์ พวกเขายังสามารถสร้างขึ้นในรูปแบบท้องถิ่น วิธีที่พบบ่อยคือการใช้ผู้ให้บริการกระเป๋าเงิน เช่น MetaMask, Rainbow, Rabby เป็นต้น

อีกด้านหนึ่ง บัญชีสัญญาสามารถส่งธุรกรรมที่ได้รับอนุญาตจากตรรกะของตัวเองเท่านั้น ตามคำเรียกเข้ามา นอกจากนี้ สามารถสร้างได้เฉพาะโดย EOA ที่มียอดเงินเพียงพอในการชำระเงินสำหรับการจัดเก็บสถานะของมัน

คำอธิบายระดับสูงกว่านั้นคือ EOAs สามารถเก็บยอดคงเหลือได้เท่านั้น ในขณะที่ CAs สามารถเก็บยอดคงเหลือและตรรกะที่กำหนดวิธีการใช้เงินได้

คุณสมบัติเหล่านี้เกิดจากพารามิเตอร์ตรรกะต่อไปนี้ที่กำหนดกฎเกณฑ์ในการดำเนินการของบัญชีที่ต้องปฏิบัติ

  1. ตรรกะการรับรองความถูกต้อง - ใช้ในการกำหนดวิธีที่บัญชีพิสูจน์ตัวตนกับเครือข่ายขณะที่เปลี่ยนยอดเงินและ/หรือตรรกะ
  2. ตรรกะการให้สิทธิ์ - ใช้ในการกำหนดนโยบายการเข้าถึงบัญชี นั่นคือใครสามารถเข้าถึงและทำการเปลี่ยนแปลงยอดเงินและ/หรือตรรกะของบัญชี
  3. ตรรกะของ Nonce - ซึ่งกำหนดลำดับในการดำเนินการธุรกรรมจากบัญชี
  4. ตรรกะการชำระค่า Gas - ใช้กำหนดผู้รับผิดชอบในการชำระค่า Gas สำหรับการตกลงการชำระเงิน
  5. ตรรกะการดำเนินการ - ใช้ในการกำหนดรูปแบบของธุรกรรมที่บัญชีสามารถส่งได้หรือวิธีการดำเนินการของธุรกรรม

พารามิเตอร์เหล่านี้ถูกออกแบบให้เป็นแบบเคร่งครัดสำหรับบัญชีผู้ใช้เท่านั้น:

  • การรับรองและอนุญาตถูกจัดให้โดยคีย์ส่วนตัวที่ใช้ ECDSA นั่นคือผู้ใช้ที่ต้องการที่จะส่งธุรกรรมจากบัญชี EOA ของตนต้องใช้คีย์ส่วนตัวของตนเพื่อเข้าถึงบัญชีและแสดงว่าพวกเขามีสิทธิ์ในการดำเนินการทำการเปลี่ยนแปลงใด ๆ กับยอดเงิน
  • ตรรกะนอนซ์นี้ดำเนินการตามแผนการนับลำดับที่อนุญาตให้มีการดำเนินการเพียงหนึ่งรายการต่อนอนซ์ที่ไม่ซ้ำกันเพื่อดำเนินการต่อเนื่องต่อบัญชี
  • ตรรกะการชำระค่า Gas ระบุว่าค่าธรรมเนียม Gas สำหรับธุรกรรมต้องถูกชำระโดยบัญชีผู้ส่ง/บัญชีต้นทาง
  • ตรรกะการดำเนินการระบุว่า EOAs สามารถส่งแบบธุรกรรมต่อไปนี้เท่านั้น:
  1. การโอนทั่วไประหว่างสองบัญชี EOA
  2. การส่งตัวลงทะเบียน
  3. การเรียกใช้สัญญาที่เป้าหมายถึงตรรกะของบัญชีสัญญาที่ถูกติดตั้ง

โดยทั่วไปแล้ว ตรรกะการดำเนินการของ EOAs จำกัดพวกเขาให้ทำธุรกรรมหนึ่งต่อลายเซ็นต่อมูลค่า

ส่วนอื่น ๆ ก็มีความยืดหยุ่นมากขึ้นเกี่ยวกับพารามิเตอร์เหล่านี้:

  • การตรวจสอบตัวตนไม่จำเป็น เนื่องจากธุรกรรมของพวกเขาเป็นการดึงขึ้นมาตามธรรมชาติ
  • การให้สิทธิ์สำหรับ CA สามารถทำได้ในรูปแบบสองรูปแบบ:
  1. สามารถ "เรียก" โค้ดเนื้อหาของ CAs (หรือดำเนินการสัญญาอัจฉริยะของมัน) ซึ่งขึ้นอยู่กับตรรกะของสัญญาอัจฉริยะของบัญชีและองค์ประกอบของมัน
  2. ความสามารถในการทำการเปลี่ยนแปลงเนื้อหาของภายในรหัส CA ซึ่งขึ้นอยู่กับว่ารหัสเนื้อหาสามารถอัปเกรดได้หรือไม่

ในกรณีที่สามารถปฏิบัติได้มากที่สุด ตรรกะที่ใช้ในกรณีนี้คือ แผนการลายเซ็นที่หลายอย่างที่ระบุว่าจำเป็นต้องมีลายเซ็นที่ถูกต้อง M ของ N (เมื่อ M < N) จากบัญชีที่เฉพาะเจาะจง (โดยทั่วไปจะเป็นบัญชีภายนอก) เพื่อให้การเปลี่ยนแปลงของตรรกะของ CA เป็นไปได้

  • การจัดลำดับธุรกรรมของพวกเขาเชื่อมโยงกันอย่างหลวกหน้าว่าง. CA เองสามารถส่งธุรกรรมไปยังผู้โทรเรียกหลายคนในหลายเรียก เจ้าของแต่ละเรียกจะถูก จำกัด โดยอิงตามความสามารถของตนเอง
  • การชำระเงิน Gas มักถูกจัดการโดยผู้เรียกใช้ตัวตรวจสอบของ CA
  • ตรรกะการดำเนินการของ CAs มีความหลากหลายมากขึ้นเพื่อเปิดโอกาสให้มีการปรับปรุง UX เช่น ธุรกรรม multicall และ ธุรกรรม atomic

ในการประเมินคุณลักษณะเหล่านี้ เราพบว่าทุกประเภทของบัญชีถูกออกแบบให้มีการตัดสินใจระหว่างความอิสระและความสามารถในการโปรแกรม

EOAs มีอิสระอย่างเต็มที่ แต่ความสามารถในการตั้งโปรแกรมได้จํากัด พวกเขาสามารถอนุมัติและส่งธุรกรรมได้ทุกเมื่อที่ต้องการ แต่ธุรกรรมเหล่านี้ต้องเป็นไปตามรูปแบบที่เข้มงวดจึงจะถือว่าถูกต้อง CA มีความสามารถในการตั้งโปรแกรมได้เต็มรูปแบบ (จํากัด โดยการออกแบบของ EVM เท่านั้น) แต่ความเป็นอิสระที่ จํากัด ธุรกรรมของพวกเขาไม่จําเป็นต้องทําตามรูปแบบที่เข้มงวดใด ๆ แต่สามารถส่งออกได้เนื่องจากตรรกะของพวกเขาถูกเรียกก่อน

ในหัวข้อย่อยต่อไปเราจะศึกษาผลกระทบของการเลือกออกแบบเหล่านี้เพื่อเข้าใจเต็มความหมายของการพิจารณาของแต่ละ EIP ที่ได้ถูกพูดถึงในซีรีส์นี้

Ethereum’s account dilemma

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

เหมือนที่เรากล่าวไว้ก่อนหน้านี้ EOAs ถูกออกแบบให้เป็นบัญชีชั้นนำที่เน้นการใช้งานสำหรับผู้ใช้งานสุดท้าย แอปพลิเคชันถูกออกแบบให้สามารถปฏิสัมพันธ์กับบัญชีเหล่านี้ได้อย่างง่ายดาย ไม่มีความซับซ้อนเกือบจะไม่มีค่าใช้จ่ายในการสร้างบัญชีเหล่านี้ อย่างไรก็ตามความเรียบง่ายของมันมาพร้อมกับการสูญเสียความเป็นเอกลักษณ์อย่างมากเนื่องจากถูกออกแบบให้เป็นอัตรายากันอย่างเคร่งครัด

บางส่วนของความกังวลเกี่ยวกับพวกเขาคือ:

  1. ความเสี่ยงต่อการโจมตีด้วยเทคโนโลยีควอนตัม - การใช้ระบบลายเซ็น ECDSA โดยคู่คีย์ของพวกเขาไม่ได้รับการป้องกันจากการโจมตีด้วยเทคโนโลยีควอนตัม และด้วยไทม์ไลน์ที่เหมาะสมอย่างแน่นอนในการที่ระบบควอนตัมสำหรับเชิงอุตสาหกรรมจะถูกพัฒนาขึ้นภายใน 5-10 ปี นี้เป็นอันตรายอย่างมากต่อ Ethereum และแอปพลิเคชันของมันที่พึ่งพากับระบบ ECDSA สำหรับพิสูจน์และรักษาความปลอดภัยทางการเข้ารหัสของมันอย่างมาก
  2. ขาดการแสดงออก - รูปแบบที่มีความเคร่งครัดของกฎความถูกต้องของบัญชีชนิด EOA ทำให้ผู้ใช้ไม่สามารถแสดงการทำธุรกรรมของพวกเขาได้โดยสั้นกระชับมากขึ้นผ่านคุณลักษณะเช่นความอะตอมิคของการทำธุรกรรมแบบ batch และการมอบหมายทำธุรกรรม
  3. ความยั่งยืนในตนเอง – ทุกคนมีส่วนแบ่งที่ยุติธรรมของช่วงเวลา "ฉันหมดแก๊ส" ระหว่างการทําธุรกรรม นี่เป็นเพราะข้อกําหนดที่ EOAs ชําระก๊าซสําหรับการทําธุรกรรมด้วยตนเองซึ่งจะไม่ถามมากนักว่าอีเธอร์ (ETH) ไม่ใช่สกุลเงินก๊าซที่ยอมรับได้เพียงอย่างเดียวหรือไม่ แม้ว่านี่จะเป็นปัญหาทั่วไปเกี่ยวกับเครื่องสถานะตามบัญชี (และแม้แต่เครื่องที่ใช้ UTXO) แต่ Ethereum ก็ตั้งใจที่จะแตกต่างกันเสมอ

ไม่ใช่ทุกคนที่ต้องการ (หรือจะสามารถ) ถือ ETH เสมอ (ฉันหมายถึงดูการเคลื่อนไหวของราคานั้น) ดังนั้นวิธีแก้ปัญหาที่เป็นไปได้คือการอนุญาตให้มีสกุลเงินก๊าซหลายสกุล (ยากเกินไปแบ่งค่าคงที่มากเกินไปตามที่อธิบายไว้ในส่วน "สกุลเงิน" ที่นี่), หรือเพื่ออนุญาตให้การชำระเงินในรูปแบบแก๊สสามารถเรียกเก็บได้โดยบัญชีอื่นที่ไม่ใช่บัญชีต้นทางของธุรกรรม

ในอีกด้านหนึ่งของสเปกตรัมบัญชี CA กําหนดเป้าหมายนักพัฒนาและฐานผู้ใช้ด้านเทคนิคมากขึ้น พวกเขาทําหน้าที่เป็นยานพาหนะสําหรับสัญญาอัจฉริยะ (เช่นเราถือว่าสัญญาอัจฉริยะเป็นเนื้อหาตรรกะหรือรหัสที่มีอยู่) และสามารถใช้รูปแบบธุรกรรมใหม่ตามที่เปิดใช้งานโดย EVM

อย่างไรก็ตาม สำหรับคุณลักษณะเหล่านี้ทั้งหมดพวกเขาก็คือบัญชีชั้นสองที่ได้รับการมองว่าเป็นสิ่งที่ยิ่งใหญ่แต่ก็ไม่มีอิสระ บางข้อเสียของพวกเขามีดังนี้:

  1. ขาดความเป็นอิสระอย่างสมบูรณ์ - CAs ไม่สามารถเริ่มทำธุรกรรมได้ พวกเขาสามารถส่งธุรกรรมออกไปตามการเรียกใช้ในแบบที่เฉพาะเจาะจงเท่านั้น
  2. ความอ่อนไหวต่อข้อผิดพลาดของมนุษย์ในตรรกะของพวกเขา - ความหยิ่งรอบไม่ได้นำไปสู่การกำหนดค่าค่าคงที่ที่ไม่ถูกต้องและตรรกะอื่น ๆ ที่นั้น ซึ่งได้นำไปสู่การสูญเสียมหาศาลเป็นพันล้านดอลลาร์เนื่องจากการใช้ช่องโหว่และการโจมตีสมาร์ทคอนแทรค อย่างไรก็ตาม นี่เป็นเรื่องที่แตกต่างเกือบทั้งหมดซึ่งอยู่พร้อมกันกับขอบเขตของเราที่นี่

หลังจากที่ได้ทบทวนการเลือกออกแบบที่นำไปสู่ปัญหาที่กำหนดไว้ในส่วนย่อยนี้แล้ว เราสามารถดำเนินการประเมินวิธีการที่เสนอ

ไทม์ไลน์ของแนวคิดการสรุปบัญชี

แนวคิดของนามธรรมบัญชี (ผ่านบัญชีอัจฉริยะอย่างน้อย) เป็นส่วนสําคัญของแผนงานของ Ethereum มาโดยตลอด ตํานานคือความซับซ้อนโดยรอบการใช้งานขู่ว่าจะชะลอการเปิดตัวของ Ethereum ต่อไปดังนั้นจึงถูกทิ้งสําหรับการออกแบบปัจจุบันด้วยบัญชีที่แตกต่างกันซึ่งมีฟังก์ชันการทํางานที่แตกต่างกัน มันล่าช้าอีกครั้งโดยการมุ่งเน้นของ Ethereum ใน The Merge และตอนนี้กําลังกลับมาเป็นส่วนหนึ่งของการอัพเกรดครั้งใหญ่ครั้งต่อไปของเครือข่าย Pectra อย่างไรก็ตามความซับซ้อนของมันยังคงถือเป็นข้อเสียเปรียบที่สําคัญที่ป้องกันไม่ให้มีการประดิษฐานโดยเฉพาะอย่างยิ่งเมื่อ Ethereum ได้เปลี่ยนไปใช้แผนงานที่มีการรวบรวมเป็นศูนย์กลาง

ความต้องการขณะนี้เป็นสองส่วน:

  1. มาตรฐานบัญชีต้องมีการแสดงออกมากขึ้น แต่ไม่สูญเสียความอิสระ มาตรฐานใหม่ที่ปิดช่องโหว่ระหว่างมาตรฐาน EOA และ CA
  2. มาตรฐานใหม่จะต้องเชื่อมสะพานระหว่าง EOAs และ CAs โดยยังคงเป็นไปได้ที่สอดคล้องกับ Ethereum และระบบนอ L2 ของมันอย่างสมบูรณ์

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

แนวคิดการสรุปบัญชีมีเป้าหมายที่จะรวมคุณสมบัติที่ดีที่สุดของบัญชีภายในและบัญชีภายนอกเข้าด้วยกันในมาตรฐานบัญชีใหม่ - บัญชีอัจฉริยะ ซึ่งอนุญาตให้มีการแยกแยะสมบัติของบัญชีใดๆ เป็นเต็มหรือบางส่วนเป็นตัวบางอย่างไปยังตรรกะการตรวจสอบและการกระทำ ดังนั้นบัญชีสามารถกำหนดกฎความถูกต้องของตนเองได้ - ตามที่ EVM อนุญาต - อย่างเช่นบัญชีสัญญา ในขณะที่ยังคงเป็นอิสระอย่างเต็มที่เหมือนกับบัญชีที่เป็นเจ้าของภายนอก

มักมีความสับสนเกี่ยวกับความแตกต่างระหว่างบัญชีฉลาดและกระเป๋าเงินสมาร์ทคอนแทร็ค ดังนั้นเราจะอธิบายโดยชัดเจนถึงความแตกต่างเหล่านี้ด้านล่าง

  • บัญชีฉลาดคือบัญชี Ethereum ที่ถูกสร้างขึ้นเพื่อให้มีความสามารถในการโปรแกรมและอิสระในการดำเนินการเทียบเท่ากัน ความคิดคือทั้งสอง บัญชีบุคคล (EOAs) และ บัญชีค่า (CAs) สามารถกลายเป็นบัญชีฉลาดได้โดยง่ายๆ โดยการใช้กลไกบางอย่าง (เช่น ERC 4337) ที่อนุญาตให้พวกเขาแทนกฎความถูกต้องที่ถูกบังคับจากเครือข่ายด้วยกฎความถูกต้องที่ทำขึ้นเพื่อตอบสนองตามความเหมาะสม
  • ในทางกลับกันกระเป๋าเงินสัญญาอัจฉริยะเป็นเพียงผู้ให้บริการกระเป๋าเงินที่ทําหน้าที่เป็นอินเทอร์เฟซสําหรับบัญชีสัญญา (ใช่กระเป๋าเงินไม่ใช่บัญชี)

การทำให้กระเป๋าเงินสมาร์ทคอนแทรกต์เข้าสู่การค้าหลายๆ ด้านทำให้ผู้ใช้ที่ไม่เชี่ยวชาญด้านเทคนิคมีโอกาสใช้ประโยชน์จากคุณสมบัติที่พวกเขามี อย่างไรก็ตาม พวกเขายังคงเผชิญกับอุปสรรค์ที่เกี่ยวข้องกับ CAs

กลับไปที่การสนทนา ก่อนหน้านี้เราได้กล่าวถึงพารามิเตอร์ที่ใช้ในการกําหนดกฎความถูกต้องของการทําธุรกรรมของบัญชี:

  • การตรวจสอบ
  • การอนุญาต
  • ตรรกะ Nonce
  • ตรรกะการชำระค่า Gas
  • ตรรกะการดำเนินงาน

ค่าของพารามิเตอร์ 4 ค่าแรกสามารถเรียกรวมกันได้เป็นตรรกะการตรวจสอบบัญชี ซึ่งเป็นการตรวจสอบที่เกิดขึ้นก่อนที่การดำเนินการของธุรกรรมจะเริ่มต้น

พารามิเตอร์สุดท้ายกําหนดวิธีดําเนินการธุรกรรมเพื่อดําเนินการต่อ

ในการแนะนำ เราได้ให้ภาพรวมระดับสูงของทิวทัศน์ AA ปัจจุบันในรูปแบบของการจัดประเภทของต่าง ๆ สำหรับการออกแบบที่เสนออย่างต่าง ๆ เราจะใส่ใจกับคลาสแรกของ sol ชั่วคราวสำหรับการลงทุนของ Ethereum's account dilemma- EOA programmability

EOA ที่สามารถโปรแกรมได้

เรื่องที่น่าสนใจที่สุดของ Ethereum คือระบบนิเวศ DeFi ที่ยังเป็นเด็ก ๆ แต่มีชีวิตชีวาที่มีหลากหลายแอปพลิเคชันที่กระจายแบบไม่มีผู้ควบคุม ซึ่งเป็นจุดรวมเงินสำคัญ ส่วนใหญ่ของ DApps เหล่านี้ถูกจัดเตรียมให้บริการ EOAs ดังนั้นพวกเขายากที่จะเชื่อมต่อกับ CAs และบัญชีสมาร์ท แม้ว่ากระเป๋าสมาร์ทคอนแทร็คจะช่วย CAs ในกรณีนี้ แต่พวกเขามาพร้อมกับข้อจำกัดของตัวเองและ UX ที่แตกต่างกันอย่างสิ้นเชิง

โซลูชันชั่วคราวที่กําลังสํารวจในขณะที่ทั้ง DApps และผู้ให้บริการกระเป๋าเงินคุ้นเคยกับมาตรฐานบัญชีอัจฉริยะคือการให้การปรับปรุงชั่วคราวแก่ EOAs ที่ช่วยให้พวกเขาสามารถเอาชนะข้อ จํากัด ที่กําหนดไว้ส่วนใหญ่ไม่ว่าจะเป็นการตรวจสอบความถูกต้องหรือตรรกะการดําเนินการ

ต่อไปนี้เราจะพิจารณาข้อมูลสเปคของ EIP สามฉบับที่ให้เส้นทางที่สามารถดำเนินการไปยัง EOA programmability ได้; จากที่รู้จักน้อยกว่าEIP 5806, สำหรับคนที่ทะเยอทะยานEIP 3074และในที่สุดก็ถึงชัยชนะEIP 7702.

การโปรแกรมเมอร์ใช้งานผ่าน EIP-5806

ข้อเสนอนี้มีจุดมุ่งหมายที่จะนำความสามารถมากขึ้นสู่มาตรฐาน EOA โดยการอนุญาตให้มันทำการเรียก delegate ไปยังตัวต้นแบบบัญชีของสัญญา (สัญญาอัจฉริยะของมัน) ซึ่งทำให้สัญญาอัจฉริยะถูกดำเนินการในบริบทของ EOA ผู้เรียกหรือก็คือ EOA ยังคงควบคุมตรรกะการตรวจสอบของมันในขณะที่ตรรกะการดำเนินการของมันถูกจัดการโดยตรรกะต้นแบบ CA ที่เกี่ยวข้อง

ก่อนที่เราจะดำเนินไปอีกต่อไป ให้เราไปเที่ยววัยระวังของวงการวิวัฒนาการของ Ethereum กันEIP-7.

EIP-7 ข้อเสนอให้สร้างคำสั่ง 0xf4/DELEgateCALL ซึ่งใช้ส่งการโทรข้อความเข้าบัญชีหลักด้วยตรรกะของบัญชีรอง พร้อมทั้งรักษาค่าของฟิลด์ [sender] และ [value] ของบัญชีหลัก

กล่าวอีกอย่าง บัญชีหลัก “รับมรดก” (หรือยืมถ้าคุณต้องการ) ตรรกะของบัญชีย่อมสมความกับบัญชีรองเป็นระยะเวลาบาง ๆ ตามที่ระบุไว้ในการเรียกข้อความ ดังนั้นตรรกะของบัญชีหลักก็จะถูกดำเนินการในบริบทของบัญชรอง

รหัสโอป๊คนี้ช่วยให้นักพัฒนา dApp สามารถแบ่งตามตัวแยกต่างๆของโลจิกของแอปพลิเคชันของพวกเขาได้ โดยยังคงมีความเชื่อมโยงกัน เพื่อให้สามารถหลีกเลี่ยงข้อจำกัดขนาดโค้ดและข้อจำกัดของแก๊สได้อย่างง่ายดาย

EIP-5806 สรุป

ดี ดังนั้น delegate calls ทำให้ CAs สามารถทำงานร่วมกันได้อย่างไรบ้าง? นั่นคือ EIP-5806 ใช้ EIP-7 เป็นแรงบันดาลใจเพื่อ предложитьการขยายฟังก์ชั่นของ delegate call ไปสู่ EOAs ด้วย; กล่าวคือ ให้เราให้ EOAs สามารถทำงานร่วมกับ CAs ได้เช่นกัน เพราะทำไมไม่呢

ข้อมูลสเปค

EIP 5806 นำเสนอเป็นวิธีใหม่รองรับตามมาตรฐาน EIP-2718ประเภทการทำธุรกรรมที่ถูกแพ็คตามนี้:

rlp([chainID, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, data, access_list, signature_y_parity, signature_r, signature_s]).

ธุรกรรมเหล่านี้ถูกออกแบบมาเพื่อให้ฟิลด์ [to] – ซึ่งแทนที่อยู่ผู้รับ – สามารถรับเฉพาะที่อยู่เป็นข้อมูลขนาด 20 ไบต์เท่านั้น ซึ่งทำให้ผู้ส่งไม่สามารถใช้คำสั่ง CREATE ได้

แรงจูงใจของทุกส่วนประกอบของระบบ RLP คือดังต่อไปนี้:

  • chainID: ไอดีที่เป็นไปตามมาตรฐาน EIP-115 ของเครือข่ายปัจจุบันที่ขยายความยาวให้เป็น 32 ไบต์ ค่านี้ช่วยป้องกันการโจมตีแบบเล่นซ้ำ ดังนั้นจึงไม่สามารถทำซ้ำการทำธุรกรรมบนเครือข่ายเดิมบนเครือข่าย EVM สำรองที่มีประวัติคล้ายกันและมีความปลอดภัยในเชิงเศรษฐกิจน้อยกว่า
  • nonce: ตัวระบุที่ไม่ซ้ำกันสำหรับแต่ละธุรกรรมซึ่งยังให้ความปกป้องจากการโจมตีแบบเล่นซ้ำ
  • max_priority_fee_per_gas และ max_fee_per_gas: ค่าค่าธรรมเนียมแก๊สที่ธุรกรรม EIP-5806 ต้องจ่ายสำหรับการสั่งซื้อและการรวมอย่างเหมาะสม
  • gas_limit: จำนวน gas สูงสุดที่ธุรกรรมประเภท 5806 ตัวเดียวสามารถใช้ได้
  • ปลายทาง: ผู้รับธุรกรรม
  • ข้อมูล: เนื้อหาโค้ดปฏิบัติการ
  • access_list: ตัวแทนที่ได้รับอนุญาตเงื่อนไขในการดำเนินการธุรกรรม EIP-5806
  • signature_y_parity, signature_r และ signature_s: สามค่าที่ร่วมกันแทนลายเซ็นต์ secp256k1 บนข้อความ - keccak256 (TX_TYPE || rlp ([chainID, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, data, access_list]))

ในขณะที่การห่อหุ้มการทำธุรกรรม EIP-5806 ในซอง EIP-2718 ช่วยให้เข้ากันได้ยิ่งกับเวอร์ชันย้อนหลังได้มาก การใช้งาน EOA ไม่เทียบเท่ากับ CA ดังนั้นจำเป็นต้องกำหนดข้อจำกัดบางอย่างในวิธีที่ EOA ใช้ delegate call เพื่อป้องกันการเสียหายที่ไม่เปลี่ยนแปลง

การจำกัดเหล่านี้เป็นเป้าหมายของ opcodes ต่อไปนี้:

  • SSTORE/0x55: opcode นี้ช่วยให้บัญชีสามารถบันทึกค่าลงในที่เก็บข้อมูลได้ มีข้อ จํากัด ในการทําธุรกรรม EIP-5806 เพื่อป้องกันไม่ให้ EOAs ตั้งค่า / เข้าถึงที่เก็บข้อมูลโดยใช้การเรียกผู้รับมอบสิทธิ์ดังนั้นจึงป้องกันปัญหาที่อาจเกิดขึ้นในอนาคตเนื่องจากการโยกย้ายบัญชี
  • CREATE/0xF0, CREATE2/0xF5 และ SELFDESTRUCT/0xFF: opcodes เหล่านี้อนุญาตให้ผู้โทรสร้างบัญชีใหม่ได้อย่างกว้างขวาง การเข้าถึงสิ่งเหล่านี้ถูก จํากัด เพื่อป้องกันการเปลี่ยนแปลง nonce ของ EOA ในกรอบการดําเนินการที่แตกต่างกัน (การสร้าง / ทําลายสัญญาในกรณีนี้) ในขณะที่กําลังทําธุรกรรม EIP-5806 เพื่อป้องกันการยกเลิกความคาดหวังว่าธุรกรรมจะดําเนินการอย่างต่อเนื่อง

กรณีการใช้งานที่เป็นไปได้

ความสามารถหลักของ EIP 5806 คือการสรุปการดำเนินการสำหรับ EOAs โดยให้ EOAs สามารถที่จะเชื่อถือได้ในการติดต่อสื่อสารกับสัญญาอัจฉริยะเกินกว่าการเรียกใช้งานเรียบง่าย ๆ ไปยังตรรกะของพวกเขา ซึ่งให้คุณสมบัติเช่น:

  • การดำเนินการที่เป็นเงื่อนไขของธุรกรรม
  • การแบทช์ธุรกรรม
  • ธุรกรรม Multicall (เช่น อนุมัติและเรียกใช้)

วิจารณ์

การเปลี่ยนแปลงที่เสนอโดย EIP-5806 ในขณะที่เปิดใช้คุณลักษณะที่จำเป็น ไม่ได้เป็นสิ่งใหม่เป็นพิเศษมาก; ความเป็นอยู่ของมันขึ้นอยู่กับ EIP-7 ที่ทำงานอยู่แล้ว สิ่งนี้ทำให้มันผ่านไปบางส่วนของอุปสรรคที่อาจเกิดขึ้นได้หลายอย่าง

หนึ่งในข้อกังวลหลักที่เปล่งออกมาในช่วงแรกคือความเสี่ยงที่อาจเกิดขึ้นในการอนุญาตให้ EOAs เข้าถึงพื้นที่เก็บข้อมูลและเปลี่ยนแปลงได้เช่นเดียวกับ CA ในปัจจุบัน สิ่งนี้ทําลายความแปรปรวนของเครือข่ายจํานวนมากเกี่ยวกับวิธีที่ EOAs ทําธุรกรรมและได้รับการจัดการโดยการแนะนําข้อ จํากัด ที่กล่าวถึงในส่วนย่อยก่อนหน้า

การวิพากษ์วิจารณ์ครั้งที่สอง (ซึ่งเป็นดาบสองคมเล็กน้อย) คือความเรียบง่ายของ EIP-5806 มีความรู้สึกบางอย่างว่ารางวัลเนื่องจากการยอมรับ EIP-5806 อาจไม่คุ้มค่ากับค่าใช้จ่ายเนื่องจากมันเปิดใช้งานเฉพาะการดําเนินการที่เป็นนามธรรมและไม่มากอื่น ๆ ข้อ จํากัด ความถูกต้องอื่น ๆ ทั้งหมดยังคงกําหนดเครือข่ายสําหรับ EOAs ซึ่งเลือกใช้ EIP-5806 ตรงกันข้ามกับ EIPs อื่น ๆ ที่ค่อนข้างคล้ายกันซึ่งเราพูดถึงในส่วนย่อยต่อไปนี้

ความสามารถในการโปรแกรมแบบ EIP-3074

EIP-3074 ข้อเสนอให้ EOAs สามารถมอบหมายงานการตรวจสอบส่วนใหญ่ของตนเองให้กับบัญชีสัญญาที่เชี่ยวชาญ เรียกว่า invokers โดยการใช้ตรรกะการอนุญาตของตัวหลักสำหรับรูปแบบของธุรกรรมที่เฉพาะเจาะจง

มันทำได้โดยการลงนามเข้ากันกับนโยบายการเข้าถึงของพวกเขาให้กับสัญญาผู้เรียกร้องซึ่งจากนั้นก็กลายเป็นความรับผิดที่กำหนดนโยบายการเข้าถึงของ EOA

EIP นี้เสนอให้เพิ่ม opcode สองตัวใหม่เข้าสู่ EVM:

  • [AUTH] ซึ่งกำหนดค่าตัวแปรของบัญชี [authorized] ให้ทำงานแทนบัญชี [authority] คนที่สอง โดยอ้างอิงจากลายเซ็น ECDSA ของบัญชีคนที่สอง
  • [AUTHCALL] ซึ่งส่ง / ดำเนินการโทรไปยังบัญชี [authority] จาก / เป็นบัญชี [authorized]

รหัสนี้สองรหัสอนุญาตให้ EOA มอบหมายควบคุมไปยัง CA ที่กำหนดไว้ล่วงหน้า และเป็นได้อย่างนั้น โดยไม่ต้องแสดงสัญญาและต้องรับผิดชอบต้นทุนและผลที่เกี่ยวข้องกับมัน

ข้อมูลจำเพาะ

EIP-3074 ช่วยให้ธุรกรรมสามารถใช้รูปแบบการเซ็นต์ [MAGIC] เพื่อป้องกันการชนกับรูปแบบการเซ็นต์ธุรกรรมอื่น ๆ บัญชีที่ใช้งานอยู่เพื่อส่งคำสั่ง [AUTHCALL] ถูกกำหนดให้เป็นฟิลด์ตัวแปรบริบทที่ชื่อ [authorized] ที่มีอยู่เฉพาะในธุรกรรมเดียวและต้องถูกกำหนดใหม่สำหรับ [AUTHCALL] ใหม่ทุกครั้ง

ก่อนที่จะตอบความซับซ้อนของแต่ละคำสั่งโค้ด นี่คือสิ่งที่เกี่ยวข้องกับธุรกรรม EIP-3074:

  • [authority]: บัญชีที่ลงลายมือหลัก (EOA) ที่มอบหมายการเข้าถึง/ควบคุมไปยังบัญชีที่สองซึ่งทั่วไปแล้วเป็นบัญชีสัญญา
  • [authorized]: บัญชีที่ [AUTHCALL] จะถูกส่งให้ดำเนินการ กล่าวคือ นั่นคือบัญชีที่แลม่วงของ [authority] ที่ใช้ประมวลผลตามตรวจสอบที่กำหนดโดย [invoker]
  • [invoker]: สัญญาย่อยหมายถึงการจัดการการโต้ตอบระหว่างบัญชี [ที่ได้รับอนุญาต] และตรรกะของ [AUTHCALL] โดยเฉพาะอย่างยิ่งในกรณีที่ตรรกะหลักของรหัสสัญญาหลังคือการสนับสนุนก๊าซ

สัญญา Invoker จะได้รับข้อความ [AUTH] พร้อมค่า [COMMIT] จาก [authority] โดยค่านี้จะกำหนดข้อจำกัดที่บัญชีต้องการวางไว้ในการดำเนินการ [AUTHCALL] ของ [authorized]

ดังนั้น invokers มีหน้าที่รับผิดชอบในการตรวจสอบให้แน่ใจว่า [contract_code] ที่กําหนดไว้ในบัญชี [ที่ได้รับอนุญาต] นั้นไม่เป็นอันตรายและมีความสามารถในการตอบสนองตัวแปรที่วางไว้โดยบัญชีการลงนามหลักในค่า [COMMIT]

โอ๊ปโค้ด [AUTH] มีอินพุตสามสต็อก; หรือง่ายๆ ก็คือถูกกำหนดโดยอินพุตสามอย่างที่คำนวณเป็นเอาต์พุตเดียว อินพุตเหล่านี้คือ:

  1. authority: ซึ่งเป็นที่อยู่ของ EOA ที่สร้างลายเซ็น
  2. offset
  3. ความยาว

ข้อมูลสองข้อมูลล่าสุดถูกใช้ในการอธิบายช่วงของหน่วยความจำที่สามารถแก้ไขได้ตั้งแต่ 0 ถึง 97 เมื่อ:

  1. [memory(offset : offset+1)] – [yParity]
  2. [memory(offset+1 : offset+33] – [r]
  3. [memory(offset+33 : offset+65)] - [s]
  4. [memory(offset+65 : offset+97)] – [COMMIT]

ตัวแปร [yParity], [r] และ [s] ถูกตีความรวมกันเป็นลายเซ็น ECDSA, [magic], บนเส้น曲 secp256k1 ของข้อความ:

[keccak256 (MAGIC || chainID || nonce || ที่อยู่ผู้เรียก || COMMIT)]

ที่:

  • [MAGIC] เป็นลายเซ็น ECDSA ที่เกิดจากการรวมกันของตัวแปร:
    • [chainID] ซึ่งเป็นตัวระบุที่สอดคล้องกับ EIP 115 ของเชนปัจจุบันที่ใช้เพื่อให้การป้องกันการโจมตีแบบเล่นซ้ําบนเชน EVM สํารองที่มีประวัติคล้ายกันและมีความปลอดภัยทางเศรษฐกิจน้อยกว่า
    • [nonce] ซึ่งเป็นที่อยู่ปัจจุบันของผู้ลงนามในธุรกรรม NONCE ด้านซ้ายบุนวมถึง 32 ไบต์
    • [invokerAddress] คือที่อยู่ของสัญญาที่มีตัวตนสำหรับการดำเนินการ [AUTH]
  • [COMMIT] เป็นค่าที่มีขนาด 32 ไบต์ที่ใช้ระบุเงื่อนไขการถูกต้องของธุรกรรมเพิ่มเติมในตรรกะก่อนการประมวลผลของผู้เรียกใช้งาน

หากลายเซ็นที่คำนวณได้ถูกต้องและที่อยู่ของผู้เซ็นเท่ากับ [authority] ฟิลด์ [authorized] จะถูกอัปเดตเป็นค่าที่ให้มาจาก [authority] หากไม่เป็นไปตามเงื่อนไขเหล่านี้ใด ๆ [authorized] ฟิลด์ยังคงเป็นไปตามสถานะก่อนหน้าของมันหรือเป็นค่าที่ไม่ได้ตั้งไว้

ค่าแก๊สสำหรับตัวดำเนินการนี้ถูกคำนวณเป็นผลรวมของ:

  1. ค่าธรรมเนียมคงที่สำหรับการเตรียมข้อมูล [ecrecover] และเพิ่มเติมสำหรับการคำนวณ keccak256 hash และตรรกะเพิ่มเติมบางประการ, มูลค่า 3100 หน่วย
  2. ค่าส่งเสริมหน่วยความจำที่คำนวณอย่างเดียวกับคำสั่ง [RETURN] และใช้เมื่อมีการขยายหน่วยความจำเกินขอบเขตที่กำหนดของการจัดสรรปัจจุบัน (97 หน่วย)
  3. ค่าใช้จ่ายคงที่ของ 100 หน่วยถูกเกิดขึ้นสำหรับ [authority] ที่อบอุ่นและ 2600 หน่วยสำหรับที่เย็นเพื่อป้องกันการโจมตีที่เกิดจากการกำหนดราคาผิดพลาดของ opcodes ที่เข้าถึงสถานะ

[AUTH] ถูกนําไปใช้เพื่อไม่ปรับเปลี่ยนหน่วยความจํา และใช้ค่าของ [authority] เป็นอาร์กิวเมนต์เพื่อให้การตรวจสอบค่าจากลายเซ็นที่ให้มาเป็นเรื่องเล็กน้อย

โอปโคด [AUTHCALL] มีการป้อนข้อมูลสามารถของรูปแบบชุดเดียวที่ใช้ในการคำนวณผลลัพธ์ของสามารถชุดเดียว

มันมีตรรกะเดียวกับ [CALL] opcode กล่าวคือ; ใช้เพื่อส่งข้อความเรียกเข้าบัญชีและเรียกใช้ตรรกะเฉพาะในสัญญา ค่าเบี่ยงเบนเพียงอย่างเดียวในตรรกะของพวกเขาคือ [AUTHCALL] ได้รับการออกแบบมาเพื่อตั้งค่าของ [CALLER] ก่อนดําเนินการ

ดังนั้น [AUTHCALL] ใช้โดย [authority] เพื่อเรียกใช้พฤติกรรมที่เกี่ยวข้องกับ [authorized] โดยมีการตรวจสอบตามตรรกะต่อไปนี้:

  1. ตรวจสอบค่าของ [อนุญาต] หากไม่ได้ตั้งค่าการดําเนินการจะถือว่าไม่ถูกต้องและเฟรมจะออกทันที สิ่งนี้ช่วยป้องกันการเรียกเก็บเงินที่ไม่เป็นธรรมเนื่องจากความล้มเหลวที่ไม่เคยมีมาก่อน
  2. ตรวจสอบค่าใช้จ่ายในการใช้ก๊าซของพฤติกรรมที่ตั้งใจของ [authorized]
  3. ตรวจสอบค่าที่สอดคล้องกับ EIP-150 ของตัวถูกดําเนินการ [ก๊าซ]
  4. ตรวจสอบความพร้อมของต้นทุนก๊าซทั้งหมด -- [มูลค่า] - ในยอดคงเหลือของ [อํานาจ]
  5. การดำเนินการเกิดขึ้นหลังจากหัก [value] จากยอดเงินในบัญชีของ [authority] หาก [value] มากกว่ายอดเงินคงเหลือของพวกเขา การดำเนินการนี้จะโมฆะ

ค่าแก๊สสำหรับ [AUTHCALL] คำนวณเป็นผลรวมของ:

  • ค่าใช้จ่ายคงที่สำหรับการเรียกใช้ [warm_storage_read]
  • ค่าใช้จ่ายในการขยายหน่วยความจํา [memory_expansion_fee]; ซึ่งคํานวณคล้ายกับค่าก๊าซสําหรับ [CALL] opcode
  • ต้นทุนแบบไดนามิก [dynamic_gas]
  • ค่าการดำเนินการของฟังก์ชันย่อย [subcall_gas]

ข้อมูลที่ส่งคืนจาก [AUTHCALL] สามารถเข้าถึงได้ผ่าน:

  • [RETURNDATASIZE] - ซึ่งผลักดันขนาดของตัวเก็บข้อมูลที่ส่งกลับลงในสแต็กเอาท์พูล
  • [RETURNDATACOPY] - ซึ่งคัดลอกข้อมูลจากตัวเลือกข้อมูลที่ส่งกลับไปยังหน่วยความจำ

เพื่อรวมทุกอย่างพร้อมกับการพูดน้อยลงเกี่ยวกับเทคโนโลยี ธุรกรรม Ethereum 通常ระบุค่าสองค่า

  1. tx.origin - ซึ่งให้การอนุญาตสำหรับธุรกรรม
  2. msg.sender - ที่ธุรกรรมเกิดขึ้นจริง ๆ

ใน EOAs ตามที่กล่าวไว้ก่อนหน้านี้ การอนุญาตเชื่อมต่อกับการดำเนินการเป็นสิ่งที่แนบแน่นกัน นั่นคือ (tx.origin == msg.sender) สัญญาต่อเนื่องที่เรียบง่ายนี้เป็นสาเหตุของส่วนใหญ่ของปัญหาที่เราอธิบายไว้ในส่วนย่อย "บัญชีและความถูกต้องของธุรกรรม" ในรายงานนี้

ข้อความ [AUTH] จาก [authority] ช่วยให้สามารถเบียดเทียบฟังก์ชัน tx.origin ไปยัง [authorized] ได้ โดยยังคงเป็น msg.sender อย่างไรก็ตาม มันยังช่วยให้กำหนดข้อจำกัดในสิทธิพิเศษนี้โดยใช้ค่า [COMMIT] ได้

[AUTHCALL] จากนั้นอนุญาตให้ [authorized] เข้าถึงตรรกะของสัญญา โดยใช้ [invoker] เป็นผู้กลางเพื่อให้แน่ใจว่าสัญญาที่ต้องการเข้าถึงไม่เป็นอันตราย กล่าวคือ สำหรับทุก [AUTHCALL] [authorized] ต้องระบุ [invoker] โดยเฉพาะสำหรับ [COMMIT] ของพวกเขา

กรณีการใช้งานที่เป็นไปได้

EIP 3074 เป็นผู้รับผิดชอบหลักในการอนุญาตให้ EOAs มอบหมายตัวตนการอนุญาตของพวกเขาให้กับบัญชีที่แตกต่างกัน อย่างไรก็ตามการออกแบบเปิดของมันช่วยให้สามารถทำได้มากขึ้นในบริบทที่แตกต่างกัน

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

  • ตรรกะ Nonce: EIP-3074 ช่วยให้ EOAs nonce ยังคงไม่ถูกแตะต้องหลังจากส่งข้อความ [AUTH] ในขณะเดียวกัน nonce สําหรับทุก [AUTHCALL] ขึ้นอยู่กับสิ่งที่ invoker มีปฏิสัมพันธ์ด้วย ด้วยวิธีนี้จะช่วยให้สามารถขนาน nonce สําหรับ EOAs เพื่อให้พวกเขาสามารถส่ง [AUTHCALL] ที่ไม่ทับซ้อนกันได้หลายตัวตามที่พวกเขาต้องการ
  • ตรรกะการชำระค่า Gas: ตามที่ระบุใน EIP ผู้เรียกใช้สามารถออกแบบให้สนับสนุนค่าใช้จ่ายแก๊สได้ ดังนั้นค่าธรรมเนียมแก๊สสำหรับ [COMMIT] ของผู้ใช้สามารถหักจากต้นทางของธุรกรรมหรือจากบัญชีที่สนับสนุนใด ๆ ไม่ว่าจะเป็นบัญชีส่วนบุคคลหรือบริการเรือธรรมนูญ (บริการสนับสนุนค่าใช้จ่ายแก๊ส)

นอกจากนี้ ตรรกะการดำเนินการถูกสรุปอย่างสร้างสรรค์ หลังจากที่ผู้เรียกใช้ (ซึ่งเป็น CA) ตอนนี้รับผิดชอบในการดำเนินการร้องขอธุรกรรมแทน EOA

วิจารณ์

  • Invoker Centralisation

การอ้างหนึ่งในผู้เขียน: “ฉันไม่คาดหวังว่ากระเป๋าเงินจะเปิดเผยฟังก์ชันในการลงลายเซ็นกับผู้เรียกร้องอย่างอิสระ …”. ปัญหาที่ใหญ่ที่สุดที่ถูกตั้งคำถามโดยการดำเนินการ 3074 คือนวัตกรรมที่ปราศจากมันจะมีแนวโน้มที่จะเข้ากันได้และการไหลที่เป็นเอกสิทธิ์; อย่างที่มีการวิวัฒนาการปัจจุบันของ Ethereum’s MEV และ PBS markets.

โดยค่าเริ่มต้นสัญญา invoker จะต้องได้รับการตรวจสอบอย่างมากเพื่อป้องกันการโจมตีที่เลวร้ายยิ่งกว่าที่เป็นไปได้ในปัจจุบัน สิ่งนี้จะมีแนวโน้มที่จะเป็นระบบนิเวศอย่างหลีกเลี่ยงไม่ได้ซึ่งสัญญา invoker จํานวนหนึ่งที่พัฒนาโดยผู้มีอิทธิพลจะถูกนํามาใช้เป็นค่าเริ่มต้นสําหรับนักพัฒนากระเป๋าเงิน ดังนั้นจึงเป็นการแลกเปลี่ยนระหว่างการใช้เส้นทางการกระจายอํานาจอย่างหนักในการตรวจสอบและสนับสนุนสัญญา invoker อย่างต่อเนื่องซึ่งมีความเสี่ยงต่อความปลอดภัยของผู้ใช้ หรือเพียงแค่ใช้สัญญา Invoker จากแหล่งที่จัดตั้งขึ้นและมีชื่อเสียงพร้อมการรับประกันที่ดีกว่าสําหรับความปลอดภัยของผู้ใช้และการกํากับดูแลความปลอดภัยของสัญญาน้อยลง

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

  • ปัญหาความเข้ากันได้ย้อนหลัง

EIP-3074 ดึงดูดรูปแบบลายเซ็น ECDSA เนื่องจากยังคงถือว่าถูกต้องมากกว่ารูปแบบการอนุญาตที่แนะนําผ่านผู้เรียกใช้ ในขณะที่มีข้อโต้แย้งว่าความต้านทานควอนตัมไม่ใช่ปัญหาที่ชัดเจนในขณะนี้และมีความเสี่ยงที่เลวร้ายกว่ามากในอนาคตที่ ECDSA เสียหายได้ เป้าหมายที่ค่อนข้างไม่มีสถานะของ Ethereum คือการนําหน้าปัญหาดังกล่าวเสมอ อาจเสียสละควอนตัมและการเซ็นเซอร์สําหรับการปรับปรุงเล็กน้อยใน UX อาจไม่ใช่ตัวเลือกที่ดีที่สุดในอนาคตอันใกล้

จุดอื่น ๆ ในอาร์กิวเมนต์เกี่ยวกับความเข้ากันได้ในอนาคตคือในขณะที่กำไรจาก 3074 ยังไม่ได้ถูกประเมิน ERC-4337 (ซึ่งไม่ต้องการการเปลี่ยนแปลงโปรโตคอลใด ๆ) มีตลาดที่ดีมากแล้ว ดังนั้นคุณต้องเข้ากันได้กับมันเช่นกันเพื่อหลีกเลี่ยงการแบ่งส่วนของระบบนิเวศ

แม้ว่าจะมีแผนการสรุปบัญชีภายในระบบ คำสั่ง [AUTH] และ [AUTHCALL] ใน EVM ก็จะกลายเป็นล้าสมัยในที่สุด ซึ่งทำให้ Ethereum ต้องมีหนี้สินทางเทคนิคมากมายเพื่อส่งมอบการปรับปรุง UX ที่ไม่มีคุณค่าน้อย

  • ECDSA Scheme Irrevocability

หลังจากส่งข้อความ [AUTH] และมอบหมายควบคุม คาดว่า EOA จะหลีกเลี่ยงระบบการอนุมัติด้วยกุญแจส่วนตัวแบบปกติ เนื่องจากการส่งธุรกรรม “ปกติ” ทำให้การอนุญาตที่มอบหมายให้กับผู้เรียกใช้ทุกคนถูกเพิกถอน

ดังนั้น โครงร่าง ECDSA ยังคงเป็นเท่าเทียมกับการรับรองจากโครงร่างใดๆ ที่สัญญาที่เกี่ยวข้องอาจเปิดใช้งาน ซึ่งหมายความว่า การสูญเสียกุญแจส่วนตัวจะ导致การสูญเสียทั้งหมดของสินทรัพย์ในบัญชี

ความสามารถในการโปรแกรมเมอร์ผ่าน EIP-7702

ข้อเสนอนี้เริ่มต้นจากการกำหนดเป็นรูปแบบที่เล็กน้อยของ EIP 3074 และไม่ได้หมายถึงเพื่อที่จะเป็นการอัปเดตให้กับมัน มันถูกเกิดขึ้นเพื่อแก้ไขปัญหาความไมประสงค์ของ EIP 3074 โดยเฉพาะอย่างยิ่งความกังวลเกี่ยวกับความไมเข้ากันได้กับระบบนิเวศ 4337 ที่กำลังพัฒนาและแนวคิดการสรุปบัญชี RIP 7560

วิธีการทำงานของมันคือการเพิ่มประเภทธุรกรรมที่เป็นไปตามมาตรฐาน EIP 2718 ใหม่ - [SET_CODE_TX_TYPE] - ซึ่งช่วยให้ EOA สามารถทำงานเป็นบัญชีสมาร์ทสำหรับธุรกรรมที่ระบุไว้ได้

การออกแบบนี้ทำให้มีคุณสมบัติเดียวกันกับ EIP 5806 และอื่น ๆ อีกบางอย่าง พร้อมทั้งยังเหมาะสมกับแผนถนนการสรุปบัญชีธรรมชาติและโครงการที่มีอยู่

ข้อกำหนด

EIP-7702 ช่วยให้ EOA สามารถ "นำเข้า" เนื้อหาของโค้ดของสัญญาผ่านการทำธุรกรรมที่เป็นไปตามมาตรฐาน [SET_CODE_TX_TYPE] 2718 ของรูปแบบ:

rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, value, data, access_list, authorization_list, signature_y_parity, signature_r, signature_s])

โหลดซีพร้อมกับ EIP 5806 ทั้งหมด ยกเว้นว่ามันนำเสนอ "รายการการอนุญาต" รายการนี้เป็นลำดับของค่าที่มีรูปแบบเป็น

[[chain_id, address, nonce, y_parity, r, s], …]

ที่แต่ละตัวเรียกค่า [address] ในแต่ละตัว

ก่อนดําเนินการต่อฝ่ายที่เกี่ยวข้องใน SET_CODE_TX_TYPE ได้แก่ :

  • [authority]: ซึ่งเป็นบัญชีที่ทำการเซ็นต์ EOA/ หลัก
  • [address]: ซึ่งเป็นที่อยู่ของบัญชีที่มีรหัสที่สามารถมอบหมายให้ผู้อื่นได้

เมื่อ [authority] ลงนาม SET_CODE_TX_TYPE ที่ระบุ [address] จะสร้างตัวกำหนดการมอบหมาย นี่คือ "โปรแกรมชี้" ซึ่งทำให้คำขอการเรียกรหาโค้ดทั้งหมดเนื่องจากการกระทำของ [authority] ที่ทุกช่วงเวลาถูกนำไปสู่โค้ดที่สามารถสังเกตได้ของ [address]

สำหรับทุกคู่ [chain_id, address, nonce, y_parity, r, s] การไหลของตรรกะของธุรกรรมประเภท 7702 คือดังนี้:

  1. การตรวจสอบลายเซ็นของ [authority] จากแฮชที่ให้ไว้โดยใช้: authority = ecrecover(keccak(MAGIC || rlp([chain_id, address, nonce])), y_parity, r, s]
  2. ป้องกันการโจมตีทับกันของโฆษณา cross-chain และเวกเตอร์การโจมตีอื่น ๆโดยการตรวจสอบ ID ของโซ่
  3. ตรวจสอบว่า [authority] มีเนื้อหาของรหัสอยู่แล้วหรือไม่
  4. ตรวจสอบนอนซ์เพื่อให้แน่ใจว่านอนซ์ของ [authority] เท่ากับนอนซ์ที่รวมในทูเพิล
  5. หากธุรกรรมเป็นธุรกรรม SET_CODE_TX_TYPE แรกของ [authority] จะมีการเรียกเก็บค่าธรรมเนียม PER_EMPTY_ACCOUNT_COST ในกรณีที่ยอดเงินในบัญชีน้อยกว่าค่าธรรมเนียมนี้ การดำเนินการจะถูกยกเลิก
  6. การกำหนดการมอบหมายเกิดขึ้น โดยที่รหัสของ [authority] ถูกตั้งเป็นตัวชี้ของ [address]
  7. ค่านอนซ์ของผู้ลงนาม - [authority] - เพิ่มขึ้นหนึ่ง
  8. [authority] ถูกเพิ่มเข้าไปในรายการที่เข้าถึงที่อยู่ ซึ่ง (การทำให้ง่าย) เป็นเซตของที่อยู่ที่ถูกสร้างขึ้นให้มีลักษณะที่การย้อนกลับของขอบเขตของธุรกรรมจากพวกเขาทำให้พวกเขา (ที่อยู่) กลับไปสู่สถานะก่อนหน้าที่พวกเขาเข้าไปในขอบเขตที่ถูกย้อนกลับ นี้ถูกกำหนดไว้ในEIP-2929เพื่อเปิดใช้งานการแคชค่าที่ใช้ซ้ำได้ และป้องกันค่าใช้จ่ายที่ไม่จำเป็น

ฮึก! เพื่อผูกมันกลับมา; EIP นี้ช่วยให้ EOAs ส่งธุรกรรมที่ตั้งตัวชี้ไปยังโค้ดของสัญญา ทำให้พวกเขาสามารถนำตรรกะนี้มาใช้เป็นของตัวเองในธุรกรรมต่อไปได้ ดังนั้นมันจึงแข็งแกร่งกว่า EIP 5806 เพราะมันช่วยให้ EOAs มีเนื้อหาของโค้ดได้ตลอดเวลาที่พวกเขาต้องการ (ไม่เหมือนกับ EIP 5806 ที่อนุญาตให้ EOAs ส่ง delegate-calls เท่านั้น)

กรณีการใช้งานที่เป็นไปได้ / กรณีการใช้งานที่เหมาะสม

  • แนวคิดการดำเนินการ

หากว่าจะอ้างว่ามันไม่ใช่การสรุปอีกต่อไปเนื่องจาก EOA ทำงานกับตรรกะที่มันต้องการจะดำเนินการเอง แต่มันก็ยังไม่ใช่ "เจ้าของหลัก" ของตรรกะดังกล่าว นอกจากนี้มันไม่มีตรรกะอยู่ภายในโดยตรง เพียงแค่ระบุตัวชี้ชวนไปยังตรรกะ (เพื่อลดความซับซ้อนของการคำนวณ) ดังนั้นเราเรียกมันว่า การสรุปการดำเนินการ!

  • การสนับสนุน Gas

ในขณะที่ข้อกำหนด require(msg.sender == tx.origin) ถูกแตกต่างเพื่ออนุญาตให้สปอนเซอร์ตนเอง แต่ EIP ยังอนุญาตให้การผสานของตัวแทนการทำธุรกรรมที่ได้รับการสปอนเซอร์ อย่างไรก็ตาม ข้อจำกัดคือตัวแทนเช่นนี้ต้องมีระบบที่เกี่ยวข้องกับชื่อเสียงหรือฐานะเพื่อป้องกันการโจมตีเพื่อทำให้เสียหาย

  • นโยบายการเข้าถึงที่มีเงื่อนไข

EOAs สามารถชี้ไปยังส่วนที่เฉพาะของโค้ดบัญชีได้อย่างเดียว ดังนั้นเฉพาะตรรกะของส่วนนั้นที่สามารถใช้ได้ในบริบทของพวกเขาเท่านั้น

นี่ยังช่วยให้มีการมีคีย์ย่อยซึ่งทำให้เกิด "การลดระดับสิทธิ" ซึ่งจะทำให้ dAPPs บางอย่างมีการเข้าถึงยอดเงินในบัญชีภายใต้เงื่อนไขที่เฉพาะเจาะจง เช่น คุณสามารถนึกภาพถึงการอนุญาตให้ใช้ ERC-20 โทเคน แต่ไม่ใช้ ETH หรือใช้ได้สูงสุด 1% ของยอดคงเหลือต่อวัน หรือเชื่อมต่อเพียงกับแอปพลิเคชันที่เฉพาะเจาะจงเท่านั้น

  • การติดตั้งสัญญาอัจฉริยะที่เชื่อมโยงโซ่

ธุรกรรม EIP-7702 อาจอนุญาตให้ผู้ใช้เข้าถึง opcode CREATE2 และใช้เพื่อปรับใช้ bytecode ไปยังที่อยู่โดยไม่มีพารามิเตอร์ที่ จํากัด อื่น ๆ เช่นตรรกะตลาดค่าธรรมเนียม (เช่น EIP-1559 และ EIP-4844) สิ่งนี้ช่วยให้ที่อยู่สามารถกู้คืนและใช้ในเครื่องสถานะหลายเครื่องด้วย bytecode เดียวกันโดยที่บัญชีในแต่ละห่วงโซ่จะรับผิดชอบในการกําหนดพารามิเตอร์ตัวแปรบริบทอื่น ๆ

วิจารณ์

  • ขาดความเข้ากันได้ย้อนหลัง

ในขณะที่ EIP-7702 ยังคงเป็นเหตุการณ์ล่าสุดมากมาย มีการออกแบบและทดสอบสำหรับความขึ้นอยู่กับขึ้นอยู่กับปัญหาและข้อเสียหายที่เป็นไปได้ แต่โมเดลขนาดเล็กที่ลดน้อย มีความยืดหยุ่นมากมาย และด้วยเหตุนี้ มีประโยชน์ในบริบทที่แตกต่าง อย่างไรก็ตาม มันทำให้เกิดการลักษณะที่ผิดและไม่สามารถย้อนกลับได้ทันที

บางส่วนของตรรกะของมันรวมถึง:

  1. การเปลี่ยนแปลง Nonce EOA ระหว่างการทำธุรกรรมกลาง: EIP-7702 ไม่จำกัดการใช้ opcodes เพื่อให้แน่ใจว่าคงสภาพไว้ ซึ่งหมายความว่า EOA สามารถนำ opcodes เช่น CREATE, CREATE2 และ SSTORE มาประยุกต์ใช้ในระหว่างการดำเนินการ EIP-7702 ซึ่งจะทำให้ nonce ของ EOA สามารถเพิ่มขึ้นในบริบทที่แตกต่างกันได้
  2. การอนุญาตให้บัญชีที่มีค่า codeHash ที่ไม่เท่ากับศูนย์เป็นผู้เริ่มต้นธุรกรรม: EIP-3607 ได้ถูกนำมาใช้เพื่อลดความเสี่ยงที่อาจเกิดขึ้นจาก "การชนที่อยู่" ระหว่าง EOAs และ CAs การชนที่อยู่เกิดขึ้นเมื่อค่า 160 บิตของที่อยู่ของ EOA เท่ากับที่อยู่ของ CA อย่างสิ้นเชิง

ผู้ใช้ส่วนใหญ่ไม่รู้เรื่องเนื้อหาที่อยู่ในบัญชี (หรือแม้แต่ความแตกต่างระหว่างบัญชีและที่อยู่!) ดังนั้นการอนุญาตให้การชนที่อยู่เกิดขึ้นหมายความว่า EOA สามารถปลอมตัวเป็น CA และดึงเงินของผู้ใช้ในระหว่างที่ยาวนานเพื่อขโมยเงินทั้งหมด EIP-3607 แก้ปัญหานี้โดยกำหนดว่าบัญชีที่มีโค้ดไม่ควรสามารถใช้เงินในยอดเงินของตนโดยใช้ตรรกะการอนุญาตของตนเอง อย่างไรก็ตาม EIP 7702 ทำลายสถานะอันตรายนี้เพื่อให้ EOAs สามารถเป็นอิสระได้แม้ว่าจะได้รับความสามารถในการโปรแกรมบางส่วน

  • ความคล้ายคลึงกับ EIP-3074

การลงชื่อเซ็นที่ที่อยู่ของบัญชีแทนเนื้อหาของรหัสเป็นเรื่องที่คล้ายกับระบบของ 3074 กับผู้เรียกใช้ มันไม่ให้การรับรองที่เข้มงวดเกี่ยวกับความสอดคล้องของเนื้อหาของรหัสที่เกี่ยวข้องกันข้ามเชื่อมโยงเนื่องจากที่อยู่สามารถมีเนื้อหาของรหัสที่แตกต่างกันบนเชื่อมโยงที่แตกต่างกัน นี่หมายความว่า ที่อยู่ที่มีเนื้อหาของรหัสที่มีตรรกะเดียวกันบนเชื่อมโยงหนึ่งอาจเป็นฉุกเฉินหรือเป็นอันตรายอย่างสิ้นเชิงบนเชื่อมโยงอื่น ๆ และสิ่งนี้อาจทำให้เกิดความเสียหายต่อเงินทุนของผู้ใช้

สรุป

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

การอนุญาตให้บัญชี EOA ทำการเรียกใช้โค้ดในทุกลักษณะ ทำให้ความสามารถของบัญชีขยายตัวอย่างมาก แต่ความสามารถใหม่นี้มาพร้อมกับความเสี่ยงและความไม่แน่นอนที่สำคัญ การแก้ปัญหาเหล่านี้เป็นสิ่งสำคัญในการนำเสนอการอัปเกรดที่มีประโยชน์ที่สุดสำหรับผู้ใช้ Ethereum โดยไม่มีการโต้แย้งใด ๆ

วัฒนธรรมการสนทนาเปิดเผยของ Ethereum ทำให้มันเป็นที่ทดสอบที่ยอดเยี่ยมสำหรับนวัตกรรมเช่นนี้เนื่องจากเกือบทุกผลของการออกแบบถูกถอดรหัสอย่างละเอียดโดยผู้เชี่ยวชาญด้านวิชาการ การพิจารณาอย่างละเอียดนี้ควรช่วยลดความเสี่ยงของการกระทำผิดจากเหตุการณ์ที่ตรงกันข้าม

ปัจจุบัน EIP-7702 เป็นลูกโปสเตอร์สําหรับกลไกที่พยายามนําความสามารถในการตั้งโปรแกรม EVM มาสู่ EOAs โดยได้รับการทําเครื่องหมายว่าทดแทนสล็อตของ EIP 3074 ในการอัพเกรด Pectra มันสืบทอดการออกแบบแบบเปิดของกลไกของ 3074 ในขณะที่ลดพื้นผิวการโจมตี / ความเสี่ยงลงอย่างมาก นอกจากนี้ยังช่วยให้มากขึ้นโดยการหลีกเลี่ยงข้อ จํากัด ของ 3074 กับ opcodes บางประเภท

ในขณะที่ยังมีการปรับปรุงบางส่วนในการออกแบบของข้อเสนอ มันได้รับความเห็นชอบและสนับสนุนจากนักพัฒนาโดยเฉพาะอย่างยิ่งเนื่องจากมีการสนับสนุนโดยตรงจาก Vitalik แล้ว

ภายในชุมชนมีข้อเรียกร้องว่าวิธีการสรุปบัญชีนี้อาจดีกว่าสมาร์ทแอคเคาท์ บทวิจารณ์นี้เน้นว่าถนัดมากขึ้นและไม่ซับซ้อนเท่านั้น และว่า EOAs ถูกบัญทึกไว้แล้ว อย่างไรก็ตามเราต้องจำไว้ว่าความปลอดภัยในอนาคตของการต้านทานควอนตัมเมื่อไหร่ก็ตามทุกระดับของเครือข่าย Ethereum ความปลอดภัยที่เกี่ยวกับควอนตัมนี้ไม่เป็นไปตามหลักโมเดลบัญชีปัจจุบันเนื่องจากการใช้ระบบลายเซ็นของ ECDSA สำหรับการยินยอม EOA

ดังนั้น ความสามารถในการโปรแกรม EOA ควรถูกมองเป็นขั้นตอนบนเส้นทางสู่บัญชีสมาร์ทและไม่ใช่เป้าหมาย มันทำให้ EOA มีพลังมากขึ้นและทำให้ผู้ใช้และนักพัฒนามีประสบการณ์ที่ดีขึ้น พร้อมทั้งยังเหมาะสมกับเป้าหมายของแนวคิดการสรุปบัญชีสมาร์ท

ในรายงานถัดไปของเราเราจะสำรวจโครงการย้าย EOA เพื่อดูว่ามันเหมาะกับโครงสร้างแนวคิดการสรุปบัญชีอย่างไร อยู่รอดูต่อไป!

Disclaimer:

  1. บทความนี้พิมพ์ซ้ําจาก [2077.xyz], สิทธิ์ประกอบการเป็นของผู้เขียนต้นฉบับ [ zhev]. หากมีการคัดค้านการพิมพ์นี้ โปรดติดต่อGate Learnทีม และพวกเขาจะดำเนินการโดยเร่งด่วน
  2. ข้อจํากัดความรับผิดชอบความรับผิด: มุมมองและความคิดเห็นที่แสดงในบทความนี้เป็นเพียงของผู้เขียนและไม่ถือเป็นคําแนะนําการลงทุนใด ๆ
  3. การแปลบทความเป็นภาษาอื่น ๆ ทำโดยทีม Gate Learn หากไม่ได้กล่าวถึง การคัดลอก การแพร่กระจาย หรือการลอกเลียนบทความที่ถูกแปลนั้นถูกห้าม
เริ่มตอนนี้
สมัครและรับรางวัล
$100