Skip to main content

Hiểu về eUTXO của Cardano

· 55 min read

Một trong những đổi mới mà Cardano đã đưa ra là mở rộng mô hình Sổ cái của Bitcoin. Sổ cái của Bitcoin về cơ bản rất đơn giản, nhưng điều đó không có nghĩa là các phần khác nhau của nó không thể được cải thiện. Các tiến bộ công nghệ đang được thực hiện như một phần của dự án Cardano. Hãy đến khám phá lịch sử của các mô hình Sổ cái và sự phát triển của chúng.

Satoshi Nakamoto đã sử dụng nhiều công nghệ để xây dựng Bitcoin. Một trong số đó là mô hình Sổ cái sử dụng Đầu ra Giao dịch Chưa gửi (UTxO). Vitalik Buterin và nhóm của ông đã quyết định sử dụng một mô hình Sổ cái khác dựa, trên Tài khoản (Accounting). Đây dường như là một giải pháp tốt hơn, để thực hiện các hợp đồng thông minh. Trong bài viết này, chúng ta sẽ gọi nó là mô hình sổ cái dựa trên Tài khoản.

Ngày nay, nhiều dự án như Solana, Polkadot và Algorand cũng sử dụng mô hình Tài khoản tương tự như Ethereum. Cả hai cách tiếp cận trên đều có những ưu và nhược điểm riêng. Các lập trình viên phải đối mặt với những thách thức khác nhau khi xây dựng ứng dụng trên cả mô hình UTxO và Accounting. Nhóm xây dựng IOG, Cardano đã quyết định đi theo một con đường khác. Học đã chọn cách mở rộng mô hình ban đầu của Bitcoin (UTXO). Mô hình mới này được đặt tên là Extended-UTXO (eUTXO).

Mô hình sổ cái Tài khoản (Accounting)

Mô hình sổ cái Tài khoản là nền tảng của thế giới tài chính ngày nay. Mọi tổ chức tài chính đều cần phải theo dõi số dư tài khoản cá nhân và dòng tiền. Mô hình Sổ cái cũng là nền tảng của mạng lưới blockchain. Bởi vì cốt lõi của nó là một bảng cân đối tổng thể. Nó cho chúng ta câu trả lời về việc ai sở hữu tài sản gì? và vào thời điểm nào?

Blockchain ghi lại toàn bộ lịch sử của tất cả các giao dịch. Rất dễ dàng để kiểm tra các bản ghi trong blockchain. Blockchain có một lợi ích lớn. Nó cho phép chúng ta sở hữu tài sản mà không có người trung gian không cần thiết và đảm bảo rằng không ai trong hệ thống có thể gian lận.

Một mạng lưới blockchain có hai nhiệm vụ cơ bản:

  1. Để duy trì sổ cái và
  2. Cho phép chuyển giá trị thông qua các giao dịch.

Thế hệ đầu tiên của mạng blockchain chỉ cho phép các giao dịch được gửi vô điều kiện (được đẩy từ tài khoản của Alice sang tài khoản của Bob). Thế hệ thứ hai bổ sung khả năng lập trình, tức là khả năng gửi một giao dịch có điều kiện. Có các công cụ có sẵn cho các lập trình viên bên thứ ba cho phép họ viết và triển khai các chương trình (hợp đồng / tập lệnh thông minh) mà mạng có thể thực thi theo cách phi tập trung. Mạng blockchain thế hệ đầu tiên có thể được xem như PayPal. Thế hệ thứ hai sẽ kích hoạt một hệ thống ngân hàng toàn diện.

Trong thế giới tài chính truyền thống, mọi người dựa vào Tài khoản và các hệ thống tập trung phức tạp. Để đảm bảo rằng Tài khoản không gian lận, cần theo dõi các luồng tài chính, tích cực thực hiện các biện pháp phòng ngừa gian lận và kiểm toán sổ cái.

Mạng lưới blockchain dựa trên các quy tắc được viết vào mã nguồn. Giả sử mã nguồn được triển khai chính xác và hoạt động như mọi người mong đợi, thì không cần phải bảo mật và tất cả dữ liệu đều được công khai. Mọi người đều có thể có một sổ cái tổng thể trên máy tính của họ và tương tác trực tiếp với mạng. Nó cho phép tương tác ngang hàng giữa những người dùng. Trong đó, mạng phi tập trung là người trung gian đáng tin cậy.

Làm thế nào để hiểu blockchain từ góc độ khối

Blockchain về cơ bản là một cơ sở dữ liệu thông thường nhưng có khả năng đảm bảo tính bất biến đối với lịch sử của các bản ghi. Các bản ghi liên quan đến việc chuyển giao giá trị giữa những người dùng diễn ra thông qua các giao dịch. Blockchain luôn biết câu trả lời chính xác cho câu hỏi người dùng X sở hữu token Y nào tại thời điểm Z. Bởi vì blockchain là ẩn danh, các địa chỉ blockchain được sử dụng thay vì những người dùng cụ thể được định danh. Blockchain lưu giữ lịch sử của tất cả các giao dịch được thực hiện từ ngày đầu cho đến hiện tại. Ngoài ra, nó đảm bảo rằng lịch sử không thể bị ghi đè, không thể xóa, không thể thay đổi.

Về mặt kỹ thuật, blockchain là một máy trạng thái vì nó ghi nhớ các sự kiện trước đó, được gọi là trạng thái hệ thống. Những sự kiện này là tương tác giữa những người dùng. Trạng thái có thể được thay đổi theo các điều kiện xác định trước. Mỗi giao thức đã thực hiện một logic cho phép trạng thái chuyển từ S-0 sang S + 1. Theo khoảng thời gian đều đặn, mạng tạo ra các khối mới trong đó cái gọi là chuyển trạng thái xảy ra.

Sự khác biệt giữa UTXO và mô hình dựa trên Tài khoản nằm ở cách xử lý sổ sách Sổ cái. Nó không liên quan gì đến việc chuyển đổi trạng thái từ quan điểm thêm các khối mới. Một khối mới được tạo bởi một node và phải được gủi đi và phát tán trên mạng lưới. Mỗi khối mới chứa một tập hợp các giao dịch và nếu nó được chấp nhận bởi đa số người tham gia trong mạng (về mặt kỹ thuật bởi các node đầy đủ tham gia tích cực vào sự đồng thuận của mạng), thì một quá trình chuyển đổi trạng thái sẽ xảy ra. Nếu một khối được chấp nhận, tất cả các giao dịch chứa trong đó cũng được chấp nhận. Khối mới sẽ được lưu trữ vĩnh viễn trong blockchain và với sự bổ sung thêm khối vào chuỗi, các chủ sở hữu tài sản sẽ thay đổi chính xác theo quy định của các giao dịch được chấp nhận.

Về cơ bản, vai trò của mạng blockchain là xác thực các giao dịch, chèn các giao dịch hợp lệ vào các khối mới, xác nhận các khối và thêm chúng vào lịch sử của blockchain. Cần nói thêm rằng, quá trình này diễn ra theo cách phi tập trung. Vì vậy, các giao dịch và khối mới cần được phát tán cho toàn bộ mạng lưới. Mạng lưới sẽ là nơi xử lý việc xác thực các giao dịch và khối.

Địa chỉ blockchain

Quyền sở hữu tài sản (coin và token) được thể hiện bằng việc sở hữu khóa mật mã riêng cho một địa chỉ nhất định, được lấy từ khóa mật mã công khai. Thông thường, địa chỉ được băm (hash). Bạn có thể coi giao dịch như một thông điệp cụ thể tới mạng, trong đó người gửi ủy nhiệm chuyển nhiều tài sản đã chọn từ địa chỉ của người gửi đến địa chỉ của người nhận. Một giao dịch hợp lệ phải có bằng chứng rằng người gửi là chủ sở hữu thực sự của các token. Để làm điều này, một khóa mật mã riêng được sử dụng để ký giao dịch. Mạng, hay đúng hơn là mỗi node, có thể xác minh chữ ký và đánh giá xem giao dịch có hợp lệ hay không. Đối với các giao dịch đơn giản, xác thực dựa trên cặp khóa riêng tư và khóa công khai.

Picture

Ví sẽ giúp người dùng tạo địa chỉ blockchain và gửi các giao dịch đã ký. Mạng sẽ xác minh giao dịch thông qua khóa công khai và nếu nó hợp lệ, nó sẽ được đưa vào khối mới.

Nếu giao dịch được chấp nhận và được chứa trong một khối đã được thêm vào blockchain, tài sản sẽ thuộc sở hữu của chủ sở hữu địa chỉ của người nhận. Chỉ chủ sở hữu mới có thể sử dụng chúng, một lần nữa thông qua chữ ký được tạo bằng khóa cá nhân. Tất nhiên, người dùng có thể gửi nội dung cho chính mình.

Khái niệm này giống nhau đối với cả UTXO và mô hình dựa trên Tài khoản vì nó dựa trên mật mã khóa công khai (mật mã bất đối xứng).

Điều quan trọng cần nhớ là những gì người dùng coi là coin hoặc token thực sự chỉ là các Số điện tử (digital numer) được liên kết với các địa chỉ blockchain. Mục đích của giao dịch là chuyển nhiều từ địa chỉ người gửi và gán cùng một giá trị cho một địa chỉ duy nhất hoặc chia nó thành nhiều địa chỉ người nhận. Và phí là bắt buộc, giá trị thường sẽ được chia cho nhiều địa chỉ. Giá trị ở đầu vào và đầu ra của giao dịch phải luôn giống nhau. Một giá trị không thể được tạo ra hoặc bị mất trong một giao dịch thông thường. Mạng thường xác định các quy tắc để tạo một giá trị mới.

Bất cứ khi nào mọi người nói về coin hoặc token, kể cả trong bài viết này, họ thực sự đang nói về những con số. Thật ra, Token chỉ là một sự trừu tượng của các con số để người dùng dễ hiểu.

Người dùng coi tài sản của họ như nhiều dư trong tài khoản của họ. Ví tạo ra tất cả các cặp khóa riêng tư. Vì vậy, chúng biết tất cả các địa chỉ công khai của người dùng. Tất cả các địa chỉ đã tạo đều có thể chứa nội dung. Ví tổng hợp tất cả các token tại các địa chỉ (tổng tất cả các Số điện tử) và hiển thị điều này cho người dùng dưới dạng số dư. Ví có thể chỉ có một địa chỉ duy nhất và mọi thứ sẽ hoạt động hoàn toàn giống nhau.

Sự khác biệt giữa UTXO và mô hình dựa trên Tài khoản

Sự khác biệt giữa UTXO và mô hình dựa trên Tài khoản nằm ở cách tài sản được lưu trữ tại các địa chỉ và cách chúng được xử lý trong các giao dịch. Nói cách khác, hai mô hình khác nhau cách xử lý số dư như thế nào và trạng thái của hệ thống được ghi lại như thế nào. Trong bối cảnh rộng hơn, điều quan trọng là quy tắc và điều kiện nào được xác định (và được thực hiện trong mã nguồn của các node) khi một khối mới được tạo. Việc xác thực bởi mạng lưới là một phần không thể thiếu của việc chuyển giao giá trị.

Đầu ra giao dịch chưa sử dụng (UTXO) là thuật ngữ kỹ thuật để chỉ số lượng tài sản điện tử còn lại sau một giao dịch được xử lý. UTXO là một Số điện tử mà bạn có thể coi là một nội dung số. Trong mô hình UTXO, bạn có thể sử dụng các thuật ngữ UTXO và tài sản (coin hoặc token) thay thế cho nhau.

Cardano sử dụng mô hình UTXO mở rộng, được gọi là Extended-UTXO (EUTXO). Trong mô hình EUTXO, việc chuyển giao tài sản được ghi lại dưới dạng đồ thị vòng có hướng (DAG) giữa các địa chỉ. Nghe có vẻ đáng sợ, không cần phải sợ. Trên thực tế, rất dễ hiểu.

Như chúng ta đã nói, mỗi UTXO được đại diện bằng một Số điện tử và là một bản tóm tắt của coin hoặc token. Bạn có thể coi UTXO là tiền giấy hoặc tiền xu, nhưng có sự khác biệt là không có mệnh giá xác định nào mà UTXO cần phải có. Ví dụ, 10 ADA có thể là một UTXO. 12 ADA cũng có thể là một UTXO. Thậm chí, 116,85 cũng có thể là một UTXO.

Bây giờ hãy tưởng tượng Alice có tất cả ba UTXO trong ví của cô ấy. Không quan trọng nếu cô ấy có cả 3 UTXO ở cùng một địa chỉ hay mỗi UTXO ở một địa chỉ riêng. Nếu cô ấy muốn biết số dư của mình, cô ấy phải tính tổng tất cả các UTXO. Ví của cô ấy sẽ làm điều đó cho cô ấy. Số dư của cô ấy là 10 + 12 + 116,85 = 138,85 ADA.

Picture

Số dư tương tự trong ví của bạn có thể được thể hiện khác nhau khi nói đến việc phân phối UTXO trên các địa chỉ. Bạn có thể có 3 UTXO trên một địa chỉ hoặc 3 UTXO trên 3 địa chỉ.

Hãy xem điều gì sẽ xảy ra khi Alice quyết định gửi 15 ADA cho Bob. Bob có 21 ADA trong ví của mình tại một địa chỉ. Anh ta quyết định tạo một địa chỉ mới để nhận 15 ADA từ Alice. Ví của Alice phải sử dụng 2 UTXO. Ví chọn UTXO với 10 và 12 ADA. UTXO với 10 ADA được sử dụng đầy đủ. Chỉ 5 ADA + 0,2 ADA (phí giao dịch) được lấy từ UTXO với 12 ADA.

Sau khi giao dịch được chấp nhận, Alice sẽ chỉ có 2 UTXO với 6,8 và 116,85 ADA. Tổng cộng, Alice sẽ có 123,65 ADA. Bob sẽ có 2 UTXO với 21 và 15 UTXO. Tổng cộng, Bob sẽ có 36 ADA. 0.2 ADA sẽ được thêm vào địa chỉ phí.

Picture

Quá trình chuyển đổi giữa hai trạng thái đã được thực hiện thông qua một giao dịch. Giao dịch được tạo ở trạng thái N (khối N) và được đưa vào khối N + 1.

Quá trình chuyển đổi giữa hai trạng thái (khối) đã được thực hiện thông qua một giao dịch. Thành phần của giao dịch là quan trọng. Một giao dịch có đầu vào và đầu ra. Lưu ý cách các giá trị trên đầu vào được chuyển đổi thành các giá trị trên đầu ra theo nhu cầu của giao dịch, chính xác như người gửi (ví) đã xây dựng nó. Mọi UTXO trong một giao dịch phải được sử dụng toàn bộ vì không thể chỉnh sửa các bản ghi trong các khối trước đó. Đầu vào là một tập hợp các UTXO sẽ được chi tiêu, tức là tổng giá trị sẽ được sử dụng để tạo đầu ra của giao dịch. Đầu ra giao dịch cũng là một tập hợp các UTXO sẽ được gán cho một địa chỉ mới. Ngoài ra, nhiều hoặc tất cả UTXO có thể được gán cho cùng một địa chỉ với các giá trị khác nhau. Người dùng có thể có 3 UTXO tại một địa chỉ và chỉ muốn có 1 UTXO tại cùng một địa chỉ. Tổng giá trị không đổi.

Trong ví dụ của chúng ta, chúng ta có hai đầu vào và ba đầu ra. Đầu vào là 3 UTXO thuộc về Alice. Đầu ra là 3 UTXO. Cụ thể, một UTXO với 15 ADA cho Bob, một UTXO với 0,2 ADA làm phí giao dịch và một UTXO với 6,8 ADA, là số tiền được trả lại cho Alice. Để giao dịch có hiệu lực, số lượng xu trên đầu vào phải khớp với số xu trên đầu ra. Trong ví dụ của chúng ta, đây là 22 Đồng thời ADA.

Mọi người có thể thấy lạ khi cần phải trả lại 6,8 ADA cho Alice. Nó tương tự như những gì nhân viên thu ngân tại cửa hàng sẽ trả lại cho bạn nếu bạn thanh toán với số tiền cao hơn tổng giá trị mua hàng của bạn. Nhắc lại một lần nữa, mọi UTXO phải được sử dụng hoàn toàn (một lần duy nhất). Vì vậy, cần đảm bảo rằng phần còn lại được trả lại (nếu còn một phần) cho Alice như một phần của giao dịch.

Lưu ý rằng mô hình UTXO hoạt động với các UTXO riêng lẻ trong quá trình tạo giao dịch. Khi chi tiêu nhiều lượng token nhất định, số lượng UTXO phù hợp cần thiết phải được chọn. Nếu tổng số token trong các UTXO đã chọn lớn hơn số token được sử dụng, phần còn lại phải được trả lại dưới dạng UTXO mới cho địa chỉ của người gửi.

UTXO được xử lý giống như tờ tiền thật (cash). Nếu bạn phải trả 85 đô la tại một cửa hàng, bạn có thể thanh toán bằng tờ tiền 100 đô la và nhân viên thu ngân sẽ trả lại cho bạn 15 đô la (tiền giấy 10 đô la và 5 đô la). Bằng cách nào đó, bạn không thể cắt 85 đô la khỏi tờ tiền 100 đô la và thanh toán bằng nó. Bạn có thể tìm thấy 17 tờ tiền $ 5 trong ví của mình và thanh toán bằng chúng. Bạn cũng có thể có 17 UTXO với 5 ADA trong ví Cardano của mình.

Mỗi UTXO chỉ có thể được sử dụng một lần và không bao giờ lặp lại trong tương lai. Sau khi chi tiêu, một hoặc nhiều UTXO mới sẽ được tạo và sau đó có thể được chi tiêu. Chu kỳ này liên tục lặp lại. Mô hình UTXO là một cách tổ chức một blockchain sao cho không có tài sản nào được sử dụng hai lần. Blockchain chuyển sang trạng thái mới theo khoảng thời gian đều đặn. Người dùng có thể sử dụng các UTXO chưa sử dụng ở bất kỳ trạng thái nào trong tương lai. Ví dụ: Bob có thể nhận UTXO ở trạng thái N và quyết định sử dụng nó trong 14 ngày, có thể là trạng thái N + 60.480. Chi tiêu UTXO về cơ bản có nghĩa là chuyển giá trị đến một địa chỉ khác.

Có nhiều giao dịch trong mỗi khối, do đó, nhiều UTXO cùng được sử dụng. Tất cả các giao dịch cùng nhau tạo thành một tập hợp (một khối) thể hiện sự chuyển đổi giữa các trạng thái. Trong mô hình UTXO, toàn bộ biểu đồ đầu ra của giao dịch, đã chi tiêu và chưa chi tiêu, biểu thị trạng thái tổng thể. Có thể phân biệt giữa trạng thái hiện tại và tất cả các trạng thái trước đó, về cơ bản là toàn bộ lịch sử của các giao dịch kể từ khối Genesis (khởi tạo) đầu tiên.

Nếu bạn quan tâm đến số lượng tất cả các token có thể được sử dụng ở trạng thái hiện tại, bạn sẽ phải đếm tất cả các đầu ra chưa sử dụng (UTXO). Tìm thấy chúng về cơ bản có nghĩa là đi qua tất cả các giao dịch từ khối Genesis cho đến nay. Các node đầy đủ xác minh tất cả các giao dịch trong quá trình đồng bộ hóa với mạng để chúng biết tập hợp các UTXO hiện tại.

Picture

Vị trí UTXO giữa các trạng thái. Có 6 UTXO màu xanh lam trên hình chưa được sử dụng.

Bây giờ chúng ta hãy xem xét mô hình dựa trên Tài khoản. Điều này tương tự với tài khoản ngân hàng. Như với mô hình UTXO, tài sản là các Số điện tử được liên kết với các địa chỉ blockchain. Trong mô hình dựa trên Tài khoản, chỉ số dư hiện tại được duy trì tại địa chỉ cho một loại tài sản nhất định. Giao dịch điều chỉnh số dư trên các địa chỉ theo cách nó trừ một giá trị từ một địa chỉ và thêm nó vào một địa chỉ khác.

Hãy minh họa điều này bằng một ví dụ. Alice có 138,85 ETH và quyết định gửi cho Bob 15 ETH. Bob có 21 ETH trong số dư của mình.

Picture

Giao dịch thay đổi số dư trên cả hai địa chỉ trong quá trình chuyển đổi trạng thái.

Giao dịch trừ đi 15 ETH từ số dư của Alice và thêm nó vào số dư của Bob. Tiếp theo, phí giao dịch 0,15 ETH được khấu trừ từ số dư của Alice (GAS).

Trong mô hình dựa trên Tài khoản, trạng thái tổng thể có thể được hiểu là cơ sở dữ liệu của tất cả các tài khoản và số dư hiện tại của chúng đối với các tài sản khác nhau trên mạng. Với mỗi lần bổ sung một khối mới, trạng thái của hệ thống được cập nhật theo tất cả các giao dịch có trong khối. Số lượng tài khoản không đổi và không phụ thuộc vào số lượng giao dịch được thực hiện, miễn là số lượng người dùng không đổi.

Picture

Trạng thái cuối cùng N + 3 là trạng thái tổng thể hiện tại.

Lưu ý sự khác biệt giữa hai khái niệm. Mô hình UTXO ở cấp giao thức không áp dụng cho với ý tưởng về ví hoặc số dư. Mô hình chỉ dựa trên lịch sử giao dịch. Số dư của người dùng phải được xác định cục bộ dựa trên lịch sử chuyển khoản của UTXO.

Bàn về các khối (block)

Bây giờ chúng ta hãy quay lại các khối và giải thích tầm quan trọng của chúng trong quá trình chuyển đổi giữa các trạng thái. Mỗi giao dịch về cơ bản là một yêu cầu thay đổi trạng thái tổng thể. Trong trường hợp của một mạng blockchain, phần lớn các node bắt buộc trong mạng phải đồng ý và chấp nhận trạng thái mới. Đồng bộ hóa toàn bộ mạng với mọi giao dịch đơn lẻ sẽ rất kém hiệu quả về tài nguyên. Đồng bộ hóa toàn thể các node trong mạng lưới là một quá trình tốn nhiều thời gian vì thông tin phải được phát đi toàn thế giới. Khi số lượng giao dịch tăng lên, mạng sẽ không thể đồng bộ hóa kịp thời. Giải pháp là một khối chứa nhiều giao dịch. Nhiều yêu cầu của người dùng được xử lý trong quá trình đồng bộ hóa thông qua các khối.

Các khối là nhịp tim của các mạng blockchain. Bitcoin chuyển từ trạng thái hiện tại sang trạng thái mới trung bình 10 phút một lần. Cardano khoảng 20 giây một lần.

Vì mỗi giao dịch riêng lẻ là một yêu cầu thay đổi trạng thái. Một khối, với tất cả các giao dịch mà nó chứa, sẽ trở thành một yêu cầu thay đổi trạng thái và là phương tiện đồng bộ hóa mạng. Nếu trạng thái tổng thể thay đổi, phần lớn các node bắt buộc trong mạng phải chấp nhận toàn bộ khối. Điều này có nghĩa là tất cả các giao dịch trong khối phải hợp lệ riêng lẻ và lẫn nhau. Ví dụ: khi xác minh một khối mới, mọi node phải đảm bảo rằng cùng một nội dung không được sử dụng hai lần. Toàn bộ khối sẽ bị mạng từ chối nếu nó không phù hợp với các quy tắc xác thực.

Picture

Mạng blockchain liên tục đồng bộ hóa. Sự chuyển đổi giữa các trạng thái xảy ra thông qua các khối.

Về cơ bản, một blockchain là một chuỗi các khối được liên kết với nhau theo cách mà thứ tự không thể thay đổi được. Trong hầu hết các mạng hiện tại, một node được chọn ngẫu nhiên sẽ tạo ra một khối mới. Khối này sau đó được phát tán (khối) tới tất cả các node khác trong mạng. Điều quan trọng là khối mới được lan truyền trong toàn mạng trước khi một node ngẫu nhiên khác được chọn để tạo ra một khối mới tiếp theo, để khối mới có thể được liên kết với khối trước đó. Nếu việc truyền các khối mới quá chậm, sẽ có các phân nhánh (forks) sẽ được tạo ra, đây là trạng thái không mong muốn. Khi xảy ra phân nhánh, một khối mới được thêm vào tiếp theo buộc phải chọn một trong hai khối trước đó. Điều này có nghĩa là, một trong các khối trước đó sẽ tồn tại mãi mãi trong blockchain và khối còn lại sẽ bị mất tích vĩnh viễn (cùng với tất cả các giao dịch chứa trong nó).

Sự khác biệt của hai mô hình Sổ cái

UTXO và các mô hình dựa trên Tài khoản không khác nhau về khái niệm chuyển đổi sang trạng thái mới dựa trên các khối. Sự khác biệt cơ bản chính là ở bản cập nhật trạng thái tổng thể. Trong mô hình UTXO, trạng thái tổng thể được mở rộng bằng cách tạo ra các UTXO mới. Trong khi đó, với mô hình dựa trên Tài khoản, trạng thái tổng thể được cập nhật ở mức thay đổi số dư.

Hai mô hình cũng khác nhau về cách chúng xử lý các giao dịch. Mô hình UTXO là một mô hình xác minh. Các giao dịch xác định kết quả mong muốn của một quá trình chuyển đổi trạng thái. Kết quả được định nghĩa là một UTXO mới được tạo dựa trên các yếu tố đầu vào cho giao dịch. Node xác minh xem đầu vào có đã được sử dụng hay chưa và liệu chữ ký điện tử của giao dịch hoặc các điều kiện chi tiêu khác có hợp lệ hay không. Mô hình dựa trên Tài khoản là một mô hình tính toán. Các giao dịch đang ủy nhiệm về việc chuyển đổi trạng thái trông như thế nào. Các node tính toán trạng thái mới dựa trên các ủy nhiệm. Trong cả hai trường hợp, việc thay đổi trạng thái có thể yêu cầu thực hiện hợp đồng thông minh. Hợp đồng thông minh có thể được coi là một phần mở rộng của các ủy nhiệm chuyển đổi trạng thái.

tip

Sự khác biệt lớn giữa UTXO và các mô hình dựa trên Tài khoản liên quan đến việc xác nhận các khối, thực thi hợp đồng thông minh và khả năng mở rộng.

Hiểu những điều cơ bản

Trước khi đi vào Extended UTXO, cần phải giải thích ngắn gọn nhiều khái niệm cơ bản mà các lập trình viên đã biết nhưng không phổ biến đối với công chúng.

Hãy bắt đầu với các thuật ngữ Đồng thời (concurrency) và Song song (parallelism).

Đồng thời có nghĩa là nhiều tính toán đang diễn ra “gần như” cùng một lúc. Người dùng có thể nhận thấy rằng các tác vụ đang được thực hiện đồng thời, nhưng chỉ có một tác nhân trong nền chuyển đổi giữa các tác vụ rất nhanh chóng. Điều này xảy ra nếu bạn có một máy tính bộ xử lý duy nhất. Đồng thời cho phép trình soạn thảo văn bản và trình phát nhạc chạy cùng một lúc. Quá trình dành một khoảng thời gian ngắn cho mỗi quá trình để từ quan điểm của người dùng, chúng dường như đang chạy đồng thời. Điều này là do bộ xử lý nhanh hơn nhiều so với nhận thức của con người. Nếu máy tính có nhiều bộ xử lý, nó có thể ủy thác các tác vụ riêng lẻ cho một bộ xử lý chuyên dụng. Do đó, các tác vụ có thể chạy song song.

Để đạt được sự đồng thời trong một nhiệm vụ lớn hoặc một loạt các nhiệm vụ (có thể có hoặc có thể không liên quan), phải có khả năng chia công việc thành các phần nhỏ hơn theo cách có thể làm việc độc lập trên các nhiệm vụ phụ.

Khi một tác nhân xử lý một loạt nhiệm vụ, nó có thể hoàn thành một tác vụ trước khi bắt đầu tác vụ tiếp theo. Trong trường hợp này, tác nhân sẽ xử lý các nhiệm vụ một cách tuần tự. Ngoài ra, một tác nhân có thể chuyển đổi lần lượt giữa các tác vụ vào một thời điểm thích hợp. Một tác nhân có thể hoàn thành tất cả các nhiệm vụ cùng một lúc. Câu hỏi đặt ra là liệu chuyển đổi có hiệu quả hơn cho các nhiệm vụ nhất định hay không. Trong trường hợp này, các tác vụ được xử lý đồng thời, nhưng không được xử lý song song.

Nó có thể hiệu quả hơn khi có nhiều tác nhân có thể xử lý một loạt các nhiệm vụ. Trong trường hợp này, nhiều nhân viên phải có thể tiến hành các nhiệm vụ cùng một lúc mà không ảnh hưởng lẫn nhau. Các nhiệm vụ sẽ được xử lý đồng thời và song song. Vì vậy, chúng sẽ được hoàn thành nhanh hơn.

Picture

Khi có nhiều nhiệm vụ phải được xử lý. Một tác nhân duy nhất có thể hoàn thành từng nhiệm vụ một, tức là một cách tuần tự. Ngoài ra, một tác nhân có thể chuyển đổi giữa các tác vụ được xử lý đồng thời. Bạn có thể thấy rằng các nhiệm vụ có thể được xử lý bởi 3 tác nhân. Trong trường hợp này, các tác vụ được xử lý đồng thời và song song.

Đôi khi có thể khó chia công việc thành nhiều nhiệm vụ có thể được xử lý riêng biệt. Nó phụ thuộc vào việc các yếu tố đầu vào có thể được chia thành các đơn vị riêng biệt hay nếu nhiều tác nhân cần sử dụng một tài nguyên duy nhất cùng một lúc. Trong trường hợp này, các Bên thực hiện có thể gặp phải các tranh chấp. Nó có nghĩa là nhiều Bên thực hiện muốn sử dụng các tài nguyên duy nhất cùng một lúc nhưng chỉ một trong số họ có thể thực sự thành công. Người chiến thắng có thể tiêu thụ tài nguyên vĩnh viễn hoặc giải phóng cho người khác khi không cần nữa. Tranh chấp có thể được giải quyết bằng nhiều hình thức đồng bộ của các tác nhân. Các Bên thực hiện có thể bị hạn chế trong việc xử lý các nhiệm vụ phụ của họ.

Nói chung, việc cố gắng đạt được mức độ song song tối đa là điều thuận lợi khi chúng ta quan tâm đến tốc độ xử lý một tác vụ hoặc một loạt các tác vụ nhỏ hơn. Từ quan điểm về khả năng mở rộng, mạng blockchain luôn có lợi hơn nếu có thể đạt được độ song song cao hơn, tức là cho phép nhiều giao dịch được xử lý đồng thời. Tuy nhiên, nó có thể cần thiết để đối phó với sự tranh chấp và nhiều khía cạnh khác.

Không thể nói rõ ràng rằng song song luôn là giải pháp tốt nhất có thể. Đồng thời có thể có những lợi thế của nó trong nhiều trường hợp cụ thể. Đặc biệt nếu nhiều hình thức đồng bộ hóa là cần thiết để tránh các vấn đề cạnh tranh. Không có cái gọi là thiết kế phổ quát tốt nhất. Thay vào đó, chúng ta có thể nói về một giải pháp thích hợp hơn cho một vấn đề cụ thể.

Hãy giải thích thuật ngữ tất định. Thuật toán xác định là một thuật toán, với một đầu vào cụ thể, sẽ luôn tạo ra cùng một đầu ra, với tính toán cơ bản luôn được thực hiện cùng một chuỗi trạng thái.

Từ quan điểm của người dùng, điều này có nghĩa là họ có thể ước tính hoặc thậm chí biết trước kết quả mà họ có thể mong đợi sau khi chèn các đầu vào cụ thể. Ví dụ: nếu bạn nhập một phép toán 5 + 5 vào máy tính, bạn dự đoán trước rằng kết quả là 10. Mọi kết quả khác sẽ là một lỗi. Các lập trình viên cố gắng xây dựng hệ thống càng xác định càng tốt, vì điều này đảm bảo mức độ tin cậy cao và do đó trải nghiệm người dùng cao.

Trong bối cảnh của blockchain, người dùng muốn có thể dự đoán trước kết quả của việc gửi giao dịch. Tính xác định có nghĩa là khi người dùng tạo một giao dịch, anh ta muốn giao dịch với mức phí đã định được chuyển đến khối càng sớm càng tốt và có kết quả như mong đợi. Người dùng có cùng kỳ vọng về việc xác thực tập lệnh và việc thực thi các hợp đồng thông minh. Khi một giao dịch được gửi, nó không được thất bại và người dùng không nên trả phí cho một giao dịch không thành công.

Trong quá trình thiết kế mô hình Tài khoản, cùng với cách thức xử lý các hợp đồng thông minh, điều quan trọng là phải lường trước các điều kiện mà tính không xác định có thể xảy ra. Điều quan trọng là phải hiểu những lý do dẫn đến giao dịch thất bại và cố gắng thiết kế một hệ thống mà nó có thể tránh được hoặc sẽ xảy ra ở mức tối thiểu. Các lập trình viên ứng dụng phi tập trung nên được cung cấp các công cụ giúp họ tạo ra các chương trình hoạt động có thể đoán trước và an toàn.

Một rủi ro cho các ứng dụng là quyền truy cập vào dữ liệu sổ cái có thể thay đổi, tức là dữ liệu có thể thay đổi liên tục. Nếu kết quả của một giao dịch hoặc hợp đồng thông minh phụ thuộc vào trạng thái của dữ liệu có thể thay đổi, tính không xác định có thể xảy ra trong quá trình thực thi. Nó luôn thuận lợi khi quá trình xử lý các hoạt động càng cách biệt càng tốt với môi trường của nó (tránh sử dụng dữ liệu có thể thay đổi bên ngoài) và chỉ phụ thuộc vào dữ liệu cục bộ.

Mọi hoạt động luôn phụ thuộc ở một mức độ nào đó vào môi trường của nó. Câu hỏi đặt ra là môi trường có thể ảnh hưởng đến kết quả của một giao dịch ở mức độ nào và môi trường có thể bị ảnh hưởng như thế nào. Nếu kẻ tấn công có thể thay đổi dữ liệu sổ cái có thể thay đổi, hắn có thể ảnh hưởng đến kết quả của các giao dịch và việc thực hiện các hợp đồng thông minh để thu lợi cá nhân. Thiết kế của hệ thống nên giảm thiểu khả năng bị tấn công.

Lịch sử ngắn gọn về sự phát triển của các mô hình Tài khoản

Hãy bắt đầu trước với Bitcoin, thứ đầu tiên đưa ra mô hình UTXO. Ưu điểm của UTXO là việc tính toán trong quá trình xác minh giao dịch được thực hiện ngoài chuỗi. Các giao dịch đều là kết quả của tính toán (xác minh tại máy cục bộ) và bằng chứng. Nó đủ để lưu trữ các giao dịch trong blockchain và không cần phải xử lý thêm với các trạng thái và lưu trữ cuối cùng của chúng.

Các đầu vào giao dịch luôn là các UTXO chưa sử dụng hiện có và node có thể dễ dàng xác minh nó. Điều này có nghĩa là cùng một giao dịch, hoặc cùng một đầu vào, không thể được sử dụng hai lần. Việc xác minh rất dễ dàng vì nó diễn ra trong một khối, là một không gian có ranh giới xác định. Việc cố gắng sử dụng cùng một đầu vào lần thứ hai sẽ dễ dàng bị phát hiện và sẽ không được chấp nhận. Các giao dịch có thể được xử lý song song vì chúng không phụ thuộc vào bất kỳ trạng thái bên ngoài nào.

Mô hình UTXO trong Bitcoin rất yếu về khả năng lập trình. Hầu như không thể tạo ra một phép tính phức tạp. Việc cố gắng tạo một hợp đồng trạng thái đối với mô hình UTXO thường dẫn đến nhu cầu lưu trữ cao và sử dụng trạng thái thấp. Mỗi đầu vào yêu cầu một tập lệnh nhân chứng duy nhất và mỗi đầu ra yêu cầu một tập lệnh khóa duy nhất. Vì vậy, khi số lượng UTXO tăng lên, số lượng các tập lệnh bằng chứng liên quan cũng tăng theo. Sức mạnh tính toán cần thiết để xác minh các tập lệnh cùng với nhu cầu lưu trữ các tập lệnh và dữ liệu nhân chứng làm tăng các yêu cầu về tài nguyên, do đó chi phí.

Ethereum là người đầu tiên đưa ra mô hình dựa trên Tài khoản. Ethereum đã làm cho nó có thể viết một chương trình nhỏ với logic phức tạp được gọi là hợp đồng thông minh. Các giao dịch được hiểu là các sự kiện làm thay đổi trạng thái tổng thể. Máy ảo Ethereum (EVM) tính toán kết quả chuyển đổi trạng thái của các sự kiện này dựa trên trạng thái blockchain trước đó.

Đây là một điểm quan trọng vì trạng thái trước đó trở thành một phần không thể thiếu trong phép tính hiện tại của trạng thái tổng thể mới. Nói cách khác, tính đúng đắn của phép tính hiện tại phụ thuộc vào quá khứ. Các giao dịch (dữ liệu đầu vào để tính toán) ảnh hưởng đến trạng thái blockchain được tách biệt về mặt cú pháp với kết quả của các giao dịch (dữ liệu đầu ra).

Trạng thái tổng thể được lưu trữ cục bộ trên các node và không được truyền theo khối. Các node đạt được sự đồng thuận đa số về trạng thái tổng thể mới bằng cách thực hiện tính toán trạng thái tổng thể của riêng họ cục bộ dựa trên các giao dịch (sự kiện) và sau đó so sánh kết quả của chúng với kết quả nhận được (State-Root). Nói cách khác, tất cả các node trung thực phải có cùng một gốc trạng thái như node được đề xuất sau khi tính toán cục bộ. Đây là cách duy nhất để chuyển đến trạng thái tổng thể mới trong toàn bộ mạng lưới.

Picture

Node đã xử lý 3 giao dịch (sự kiện) và chuyển từ trạng thái tổng thể N sang trạng thái N + 3. Sau đó, nó tạo ra một khối mới với trạng thái Root. Tất cả các node trong mạng phải tính toán cùng một trạng thái gốc sau khi xử lý các giao dịch.

Trong mô hình dựa trên Tài khoản, tất cả các tài khoản đều có trạng thái. Điều này có nghĩa là tại thời điểm tính toán của quá trình chuyển đổi sang trạng thái mới (xử lý hợp đồng thông minh), trạng thái tổng thể bị khóa, tức là bất biến. Các lập trình viên có một không gian nhất định giúp việc phát triển các hợp đồng thông minh trở nên dễ dàng hơn. Họ có thể làm việc và tương tác với tất cả các số dư. Dựa trên kết quả được tính toán, một trạng thái tổng thể mới sẽ được tạo, trạng thái này sẽ bị khóa lại trước lần tính toán tiếp theo, dẫn đến một trạng thái mới khác. Có một chuỗi chuyển đổi giữa các trạng thái.

Ưu điểm là các lập trình viên có thể làm việc với bất kỳ tài khoản (số dư) nào khi trạng thái tổng thể bị khóa. Điều này có nghĩa là có thể làm việc với một tài khoản cụ thể nhiều lần trong một khối. Điều này có thể thực hiện được do việc xử lý tuần tự các giao dịch và hợp đồng. Nói cách khác, Ethereum rất tốt trong việc sử dụng đồng thời.

Thiết kế này thân thiện với lập trình viên vì nó rất dễ làm việc. Mặt khác, các lập trình viên không thể kiểm soát trình tự xử lý các giao dịch và hợp đồng, vì điều này nằm trong tay của các nhà sản xuất khối và người dùng đặt các khoản phí. Do đó, các lập trình viên phải tính đến nhiều kết quả có thể xảy ra và các nỗ lực tấn công. Nó có thể là một thách thức.

Việc tuân thủ trình tự là rất quan trọng vì nó là một phần của biện pháp phòng thủ chống lại cuộc tấn công chi tiêu gấp đôi. Mỗi tài khoản có một giá trị 'nonce' được chứa trong mỗi giao dịch. Với mỗi giao dịch mới từ một tài khoản nhất định, số nonce sẽ tăng lên. Cơ chế này ngăn cản việc xử lý song song các giao dịch. Nếu giao dịch đầu tiên của nhiều giao dịch của một tài khoản cụ thể không thành công và không được bao gồm trong một khối, các giao dịch tiếp theo cũng sẽ thất bại.

Điều quan trọng là phải hiểu rằng các giao dịch (sự kiện) phụ thuộc vào nhau và thứ tự của chúng trong khối rất quan trọng. Khi một node nhận được một khối mới, nó chỉ chấp nhận nó nếu nó tính toán cùng một State-Root được đề xuất trong khối. Điều này sẽ chỉ xảy ra nếu thứ tự của các sự kiện đang được xử lý, tức là cùng một chuỗi chuyển tiếp, được tuân theo.

Một giao dịch đơn giản trong mô hình dựa trên Tài khoản có thể được coi là một yêu cầu thay đổi số dư của hai người dùng. Giao dịch là một sự kiện làm thay đổi trạng thái tổng thể, không phải là một đầu vào và đầu ra cụ thể. Do đó, một giao dịch phải được đánh giá về tính đúng đắn trong bối cảnh của trạng thái trước đó. Điều này cũng áp dụng cho tất cả các ứng dụng và giao thức khác được xây dựng trên EVM.

Người dùng phản ứng với một trạng thái nhất định, chẳng hạn như giá của tài sản, khi họ gửi các giao dịch mới. Những gì người dùng không thể ảnh hưởng nhiều là vị trí dự kiến ​​của một giao dịch trong trình tự chuyển đổi trong khối. Đây có thể là một vấn đề đối với các giao dịch phức tạp hơn hoạt động với các điều kiện được xác định trước, vì không thể đảm bảo trước rằng quá trình chuyển đổi trạng thái được đề xuất sẽ vẫn có hiệu lực khi thử đưa vào. Người dùng không bao giờ chắc chắn và không thể xác minh trước cục bộ rằng giao dịch của mình sẽ được thêm vào khối. Kết quả là giao dịch có thể không thành công mặc dù đã thanh toán phí giao dịch. Kết quả của các giao dịch có độ không chắc chắn cao hơn và nó không mang tính xác định.

Các giao dịch không thành công là kết quả của trạng thái tổng thể (dữ liệu được chia sẻ có thể thay đổi). Nhiều bên có thể muốn gửi các giao dịch sẽ thay đổi trạng thái tổng thể theo một cách cụ thể. Tuy nhiên, trạng thái tổng thể được sửa đổi có thể ngăn việc xử lý các giao dịch đã gửi khác. Nói cách khác, chỉ giao dịch được gửi đầu tiên tại một thời điểm nhất định hoặc trong các điều kiện cụ thể mới có thể được xử lý. Phần còn lại của các giao dịch có thể không thành công. Điều này làm phức tạp việc xây dựng các hợp đồng thông minh và có thể được coi là môi trường thuận lợi cho các cuộc tấn công.

Hãy lấy một ví dụ cụ thể. Người dùng Bob có thể tạo giao dịch dựa trên trạng thái của số dư cụ thể mà anh ta thấy tại một thời điểm nhất định. Tuy nhiên, những số dư này có thể đã bị thay đổi bởi giao dịch của Alice, giao dịch này bất ngờ được đặt trước giao dịch của Bob (Alice có thể sử dụng mức phí cao hơn hoặc người khai thác quyết định đặt giao dịch của Alice trước giao dịch của Bob vì phí là như nhau). Tại thời điểm khi giao dịch của Bob được chèn, trạng thái tổng thể khác với trạng thái mà Bob đã tính đến. Sự thay đổi trạng thái tổng thể này có thể khiến giao dịch không thành công, hoặc trong trường hợp xấu hơn có thể dẫn đến trạng thái không thể đoán trước.

Hãy tóm tắt lại. Mô hình dựa trên Tài khoản do Ethereum thực hiện có lợi thế cho các lập trình viên ứng dụng là không phải lo lắng về đồng thời. Các lập trình viên có thể tự do làm việc với tài khoản người dùng và thay đổi số dư. Nó được đảm bảo rằng số dư được truy cập riêng lẻ khi các sự kiện quy định, do đó, ít rủi ro hơn khi hai tác nhân truy cập vào cùng nhiều dư cùng một lúc. Vì vậy, nó là tương đối dễ dàng để thiết kế một ứng dụng. Mô hình dựa trên Tài khoản cho phép người dùng truy cập nhiều lần vào một tài khoản trong một khối. Điều này có nghĩa là Alice có thể gửi ETH từ tài khoản của mình cho Bob trong một giao dịch và cũng có thể gửi ETH cho Carol trong một giao dịch khác. Cả hai giao dịch có thể nằm trong cùng một khối.

Những bất lợi là sự phức tạp đã nói ở trên của việc song song hóa, các giao dịch thường xuyên bị lỗi và phải trả phí ngay cả đối với các giao dịch không thành công. Hơn nữa, do thứ tự của các giao dịch, có một vấn đề được gọi là Giá trị có thể trích xuất của người khai thác (MEV).

Ưu điểm của E-UTXO

Cardano sử dụng mô hình Extended UTXO, viết tắt là EUTXO. Mục đích của mô hình EUTXO là hỗ trợ khả năng lập trình thể hiện cao hơn trong khi vẫn duy trì tất cả các lợi ích của mô hình UTXO của Bitcoin. Mô hình UTXO mở rộng rất quan trọng đối với Cardano vì nó muốn không chỉ là một mạng giao dịch. Cardano là một nền tảng. Vì vậy, điều quan trọng là phải cho phép các lập trình viên xây dựng các chức năng phức tạp hơn. Điều này đạt được thông qua các hợp đồng thông minh. Trong trường hợp của Cardano, chính xác hơn là nói về các tập lệnh trình xác thực. Trong văn bản, chúng ta có thể sử dụng các thuật ngữ này thay thế cho nhau, nhưng chúng giống nhau.

EUTXO cung cấp nhiều lợi thế so với mô hình dựa trên Tài khoản. Đặc biệt, bảo mật cao hơn khi thực hiện các hợp đồng thông minh, khả năng dự đoán phí, xác minh cục bộ đảm bảo rằng các giao dịch sẽ được chấp nhận sau khi gửi và trạng thái blockchain vốn bị phân mảnh. Điều này cho phép xử lý giao dịch song song, có ảnh hưởng tích cực đến khả năng mở rộng trên chuỗi. Song song cũng rất quan trọng đối với việc thực hiện các hợp đồng thông minh. Giống như các giao dịch, hợp đồng thông minh cũng có thể được thực hiện độc lập, tức là song song.

Khi xử lý các hợp đồng thông minh, thứ tự trong khối không quan trọng, không cần xem xét kết quả thực hiện của các hợp đồng khác trong khối, do đó, bản thân việc thực thi có thể được coi là an toàn hơn. Nói cách khác, vì các kết quả thực thi hợp đồng thông minh riêng lẻ là độc lập với nhau và không có trạng thái có thể thay đổi được chia sẻ (tổng thể), nên sẽ có ít khả năng hơn cho các cuộc tấn công.

Điều quan trọng cần lưu ý là khả năng mở rộng của các ứng dụng phi tập trung dựa trên khả năng của mô hình Tài khoản. Nói chung, các hợp đồng thông minh và việc thực thi chúng có thể được coi là một lớp phụ thuộc vào khả năng của blockchain.

Các tùy chọn song song dựa trên thiết kế UTXO ban đầu, trong đó mỗi UTXO chưa sử dụng hiện có được tạo thành từ một chuỗi các giao dịch trước đó. Mỗi EUTXO có thể được xử lý độc lập. Không có điều gì gọi là trạng thái tổng thể cần được tính đến trong quá trình xử lý và xác nhận EUTXO. Chỉ có trạng thái cục bộ là quan trọng. Điều đó có nghĩa là kết quả của giao dịch chỉ phụ thuộc vào việc sử dụng UTXO là các đối tượng sử dụng một lần, bất biến, hoạt động như đầu vào của các giao dịch sẽ tạo ra kết quả đầu ra.

Picture

Node Cardano đã xử lý 3 giao dịch thông thường và 3 giao dịch tập lệnh. Sau đó, nó tạo ra một khối mới. Các giao dịch độc lập với nhau và có thể được xử lý và xác minh song song.

Mỗi giao dịch có thể sử dụng một hoặc nhiều EUTXO, điều này sẽ tạo ra các EUTXO mới có cùng tổng giá trị. Cách duy nhất mà một giao dịch có thể ảnh hưởng đến tác động của một giao dịch khác được áp dụng cho sổ cái là chi tiêu EUTXO giống như giao dịch sau đó cố gắng chi tiêu, do đó khiến node từ chối nó.

Nếu một giao dịch vượt qua xác thực cục bộ, người dùng có thể gần như chắc chắn rằng giao dịch đó sẽ chuyển sang một khối mới. Các giao dịch trong mô hình EUTXO là độc lập với nhau và có tính xác định, có nghĩa là giao dịch rất có thể sẽ không thất bại. Nó cũng đúng cho việc xác nhận các tập lệnh Plutus. Người dùng có thể kiểm tra cục bộ xem một tập lệnh Plutus có thể được gửi và chạy trên chuỗi hay không. Nó đảm bảo rằng các khoản phí không bao giờ bị mất. Tuy nhiên, phải tuân theo một quy tắc, đó là mỗi EUTXO chỉ có thể được sử dụng một lần và toàn bộ trong một khối.

Việc chi tiêu UTXO phải được toàn bộ mạng chấp nhận như một phần của việc bổ sung khối mới. Điều này có nghĩa là người nhận UTXO chỉ có thể chi tiêu nó trong khối tiếp theo. Không nằm trong cùng một khối mà UTXO đã được nhận. Việc bổ sung một khối mới có thể được coi là một sự chuyển đổi trạng thái của blockchain Cardano. Tuy nhiên, trong bản thân các khối, các giao dịch riêng lẻ và EUTXO là độc lập với nhau.

Mô hình EUTXO mang tính xác định hơn so với mô hình dựa trên Tài khoản, nhưng một giao dịch vẫn có thể bị từ chối. Từ chối có nghĩa là mặc dù giao dịch được xây dựng chính xác, nó không thể được áp dụng cho blockchain. Nếu điều này xảy ra, giao dịch không ảnh hưởng đến trạng thái của blockchain, do đó, không phải trả phí. Việc từ chối giao dịch xảy ra trong trường hợp có tranh chấp. Điều này có nghĩa là trạng thái của blockchain thay đổi gần đúng thời điểm mà người dùng tạo một giao dịch cục bộ. Quá trình xác thực cục bộ đã thông qua, nhưng trạng thái blockchain đã khác tại thời điểm gửi. Thuyết xác định đảm bảo rằng, bất cứ khi nào một giao dịch được chấp nhận, nó sẽ chỉ có những tác động có thể dự đoán được đối với trạng thái sổ cái. Nói cách khác, nó sẽ có ảnh hưởng tương tự đối với trạng thái sổ cái như nó có trong quá trình xây dựng và xác nhận cục bộ.

Có thể khó khăn hơn cho một lập trình viên khi tạo một tập lệnh trình xác thực vì họ phải tự xử lý đồng thời. Các giao dịch có thể tranh chấp nếu chúng phụ thuộc vào cùng một EUTXO tại cùng một thời điểm. Ví dụ: nếu nhiều EUTXO bị khóa bởi hợp đồng thông minh thì chỉ một tác nhân duy nhất có thể tương tác với chúng trong một khối. Lưu ý rằng giới hạn này chỉ áp dụng cho EUTXO. Các tác nhân khác nhau có thể tương tác với các hợp đồng thông minh khác mà không có bất kỳ lỗi đồng thời nào. Hợp đồng thông minh có thể xử lý nhiều UTXO khác nhau tạo nên trạng thái hiện tại và siêu dữ liệu ngoài chuỗi cho phép diễn giải các UTXO đó.

Picture

Xử lý đồng thời và song song. Nhân viên có thể tiêu thụ nhiều EUTXO cùng một lúc. Họ có thể gặp phải sự tranh chấp khi họ muốn sử dụng cùng một loại EUTXO.*

Song song, hoặc khả năng thực hiện nhiều hoạt động độc lập đồng thời, là một tính năng quan trọng về hiệu suất mạng tổng thể và khả năng mở rộng. trạng thái tổng thể của mô hình dựa trên Tài khoản hạn chế các tùy chọn khả năng mở rộng, vì rất khó đạt được sự song song trong xử lý giao dịch và cả thực hiện hợp đồng thông minh. Với mô hình EUTXO, có thể đạt được mức đồng thời cao hơn, điều này mở ra cơ hội để tăng khả năng mở rộng.

Hãy cùng xem có gì mới về mô hình EUTXO so với mô hình UTXO, sử dụng Bitcoin. Xử lý một giao dịch trong mạng Cardano liên quan đến việc xác thực hành động được yêu cầu. node xác minh rằng nó có thể thực hiện hành động được yêu cầu và tác giả của giao dịch đã cung cấp dữ liệu / đầu vào có liên quan.

Hành động phổ biến dành cho các giao dịch thông thường có ý định sử dụng các EUTXO được khóa bằng khóa công khai. Node xác nhận rằng tác giả của giao dịch đã cung cấp chữ ký điện tử với khóa cá nhân tương ứng. Hành động, tức là sử dụng EUTXO, sẽ được thực hiện nếu xác nhận thành công. Không có gì mới ở đây so với Bitcoin.

Hành động tiếp theo là xác thực các giao dịch có ý định sử dụng các EUTXO bị khóa bởi một địa chỉ tập lệnh.

Tập lệnh là một chương trình (một đoạn mã) quyết định xem giao dịch sử dụng EUTXO có được phép thực hiện như vậy hay không. Một tập lệnh chứa các hàm thuần túy có kết quả là Đúng hoặc Sai. Để xác thực một giao dịch, node gọi trình thông dịch tập lệnh, là một chương trình có thể dịch và thực thi mã tập lệnh Plutus. Trình thông dịch thực thi tập lệnh có mã băm đã được hình thành theo địa chỉ nơi các UTXO bị khóa. Nói cách khác, khi một EUTXO bị khóa bởi tập lệnh Plutus, thì mã tập lệnh của EUTXO đó được liên kết với địa chỉ của nó.

Picture

Node nhận một giao dịch có hành động sử dụng EUTXO, bị khóa bởi địa chỉ tập lệnh.

Hãy cùng xem những gì thực sự đổi mới về EUTXO so với Bitcoin bên cạnh khả năng lập trình được Plutus kích hoạt thể hiện cao hơn.

UTXO mở rộng cho phép người dùng tùy chọn thêm dữ liệu người dùng tùy ý ở định dạng giống JSON vào UTXO. Dữ liệu này được gọi là Datum. Datum sẽ cho phép các lập trình viên cung cấp chức năng giống như trạng thái của script. Dữ liệu người dùng có thể được coi là trạng thái tập lệnh cục bộ. Trạng thái này chỉ có giá trị cục bộ vì nó được liên kết với một UTXO cụ thể. Việc sử dụng toàn bộ tiềm năng của Datum là tùy thuộc vào các lập trình viên.

Các giao dịch có thể mang các đối số dành riêng cho người dùng, được gọi là Redeemer. Redeemer có thể được xem như ý định của tác giả của giao dịch về cách chi tiêu UTXO. Redeemer có thể được sử dụng bởi các lập trình viên ứng dụng phi tập trung cho các mục đích khác nhau.

Thường có một ràng buộc giữa Datum và Redeemer phụ thuộc vào chức năng cụ thể của một ứng dụng cụ thể. Khi một giao dịch đang được xác thực, một tập lệnh xác thực sẽ hoạt động với Datum, Redeemer và ngữ cảnh bao gồm dữ liệu giao dịch. Tập lệnh chứa các điều kiện cho phép sử dụng UTXO khi chúng được đáp ứng. Datum, Redeemer và giao dịch ngữ cảnh là dữ liệu được nhập vào script.

Picture

Dựa trên dữ liệu đầu vào, tập lệnh quyết định xem EUTXO có thể được tiêu thụ hay không.*

Để sử dụng các EUTXO bị khóa bởi tập lệnh, trước tiên cần đưa tập lệnh vào blockchain. Việc mở khóa UTXO sẽ phụ thuộc vào tập lệnh. Do đó, giao dịch sẽ chứa tập lệnh và cả các UTXO sẽ bị khóa.

Các lập trình viên (hoặc ứng dụng của họ) viết mã trên chuỗi của Plutus và đóng gói nó theo một định dạng đặc biệt. Sau đó, một giao dịch phải được tạo trong đó tập lệnh Plutus sẽ được nhúng vào. Khi giao dịch đã được lưu trữ trong blockchain, một giao dịch khác có thể được gửi để bắt đầu thực thi tập lệnh. Giao dịch có thể được xem như một thông điệp tới script.

Các lập trình viên chia các ứng dụng thành mã on-chain và off-chain. Mã ngoài chuỗi có thể là một phần của ví hoặc nó có thể là một ứng dụng phi tập trung (DEX). Phần off-chain của ứng dụng có thể tạo một giao dịch có chứa script on-chain và các EUTXO sẽ bị khóa. Đối với mỗi EUTXO, hàm dữ liệu băm cần phải được chỉ định. Người dùng phải ký giao dịch. Sau khi giao dịch được gửi và được chấp nhận bởi mạng, các EUTXO sẽ bị khóa bởi script.

Picture

Giao dịch Plutus chứa tập lệnh trình xác thực và thêm Datum vào EUTXO. Khi giao dịch được bao gồm trong khối, EUTXO sẽ bị khóa bởi tập lệnh.

Việc xác thực một tập lệnh đòi hỏi nhiều tài nguyên hơn so với việc xác thực một giao dịch thông thường. Một nguồn gốc của sự không xác định có thể là quy mô của phí thực thi hợp đồng thông minh / tập lệnh. Trong trường hợp của Cardano, ngân sách để thực hiện tập lệnh là một phần của giao dịch và có thể tính trước phí chính xác tại máy cục bộ. Trình thông dịch tập lệnh theo dõi mức tiêu thụ tài nguyên trong quá trình thực thi tập lệnh trong bối cảnh ngân sách. Nếu hết ngân sách thực thi, việc đánh giá tập lệnh sẽ dừng lại và kết quả là Sai. Giá trị sai có nghĩa là EUTXO sẽ không được tiêu thụ.

Lưu ý rằng tập lệnh Plutus chỉ hoạt động với trạng thái được liên kết với EUTXO và hơn nữa với dữ liệu mà nó nhận được trong giao dịch. Việc thực thi script không phụ thuộc vào bất kỳ thứ gì khác. Điều duy nhất sẽ thay đổi từ quan điểm sổ cái ở cấp độ tổng thể là di chuyển các EUTXO từ địa chỉ này sang địa chỉ khác với mỗi khối mới được thêm vào.

Hợp đồng tương tự có thể được sử dụng để khóa tiền của Alice và Bob. Việc thực thi tập lệnh cho các Đồng thời của Alice không ảnh hưởng đến việc thực thi tập lệnh cho các Đồng thời của Bob, vì chúng là hai lần thực thi độc lập cho các EUTXO riêng biệt. Kết quả của hai lần thực hiện riêng lẻ phụ thuộc vào các tiểu bang địa phương.

Một giao dịch chi tiêu (giao dịch tin nhắn) được xây dựng để tương tác với một tập lệnh. Đầu vào của giao dịch có thể là EUTXO bị khóa bởi tập lệnh. Giao dịch chi tiêu gọi trình thông dịch tập lệnh để xác thực tập lệnh và mở khóa EUTXO nếu các điều kiện được đáp ứng. Do đó, EUTXO đã mở khóa được chuyển đến một địa chỉ mới.

Picture

Để sử dụng EUTXO từ số dư ứng dụng, trình thông dịch Plutus phải thực thi tập lệnh Plutus được liên kết với EUTXO. Tập lệnh sử dụng Datum, Redeemer và giao dịch ngữ cảnh làm đầu vào. Kết quả của việc thực thi là True. Vì vậy, EUTXO có thể được sử dụng. 12 ADA được gửi đến địa chỉ của Bob.

Nhiều ứng dụng có thể cần hoạt động với trạng thái chung trên nhiều EUTXO và có thể sử dụng Datum để làm như vậy. Một loại trạng thái tổng thể có thể đạt được trong một thiết kế giao thức cụ thể. Các nhà thiết kế giao thức phải biết rằng nếu EUTXO bị khóa bởi một tập lệnh thì chỉ một tác nhân duy nhất có thể tương tác với nó bên trong một khối. Nó có thể yêu cầu nhiều loại đồng bộ hóa giữa các tác nhân.

Hãy minh họa điều này bằng một ví dụ. Các nhóm thanh khoản mà AMM DEX sử dụng là các tài nguyên được chia sẻ vì người dùng muốn sử dụng chúng cùng một lúc (trong cùng một khối). Mỗi nhóm thanh khoản đều chứa một tập hợp các EUTXO. Các EUTXO có sẵn do đó cũng là các tài nguyên được chia sẻ vì trừ khi một Bên thực hiện dự trữ một EUTXO cụ thể cho chính mình theo nhiều cách đã thỏa thuận, chúng sẽ có sẵn cho tất cả những người khác.

Thuật toán ứng dụng phải đảm bảo rằng khi các giao dịch được xây dựng, các tác nhân riêng lẻ không tranh giành các EUTXO trong nhóm. Các giao dịch muốn sử dụng một EUTXO cụ thể là độc lập với nhau từ góc độ xác thực. Tuy nhiên, sự phụ thuộc tồn tại vì nhiều tác nhân có thể muốn sử dụng cùng một tài nguyên (cùng một EUTXO) cùng một lúc để tạo một giao dịch. Nói cách khác, các Bên thực hiện muốn làm việc đồng thời. Một giải pháp hiện đang được sử dụng là giao dịch số lượng lớn. Bên thực hiện tìm kiếm các UTXO yêu cầu phù hợp muốn tương tác với một nhóm thanh khoản cụ thể để thực hiện hoán đổi được yêu cầu. Các Bên thực hiện làm điều đó với tất cả các yêu cầu hoán đổi có sẵn khác và chèn các giao dịch hoán đổi đã chọn vào một giao dịch hàng loạt lớn. Khi tạo một giao dịch hàng loạt, các Bên thực hiện biết những EUTXO nào đã được sử dụng. Họ có thể đảm bảo rằng một EUTXO cụ thể không được sử dụng hai lần trong một giao dịch hàng loạt.

Kết luận

Điều tốt nhất với Cardano là nhóm liên tục nâng cấp nó, điều này sẽ dần dần tăng khả năng của nó. Tại thời điểm viết bài này, đợt hard fork của Vasil đang diễn ra với chúng ta, điều này sẽ mang lại nhiều cải tiến về kịch bản cho Cardano. Cụ thể, đây là các Đầu vào Tham chiếu (CIP-31), Dữ liệu Nội tuyến (CIP-32), Tập lệnh Tham chiếu (CIP-33) và Đầu ra Tài sản thế chấp (CIP-40). Tất cả những cải tiến này sẽ cung cấp cho các lập trình viên nhiều lựa chọn hơn khi thiết kế ứng dụng của họ.

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


Picture