จัดทำขึ้นเพื่อการศึกษาเท่านั้น ไม่ใช่คำแนะนำการลงทุน การลงทุนอาจทำให้สูญเสียเงินลงทุนได้
คำตอบโดยตรง
การแยกตรรกะบัญชีทำให้กฎการอนุญาตและการดำเนินการของบัญชีเขียนโปรแกรมได้ บน Ethereum มาตรฐาน ERC-4337 ทำเช่นนี้โดยไม่เปลี่ยนประเภทธุรกรรมระดับฉันทามติ กระเป๋าส่ง UserOperation ผ่านโครงสร้างพื้นฐาน RPC เฉพาะ bundler ห่อหนึ่งหรือหลายรายการเป็นธุรกรรมปกติไปยัง EntryPoint ที่ระบุรุ่น แล้วบัญชีอัจฉริยะตรวจสอบและดำเนินรายการของตนเอง การกู้คืน passkey คีย์เซสชัน วงเงินใช้จ่าย การรวมคำสั่ง และการสนับสนุนค่าธรรมเนียมเป็นคุณลักษณะของบัญชีหรือบริการที่สร้างบนกระแสนี้ ไม่ใช่สิ่งที่ ERC-4337 รับประกันโดยอัตโนมัติ
แนวทางนี้ต่างจาก ERC-1271 ซึ่งกำหนดมาตรฐานให้สัญญาตรวจสอบลายเซ็นข้อความ และ EIP-7702 ซึ่งให้บัญชีที่มีเจ้าของภายนอก (EOA) มอบสิทธิการดำเนินการแก่โค้ด กลไกเหล่านี้ทำงานร่วมกันได้ แต่ไม่ได้ใช้ส่วนเชื่อมต่อ nonce การติดตั้ง หรือแบบจำลองความปลอดภัยเดียวกัน การแยกตรรกะบัญชีไม่ได้กำจัดข้อมูลรับรอง ต้นทุน gas ความเสี่ยงของสัญญา หรือความจำเป็นในการตรวจสอบเชนและการติดตั้งที่แน่นอน
กระแส ERC-4337 ใน 7 ขั้นตอน
- ตรึงสภาพแวดล้อม ได้แก่
chainIdการติดตั้งบัญชีอัจฉริยะและการควบคุมการอัปเกรด factory รุ่น EntryPoint ที่อยู่และแฮชโค้ดที่ติดตั้ง การรองรับของ bundler และเชนเปิดใช้ EIP-7702 หรือไม่ ที่อยู่ซึ่งถูกต้องสำหรับ EntryPoint รุ่นหนึ่งหรือเชนหนึ่งไม่ใช่ค่าคงที่สากล - สร้างรายการให้ตรงกับรุ่น ฟิลด์เชิงตรรกะปัจจุบันประกอบด้วย
sender,nonce,factory,factoryData,callData,callGasLimit,verificationGasLimit,preVerificationGas,maxFeePerGas,maxPriorityFeePerGasฟิลด์ paymaster ที่เลือกใช้ และsignatureบนเชน EntryPoint รับรูปแบบที่บีบรวมแล้ว ส่วนคำสั่งไปยังเป้าหมายถูกเข้ารหัสในcallDataที่บัญชีกำหนด ไม่ใช่ฟิลด์เป้าหมายสากล - ผูกการอนุญาตกับโดเมนที่ถูกต้อง
userOpHashครอบคลุมรายการยกเว้นลายเซ็นและผูกกับ EntryPoint และเชน เพื่อป้องกันการใช้ซ้ำข้ามโดเมน ฟังก์ชันvalidateUserOpของบัญชีตรวจสอบเจ้าของ ลายเซ็นหลายฝ่าย passkey เซสชัน หรือนโยบายอื่น ERC-1271isValidSignatureเป็นส่วนเชื่อมต่อลายเซ็นสัญญาที่แยกต่างหาก ส่วน aggregator ที่เลือกใช้อาจตรวจลายเซ็นรวม ชุดข้อมูลอนุญาต EIP-7702 ถูกส่งแยกจาก UserOperation - พิสูจน์ความสามารถชำระค่าธรรมเนียม บัญชีอาจวางเงินล่วงหน้าผ่านยอดคงเหลือใน EntryPoint หรือ paymaster อาจรับภาระแบบมีเงื่อนไขจากเงินฝากของตน Paymaster อาจสนับสนุนผู้ใช้ เรียกเก็บโทเค็น ใช้รายการอนุญาตหรือโควตา และเรียก
postOpโดย ERC-4337 ไม่ได้กำหนดกฎเชิงพาณิชย์เหล่านี้ Stake ต่างจากเงินฝาก เพราะ stake รองรับกฎการตรวจสอบและชื่อเสียง ส่วนเงินฝากใช้จ่ายค่า gas - ประมาณและส่งผ่าน RPC ของ ERC-7769 Bundler ตรวจสอบเมื่อรับ ก่อนเลือก และอีกครั้งเมื่อสร้าง bundle มาตรฐาน ERC-7562 จำกัด opcode และการเข้าถึงที่เก็บข้อมูลในขั้นตรวจสอบ พร้อมรองรับการควบคุมชื่อเสียงต่อพฤติกรรมปฏิเสธการให้บริการ การจำลองนี้ตรวจการรับเข้าและความปลอดภัยของค่าธรรมเนียม ส่วนการคาดการณ์การดำเนินงานต้องจำลองคำสั่งทั้งหมดแยกต่างหาก
- Bundler เรียก
handleOpsโดย EntryPoint ทำการติดตั้งที่อนุญาต ตรวจบัญชีและ paymaster ตรวจเงินล่วงหน้า และรวมลายเซ็นหากใช้ ก่อนดำเนินการ หากการตรวจสอบล้มเหลว รายการนั้นจะไม่ถูกดำเนินการ แต่คำสั่งเป้าหมายยังอาจ revert หลังผ่านการรับเข้าและใช้ gas ได้ โค้ดดำเนินการของบัญชีเป็นผู้กำหนดว่าคำสั่งใน batch เดียวกันจะ revert ทั้งหมดแบบอะตอมหรือยอมให้สำเร็จบางส่วน - กระทบยอดใบรับและ state จับคู่ใบรับ UserOperation ธุรกรรม bundle ต้นทาง event ของ EntryPoint การติดตั้งบัญชี event เป้าหมาย gas จริง การหักโทเค็น เงินคืน และยอดสุดท้าย จากนั้นติดตามช่อง nonce การเปลี่ยนเจ้าของและการกู้คืน การเพิกถอนคีย์เซสชัน โมดูล การอัปเกรดการติดตั้ง ทางเลือก bundler และ paymaster การจัดระเบียบเชนใหม่ และการย้ายหรือมอบสิทธิ EIP-7702 ใหม่
ตัวอย่างคำนวณ 4 กรณี
- กรอบ gas แบบง่าย รายการหนึ่งตั้งงบ gas ดำเนินการ
120,000gas ตรวจบัญชี90,000gas ตรวจ paymaster45,000gas ก่อนตรวจ40,000และ gas หลังการดำเนินงานของ paymaster30,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 เข้ากันได้และปลอดภัยกว่า” ต้องตรวจการรองรับ รุ่น การติดตั้ง โค้ด โมดูล และการควบคุมแยกกัน
หัวข้อที่เกี่ยวข้อง
แหล่งข้อมูล
- ERC-4337: Account Abstraction Using Alt Mempool
- ERC-7562: Account Abstraction Validation Scope Rules
- ERC-7769: JSON-RPC API for ERC-4337
- ERC-1271: Standard Signature Validation Method for Contracts
- EIP-7702: Set Code for EOAs
- The EntryPoint Contract
- Simulation Requirements
- Releases - eth-infinitism/account-abstraction