การทำบัญชีแบบแยกส่วนบน Ethereum มีที่อยู่มาตรฐาน 2 แห่งที่ควรจำไว้ EntryPoint v0.6 อยู่ที่ 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789 ส่วน EntryPoint v0.7 ซึ่งนำขึ้นใช้งานเมื่อต้นปี 2024 อยู่ที่ 0x0000000071727De22E5E9d8BAf0edAc6f37da032 ธุรกรรม ERC-4337 ทุกธุรกรรมบนเมนเน็ต, Arbitrum, Optimism, Base, Polygon และบล็อกเชน EVM อื่น ๆ ส่วนใหญ่จะผ่านสัญญา singleton หนึ่งในสองแห่งนี้ หากคุณเข้าใจว่าสัญญาเหล่านี้ทำอะไร และบทบาทอีก 5 อย่างที่เกี่ยวข้องทำงานอย่างไร คุณก็เข้าใจ ERC-4337 แล้ว
นี่คือบทที่ 2 ของซีรีส์ Smart Accounts ของเรา บทที่ 1 อธิบายว่าทำไม EOA จึงไม่ใช่ค่าเริ่มต้นที่ดี บทนี้จะพาคุณไปดูการทำงานเบื้องหลัง ได้แก่ ผู้เกี่ยวข้องทั้ง 6 บทบาท โครงสร้าง UserOperation สิ่งที่เกิดขึ้นจริงเมื่อคุณแลกเปลี่ยนโทเคนจากบัญชีอัจฉริยะ การเปลี่ยนแปลงจาก v0.6 เป็น v0.7, paymaster, alt-mempool สาธารณะเทียบกับ bundler ส่วนตัว และค่าใช้จ่ายส่วนเพิ่มที่ควรคาดไว้
6 บทบาทในแผนภาพเดียว
ERC-4337 แบ่งสิ่งที่ EOA ทำในขั้นตอนเดียวออกเป็นผู้เกี่ยวข้อง 6 ฝ่ายที่ทำงานร่วมกัน โดยไม่จำเป็นต้อง hard fork Ethereum เลย เพราะทั้งระบบประกอบด้วยสัญญาและโครงสร้างพื้นฐานนอกบล็อกเชน
- ผู้ส่ง (บัญชีอัจฉริยะ): กระเป๋าเงินแบบสัญญาที่เก็บสินทรัพย์ของคุณและทำตาม
validateUserOpจากมุมมองของ DApp ที่โต้ตอบด้วย นี่คือmsg.senderตัวอย่างเช่น Safe, Kernel, Biconomy Nexus, Coinbase Smart Wallet และ Light Account ของ Alchemy - UserOperation: โครงสร้างข้อมูลธุรกรรมเสมือน (ไม่ใช่ธุรกรรม Ethereum จริง) ที่ระบุว่าผู้ส่งต้องการทำอะไร ผู้ใช้ลงนามใน UserOp ไม่ใช่ธุรกรรม
- Bundler: โหนดนอกบล็อกเชนที่รวบรวม UserOp จาก mempool จำลองการทำงาน รวมรายการเหล่านั้นเป็นการเรียก
handleOpsครั้งเดียว และจ่ายค่าแก๊ส L1 รายได้ของ bundler คือส่วนต่างระหว่างยอดที่ผู้ส่ง (หรือ paymaster) ชดใช้ให้ กับยอดที่จ่ายแก่ผู้ตรวจสอบความถูกต้อง - EntryPoint: สัญญา singleton ที่เชื่อถือได้ ซึ่งวนประมวลผล bundle เรียก
validateUserOpของผู้ส่งแต่ละราย ดำเนินการ call data และจัดการการคืนเงินกับการย้อนธุรกรรม แต่ละเวอร์ชันบนแต่ละบล็อกเชนจะมี EntryPoint เพียงแห่งเดียว - Paymaster (ไม่บังคับ): สัญญาที่ตกลงจ่ายค่าแก๊สแทนผู้ส่ง โดยอาจสนับสนุนค่าใช้จ่ายให้ (ผู้ใช้ไม่เสียค่าใช้จ่าย) หรือเรียกเก็บเป็น ERC-20 เช่น USDC
- Aggregator (ไม่บังคับ): สัญญาที่ตรวจสอบ UserOp หลายรายการด้วยการตรวจลายเซ็นเพียงครั้งเดียว เหมาะสำหรับรูปแบบ BLS หรือหลักฐาน zk ปัจจุบันแทบไม่มีการนำไปใช้จริง
โปรดจำผู้เกี่ยวข้องทั้ง 6 บทบาทนี้ไว้ เนื้อหาที่เหลือในบทความกล่าวถึงการทำงานร่วมกันของพวกเขา
โครงสร้าง UserOperation
UserOperation คือชุดฟิลด์ที่รองรับ JSON-RPC เมื่อลงนามแล้วจะแสดงเจตนาการทำธุรกรรมโดยยังไม่ส่งไปยัง L1 โครงสร้าง v0.7 มีฟิลด์เชิงตรรกะ 11 รายการ:
sender— ที่อยู่บัญชีอัจฉริยะnonce— ค่า 256 บิต โดย 192 บิตบนเป็นคีย์ (ช่อง nonce สำหรับทำงานขนาน) และ 64 บิตล่างเป็นลำดับ นี่คือวิธีที่ ERC-4337 รองรับ nonce แบบขนาน ต่างจาก EOA ซึ่งต้องจัดลำดับทุกอย่างต่อกันfactoryและfactoryData— ใช้สำหรับการติดตั้งครั้งแรกผ่าน CREATE2 และเป็นค่าว่างหลังติดตั้งแล้วcallData— การเรียกที่บัญชีอัจฉริยะจะดำเนินการหลังตรวจสอบความถูกต้องแล้วcallGasLimit,verificationGasLimit,preVerificationGas— งบแก๊ส 3 ส่วนแยกจากกันmaxFeePerGas,maxPriorityFeePerGas— ใช้ความหมายตาม EIP-1559 เช่นเดียวกับธุรกรรมทั่วไปpaymasterAndData(v0.6) แยกเป็นpaymaster,paymasterVerificationGasLimit,paymasterPostOpGasLimit,paymasterData(v0.7)signature— ไบต์ที่ไม่มีรูปแบบตายตัว ซึ่งบัญชีอัจฉริยะจะตีความตามvalidateUserOpของตนเอง
กระเป๋าเงินเป็นผู้กำหนดรูปแบบลายเซ็น โดยทั่วไปใช้ ECDSA บน secp256k1 แต่การตรวจสอบ P-256/passkey, multisig, เกณฑ์การกู้คืนบัญชีผ่านบุคคลที่ไว้วางใจ และผู้ลงนามด้วย session key ล้วนทำงานผ่านอินเทอร์เฟซเดียวกัน ความยืดหยุ่นนี้คือหัวใจสำคัญของระบบ
ตั้งแต่ต้นจนจบ: เมื่อบัญชีอัจฉริยะแลกเปลี่ยน USDC เป็น ETH เกิดอะไรขึ้น
ติดตามขั้นตอนการแลกเปลี่ยนจริง เพื่อดูว่าบทบาทต่าง ๆ ทำงานตามลำดับอย่างไร
- ผู้ใช้แตะ “Swap” ในหน้าตากระเป๋าเงิน กระเป๋าเงินสร้าง UserOperation:
sender = 0xUserSafe,callData = swapUSDCforETH(amount)โดยกำหนด Uniswap เป็นปลายทาง - ประมาณค่าแก๊ส กระเป๋าเงินเรียก
eth_estimateUserOperationGasผ่าน RPC ของ bundler โดย bundler จะจำลองการทำงานของ op กับ EntryPoint แล้วส่งคืนขีดจำกัดแก๊สทั้ง 3 ค่า - ผู้ใช้ลงนาม กระเป๋าเงินแฮช UserOp โดยใช้ที่อยู่ EntryPoint และ chain ID จากนั้นขอให้ผู้ใช้ลงนาม (ด้วย passkey, กุญแจฮาร์ดแวร์ หรือวิธีอื่น) แล้วแนบลายเซ็น
- ส่งรายการ UserOp ที่ลงนามแล้วจะถูกส่งผ่าน
eth_sendUserOperationไปยัง bundler อย่างน้อยหนึ่งราย จากนั้นเข้าสู่ alt-mempool ซึ่งเป็นเครือข่าย P2P แยกจาก mempool ธุรกรรมปกติของ Ethereum - Bundler จำลองการทำงาน bundler จำลองรายการอีกครั้งด้วย
eth_callกับsimulateValidationพร้อมตรวจสอบกฎการเข้าถึงพื้นที่จัดเก็บข้อมูลของ ERC-7562 ระหว่างตรวจสอบความถูกต้อง UserOp จะเข้าถึงได้เฉพาะพื้นที่จัดเก็บข้อมูลของตนเอง มิฉะนั้น bundler อาจถูกโจมตีจนเสียหาย - รวมรายการ bundler รวม UserOp นี้กับรายการอื่นได้สูงสุดประมาณ 10 รายการ เป็นการเรียก
handleOps([...userOps], beneficiary)ครั้งเดียวไปยัง EntryPoint - ดำเนินการบนบล็อกเชน EntryPoint วนประมวลผลแต่ละ op โดยเรียก
validateUserOpของผู้ส่ง หักยอดชำระล่วงหน้า แล้วดำเนินการcallDataการแลกเปลี่ยน Uniswap จึงเกิดขึ้นจากบัญชีอัจฉริยะ - คืนเงิน EntryPoint คืนค่าแก๊สที่ไม่ได้ใช้ให้ผู้ส่ง (หรือ paymaster) และจ่ายให้ที่อยู่ผู้รับผลประโยชน์ของ bundler
หากขั้นตอนที่ 5 ล้มเหลว bundler จะทิ้งรายการนั้น และผู้ใช้จะเห็นรหัสข้อผิดพลาด AAxx รหัสที่พบบ่อย ได้แก่ AA21 (ไม่ได้ชำระยอดล่วงหน้า), AA23 (ลายเซ็นผิดพลาด), AA25 (nonce ไม่ถูกต้อง), AA33 (paymaster ย้อนธุรกรรม) และ AA40 (เกินขีดจำกัดแก๊สสำหรับการตรวจสอบ) โปรดจำตารางนี้ไว้ เพราะคุณจะพบรหัสเหล่านี้
EntryPoint v0.6 เทียบกับ v0.7
v0.6 เปิดตัวในเดือนมีนาคม 2023 ที่ 0x5FF1…2789 แม้จะใช้งานได้ แต่มีปัญหากวนใจ 3 ข้อ ได้แก่ blob paymasterAndData เดียวที่รวมมิติของแก๊ส 3 ส่วนเข้าด้วยกัน การจัดข้อมูล initCode ที่ยุ่งยาก และการคำนวณแก๊สที่เรียกเก็บจากผู้ส่งเกินจริง v0.7 แก้ไขปัญหาทั้งหมดนี้
การเปลี่ยนแปลงสำคัญใน v0.7 ที่ควรรู้:
- ที่อยู่:
0x0000000071727De22E5E9d8BAf0edAc6f37da032(สังเกตเลขศูนย์นำหน้า ที่อยู่นี้ได้มาจากการค้นหา vanity address เพื่อให้ค่าแก๊สของ calldata ถูกลง เพราะไบต์ศูนย์แต่ละไบต์มีค่าใช้จ่าย 4 แก๊ส เทียบกับ 16 แก๊สสำหรับไบต์ที่ไม่ใช่ศูนย์) - แยกฟิลด์ของ paymaster:
paymaster,paymasterVerificationGasLimit,paymasterPostOpGasLimit,paymasterDataแยกเป็นฟิลด์แล้ว ทำให้ประมาณค่าได้ง่ายขึ้นและลืมจัดสรรงบประมาณได้ยากขึ้น - แยก Factory: ใช้แนวคิดเดียวกัน โดย
factoryและfactoryDataเป็นฟิลด์แยกกัน แทนที่จะรวมไว้ในinitCode - ค่าปรับสำหรับแก๊สที่ไม่ได้ใช้: ผู้ส่งถูกเรียกเก็บ 10% ของ
callGasLimit/paymasterPostOpGasLimitที่ไม่ได้ใช้ ซึ่งช่วยลดการประมาณ op สูงเกินจริงอย่างมาก - ส่วนเชื่อมต่อสำหรับ EIP-7702: v0.7 เพิ่มกลไกที่ช่วยให้ EOA ทั่วไปมอบหมายการทำงานให้การติดตั้งบัญชีอัจฉริยะได้ชั่วคราว ซึ่งกลายเป็นพื้นฐานของ แนวทางอัปเกรด EIP-7702 ที่เปิดตัวใน Pectra
v0.6 ยังคงใช้งานอยู่ โดยกระเป๋าเงินหลายรายยังไม่ได้เปิดตัวโมดูลที่รองรับ v0.7 จนกระทั่งช่วงกลางปี 2024 บล็อกเชนส่วนใหญ่จึงใช้งาน EntryPoint ทั้งสองเวอร์ชันควบคู่กันไปอีกหลายปี
Paymaster: ใครเป็นผู้จ่ายค่าแก๊ส
Paymaster คือสัญญาที่วาง ETH เป็นเงินค้ำประกันกับ EntryPoint และตกลงชำระค่าแก๊สให้ UserOp ที่เป็นไปตามนโยบายของตน ปัจจุบันมีรูปแบบหลัก 3 แบบ:
- Verifying paymaster (สนับสนุนค่าแก๊ส) ระบบหลังบ้านลงนามอนุมัตินอกบล็อกเชน จากนั้น paymaster ตรวจสอบลายเซ็นบนบล็อกเชนและชำระค่าแก๊ส ใช้โดยแอปที่ต้องการให้ผู้ใช้เริ่มต้นใช้งานโดยไม่เสียค่าแก๊ส เช่น Coinbase Smart Wallet, Farcaster Frames และการสร้าง NFT ส่วนใหญ่
- ERC-20 paymaster ผู้ใช้ชำระเป็น USDC, USDT หรือ DAI ส่วน paymaster แลกเป็น ETH ในระบบหลังบ้าน (หรือใช้ ETH ที่สำรองไว้) Pimlico, Biconomy และ Stackup ต่างก็มีบริการแบบเปิดให้ใช้งาน
- Token paymaster พร้อม permit ใช้ permit ของ EIP-2612 เพื่อให้ผู้ใช้ลงนามทั้ง UserOp และการอนุมัติโทเคนด้วยลายเซ็นเดียว
validatePaymasterUserOp ของ paymaster ทำงานในช่วงตรวจสอบความถูกต้องของ EntryPoint หากทำงานย้อนกลับ คุณจะได้รับ AA33 หากเงินค้ำประกันไม่เพียงพอ EntryPoint จะยึดเงินค้ำประกัน และ bundler จะเป็นผู้รับความเสียหาย นี่จึงเป็นเหตุผลที่ bundler จัดทำรายชื่อ paymaster ตามระดับความน่าเชื่อถือ ERC-7562 กำหนดกฎด้านความน่าเชื่อถือเหล่านี้ เพื่อให้ mempool ของ bundler ทนต่อสแปมได้ หลักการพื้นฐานเดียวกันนี้อธิบายได้ว่าเหตุใด แนวปฏิบัติที่ดีในการอนุมัติ DeFi และการจัดการ multisig จึงนำมาใช้กับโลก 4337 ได้โดยตรง เพราะภัยคุกคามเหมือนเดิม แต่เปลี่ยนเพียงรูปแบบที่ครอบอยู่
Alt-mempool สาธารณะเทียบกับ bundler ส่วนตัว
มีสองวิธีในการนำ UserOp ขึ้นบล็อกเชน
Alt-mempool สาธารณะ: bundler ที่ทำตาม ERC-7562 จะเผยแพร่ UserOp ต่อกันผ่านเครือข่าย libp2p ใครก็ตามที่รันโหนด Pimlico, Stackup, Alchemy, Etherspot หรือ Voltaire ก็สามารถรับ UserOp ของคุณได้ วิธีนี้เปิดให้ทุกคนใช้งานได้โดยไม่ต้องขออนุญาตและต้านทานการเซ็นเซอร์ แต่คุณยังเผชิญความเสี่ยงด้าน MEV เช่นเดียวกับธุรกรรม Ethereum ทั่วไป กล่าวคือ searcher อาจเห็น op ของคุณก่อนที่จะถูกรวมในบล็อก
Bundler ส่วนตัว: คุณส่ง eth_sendUserOperation ไปยัง RPC ของผู้ให้บริการรายหนึ่งโดยตรง ผู้ให้บริการจะจำลองการทำงาน รวมธุรกรรมเป็นชุด และส่งธุรกรรมแบบส่วนตัว (มักผ่าน Flashbots) วิธีนี้เร็วกว่าและป้องกัน MEV ได้ แต่คุณต้องไว้วางใจว่า bundler จะไม่เซ็นเซอร์หรือแซงหน้าธุรกรรมของคุณ ในปี 2026 กระเป๋าเงินสำหรับผู้ใช้ทั่วไปส่วนใหญ่ใช้ bundler ส่วนตัวเป็นค่าเริ่มต้น
ข้อแลกเปลี่ยนนี้คล้ายกับการเลือกระหว่าง mempool สาธารณะกับ Flashbots Protect สำหรับธุรกรรมทั่วไป หากคุณยังไม่เคยอ่านคำอธิบายเกี่ยวกับ วงจรชีวิตของธุรกรรม ตั้งแต่ยุค L1 บทความนั้นอธิบายว่ามีอะไรเปลี่ยนไปเมื่อ bundler เข้ามามีบทบาท
Aggregator การใช้งาน และค่าใช้จ่ายทั้งหมด
Aggregator คือสัญญาที่ตรวจสอบธุรกรรมเป็นชุดด้วยการตรวจสอบลายเซ็นเพียงครั้งเดียว กรณีใช้งานหลักคือ BLS: รวบรวม UserOp 50 รายการที่ลงนามด้วย BLS แล้วรวมลายเซ็นให้ตรวจสอบแบบ pairing เพียงครั้งเดียว ช่วยประหยัดค่าแก๊สส่วนลายเซ็นได้ประมาณ 95% การใช้งานยังช้าเพราะการเขียนกระเป๋าเงินที่ลงนามด้วย BLS ทำได้ยาก และการประหยัดค่าแก๊สจะคุ้มก็ต่อเมื่อมีปริมาณธุรกรรมสูงเท่านั้น ณ กลางปี 2026 มี UserOp บน mainnet น้อยกว่า 1% ที่ใช้ aggregator
ตัวเลขการใช้งาน (ไตรมาส 1 ปี 2026 จาก bundlebear.com): มี UserOp สะสมประมาณ 380 ล้านรายการในทุกเชน โดย Base, Polygon และ Arbitrum คิดเป็นสัดส่วนส่วนใหญ่ ส่วนแบ่งของ mainnet อยู่ที่ประมาณ 6–8% ซึ่งน้อยที่สุดเมื่อวัดตามปริมาณ แต่สูงที่สุดเมื่อวัดตามมูลค่าที่โอน Coinbase Smart Wallet, Farcaster และ Argent ครองสัดส่วนการใช้งานของผู้บริโภค
ค่าใช้จ่ายส่วนเพิ่ม: UserOp v0.7 ใช้แก๊สมากกว่าธุรกรรม EOA ที่เทียบเท่ากันประมาณ 30,000–40,000 หน่วย โดยมาจากลูปของ EntryPoint การตรวจสอบ และการจัดการธุรกรรมในชุด ที่ราคา 20 gwei บน mainnet จะคิดเป็นเงินไม่ถึงหนึ่งดอลลาร์ต่อรายการ การสร้างบัญชีครั้งแรกผ่าน factoryData ใช้แก๊สเพิ่มอีกราว 250,000 หน่วย บน L2 ที่ calldata เป็นต้นทุนหลัก ค่าใช้จ่ายส่วนเพิ่มคิดเป็นตัวเลขหลักหน่วยเปอร์เซ็นต์ UserOp ที่มีผู้สนับสนุนค่าแก๊สจะโยกค่าใช้จ่ายนี้ไปให้ dApp จึงเห็นธุรกรรมฟรีในแอปสำหรับผู้บริโภค แต่ไม่ใช่ใน DeFi ที่จริงจัง คำอธิบายเพิ่มเติมเกี่ยวกับ ค่าธรรมเนียมธุรกรรม อธิบายว่าค่าใช้จ่ายส่วนเพิ่มนี้ส่งผลต่อตลาดค่าธรรมเนียมแต่ละแบบอย่างไร
สรุปสั้น ๆ: ERC-4337 ประกอบด้วย 6 บทบาท (ผู้ส่ง, UserOp, bundler, EntryPoint, paymaster และ aggregator), struct หนึ่งชุด, ที่อยู่ EntryPoint สองรายการที่ควรจำ และค่าใช้จ่ายส่วนเพิ่มประมาณ 30–40k หน่วยแก๊ส เพื่อแลกกับการใช้รูปแบบลายเซ็นได้หลากหลาย การสนับสนุนค่าแก๊ส การรวมธุรกรรมเป็นชุด และ nonce ที่ทำงานขนานกัน บทที่ 3 ของชุดบทความนี้จะกล่าวถึง EIP-7702 ซึ่งเป็นแนวทางคู่ขนานของ Pectra ที่ให้ EOA เดิมของคุณยืมกลไกเดียวกันนี้มาใช้ได้โดยไม่ต้องเปลี่ยนที่อยู่



