ข้ามไปยังเนื้อหา

การแยกตรรกะบัญชี

ทำความเข้าใจการแยกตรรกะบัญชี Ethereum ผ่านบัญชีอัจฉริยะ ERC-4337 รุ่น EntryPoint, UserOperation, bundler, paymaster, ช่อง nonce, การตรวจสอบ การดำเนินการ การมอบสิทธิ EIP-7702 ค่าธรรมเนียม และความเสี่ยงการกู้คืน

อัปเดต

จัดทำขึ้นเพื่อการศึกษาเท่านั้น ไม่ใช่คำแนะนำการลงทุน การลงทุนอาจทำให้สูญเสียเงินลงทุนได้

คำตอบโดยตรง

การแยกตรรกะบัญชีทำให้กฎการอนุญาตและการดำเนินการของบัญชีเขียนโปรแกรมได้ บน Ethereum มาตรฐาน ERC-4337 ทำเช่นนี้โดยไม่เปลี่ยนประเภทธุรกรรมระดับฉันทามติ กระเป๋าส่ง UserOperation ผ่านโครงสร้างพื้นฐาน RPC เฉพาะ bundler ห่อหนึ่งหรือหลายรายการเป็นธุรกรรมปกติไปยัง EntryPoint ที่ระบุรุ่น แล้วบัญชีอัจฉริยะตรวจสอบและดำเนินรายการของตนเอง การกู้คืน passkey คีย์เซสชัน วงเงินใช้จ่าย การรวมคำสั่ง และการสนับสนุนค่าธรรมเนียมเป็นคุณลักษณะของบัญชีหรือบริการที่สร้างบนกระแสนี้ ไม่ใช่สิ่งที่ ERC-4337 รับประกันโดยอัตโนมัติ

แนวทางนี้ต่างจาก ERC-1271 ซึ่งกำหนดมาตรฐานให้สัญญาตรวจสอบลายเซ็นข้อความ และ EIP-7702 ซึ่งให้บัญชีที่มีเจ้าของภายนอก (EOA) มอบสิทธิการดำเนินการแก่โค้ด กลไกเหล่านี้ทำงานร่วมกันได้ แต่ไม่ได้ใช้ส่วนเชื่อมต่อ nonce การติดตั้ง หรือแบบจำลองความปลอดภัยเดียวกัน การแยกตรรกะบัญชีไม่ได้กำจัดข้อมูลรับรอง ต้นทุน gas ความเสี่ยงของสัญญา หรือความจำเป็นในการตรวจสอบเชนและการติดตั้งที่แน่นอน

กระแส ERC-4337 ใน 7 ขั้นตอน

  1. ตรึงสภาพแวดล้อม ได้แก่ chainId การติดตั้งบัญชีอัจฉริยะและการควบคุมการอัปเกรด factory รุ่น EntryPoint ที่อยู่และแฮชโค้ดที่ติดตั้ง การรองรับของ bundler และเชนเปิดใช้ EIP-7702 หรือไม่ ที่อยู่ซึ่งถูกต้องสำหรับ EntryPoint รุ่นหนึ่งหรือเชนหนึ่งไม่ใช่ค่าคงที่สากล
  2. สร้างรายการให้ตรงกับรุ่น ฟิลด์เชิงตรรกะปัจจุบันประกอบด้วย sender, nonce, factory, factoryData, callData, callGasLimit, verificationGasLimit, preVerificationGas, maxFeePerGas, maxPriorityFeePerGas ฟิลด์ paymaster ที่เลือกใช้ และ signature บนเชน EntryPoint รับรูปแบบที่บีบรวมแล้ว ส่วนคำสั่งไปยังเป้าหมายถูกเข้ารหัสใน callData ที่บัญชีกำหนด ไม่ใช่ฟิลด์เป้าหมายสากล
  3. ผูกการอนุญาตกับโดเมนที่ถูกต้อง userOpHash ครอบคลุมรายการยกเว้นลายเซ็นและผูกกับ EntryPoint และเชน เพื่อป้องกันการใช้ซ้ำข้ามโดเมน ฟังก์ชัน validateUserOp ของบัญชีตรวจสอบเจ้าของ ลายเซ็นหลายฝ่าย passkey เซสชัน หรือนโยบายอื่น ERC-1271 isValidSignature เป็นส่วนเชื่อมต่อลายเซ็นสัญญาที่แยกต่างหาก ส่วน aggregator ที่เลือกใช้อาจตรวจลายเซ็นรวม ชุดข้อมูลอนุญาต EIP-7702 ถูกส่งแยกจาก UserOperation
  4. พิสูจน์ความสามารถชำระค่าธรรมเนียม บัญชีอาจวางเงินล่วงหน้าผ่านยอดคงเหลือใน EntryPoint หรือ paymaster อาจรับภาระแบบมีเงื่อนไขจากเงินฝากของตน Paymaster อาจสนับสนุนผู้ใช้ เรียกเก็บโทเค็น ใช้รายการอนุญาตหรือโควตา และเรียก postOp โดย ERC-4337 ไม่ได้กำหนดกฎเชิงพาณิชย์เหล่านี้ Stake ต่างจากเงินฝาก เพราะ stake รองรับกฎการตรวจสอบและชื่อเสียง ส่วนเงินฝากใช้จ่ายค่า gas
  5. ประมาณและส่งผ่าน RPC ของ ERC-7769 Bundler ตรวจสอบเมื่อรับ ก่อนเลือก และอีกครั้งเมื่อสร้าง bundle มาตรฐาน ERC-7562 จำกัด opcode และการเข้าถึงที่เก็บข้อมูลในขั้นตรวจสอบ พร้อมรองรับการควบคุมชื่อเสียงต่อพฤติกรรมปฏิเสธการให้บริการ การจำลองนี้ตรวจการรับเข้าและความปลอดภัยของค่าธรรมเนียม ส่วนการคาดการณ์การดำเนินงานต้องจำลองคำสั่งทั้งหมดแยกต่างหาก
  6. Bundler เรียก handleOps โดย EntryPoint ทำการติดตั้งที่อนุญาต ตรวจบัญชีและ paymaster ตรวจเงินล่วงหน้า และรวมลายเซ็นหากใช้ ก่อนดำเนินการ หากการตรวจสอบล้มเหลว รายการนั้นจะไม่ถูกดำเนินการ แต่คำสั่งเป้าหมายยังอาจ revert หลังผ่านการรับเข้าและใช้ gas ได้ โค้ดดำเนินการของบัญชีเป็นผู้กำหนดว่าคำสั่งใน batch เดียวกันจะ revert ทั้งหมดแบบอะตอมหรือยอมให้สำเร็จบางส่วน
  7. กระทบยอดใบรับและ state จับคู่ใบรับ UserOperation ธุรกรรม bundle ต้นทาง event ของ EntryPoint การติดตั้งบัญชี event เป้าหมาย gas จริง การหักโทเค็น เงินคืน และยอดสุดท้าย จากนั้นติดตามช่อง nonce การเปลี่ยนเจ้าของและการกู้คืน การเพิกถอนคีย์เซสชัน โมดูล การอัปเกรดการติดตั้ง ทางเลือก bundler และ paymaster การจัดระเบียบเชนใหม่ และการย้ายหรือมอบสิทธิ EIP-7702 ใหม่

ตัวอย่างคำนวณ 4 กรณี

  • กรอบ gas แบบง่าย รายการหนึ่งตั้งงบ gas ดำเนินการ 120,000 gas ตรวจบัญชี 90,000 gas ตรวจ paymaster 45,000 gas ก่อนตรวจ 40,000 และ gas หลังการดำเนินงานของ paymaster 30,000 ดังนี้ 120,000 + 90,000 + 45,000 + 40,000 + 30,000 = 325,000 gas เมื่อ maxFeePerGas = 30 gwei เพดานแบบง่ายคือ 325,000 × 30 gwei = 0.009750 ETH หากการใช้จริงที่เรียกเก็บได้คือ 210,000 gas ที่ 22 gwei ต้นทุนคือ 0.004620 ETH กฎตามรุ่น EntryPoint ค่าปรับ gas ที่ไม่ได้ใช้ ค่าข้อมูล L1 และราคา rollup อาจเพิ่มหรือจัดประเภทยอดใหม่ จึงเป็นบัญชีงบประมาณ ไม่ใช่สูตรเงินล่วงหน้าสากล
  • ช่อง nonce แบบขนาน เมื่อใช้ 192-bit key และ 64-bit sequence คีย์ 7 กับลำดับ 42 เข้ารหัสเป็น nonce = (7 << 64) | 42 = 129127208515966861354 = 0x7000000000000002a หลังรวมสำเร็จ ช่องนั้นคาดลำดับ 43 และการเล่นซ้ำ 42 จะล้มเหลว คีย์อื่นอาจมีลำดับอิสระภายใต้ตรรกะบัญชีและกฎ bundler
  • ความสามารถของ paymaster Paymaster มีเงินฝาก 0.50 ETH และแต่ละรายการที่รับต้องใช้หลักประกันสูงสุด 0.03 ETH จึงรองรับได้ floor(0.50 / 0.03) = 16 รายการ โดยกัน 0.48 ETH และเหลือ 0.02 ETH รายการที่ 17 ต้องเพิ่มเงินฝากหรือลดหลักประกัน Stake ของ paymaster ใช้แทนเงินฝากค่าธรรมเนียมไม่ได้
  • การดำเนินการ revert หลังรับเข้า รายการกันเงินไว้สูงสุด 0.0060 ETH การตรวจสอบผ่าน แต่การดำเนินการเป้าหมาย revert หลังใช้ 180,000 gas × 25 gwei = 0.0045 ETH การเปลี่ยน state เป้าหมายถูกย้อนกลับ แต่บัญชีหรือ paymaster ยังต้องจ่าย 0.0045 ETH ส่วน 0.0015 ETH ที่ไม่ได้ใช้ยังอยู่ภายใต้กฎการชำระและค่าปรับที่ใช้ การจำลอง bundler ที่สำเร็จจึงไม่รับประกันความสำเร็จทางธุรกิจ การรวม หรือ finality

ความเสี่ยงและการควบคุม

  • เชน ที่อยู่ EntryPoint รุ่น หรือแฮชโค้ดที่ติดตั้งผิดอาจทำให้รายการไม่ถูกต้องหรือส่งผิดทาง
  • ลายเซ็นที่ไม่ผูกกับโดเมนเชนหรือ EntryPoint อาจเปิดให้ replay
  • ที่อยู่แบบ counterfactual ของ factory ข้อมูลเริ่มต้น หรือ salt การติดตั้งอาจถูกแทนที่หรือคำนวณผิด
  • การมอบสิทธิ EIP-7702 อาจชี้ EOA ไปยังโค้ดอันตรายหรือมีช่องโหว่ซึ่งมีอำนาจกว้างต่อบัญชี
  • การแซงหน้าเริ่มต้นหรือเริ่มต้นซ้ำอาจยึดหรือทำให้บัญชีเสียหาย
  • การอัปเกรด proxy หรือการมอบสิทธิ EIP-7702 ใหม่อาจชนกับผังที่เก็บข้อมูลเดิม
  • ผู้ดูแลการอัปเกรดหรือโมดูลที่ถูกเจาะอาจเปลี่ยนพฤติกรรมบัญชี
  • ข้อบกพร่องการตรวจเจ้าของ ลายเซ็นหลายฝ่าย passkey หรือ ERC-1271 อาจอนุญาตการขโมยหรือล็อกเงิน
  • เกณฑ์ ระยะรอ ผู้พิทักษ์ และเส้นทางยกเลิกการกู้คืนอาจล้มเหลวหรือถูกยึด
  • คีย์เซสชันอาจเกินขอบเขตเป้าหมาย โทเค็น จำนวน ระยะเวลา หรือฟังก์ชันที่ตั้งใจ
  • ช่อง nonce อาจชน ขาดช่วง ถูก replay หรือขวางรายการที่ขึ้นต่อกัน
  • Aggregator หยุดทำงานหรือการรวมลายเซ็นผิดพลาดอาจทำให้รายการที่ถูกต้องติดค้าง
  • Bundler อาจเซ็นเซอร์ ออฟไลน์ ใช้นโยบายท้องถิ่นต่างกัน หรือปฏิเสธกฎ mempool ทางเลือก
  • กระแส UserOperation สาธารณะอาจเผยเจตนาให้ front-running การเชื่อมโยง และ MEV
  • การตรวจสอบอาจผ่านก่อน state เปลี่ยนจนรายการไม่ถูกต้องขณะสร้าง bundle
  • นโยบาย paymaster อาจปฏิเสธบริการ เงินฝากอาจหมด หรือ postOp อาจล้มเหลว
  • ค่า gas ที่คิดเป็นโทเค็นอาจมีความเสี่ยงอัตราแลกเปลี่ยน allowance ส่วนต่าง และค่าบริการเพิ่ม
  • การประเมิน gas ต่ำไปอาจ revert ส่วนขีดจำกัดสูงเกินไปอาจเพิ่มเงินกันหรือความเสี่ยงค่าปรับ
  • ความหมายของ batch บัญชีอาจยอมให้สำเร็จบางส่วนทั้งที่ผู้ใช้คาดการย้อนกลับแบบอะตอม
  • ข้อบกพร่องโปรโตคอลเป้าหมาย ส่วนเชื่อมต่อที่เป็นภัย การจัดระเบียบเชนใหม่ และ finality ที่อ่อนแอยังอยู่นอกการแยกตรรกะบัญชี

ความเข้าใจผิดที่พบบ่อย

  • “การแยกตรรกะบัญชีกำจัดคีย์ส่วนตัว” แนวทางนี้เปลี่ยนนโยบายข้อมูลรับรองให้เขียนโปรแกรมได้ แต่ยังต้องมีข้อมูลรับรองอนุญาตการกระทำ
  • “Paymaster ทำให้ gas ฟรี” ค่า gas ดั้งเดิมยังถูกจ่าย และผู้ใช้ ผู้สนับสนุน หรือบริการเป็นผู้รับต้นทุนในที่สุด
  • “การจำลองของ bundler รับประกันความสำเร็จ” การจำลองรับเข้าไม่รับประกันการดำเนินการ การรวม หรือ finality
  • “ERC-1271, ERC-4337 และ EIP-7702 เป็นส่วนเชื่อมต่อเดียวกัน” ทั้งสามแก้ปัญหาลายเซ็น กระแสธุรกรรม และการมอบสิทธิที่ต่างกัน
  • “ทุกเชน กระเป๋า และ EntryPoint เข้ากันได้และปลอดภัยกว่า” ต้องตรวจการรองรับ รุ่น การติดตั้ง โค้ด โมดูล และการควบคุมแยกกัน

หัวข้อที่เกี่ยวข้อง

แหล่งข้อมูล

การนำทาง

ค้นหาในวิกิ...