Auto Payments (thanh toán tự động) và Recurring Payments (thanh toán định kỳ) bằng blockchain là như thế nào?

Khi số lượng người sử dụng blockchain ngày càng gia tăng, sẽ cần có nhiều sản phẩm có trải nghiệm người dùng vượt trội và chức năng cốt lõi hỗ trợ các trường hợp sử dụng thực tế. Một trong những tính năng quan trọng đó là việc thiết lập thanh toán định kỳ tự động (automatic recurring payments) trực tiếp trên các ứng dụng ngân hàng di động của chúng ta. Tuy nhiên, điều này không phải là một nhiệm vụ dễ dàng trên blockchain như Ethereum, mạng blockchain lớn nhất theo khối lượng thanh toán trên chuỗi. Đối với một số loại ví điện tử, như ví self-custodial (ví tự quản lý: người dùng tự giữ khóa cá nhân), việc thiết lập tính năng Thanh toán tự động đòi hỏi khả năng về mặt kỹ thuật.

Trong tài liệu này, chúng tôi sử dụng một khái niệm mới và một trong những đề xuất phát triển Ethereum hàng đầu được biết đến là Account Abstraction để khám phá cách triển khai hợp đồng thông minh để cho phép thanh toán định kỳ tự động. Chúng tôi đề xuất một giải pháp mới hướng tới một ứng dụng thực tế của thanh toán tự động, thay vì yêu cầu người dùng phải tự lên blockchain thanh toán mỗi khi họ cần.

Vấn đề hiện tại

Hãy xem xét một tình huống giả định: hôm nay là ngày 25 tháng 2. Alex chuẩn bị đi nghỉ lễ và cô sẽ trở lại vào ngày 10 tháng 3. Cô phải thanh toán khoản thế chấp, phí đăng ký TV và hóa đơn tiện ích trước ngày 5 hàng tháng. Cô không có đủ tiền để thanh toán trước khi đi nghỉ mát, nhưng cô sẽ có đủ tiền khi nhận lương vào ngày 1 tháng 3. Làm thế nào Alex sẽ thưởng thức kì nghỉ của mình mà không bỏ lỡ việc thanh toán?

Giải pháp bạn có thể nghĩ đến ngay lập tức đó là Thanh toán tự động! Thực tế, nếu Alex có một tài khoản ngân hàng, đây là một vấn đề đơn giản. Tất cả những gì Alex cần làm là thiết lập thanh toán định kỳ trên thẻ ngân hàng của cô để tự động thanh toán các hóa đơn hàng tháng. Tuy nhiên, trên blockchain lại không dễ để thực hiện việc thực hiện. Để thấy lý do tại sao điều này xảy ra, hãy xem xét mạng Ethereum. Chúng ta sẽ bắt đầu bằng cách thiết lập một số thuật ngữ sẽ giúp chúng ta hiểu rõ hơn vấn đề hiện tại.

Tài Khoản Trên Ethereum

Hiện nay, có hai loại tài khoản trên mạng Ethereum:

  1. Externally Owned Accounts (EOA); Tài Khoản Sở Hữu Bên Ngoài, nói một cách dễ hiểu là tài khoản của người dùng
  2. Contract Accounts (CA): Tài Khoản Hợp Đồng, hay còn được gọi là hợp đồng thông minh (smart contract)

Tài khoản người dùng, được kiểm soát bằng một khóa riêng tư, có thể gửi giao dịch. Hợp đồng thông minh có mã nguồn kèm theo có thể được thực thi, tuy nhiên, hợp đồng thông minh không thể tự khởi tạo giao dịch. Và như bạn thường thấy, giao dịch luôn phải bắt nguồn từ một tài khoản người dùng và được ký bởi người dùng. Giao dịch có thể là việc chuyển mã thông báo đơn giản giữa các tài khoản người dùng trên chuỗi Ethereum hoặc giao dịch phức tạp hơn mà kích hoạt một loạt các thao tác để thực hiện nhiều hành động khác nhau thông qua hợp đồng thông minh.

Thanh Toán Tự Động Trên Ethereum

Hãy quay trở lại tình huống của Alex. Giả sử Alex sở hữu một tài khoản người dùng nơi mà các khoản lương của cô được gửi và nơi cô muốn thanh toán khoản thế chấp, phí đăng ký TV và hóa đơn tiện ích của mình. Để thanh toán hóa đơn, Alex phải khởi tạo một giao dịch chuyển mã thông báo từ tài khoản EOA của cô đến một tài khoản người dùng thuộc về người nhận, tức là đến bất kỳ ai mà cô thanh toán hóa đơn. Một cách cụ thể hơn, EOA của Alex có một khóa bí mật hoặc khóa riêng tư liên quan được biết đến chỉ bởi Alex. Khóa riêng tư này được Alex sử dụng để tạo ra chữ ký thuật toán đường cong elliptic (ECDSA) quan trọng để tạo ra một giao dịch hợp lệ. Và điều này đã đưa chúng tôi đến vấn đề hiện tại. Nếu Alex đang đi nghỉ lễ, ai sẽ tạo ra chữ ký này để tạo ra giao dịch mà sẽ thực hiện thanh toán của cô?

Một giải pháp khác cho Alex là sử dụng những gì được gọi là một ví lưu ký (custodial wallet). Với một ví lưu ký, một bên khác kiểm soát khóa riêng tư của Alex. Nói cách khác, Alex tin tưởng một bên thứ ba để bảo vệ quỹ của cô và trả lại chúng nếu cô muốn giao dịch hoặc gửi chúng đến nơi khác. Ưu điểm ở đây là Alex có thể thiết lập thanh toán tự động kết nối với ví lưu ký của cô. Vì bên quản lý ví của cô, có quyền truy cập vào khóa riêng tư của cô, họ sẽ có thể tạo ra chữ ký cần thiết để tạo ra giao dịch cho các thanh toán tự động theo lịch trình của cô. Và điều này có thể xảy ra trong khi Alex đang nghỉ mát. Hạn chế ở đây là mặc dù ví quản lý giảm bớt trách nhiệm cá nhân của Alex, nhưng nó đòi hỏi sự tin tưởng của Alex vào người quản lý nắm giữ quỹ của cô.

Với một ví tự quản lý, nơi người dùng hoàn toàn kiểm soát ví, Alex kiểm soát duy nhất khóa riêng tư của mình. Trong khi không cần phải tin tưởng vào một bên thứ ba khi sử dụng ví tự quản lý, điều này cũng có nghĩa là Alex sẽ không thể thiết lập thanh toán tự động vì cô phải sử dụng khóa của mình để tạo ra chữ ký cần thiết cho giao dịch thanh toán.

Một cách hiểu khác là thông qua thuật ngữ thanh toán kéo và đẩy. Một thanh toán kéo là một giao dịch thanh toán được kích hoạt bởi người nhận tiền, trong khi thanh toán đẩy, ngược lại, là một giao dịch thanh toán được kích hoạt bởi người trả tiền. Ethereum hỗ trợ thanh toán đẩy nhưng không hỗ trợ thanh toán kéo theo mặc định – thanh toán tự động là một ví dụ về thanh toán kéo.

Vậy, Alex phải làm gì nếu cô muốn sử dụng một ví tự quản lý mà vẫn có thể đặt lịch thanh toán tự động?

Account Abstraction (AA): Trừu Tượng Tài Khoản

Trừu tượng tài khoản (AA) là một đề xuất cố gắng kết hợp tài khoản người dùng và hợp đồng thông minh thành một loại tài khoản Ethereum duy nhất bằng cách khiến tài khoản người dùng hoạt động giống như hợp đồng thông minh. Như chúng ta sẽ thấy phía trước, AA cho phép chúng tôi thiết kế một giải pháp thông minh cho các thanh toán tự động, nhưng nói chung, lý do thúc đẩy đằng sau AA khá đơn giản nhưng cơ bản: giao dịch Ethereum ngày nay có một số yêu cầu cứng nhắc được mã hóa cứng vào giao thức Ethereum. Ví dụ, các giao dịch trên blockchain Ethereum ngày nay chỉ hợp lệ nếu chúng có chữ ký ECDSA hợp lệ, số nonce hợp lệ và số dư tài khoản đủ để trả phí tính toán.

AA đề xuất mang lại tính linh hoạt hơn trong quá trình xác thực giao dịch trên blockchain:

  • Nó cho phép tài khoản nhiều chủ sở hữu thông qua xác minh chữ ký đa chữ ký.
  • Nó cho phép sử dụng các post-quantum signatures (chữ ký sau lượng) khi xác minh giao dịch.
  • Nó cũng cho phép tài khoản công khai có thể thực hiện giao dịch, bằng cách loại bỏ hoàn toàn việc xác minh chữ ký.

Nói cách khác, AA cho phép xác thực có thể được lập trình để xác minh và xác minh bất kỳ giao dịch blockchain nào. Điều này có nghĩa là thay vì mã hóa cứng các điều kiện hợp lệ vào giao thức Ethereum mà sẽ áp dụng cho tất cả các giao dịch một cách tổng quát, điều kiện hợp lệ có thể được lập trình một cách tùy chỉnh vào hợp đồng thông minh trên cơ sở từng tài khoản. Với AA, một người dùng triển khai một hợp đồng tài khoản với bất kỳ tính năng nào được mô tả ở trên, cùng với những tính năng khác.

Và quan trọng nhất, AA cho phép thanh toán tự động, thực hiện các câu lệnh mà cần xác minh chữ ký nữa.

Delegable Accounts: Tài Khoản Có Thể Ủy Quyền – Account Abstractions Cho Phép Thanh Toán Tự Động

Giải pháp của chúng tôi cho các thanh toán tự động là tận dụng AA và tạo ra một loại hợp đồng tài khoản mới – tài khoản có thể ủy quyền (delegable accounts). Ý tưởng chính của chúng tôi là thiết kế lập trình cho các giao dịch để bao gồm một danh sách cho phép được xác nhận trước. Thực chất, AA cho phép chúng tôi ủy quyền khả năng để khiến tài khoản của người dùng thanh toán tự động được phê duyệt trước.

Đầu tiên, một nhà cung cấp triển khai một hợp đồng thông minh thanh toán tự động. Khi một người dùng có tài khoản có thể ủy quyền truy cập trang web của nhà cung cấp, họ sẽ thấy một yêu cầu để phê duyệt thanh toán tự động. Ở đây, người dùng có thể xem các hành động mà hợp đồng thông minh thanh toán tự động sẽ thực hiện thay mặt người dùng. Ví dụ, nó chỉ có thể tính phí cho người dùng một lần mỗi tháng, hoặc không được tính phí nhiều hơn một số tiền tối đa. Điều quan trọng là, vì đây là một hợp đồng thông minh, người dùng có thể tin tưởng rằng hợp đồng thanh toán tự động không thể thực hiện một cách khác ngoài cách nó được viết.

Nếu người dùng đồng ý phê duyệt thanh toán tự động, ví sẽ thêm địa chỉ hợp đồng thanh toán tự động vào danh sách các hợp đồng được phép trên tài khoản có thể ủy quyền của người dùng.

Thiết Lập Tài Khoản Có Thể Ủy Quyền

Tiếp theo, nhà cung cấp kích hoạt một khoản thanh toán bằng cách gọi hàm thanh toán của auto payment smart contract. Hợp đồng thông minh thanh toán tự động khiến cho tài khoản của người dùng khởi tạo một khoản thanh toán đẩy, mà sẽ hợp lệ vì nó đã được thêm vào danh sách cho phép của người dùng. Từ góc độ của mã thông báo, điều này không thể phân biệt khỏi một khoản thanh toán đẩy tiêu chuẩn.

Có thể tưởng tượng được các ứng dụng thực tế khác ngoài việc thanh toán định kỳ – một số trong số đó có thể không dễ dàng tiếp cận qua các tuyến thanh toán ngày nay. Giải pháp của chúng tôi cho các tài khoản có thể ủy quyền có thể được mở rộng để hỗ trợ tất cả các loại khoản kéo khác nhau, và cả dịch vụ khôi phục tài khoản bởi bên thứ ba, người quản lý tài sản bởi các hạn chế về các mã thông báo Ethereum Request for Comments (ERC) cụ thể mà họ có thể quản lý và cách họ có thể giao dịch các mã thông báo này.

Account Abstractions Trên Ethereum

Dòng thời gian của trừu tượng hóa ban đầu

Dòng thời gian của trừu tượng hóa ban đầu mô tả hình ảnh AA ban đầu được đề xuất như là EIP-86 vào năm 2017 để thực hiện “Trừu tượng hóa nguồn gốc và chữ ký của giao dịch”, nhưng nguồn gốc của ý tưởng thúc đẩy điều này đi xa hơn nữa về đầu năm 2016, khi đề xuất rằng: “Thay vì có một cơ chế trong giao thức có nghĩa vụ ECDSA và lược đồ nonce mặc định được cài đặt là cách duy nhất ‘tiêu chuẩn’ để bảo mật một tài khoản, chúng ta tiến thêm các bước đầu tiên hướng đến một mô hình trong đó lâu dài tất cả các tài khoản đều là hợp đồng, hợp đồng có thể thanh toán phí tính toán, và người dùng tự do xác định mô hình bảo mật của họ.”Các đề xuất ban đầu khó khăn để thực hiện do nhiều thay đổi giao thức yêu cầu và các cam kết bảo mật cần được đáp ứng. EIP-4337 gần đây nhất tuyên bố một cách để thực hiện AA mà không cần thay đổi giao thức Ethereum. Sự thật là vẫn còn tranh cã về cách thức AA nên được thực hiện trên Ethereum.

Account Abstractions Trên StarkNet

Bởi vì Ethereum chưa hỗ trợ AA, Visa Crypto đang xem xét thực hiện giải pháp tài khoản có thể ủy quyền trên StarkNet, một blockchain layer 2, được xây dựng trên cơ sở của blockchain Ethereum để tăng khả năng xử lý giao dịch cùng với các tính năng khác để cải thiện khả năng xử lý lớp thanh toán cơ bản của blockchain. StarkNet được phát triển bởi công ty khởi nghiệp crypto StarkWare. Mô hình tài khoản của StarkNet chính là điều chúng tôi đã miêu tả cho AA. Nói một cách ngắn gọn, trong khi tài khoản cụ thể kiểm tra xem một giao dịch có đi kèm chữ ký đúng cho địa chỉ nhất định không, tài khoản trừu tượng của StarkNet đơn giản chỉ kiểm tra xem giao dịch có đến từ địa chỉ nhất định không.

Với các tài khoản cụ thể, nếu ai đó gửi mã thông báo đến tài khoản của bạn, họ tương tác với hợp đồng mã thông báo để thay đổi chủ sở hữu được ghi từ địa chỉ của họ sang địa chỉ của bạn. Hợp đồng mã thông báo thực hiện kiểm tra rằng người dùng (khóa) được sử dụng để ký giao dịch để thực hiện việc chuyển này đã được ghi nhận là chủ sở hữu hiện tại của mã thông báo. Với các tài khoản trừu tượng, nếu ai đó gửi mã thông báo đến tài khoản của bạn, họ tương tác với hợp đồng mã thông báo để thay đổi chủ sở hữu được ghi từ địa chỉ của họ sang địa chỉ của bạn. Hợp đồng mã thông báo thực hiện kiểm tra rằng danh tính (hợp đồng) được sử dụng để thực hiện việc chuyển này đã được ghi nhận là chủ sở hữu hiện tại của mã thông báo. StarkNet đã hỗ trợ tốt trong việc thực hiện giải pháp tài khoản có thể ủy quyền, từ đó cho phép thanh toán tự động cho các ví tự quản lý.

Xem thêm: Cách code Solidity để ủy quyền tài khoản

Vietnam Pham – Click Digital

Leave a Reply

Your email address will not be published. Required fields are marked *