Skip to main content

Mô hình EUTxO mang lại tính tất định cho người dùng

Ngày 26 tháng 10 năm 2023 - Chia sẻ bài viết này trên Twitter | FacebookTelegram

Từ quan điểm của các nhà phát triển ứng dụng, mô hình UTxO về cơ bản khác với mô hình dựa trên tài khoản (Accounting). Mô hình dựa trên tài khoản rất đơn giản và mang lại cho nhà phát triển tính linh hoạt cao, đặc biệt nếu cần xác định logic thực thi phức tạp. Tuy nhiên, tính linh hoạt quá mức sẽ phải trả giá bằng việc đảm bảo khả năng thực thi, dẫn đến các lỗ hổng bảo mật và tấn công hệ thống. Làm việc với mô hình UTxO phức tạp hơn nhưng nó mang lại cho các nhà phát triển (và do đó là người dùng) một số lợi thế, đó là tính tất định (Determinism). Hãy giải thích nó chi tiết hơn.

Tính tất định (determinism)

Trong lĩnh vực blockchain, tính tất định" (determinism) liên quan đến việc một hệ thống blockchain phải thực hiện các quy tắc và quy định một cách đồng nhất và dự đoán được. Cụ thể, tính tất định* trong blockchain có thể ám chỉ một số khía cạnh sau:

  1. Tính tất định về giao dịch*: Mọi giao dịch trong blockchain phải được thực hiện một cách tương tự và dự đoán được. Điều này đảm bảo rằng các giao dịch sẽ không có những biến đổi không lường trước, và mọi thay đổi trong trạng thái của blockchain có thể được dự đoán dựa trên các giao dịch trước đó.

  2. Tính tất định về kết quả*: Mọi nút trên mạng blockchain, sau khi xử lý một chuỗi giao dịch, phải đạt đến cùng một trạng thái cuối cùng. Điều này đảm bảo tính đồng thuận trong mạng và ngăn chặn việc phân kì trong trạng thái của blockchain.

  3. Tính tất định về mã hóa*: Các thuật toán và hàm băm trong blockchain cũng phải thực hiện một cách đồng nhất trên mọi nút, đảm bảo tính đồng thuận về mã hóa. Điều này đặc biệt quan trọng trong việc xác minh chữ ký số và tính toàn vẹn của dữ liệu trên blockchain.

Tính tất định là một yếu tố quan trọng để đảm bảo tính đồng thuận và độ tin cậy trong mạng blockchain. Nó giúp đảm bảo rằng mọi thành viên trong mạng có thể kiểm tra và xác minh các giao dịch và trạng thái một cách độc lập và đạt đến cùng một kết quả, giúp ngăn chặn các vấn đề như gian lận và xâm nhập.

Mô hình UTxO từ góc độ giao dịch

Trong trường hợp mô hình UTxO, một giao dịch có thể được coi là một tác nhân sử dụng một hoặc nhiều UTxO đầu tạo ra một hoặc nhiều UTxO đầu ra.

Các UTxO tham gia giao dịch là không thể thay đổi và như chúng tôi sẽ trình bày sau, theo quan điểm của người dùng ứng dụng, có thể đảm bảo quyền truy cập độc quyền. Trong quá trình xác thực giao dịch, phải đảm bảo rằng giá trị của UTxO đầu vào bằng giá trị của tất cả UTxO đầu ra. Ở cấp độ xác thực tất cả các giao dịch trong khối, có thể đảm bảo khả năng bảo vệ khỏi cuộc tấn công chi tiêu gấp đôi, vì mỗi UTxO đầu vào chỉ có thể được sử dụng một lần và hoàn toàn. Mỗi khối mới được thêm vào sổ cái xác định sự chuyển đổi trạng thái liên quan đến quyền sở hữu UTxO.

Giao dịch vốn không có trạng thái. Việc xác thực giao dịch về cơ bản chỉ phụ thuộc vào UTxO đầu vào. Có thể xác minh cục bộ rằng các UTxO đầu vào có thể được sử dụng bởi một giao dịch (tức là đã sử dụng). Quá trình chuyển đổi trạng thái có thể được xác minh cục bộ mà không phụ thuộc vào bất kỳ trạng thái tổng thể nào khác on-chain.

Có thể dự đoán cục bộ giao dịch sẽ ảnh hưởng như thế nào đến trạng thái on-chain. Nói cách khác, logic off-chain (người dùng hoặc ứng dụng) có thể đảm bảo rằng giao dịch sẽ không thất bại nếu được gửi lên mạng.

Một giao dịch gần như chắc chắn sẽ không bao giờ thất bại nếu người dùng (hoặc tác nhân) có độc quyền chi tiêu UTxO đầu vào. Đây là trường hợp Alice gửi coin hoặc token cho Bob từ ví của chính cô ấy. UTxO đầu vào không thể được sử dụng bởi bất kỳ ai khác.

Hãy xem xét khả năng duy nhất khi giao dịch có thể thất bại. Về cơ bản, điều này được giới hạn trong trường hợp nhiều tác nhân có thể sử dụng cùng một UTxO. Như chúng tôi sẽ trình bày sau, điều này có thể xảy ra với pool thanh khoản.

Trong hình, bạn có thể thấy hai tác nhân đang cố gắng xây dựng một giao dịch như thế nào. Cả hai tác nhân đều có trạng thái mới nhất chính xác của sổ cái. Vô tình trùng hợp, họ đã chọn cùng một đầu vào UTxO. Xác thực off-chain cục bộ sẽ thành công. Do đó, cả hai tác nhân đều gửi giao dịch lên mạng và cho rằng việc xác thực giao dịch on-chain cũng sẽ thành công.

Tuy nhiên, mỗi UTxO chỉ có thể được sử dụng một lần. Do đó, chỉ có một giao dịch sẽ thành công và giao dịch còn lại sẽ thất bại.

Trong hình ảnh bên dưới, bạn có thể thấy rằng trong khối sau, chỉ có giao dịch 1 được ghi vào sổ cái. Giao dịch 2 không thành công.

Như chúng tôi đã giải thích, trạng thái này chỉ có thể xảy ra nếu người dùng sử dụng ứng dụng trong đó UTxO được chia sẻ chung.

Bây giờ chúng ta hãy tưởng tượng một sàn giao dịch phi tập trung (DEX) thông thường sử dụng một số pool thanh khoản. Mỗi pool thanh khoản có thể được xem như một tập hợp chứa một số UTxO với các giá trị khác nhau. Người dùng gửi giao dịch để thực hiện hoán đổi về cơ bản muốn nhận được một phần thanh khoản (token) trong pool thanh khoản. Về cơ bản, họ muốn nhận được một hoặc nhiều UTxO từ pool thanh khoản. Nói cách khác, người dùng có thể gửi các giao dịch hoán đổi (gần như) song song và cạnh tranh về tính thanh khoản.

Điểm mấu chốt là việc lựa chọn UTxO đầu vào cho các giao dịch. Các tác nhân phải đồng bộ hóa với nhau nếu giao dịch không thành công.

Về mặt lý thuyết, Cardano có thể xây dựng một ứng dụng như vậy để đảm bảo rằng các giao dịch của người dùng không bao giờ thất bại. Logic ứng dụng off-chain (tác nhân) phải đồng bộ hóa với nhau. Nhờ đó, có thể đặt trước một UTxO cụ thể từ pool thanh khoản chung trước khi gửi giao dịch. Nói cách khác, xác thực off-chain cục bộ có thể đảm bảo rằng giao dịch gần như chắc chắn sẽ không thất bại.

Trong hình bên dưới, bạn có thể thấy rằng có sự đồng bộ hóa off-chain lẫn nhau giữa các tác nhân trước khi xác thực giao dịch cục bộ. Mỗi tác nhân dự trữ một UTxO khác nhau, vì vậy cả hai giao dịch được gửi đều có thể nói vượt qua xác thực on-chain.

Tất nhiên, nó sẽ chỉ hoạt động nếu có thể dự trữ UTxO. Cũng có thể xảy ra trường hợp không có UTxO phù hợp khi người dùng cố gắng gửi giao dịch. Trong trường hợp như vậy, bạn có thể đợi (và không gửi giao dịch) hoặc mạo hiểm và đợi nếu UTxO phù hợp không xuất hiện sau đó. Các chi tiết phụ thuộc vào việc triển khai DEX và giao diện người dùng cụ thể.

Mô hình EUTxO góp phần nâng cao tính bảo mật và tính xác định của Cardano. Trong mô hình này, các giao dịch không phụ thuộc vào tài khoản hoặc số dư của người dùng như trong trường hợp mô hình dựa trên tài khoản mà chỉ phụ thuộc vào các UTxO liên quan đến giao dịch. Điều này có nghĩa là đối với một giao dịch nhất định, chỉ các UTxO liên quan là quan trọng chứ không phải tài khoản người dùng có tính chất toàn cầu.

Trong mô hình UTxO, số dư của một tài khoản cụ thể về cơ bản chỉ là số liệu tổng hợp của danh sách các UTxO tại các địa chỉ thuộc về một chủ sở hữu.

Tại sao Mô hình sổ cái dựa trên tài khoản lại không có tính tất định

Các blockchain có mô hình sổ cái dựa trên tài khoản (Accounting) là không có tính tất định vì ảnh hưởng của giao dịch lên sổ cái là không thể đoán trước được. Lý do là số dư tài khoản người dùng vốn có thể thay đổi được.

Trong Blockchain dựa trên tài khoản, một giao dịch có thể được coi là một chức năng thay đổi số dư tài khoản. Mỗi giao dịch liên quan đến việc chuyển token hoặc token từ tài khoản này sang tài khoản khác sẽ làm thay đổi số dư của các tài khoản đó.

Việc xác thực các giao dịch phụ thuộc vào tài khoản và số dư của chúng. Điều này có thể dẫn đến hành vi không có tính tất định, vì kết quả của giao dịch phụ thuộc vào trạng thái của blockchain tại thời điểm chính xác mà chúng được đưa vào một khối.

Các tài khoản có thể được xem như một tài nguyên được chia sẻ (dùng chung) trong hệ thống. Điều này là do tất cả các giao dịch được xử lý bởi toàn bộ mạng và Từng giao dịch đơn lẻ có thể ảnh hưởng đến trạng thái của bất kỳ tài khoản nào trong hệ thống. Bản chất chung của các tài khoản này là một trong những lý do tại sao Ethereum và các blockchain sử dụng mô hình sổ cái Accounting khác được coi là blockchain có trạng thái.

Các giao dịch trong Ethereum có thể được coi là có trạng thái. Trạng thái hoàn chỉnh của Ethereum mô tả trạng thái hiện tại của tất cả các tài khoản và số dư, cũng như bộ nhớ chung của tất cả các hợp đồng thông minh được triển khai và chạy trong EVM. Trạng thái hiện tại của các tài khoản có thể bị thay đổi bởi các giao dịch đơn lẻ.

Hãy quay lại ví dụ của chúng tôi trong đó hai người dùng (tác nhân) đang cố gắng gửi giao dịch hoán đổi để nhận một phần thanh khoản (token) từ pool thanh khoản.

Không thể dự trữ một phần số dư cụ thể cho một giao dịch giống như cách bạn có thể dự trữ UTxO trong Cardano. Nếu giao dịch có thể dự trữ một phần số dư từ pool thanh khoản và sau đó không được đưa vào Blockchain trong một thời gian dài (có thể do phí thấp), thì chúng sẽ chặn việc thực hiện các giao dịch hoán đổi tiếp theo.

Theo một cách nào đó, các ứng dụng riêng lẻ cũng phụ thuộc vào nhau vì hoạt động trong mạng ảnh hưởng đến chi phí GAS. Chi phí GAS ảnh hưởng đến việc lựa chọn các giao dịch và thứ tự của chúng trong khối. Điều này dẫn đến hành vi không có tính tất định.

Trong mô hình AMM, pool thanh khoản về cơ bản là dự trữ từ hai token trở lên bị khóa trong hợp đồng thông minh. Người dùng giao dịch với các hợp đồng thông minh này chứ không phải với nhau và tỷ giá dựa trên các công thức toán học.

Trong hệ sinh thái Ethereum, về cơ bản, người dùng cạnh tranh để giành được số dư hoặc tính thanh khoản trong pool thanh khoản nhất định. Khi người dùng gửi giao dịch song song, mạng Ethereum sẽ ưu tiên các giao dịch dựa trên phí GAS. Phí GAS mà người dùng sẵn sàng trả càng cao thì mức độ ưu tiên giao dịch của họ càng cao. Điều này có nghĩa là các giao dịch có phí cao hơn sẽ được xử lý trước và có cơ hội sử dụng thanh khoản đầu tiên.

Sự cạnh tranh về tính thanh khoản này có thể dẫn đến cái gọi là các CUỘC CHIẾN PHÍ GAS (Gas Wars), trong đó người dùng liên tục trả giá cao hơn phí GAS của nhau để cố gắng xử lý giao dịch của họ nhanh nhất có thể. Đây là một trong những lý do khiến phí giao dịch trên Ethereum đôi khi có thể tăng cao.

Trong hình, bạn có thể thấy hai tác nhân muốn sử dụng số dư như nhau. Cả hai tác nhân đều thấy rằng số dư đủ cho giao dịch của họ và do đó gửi giao dịch vào khoảng thời gian gần như nhau. Tác nhân đầu tiên đặt mức phí cao hơn tác nhân thứ hai.

Các giao dịch đã gửi không được đảm bảo sẽ thành công nhưng về cơ bản, người dùng phải chấp nhận rủi ro và thử gửi nếu họ muốn thực hiện hoán đổi. Một giao dịch có mức phí thấp có thể bị trì hoãn và các giao dịch khác có mức phí cao hơn có thể được ưu tiên. Các giao dịch với mức phí thấp sau đó có thể thất bại. Phí sẽ được tính bất kể trạng thái cuối cùng. Do đó, người dùng thanh toán cho nỗ lực hoán đổi mà không đảm bảo rằng việc hoán đổi sẽ diễn ra.

Bạn có thể thấy trong hình chỉ có giao dịch 1 thành công do tác nhân đặt mức phí cao hơn. Giao dịch 1 đã rút cạn một lượng lớn thanh khoản từ nhóm đến mức giao dịch 2 không thể thực hiện được. Tác nhân thứ 2 vẫn phải trả phí dù giao dịch 2 không thành công. 😢 😢

Như đã mô tả, các tác nhân không thể đồng bộ hóa với nhau và dự trữ một phần số dư trong pool thanh khoản. Tác nhân chỉ phản hồi trạng thái hợp lệ tại thời điểm họ cố gắng gửi giao dịch.

Từ góc độ công bằng, thiếu có tính tất định cũng bất lợi vì nó tạo cơ hội cho các tác nhân đối nghịch lạm dụng các lỗ hổng mạng. Nhiều cuộc tấn công chạy trước (front-running attacks) đã được biết đến, trong đó các bot quét các giao dịch trong nhóm bộ nhớ và tìm kiếm các cơ hội phù hợp để chúng có thể kiếm lợi nhuận. Nếu họ tìm thấy những giao dịch như vậy, họ chỉ cần gửi một giao dịch tương tự với mức phí cao hơn.

Trong trường hợp của chúng ta, điều này có nghĩa là giao dịch của cả hai tác nhân sẽ thất bại, vì kẻ tấn công sẽ có thể rút toàn bộ thanh khoản khỏi pool cho chính mình trước.

Trong trường hợp của Cardano, một cuộc tấn công tương tự (tấn công front-running)sẽ thất bại nếu có một hệ thống đặt trước off-chain trong đó các tác nhân có thể đặt trước một UTxO cụ thể cho chính họ.

Lời kết

Các nhà phát triển ứng dụng thường thích mô hình dựa trên tài khoản vì nó đơn giản và dễ làm việc. Các ứng dụng về cơ bản chỉ hoạt động với số dư. Tuy nhiên, nhược điểm là các giao dịch không hoạt động một cách tất định và có thể thất bại. Điều này là do thực tế là từ khi người dùng gửi giao dịch đến khi nó được thực thi, trạng thái chung của hệ thống, tức là số dư trên tài khoản, có thể thay đổi.

Mô hình UTxO phức tạp hơn để hiểu và việc lựa chọn UTxO đầu vào có vẻ hơi cồng kềnh. Việc khấu trừ một số tiền từ một tài khoản và ghi có vào tài khoản khác sẽ dễ dàng hơn là phải chọn nhiều UTxO và tạo UTxO đầu ra mới từ chúng (bao gồm cả các UTxO trả về một phần giá trị về địa chỉ ban đầu). Các nhà phát triển buộc phải suy nghĩ về các ứng dụng có tính song song. Họ phải đảm bảo sự đồng bộ giữa các tác nhân để không xảy ra vấn đề tranh chấp. Tuy nhiên, từ góc độ của người dùng, có thể tạo ra những ứng dụng như vậy sẽ hoạt động một cách tất định. Nếu quá trình xác thực off-chain cục bộ thành công thì quá trình xác thực on-chain cũng sẽ thành công.

Và tất nhiên, người dùng sẽ không phải trả phí với những thất bại chỉ bởi vì hệ thống thiếu tính tất định của các blockchain sử dụng mô hình sổ cái Accounting. 👍 👍 👍

Nguồn bài viết tại đây


Picture


Đọc thêm các bài viết liên quan tại thẻ Tags bên dưới