Account Abstraction là gì? Chi tiết về công cụ mở rộng của Ethereum

Với những người theo dõi lâu năm của Vitalik Buterin hay những người ủng hộ Ethereum sẽ không mấy xa lạ với cụm từ account abstraction trong thời gian gần đây. Đây là khái niệm được Vitalik nhắc tới rất nhiều, không chỉ vậy, Vitalik đã đề xuất một vài proposal dành riêng cho việc triển khai Account Abstraction và coi đây là long-term dream của các developers trên Ethereum.

Mới đây nhất, 2 dự án đang phát triển của mảng Layer 2 là StarkNet và zkSync đã đưa ra thông báo sẽ chạy mô hình native account abstraction của riêng họ.

Account abstraction là gì?

Account abstraction (AA) là một loại Ethereum Account, đề xuất AA này cho phép chuyển đổi các loại tài khoản thành các hợp đồng thông minh với logic riêng của chúng để có thể tự xác định thế nào là một giao dịch hợp lệ, trả phí giao dịch và thực hiện việc khởi tạo giao dịch. 

Trong thuật ngữ ngành khoa học máy tính, các tài khoản đó được coi là đã được trừu tượng hoá (abstracted), từ đó dẫn đến cái tên Account abstraction. 

Điều này có nghĩa là sẽ không còn trường hợp một tài khoản được sử dụng cho tất cả các mục đích. Giống như việc tách các “vật thể” đang nắm giữ token (account) ra khỏi “vật thể” được sử dụng để trao quyền/cho phép giao dịch các token (signer).

Việc này hướng tới việc giúp cho mỗi user có thể có một loại tài khoản phù hợp với nhu cầu cá nhân của họ.

Với những user muốn sử dụng thuật toán xác minh chữ ký khác ngoài ECDSA, sử dụng nhiều key để cấp quyền các giao dịch, thay đổi signer của tài khoản mỗi tuần, họ có thể viết một tài khoản riêng để thực hiện những điều đó.

Trên thực tế, khái niệm Account abstraction không phải quá mới, Vitalik đã đề cập đến AA từ đề xuất EIP-86 của Ethereum từ năm 2017, tuy nhiên do yêu cầu quá nhiều thay đổi từ protocol để thực hiện. Sau đó, Vitalik đã cập nhật thêm các bản cải tiến là EIP-2938 và phiên bản gần nhất là EIP-4337 để có thể dễ dàng triển khai hơn. 

Hai dự án đã công bố chính thức áp dụng Account abstraction là các dự án Layer 2 StarkNet và zkSync phiên bản 2.0.

Ethereum Account là gì?

Ethereum Account được định nghĩa là một thực thể (entity) có số dư ETH và có thể thực hiện các giao dịch trên mạng lưới Ethereum. Các account có thể do người dùng điều khiển hoặc cũng có thể được triển khai dưới dạng hợp đồng thông minh.

Ethereum có 2 loại account chính:

  • Externally-owned Accounts (EOA): Kiểm soát bởi bất kì ai chỉ cần người đó nắm giữ private key.
  • Contract Accounts (CA): Là các hợp đồng thông minh được triển khai trên mạng lưới, kiểm soát bởi các dòng code.

Cả 2 loại tài khoản trên đều có những khả năng:

  • Nhận, giữ, gửi ETH và các loại token trên mạng Ethereum.
  • Tương tác với các smart contracts khác.

Một vài điểm khác biệt cơ bản giữa 2 loại tài khoản:

Với Externally-owned:

  • Tạo các toàn khoản Externally-owned đơn giản và miễn phí.
  • Có thể khởi tạo các giao dịch.
  • Giao dịch giữa 2 toàn khoản Externally-owned chỉ có thể là giao dịch chuyển ETH/token.

Với Contract:

  • Việc tạo một contract sẽ cần có một khoản phí do sử dụng bộ nhớ mạng
  • Chỉ có thể gửi giao dịch khi nhận được giao dịch
  • Các giao dịch từ tài khoản External tới một tài khoản Contract có thể kích hoạt mã code thực thi nhiều hành động khác nhau như giao dịch token, tạo một contract mới…

Nhìn chung, cả 2 loại tài khoản đều có 4 đặc tính:

  • Nonce: Một bộ đếm cho biết số lượng giao dịch được gửi từ tài khoản, đảm bảo các giao dịch sẽ chỉ được thực hiện 1 lần. Với Contract account, con số này đại diện cho số contracts được tạo bởi tài khoản này.
  • Balance: Số dư đại diện cho lượng ETH tài khoản sở hữu
  • codeHash: Mã hàm băm này được tham khảo từ mã của một tài khoản trên Ethereum Virtual Machine (EVM). Tài khoản Contract có các đoạn mã được lập trình để thực hiện các hoạt động khác nhau. Khác với các trường đặc tính khác, mã này không thể bị thay đổi.
  • storageRoot: Hay còn được gọi là hàm băm lữu trữ (storage hash), được sử dụng để mã hoá hàm băm của nội dung được lữu trữ trên tài khoản.

Ở thời điểm hiện tại, EOA là loại tài khoản chủ yếu mà người dùng tương tác và cũng có ảnh hưởng nhiều nhất tới người dùng. Không chỉ vậy, tất cả các giao dịch trên Ethereum cũng đều được khởi tạo từ ví EOA.

Mỗi ví EOA sẽ được tạo thành bởi 1 cặp khoá mật mã: public key và private key. 2 loại khoá này giúp chứng minh 1 giao dịch thực sự được ký bởi người gửi và ngăn chặn các hành vi giả mạo. Private key là công cụ để người dùng ký (sign) các giao dịch, vì vậy cấp cho người dùng quyền kiểm soát đối với tài sản nằm trong tài khoản đó.

Hay nói theo cách khác, người dùng chưa bao giờ thực sự nắm giữ crypto, thay vào đó nắm giữ các private key để truy cập vào số fund luôn nằm trên sổ cái của Ethereum.

Điều gì xảy ra nếu người dùng đánh mất private key hoặc ai đó sở hữu nó?

Cơ chế của account và signer trên thực tế đã từng bị hacker lợi dụng để chiếm đoạt tài sản người dùng trong quá khứ. Một câu hỏi nữa đặt ra là nếu người dùng đánh mất private key thì điều gì sẽ xảy ra?

Private key cũng chính là tài khoản của người dùng, mất private key đồng nghĩa với việc đánh mất tài khoản và tất cả token trong tài khoản đó. Trong trường hợp này, người dùng hầu như không có cách nào để cứu chữa, đã có triệu đô bị mất hoặc đánh cắp với các lí do liên quan tới private key.

Tất nhiên, users cũng có thể sử dụng các thiết bị ví cứng lưu trữ private key trong môi trường không có liên kết internet và viết private key ra giấy. Đây là biện pháp an toàn nhất cho tới thời điểm hiện tại, tuy nhiên vẫn chưa phải là tối ưu nhất, rất khó để tiến tới mass adoption với hàng trăm triệu users với cách thức này.

Chính vì vậy, các nhà phát triển của Ethereum đang tiến hành phát triển giải pháp Account abstraction để giải quyết vấn đề trên.

Mục đích của Account abstraction

Mục đích của việc triển khai AA là để cải thiện đáng kể trải nghiệm người dùng trong việc tương tác với blockchain Ethereum qua các ví, Dapps, DeFi. Account abstraction cũng đóng vai trò là một base layer trên Ethereum để quyết định khi nào một tài khoản có thể tự trả phí gas và hình thức trả phí gas diễn ra như nào. 

Cụ thể, AA giúp giải quyết các hạn chế ngăn chặn sự phát triển trong một số lĩnh vực quan trọng:

  • Tạo ví hợp đồng thông minh sử dụng các loại xác minh chữ ký khác ngoài ECDSA (Schnorr, BLS…).
  • Tạo ví hợp đồng thông minh bao gồm các tính năng như xác minh multisig, khôi phục xã hội (social recovery), giảm nguy cơ mất hoặc bị đánh cắp tài sản.
  • Các hệ thống bảo vệ quyền riêng tư như tornado.cash.
  • Cải thiện hiệu quả sử dụng phí gas của các DeFi protocols bằng cách ngăn chặn các giao dịch không đáp ứng điều kiện cao cấp được đưa vào chuỗi.
  • Giúp người dùng có thể sử dụng một loại token khác để trả phí thay vì bắt buộc phải sử dụng ETH (ví dụ: chuyển đổi token đó thành ETH cần để trả phí gas ngay trong giao dịch theo thời gian thực).

Một trong những ví dụ dễ hiểu nhất của Account abstraction có thể được hiểu như sau.

Giả sử người dùng muốn chuyển token sang muốn chiếc ví mới vì lí do bảo mật. Sau đó, người dùng vô tình gửi toàn bộ số ETH tới ví mới trước. Điều này có nghĩa không có ETH, ví cũ sẽ không thể chuyển các token còn lại.

Tất nhiên, cách đơn giản nhất vẫn có thể chỉ đơn giản gửi 1 phần ETH lại địa chỉ ví cũ, lãng phí chút thời gian và phí gas. Trường hợp này nghe đơn giản nhưng đã có nhiều người dùng gặp phải, AA có thể đem đến cho người dùng giải pháp “biến” chiếc vi thành smart contract wallet và cho phép sử dụng các token có sẵn trong ví làm phí gas.

Smart contract wallet, hay còn gọi là ví hợp đồng thông minh, là một loại tài khoản blockchain được triển khai, quản lý on-chain qua các hợp đồng thông minh thay vì private key. Loại ví này cung cấp các giải pháp giảm thiểu rủi ro lập trình và thân thiện với người dùng với các tính năng như bảo mật nhiều chữ ký (multi-signature security), khôi phục xã hội (social recovery), cho phép/chặn các địa chỉ ví khác, giao dịch theo “lô” (batched transactions), đóng băng ví…

Các loại ví smart contract đã xuất hiện khá nhiều cho tới thời điểm hiện tại và đã có lúc được coi như một “trend” mới. Các loại ví smart contract nổi bật nhất phải kể đến ví Argent, Authereum, Gnosis Multisig, Gnosis Safe, ConsenSys Multisig…

Cách hoạt động của Account abstraction

Theo giới thiệu của EIP-2938 trên trang chủ Ethereum, EIP-2938 có thể hoạt động bằng cách đưa ra các protocol changes với một loại giao dịch AA mới yêu cầu 2 mã opcode mới: NONCE và PAYGAS; thay đổi các quy tắc của mempool và extensions để hỗ trợ các ứng dụng nâng cao.

Tuy nhiên cách làm này tương đối phức tạp, Vitalik đã đưa ra phiên bản phát triển ERC-4337 để đạt được account abstraction như những gì EIP-2938 làm được mà không cần các protocol changes.

Người dùng sẽ gửi các messages một cách off-chain được gọi là UserOperation, sau đó sẽ được thu thập và đóng gói hàng loạt thành một giao dịch bởi người đề xuất khối qua module bundler.

Người đề xuất khối có trách nghiệm lọc các hoạt động để đảm bảo rằng chỉ chấp nhận các hoạt động có trả phí. Sẽ có một mempool riêng cho các UserOperation và các node được kết nối với mempool này để thực hiện xác thực chuyên dụng cho ERC-4337 để đảm bảo một UserOperation bất kì luôn được trả phí trước khi chuyển đi.

Chuyển đổi EOA thành smart contract wallet

Để cho phép các tài khoản EOA có thể được nâng cấp lên thành ví ERC-4337, có thể tạo EIP cho phép các EOA thực hiện một thao tác thiết lập mã hợp đồng (contract code). Một khi EOA thực hiện điều này, sự chuyển đổi sẽ không thể bị đảo ngược và kể từ thời điểm đó, tài khoản đó sẽ chỉ có thể hoạt động như một ví hợp đồng thông minh.

Đã có một vài proposal về cách thực hiện quy trình nâng cấp này như giao dịch replace code hay AUTH_USURP (EIP-5003).

Hạn chế của ERC-4337

Nhìn chung, ERC-4337 cũng có thể tương tác với các chuẩn ERC khác, tuy nhiên cũng có một vài yếu điểm:

  • Người dùng hiện tại không thể nâng cấp nếu không chuyển toàn bộ tài sản sang một tài khoản hoàn toàn mới.
  • Cần chi phí gas bổ sung (~42,000 gwei cho một UserOperation cơ bản so với ~21k cho một giao dịch bình thường).
  • Nhận ít lợi ích từ các kĩ thuật chống kiểm duyệt trong giao thức như crLists, vì chúng sẽ nhắm tới mục tiêu là các giao dịch và sẽ bỏ qua UserOperation.

Roadmap dự kiến của Account abstraction

Do phiên bản AA hoàn thiện nhất tới thời điểm hiện tại là ERC-4337 nên bài viết sẽ tập trung vào roadmap của ERC-4337.

Trong short-term

  • Đưa ERC-4337 trở thành sản phẩm hoàn thiện. Mở rộng thêm khả năng tổng hợp chữ ký.
  • Phát triển ví trình duyệt dễ tiếp cận sử dụng loại ví ERC-4337.
  • Khởi động hệ sinh thái ERC-4337 trong các giao thức Layer 2, ở đó phí gas rẻ hơn rất nhiều.

Trong medium-term

  • Triển khai Verkle trees (tương tự với Merkle Tree), thêm các EIPs mới để giảm phí gas.
  • Thêm các giải pháp tuỳ chọn nâng cấp EOA lên ERC-4337.
  • Có thể thêm crList logic.

Trong long-term

  • Cân nhắc áp dụng việc chuyển đổi bắt buộc từ EOA.

Tổng kết

Account abstraction từ lâu đã là giấc mơ chung của cộng đồng các nhà phát triển Ethereum. Thay vì các dòng EVM code chỉ được sử dụng để triển khai logic của các ứng dụng/dapps, nó cũng có thể được sử dụng để triển khai logic của các ví người dùng cá nhân. 

DISCLAIMER: Bài viết chỉ nhằm mục đích cung cấp thông tin đến người dùng,không khuyến nghị đầu tư, mua/bán bất cứ loại tài sản tài chính nào. Thị trường tiền điện tử là một thị trường chứa đựng vô cùng nhiều rủi ro, và chưa được nhà nước bảo vệ. Đằng sau mỗi lệnh là tương lai con em chúng ta. Chúc các bạn thành công!

T_Lauriston: