Skip to content
Tất cả hướng dẫn quyền chọn
Tài khoản thông minh Ethereum12 phút đọc

Tài khoản thông minh Ethereum: UserOperation, bundler và tài trợ phí gas

Theo dõi UserOperation ERC-4337 qua bundler và EntryPoint, tìm hiểu paymaster tài trợ gas ra sao và phân biệt khôi phục tài khoản với quyền kiểm soát khóa.

Trong hướng dẫn nàyTài khoản thông minh đặt quy tắc cấp quyền có thể lập trình trong hợp đồng

Tóm tắt ngắn

Trừu tượng hóa tài khoản cho phép tài khoản thông minh dạng hợp đồng gửi UserOperation theo quy tắc xác thực riêng, qua một tuyến khác với giao dịch EOA thông thường. Với ERC-4337, bundler tập hợp các operation và gọi EntryPoint; paymaster tùy chọn có thể tài trợ gas nếu chấp thuận yêu cầu. Cơ chế này không bảo đảm tự động khôi phục, giao dịch miễn phí hay không có bên lưu ký.

Tài khoản thông minh đặt quy tắc cấp quyền có thể lập trình trong hợp đồng

Tài khoản do bên ngoài sở hữu (EOA) chứng minh quyền kiểm soát bằng chữ ký khóa riêng. Nonce của tài khoản xác định thứ tự giao dịch.

Mô hình này đơn giản, nhưng thường cùng một khóa cấp quyền cho mọi hành động và một giao dịch thông thường thường bắt đầu một lệnh gọi cấp cao nhất. Hợp đồng được gọi vẫn có thể gọi thêm các hợp đồng khác.

Điểm khác biệt này bổ sung cho hướng dẫn giao dịch Ethereum đang chờ, vốn nói về pool giao dịch EOA chứ không phải luồng ERC-4337.

Tài khoản thông minh là hợp đồng có thể nắm giữ tài sản và thực hiện lệnh gọi. Mã xác thực có thể áp dụng quy tắc riêng cho tài khoản, như một chữ ký, ngưỡng nhiều chữ ký hoặc quyền hết hạn sau một khoảng thời gian.

ERC-4337 không quy định một loại ví hay chính sách khôi phục duy nhất; tiêu chuẩn cung cấp giao diện để tài khoản hợp đồng cấp quyền và thực hiện operation.

Ethereum.org nêu các khả năng của trừu tượng hóa tài khoản, như khóa dự phòng, quyền hạn giới hạn và tài trợ gas. Từng ví có thể không triển khai mọi tính năng.

Tên gọi “ví thông minh” tự nó không cho biết tài khoản an toàn đến đâu hoặc ai kiểm soát nó. Hãy xác định hợp đồng nào giữ tài sản, tài khoản tin cậy mã và EntryPoint nào, và những người ký nào được cấp quyền thực hiện lệnh gọi.

Nếu logic của tài khoản có thể nâng cấp, quyền quản trị và quy trình thay đổi cũng ảnh hưởng đến quyền kiểm soát tài sản.

UserOperation chưa phải giao dịch Ethereum đã nằm trong một khối

UserOperation là đối tượng mô tả việc tài khoản thông minh muốn làm. Thông thường, nó gồm tài khoản gửi, nonce riêng của tài khoản, dữ liệu lệnh gọi, chữ ký, giới hạn gas và điều kiện phí.

Nó cũng có thể chứa thông tin factory để tạo tài khoản mới hoặc thông tin paymaster để yêu cầu tài trợ. Trường dữ liệu chính xác phụ thuộc vào phiên bản EntryPoint.

Thay vì gửi trực tiếp đối tượng này lên chuỗi bằng phương thức thông thường eth_sendTransaction, ví chuyển nó cho bundler hoặc relay cung cấp RPC ERC-4337 như eth_sendUserOperation.

Yêu cầu đi qua pool UserOperation riêng, tách khỏi pool giao dịch Ethereum thông thường. Hash UserOperation nhận diện yêu cầu; giao dịch on-chain do bundler tạo có hash và biên nhận riêng.

ERC-7769 định nghĩa RPC để gửi, tra cứu bằng hash và lấy biên nhận UserOperation.

Phản hồi của bundler có thể cho biết yêu cầu đã qua kiểm tra của dịch vụ đó và vào pool của họ. Điều này không chứng minh yêu cầu đã được đưa vào khối hay hành động trong ứng dụng thành công.

Việc một bundler chia sẻ yêu cầu với bundler khác tùy thuộc hạ tầng và chính sách. Hãy phân biệt xác nhận tiếp nhận của nhà cung cấp với kết quả được ghi trên chuỗi.

Bundler mô phỏng xác thực và chuẩn bị lệnh gọi on-chain

Bundler nhận UserOperation, kiểm tra khả năng tương thích với phiên bản EntryPoint rồi mô phỏng logic xác thực của tài khoản và paymaster.

Bundler kiểm tra chữ ký, tài khoản có tin cậy EntryPoint đó không, nonce, gas và điều kiện tài trợ có hợp lệ không. Nó có thể từ chối operation vi phạm quy tắc hoặc không qua mô phỏng.

Hướng dẫn bundler ERC-4337 mô tả vai trò mô phỏng và gửi gói.

Bundler chọn một hoặc nhiều operation đạt yêu cầu rồi tạo một giao dịch Ethereum thông thường gọi hàm handleOps của EntryPoint. Việc giao dịch đó có vào khối hay không vẫn phụ thuộc quá trình tạo khối và tình trạng mạng.

Hash UserOperation được trả về không chứng minh việc thực thi đã diễn ra trên chuỗi chính tắc.

Pool UserOperation tách biệt với pool EOA; đừng cho rằng mọi nhà cung cấp chia sẻ cùng các yêu cầu. Bundler có thể từ chối operation hoặc để nó chờ. Mỗi ví và nhà cung cấp có thể hỗ trợ chuỗi, phiên bản EntryPoint và chính sách khác nhau.

Khi kiểm tra trạng thái, hãy phân biệt giao diện ví, biên nhận operation và biên nhận trên chuỗi của giao dịch gói.

Sơ đồ không chữ cho thấy thao tác đã ký đi qua bundler và EntryPoint tới tài khoản thông minh; paymaster tùy chọn trả gas
ERC-4337 tách yêu cầu đã ký, việc gửi qua bundler, xác thực tài khoản và tài trợ gas tùy chọn

EntryPoint kiểm tra quyền của tài khoản trước khi gọi tài khoản

EntryPoint nhận lệnh gọi handleOps của bundler và gọi hàm xác thực của từng tài khoản thông minh. Tài khoản kiểm tra EntryPoint gọi có đáng tin cậy không, đồng thời xác minh chữ ký và quy tắc riêng.

EntryPoint xác thực và tăng số thứ tự 64 bit cho từng cặp tài khoản và khóa nonce; tài khoản có thể áp dụng logic riêng cho trường khóa 192 bit. Vì thế, một tài khoản có thể dùng nhiều khóa, mỗi khóa có số thứ tự riêng.

Paymaster tùy chọn cũng kiểm tra xem nó có tài trợ operation không. Sau khi xác thực thành công, EntryPoint gọi hàm thực thi của tài khoản để làm hành động được mã hóa trong callData rồi quyết toán chi phí.

EntryPoint là hợp đồng trung tâm giúp luồng tài khoản thông minh hoạt động mà không cần sửa giao thức Ethereum cho từng thiết kế ví. Hãy kiểm tra địa chỉ đã triển khai, phiên bản và các chuỗi mà ví hỗ trợ.

Hướng dẫn EntryPoint ERC-4337 trình bày chi tiết bước xác thực và thực thi.

Mô phỏng là bước xem trước hữu ích chứ không phải cam kết được đưa vào khối. Trạng thái chuỗi, phí, thời hạn hợp lệ hoặc trạng thái hợp đồng bên ngoài có thể thay đổi khi operation đang chờ và làm đổi kết quả xác thực on-chain.

Ngay cả sau khi xác thực, lệnh gọi ứng dụng vẫn có thể lỗi hoặc bị hoàn nguyên. Chỉ được đưa vào khối không chứng minh việc chuyển token hay hành động hợp đồng mong muốn đã thành công.

Paymaster chỉ tài trợ gas khi chấp thuận operation

Nếu UserOperation có thông tin paymaster, EntryPoint hỏi hợp đồng đó có đồng ý tài trợ operation không. Nhờ vậy, ứng dụng có thể trả phí giao dịch hoặc người dùng có thể bắt đầu thao tác mà không cần giữ ETH trong tài khoản.

Một số thiết kế cho phép trả bằng token hoặc đặt điều kiện khác, tùy thuộc ví và cách triển khai paymaster.

Tài trợ không làm gas biến mất và không xóa bỏ mọi điều kiện. Paymaster có thể giới hạn ứng dụng, người dùng, số operation hoặc số tiền đủ điều kiện; nó cũng có thể xem yêu cầu rồi từ chối.

Khoản gửi vào EntryPoint của paymaster dùng để trả chi phí operation. Nếu cần stake riêng, khoản stake là tài sản bảo đảm theo quy tắc xác thực; nó khác với tiền gửi dùng để trả gas.

Hướng dẫn paymaster ERC-4337 và EIP-4337 mô tả luồng xác thực và quyết toán.

Phí bằng không trên giao diện ứng dụng không có nghĩa là không tốn gì. Nhà tài trợ có thể trả trước rồi thu lại giá trị qua thuê bao, thanh toán bằng token hoặc điều khoản dịch vụ.

Hãy xác định ai chịu chi phí cuối cùng, tài trợ có trần hay giới hạn lượt dùng không, và operation thất bại có thể vẫn phát sinh phí không.

Đánh giá riêng nhiều lệnh gọi và phí của chúng

Nếu ví hỗ trợ, người dùng có thể đưa lệnh phê duyệt ứng dụng và lệnh swap vào cùng một UserOperation. Hai hành động được gửi như một operation qua EntryPoint.

Cách này khác giao dịch EOA thông thường và cũng khác việc bundler gộp nhiều UserOperation riêng vào một giao dịch trên chuỗi. Hãy xem trước trong ví để biết đang dùng cấu trúc nào.

Xét ví dụ phí giả định: một operation được tài trợ và chấp thuận có chi phí gas thực tế là 0,0012 ETH. Khoản phí có thể được quyết toán từ tiền gửi EntryPoint của paymaster thay vì số dư tài khoản của người dùng.

0,0012 ETH chỉ là con số minh họa, không phải báo giá hiện tại. Chi phí thật tùy thuộc gas đã dùng, điều kiện phí và mạng.

Gộp lệnh không mặc nhiên rẻ hơn hay an toàn hơn. Tính nguyên tử của nhiều lệnh gọi phụ thuộc cách tài khoản thông minh xử lý lỗi.

Hãy kiểm tra một lệnh thất bại có hoàn nguyên toàn bộ lệnh gộp không, có hành động nào vẫn hoàn tất không và ai trả gas. Ước tính gas sai hoặc ứng dụng không khả dụng có thể khiến operation bị từ chối hay thực thi thất bại.

Hướng dẫn phí gas Ethereum giải thích các trường phí chung.

Quy tắc khôi phục do cách triển khai tài khoản quyết định, không phải ERC-4337

Tài khoản thông minh có thể cấu hình người ký dự phòng hoặc quy trình để những guardian đáng tin cậy đạt ngưỡng và thay khóa. Một số thiết kế thêm thời gian chờ để khóa hiện tại có thể phản đối.

Nhưng nếu luôn cần một chữ ký cụ thể, mất khóa đó có thể khiến tài khoản không còn cách khôi phục.

ERC-4337 cho phép tài khoản xác thực UserOperation theo quy tắc riêng; tiêu chuẩn không tự cung cấp khóa dự phòng hay khôi phục xã hội cho mọi tài khoản.

Quá ít guardian hoặc quy tắc thay khóa yếu có thể tạo đường tấn công. Quá nhiều guardian hay yêu cầu nghiêm ngặt có thể khiến chủ sở hữu hợp pháp khôi phục chậm. Hãy xem ngưỡng, thời gian chờ, quyền hủy và cách giữ khóa khôi phục.

Các quy tắc này xác định cả ai có thể chặn operation, chứ không chỉ ai có thể cấp quyền.

Ví hợp đồng không mặc nhiên là có lưu ký hay không lưu ký. Quyền kiểm soát phụ thuộc ai giữ khóa ký, tài khoản có quyền quản trị hoặc nâng cấp không và signer được lưu trữ hay dịch vụ khôi phục được phép cấp quyền gì.

Hãy xem riêng hợp đồng giữ tài sản với khóa và dịch vụ kiểm soát nó. Sao lưu seed phrase thông thường là chủ đề riêng trong hướng dẫn khôi phục ví.

Kiểm tra operation và đường kiểm soát trước khi gửi

Trong phần xem trước của ví, hãy kiểm tra mạng, địa chỉ tài khoản, hợp đồng đích, dữ liệu lệnh gọi, phạm vi phê duyệt token và số lượng lệnh gọi. Chữ ký có thể cấp quyền nhiều hơn hành động duy nhất được giao diện làm nổi bật.

Nếu không hiểu dữ liệu sẽ ký, hãy xem tài liệu chính thức của ứng dụng và ví trước khi tiếp tục.

Để hiểu việc tài trợ, hãy đọc điều kiện đủ tiêu chuẩn, giới hạn sử dụng, phương thức thanh toán thay thế và quy tắc chịu phí khi thất bại thay vì chỉ dựa vào tên paymaster.

Nhãn tài trợ đang bật không có nghĩa ứng dụng luôn miễn phí vô điều kiện, và paymaster vẫn có thể từ chối operation. Tắc nghẽn mạng và chậm đưa vào khối là những vấn đề riêng.

Nếu UserOperation chờ lâu, đừng áp dụng cách “tăng tốc” hoặc “hủy” của EOA khi chưa kiểm tra cách ví xử lý UserOperation. Trước tiên, tra hash và biên nhận operation.

Nếu có hash giao dịch của bundler, hãy xem cả biên nhận khối và kết quả thực thi. Biên nhận RPC có thể phân biệt chi phí và trạng thái thành công của một operation với biên nhận của toàn bộ giao dịch gói.

Điều này khác với thay thế hoặc hủy giao dịch EOA có cùng nonce.

Câu hỏi thường gặp

Q1UserOperation có giống giao dịch Ethereum không?

Không. Đây là yêu cầu của tài khoản thông minh gửi qua pool riêng. Khi bundler gửi lệnh gọi EntryPoint, chuỗi ghi lại giao dịch gói và kết quả của từng operation.

Q2Có paymaster thì người dùng không phải trả gas sao?

Người dùng có thể không trả ETH trực tiếp từ tài khoản, nhưng chi phí mạng vẫn tồn tại. Điều khoản có thể gồm điều kiện đủ tiêu chuẩn, thanh toán bằng token hoặc điều kiện dịch vụ; operation thất bại vẫn có thể tốn gas.

Q3Tôi có thể khôi phục ví ERC-4337 sau khi mất khóa không?

Chỉ khi tài khoản có người ký dự phòng hoặc chính sách khôi phục. Hãy kiểm tra ngưỡng, thời gian chờ, quyền thay khóa và phạm vi kiểm soát của dịch vụ khôi phục trong cấu hình tài khoản thực tế.

Nguồn và tài liệu đọc thêm

Báo lỗi

Chúng tôi sẽ soạn email kèm liên kết bài viết này. Mark chỉ nhận được báo cáo sau khi bạn gửi email

Kiểm tra nhanh

Đọc xong hướng dẫn? Hãy kiểm tra với 3 câu hỏi

Câu hỏi 1 / 3

Câu hỏi 01

Bundler trả về hash UserOperation. Chỉ riêng phản hồi đó xác nhận điều gì?

Chọn một đáp án để xem giải thích

Bảng thuật ngữ quyền chọn