Skip to main content

Đi sâu vào các mô hình dựa trên tài khoản của UTXO và Ethereum của Cardano

Ngày 24 tháng 04 năm 2024 - Chia sẻ bài viết này trên Twitter | FacebookTelegram

Tầm quan trọng của mô hình kế toán Blockchain được chọn thường bị đánh giá thấp, mặc dù nó có ảnh hưởng đáng kể đến trải nghiệm người dùng và tiềm năng mở rộng. Trong bài viết này, chúng ta sẽ đi sâu vào sự phức tạp của mô hình UTXO được Cardano và Bitcoin sử dụng cũng như mô hình dựa trên tài khoản được Ethereum và nhiều blockchain tương thích EVM khác sử dụng. Bài viết có đầy đủ hình ảnh minh họa. Sau khi nghiên cứu kỹ, bạn sẽ hiểu tại sao việc xác thực các giao dịch trong Ethereum là không mang tính tất định và thường dễ xảy ra lỗi, trong khi Cardano xác thực các giao dịch một cách tất định. Chúng tôi cũng sẽ làm sáng tỏ sự khác biệt giữa trạng thái global của Ethereum và Cardano.

Kế toán trong Blockchain

Kế toán đóng vai trò là nền tảng của bối cảnh tài chính hiện đại. Mỗi tổ chức tài chính được yêu cầu duy trì đề xuất về số dư tài khoản cá nhân và dòng tiền. Quá trình này phải hoàn toàn đáng tin cậy, an toàn, có thể kiểm tra được và quan trọng nhất là đáng tin cậy.

Mỗi sổ cái phải có thể chỉ ra chính xác quyền sở hữu tài sản tại bất kỳ thời điểm nào. Nói cách khác, người dùng X có quyền sở hữu một số lượng tài sản Y nhất định tại thời điểm Z. Vì các tương tác tài chính giữa các cá nhân diễn ra thường xuyên nên các mục trong sổ cái luôn thay đổi. Hệ thống, dù là tập trung hay phi tập trung, phải xác thực chính xác từng giao dịch và ghi lại hợp lệ vào sổ cái.

Trong lịch sử, sổ cái được ghi vào giấy là phổ biến. Tuy nhiên, với sự xuất hiện của máy tính, kế toán đã trải qua quá trình chuyển đổi kỹ thuật số. Sự ra đời của công nghệ Blockchain đã cho phép khả năng kế toán phân tán.

Mạng blockchain có thể được coi là một hệ thống tài chính. Chúng có thể được xem như một sổ cái phân tán, tức là một hệ thống kế toán không chịu sự kiểm soát của bất kỳ cơ quan trung ương nào. Người dùng có thể tham gia vào các giao dịch tài chính với nhau theo kiểu mạng ngang hàng. Tuy nhiên, bên trung gian hoặc tổ chức xác minh giao dịch không phải là cơ quan trung ương mà là một mạng lưới phân tán gồm các tình nguyện viên. Một nhóm tình nguyện viên chịu trách nhiệm thêm các mục tài chính mới vào sổ cái.

Satoshi Nakamoto đã triển khai mô hình UTXO bằng Bitcoin. Vitalik Buterin đã chọn mô hình dựa trên tài khoản cho Ethereum. Nhóm IOG đã chọn sử dụng mô hình UTXO mở rộng cho Cardano. Mỗi biến thể này đều có những ưu và nhược điểm riêng mà chúng tôi sẽ đi sâu vào phân tích tiếp theo.

Trạng thái là điều kiện tiên quyết để xác thực giao dịch

Về mặt kỹ thuật, Blockchain là một máy trạng thái. Nó ghi nhớ các sự kiện trước đó, được gọi là trạng thái hệ thống hoặc trạng thái global. Những sự kiện này, chủ yếu được thể hiện bằng các giao dịch, là sự tương tác giữa những người dùng. Trạng thái có thể được thay đổi trong các điều kiện được xác định trước. Mỗi giao thức đã triển khai một bộ quy tắc và logic cho phép chuyển từ trạng thái S-0 sang trạng thái S-1. Theo định kỳ, mạng Blockchain sẽ bổ sung các khối mới trong đó quá trình chuyển đổi trạng thái diễn ra.

Một khối đóng vai trò là đơn vị cơ bản của quá trình chuyển đổi từ trạng thái hiện tại sang trạng thái mới. Nó được tạo thành từ các giao dịch. Nhà sản xuất khối có nhiệm vụ tạo ra một khối mới tuân theo các quy tắc của giao thức, nghĩa là tất cả các điều kiện để chấp nhận khối phải được đáp ứng. Để một khối được coi là hợp lệ, nó chỉ được chứa các giao dịch hợp lệ.

Việc xác thực một giao dịch—là sự chuyển giao giá trị giữa hai hoặc nhiều bên—cần có một số bối cảnh hoặc trạng thái để xác minh. Hệ thống phải xác minh, trong số những thứ khác như chữ ký hợp lệ, rằng tài khoản của người gửi có đủ tiền. Nó cũng phải ngăn người dùng chi tiêu cùng một khoản tiền nhiều lần, từ đó giải quyết vấn đề chi tiêu gấp đôi khét tiếng. Việc xác thực giao dịch một cách riêng lẻ là không khả thi. Trình xác thực xác thực giao dịch dựa trên trạng thái hiện tại của sổ cái.

Cả node được giao nhiệm vụ xây dựng khối mới và node xác thực khối mới được tạo đều yêu cầu kiến ​​thức về ngữ cảnh, tức là trạng thái hiện tại của sổ cái, để xác thực. Bối cảnh để xác thực là khối hợp lệ gần đây nhất trong blockchain.

node tạo khối, xây dựng một khối mới trong một vòng cụ thể, sử dụng khối hoàn tất biểu thị trạng thái hiện tại làm đầu vào để xác thực. Sau đó, nó lấy tất cả các giao dịch sẽ được chèn vào khối mới và xác thực chúng. Sau đó, nó sẽ thêm các dữ liệu cần thiết khác vào khối và phân phối nó vào mạng.

Trong hình, node đang cố gắng xây dựng một khối mới cho phép chuyển từ trạng thái S+3 sang trạng thái tiếp theo S+4.

Cả node tạo khối mới và tất cả các node xác thực đều phải chia sẻ cùng một bối cảnh xác thực để chuyển sang trạng thái mới. Nếu các node khác nhau sử dụng các bối cảnh khác nhau thì khối mới được đề xuất chỉ có thể được chấp nhận bởi một phần của các node trong mạng. Một khối hợp lệ sẽ chỉ vượt qua xác thực trên các node sử dụng cùng bối cảnh với nhà sản xuất khối.

trạng thái global liên tục thay đổi với mỗi khối mới được thêm vào hoặc thậm chí với mỗi giao dịch được xác thực bổ sung. Có thể có một khoảng thời gian đáng kể giữa việc gửi giao dịch và xử lý nó trong mạng (tức là đưa giao dịch vào khối), trong thời gian đó trạng thái global có thể thay đổi. Bối cảnh mà người dùng có tại thời điểm gửi giao dịch có thể thay đổi hoặc không thay đổi khi node sản xuất khối kết hợp giao dịch vào một ứng cử viên khối mới.

Như được mô tả trong hình ảnh, người dùng đã gửi giao dịch TX 10 ngay sau khi thêm khối N+2. Sau đó, khối N+3 đã được thêm vào, dẫn đến thay đổi trạng thái global. Node sản xuất khối đang trong quá trình xây dựng khối N+4 và dự định kết hợp giao dịch TX 10 vào đó. Việc bổ sung khối N+3 đã thay đổi trạng thái global, điều này có thể cũng có thể sửa đổi bối cảnh liên quan trực tiếp đến việc xác thực giao dịch TX 10.

Người dùng có ngữ cảnh hợp lệ sau khi thêm khối N+2. Tuy nhiên, nhà sản xuất khối có ngữ cảnh hợp lệ sau khi thêm khối N+3. Và bối cảnh là khác nhau.

Điểm khác biệt chính giữa UTXO và mô hình dựa trên tài khoản bắt nguồn từ bối cảnh mà người xác thực yêu cầu để xác thực giao dịch và phương thức xác thực các giao dịch trong một khối.

Thông tin cơ bản về UTXO

UTXO, từ viết tắt của Đầu ra giao dịch chưa chi tiêu, đề cập đến đầu ra của giao dịch trước đó có thể được sử dụng trong giao dịch trong tương lai.

Mô hình UTXO không nhận dạng các khái niệm như tài khoản và số dư. UTXO hoạt động giống tiền giấy hơn, có thể giữ bất kỳ giá trị danh nghĩa nào. Ví dụ: UTXO có thể là 6,9 ADA, 47 ADA hoặc 459,7 ADA.

Ví Cardano hỗ trợ người dùng quản lý UTXO như thể chúng là số dư tài khoản. Ba UTXO nói trên sẽ xuất hiện dưới dạng 513,6 ADA trong ví của Alice.

Vậy điều gì xảy ra khi Alice muốn gửi Bob 50 ADA?

Alice bắt đầu giao dịch trong ví Cardano. Ví phải kết hợp một bộ UTXO vào giao dịch, đủ để chi trả tổng cộng 50 ADA cộng với phí 0,17 ADA.

Ví có thể sử dụng một UTXO đầu vào duy nhất có giá trị 459,7 ADA hoặc hai UTXO đầu vào có giá trị 6,9 ADA và 47 ADA cho giao dịch. Ví chọn cách thứ hai, sử dụng tổng cộng 53,9 ADA làm đầu vào cho giao dịch.

Thông thường, hai UTXO được tạo làm đầu ra của giao dịch: 1) UTXO được gửi cho người nhận, 2) UTXO được trả lại cho người gửi.

Lưu ý rằng đầu vào giao dịch là số lượng ADA lớn hơn số tiền Alice dự định gửi cho Bob (bao gồm cả phí). Đó là trường hợp của phần lớn các giao dịch và nó phù hợp với hoạt động của mô hình UTXO.

Thông qua giao dịch, Alice chi 50,17 ADA và thông qua UTXO mới được tạo, 3,73 ADA được trả lại vào tài khoản của cô ấy. Rất hiếm khi xảy ra trường hợp UTXO có sẵn với chính xác giá trị mà người gửi muốn chi tiêu.

Giao dịch sẽ tạo ra 2 UTXO đầu ra: 50 ADA cho Bob và 3,73 ADA cho Alice.

Trong hình ảnh bên dưới, bạn có thể quan sát giao dịch như được mô tả. Cả hai UTXO đầu vào sẽ được sử dụng hoàn toàn và các UTXO đầu ra mới sẽ được tạo từ chúng. Giá trị của UTXO đầu ra sẽ bị giảm phí giao dịch. Bob nhận được chính xác 50 ADA. Sau khi gửi giao dịch, Alice sẽ có 2 UTXO trong ví của mình.

Mô hình Cardano UTXO

Bây giờ bạn đã biết cách UTXO hoạt động từ góc độ người dùng. Nhưng điều này có ý nghĩa gì đối với việc xác thực giao dịch và trạng thái global (bối cảnh)?

UTXO là các đối tượng độc lập và bất biến và có thể đảm bảo quyền truy cập độc quyền. Khi UTXO được tạo làm đầu ra của giao dịch, nó sẽ không thay đổi cho đến khi được chi tiêu trong một giao dịch mới. Khi được chi tiêu, nó sẽ được tiêu thụ hoàn toàn và UTXO mới được tạo làm đầu ra của giao dịch mới.

Bối cảnh mà trình xác thực cần để xác thực một giao dịch là tập hợp tất cả các UTXO hiện có tại thời điểm xác thực. Tập hợp UTXO này thể hiện trạng thái sổ cái đang hoạt động của Blockchain (trạng thái global).

Khi một giao dịch được gửi, nó đề cập đến một hoặc nhiều UTXO làm đầu vào, dự định sẽ được chi tiêu. Công việc của người xác thực là kiểm tra xem:

  • Tất cả UTXO đầu vào thực sự là một phần của trạng thái global hiện tại, tức là chúng chưa được sử dụng và tồn tại trong sổ cái.
  • Tổng giá trị UTXO đầu vào lớn hơn hoặc bằng tổng giá trị UTXO đầu ra, đảm bảo duy trì giá trị (mọi chênh lệch sẽ trở thành phí giao dịch).
  • Giao dịch được chủ sở hữu UTXO đầu vào ký chính xác, đảm bảo chỉ những chủ sở hữu hợp pháp mới có thể chi tiêu UTXO.

Trạng thái hiện tại của Blockchain có thể được biểu thị bằng tập hợp tất cả UTXO chưa chi tiêu và lịch sử của Blockchain có thể được xem dưới dạng biểu đồ của tất cả UTXO, cả đã chi tiêu và chưa chi tiêu. Biểu đồ này cung cấp lịch sử đầy đủ, có thể kiểm tra được của tất cả các giao dịch đã từng xảy ra trên Blockchain.

Trong hình ảnh bên dưới, bạn có thể thấy UTXO được sử dụng như thế nào trong các giao dịch. UTXO đầu ra (màu xanh lá cây) trở thành UTXO đầu vào (màu đỏ). Tất cả UTXO chưa được chi tiêu đại diện cho trạng thái global hiện tại hoặc bộ UTXO đang hoạt động (màu xanh lam). Tất cả các UTXO màu xanh lam đều có thể trở thành đầu vào giao dịch, tức là được chi tiêu. UTXO xanh đã được chi tiêu nên không thể chi tiêu lại.

Để xác thực các giao dịch mới, không cần thiết phải biết toàn bộ lịch sử của Blockchain mà chỉ cần biết tập hợp các UTXO chưa được sử dụng (UTXO màu xanh) đang hoạt động. Tuy nhiên, để có được một bộ UTXO hoạt động thường yêu cầu xử lý toàn bộ lịch sử Blockchain.

Lưu ý rằng tập hợp UTXO đang hoạt động cũng bao gồm các UTXO được tạo trước đó.

Ở mỗi trạng thái N trong hình, một khối được tạo ra. Ở trạng thái mới N+5, ngữ cảnh chứa UTXO từ các trạng thái N+2, N+3 và N+4 sẽ được sử dụng để xác thực giao dịch. Trong khối mới ở trạng thái N+5, sẽ có giao dịch 14 đang cố gắng chi UTXO từ giao dịch 10 và giao dịch 15 đang cố gắng chi UTXO từ giao dịch 11.

Ở trạng thái N+5, một khối mới được tạo. Do đó, các UTXO mới cũng được tạo và chúng sẽ được chèn vào tập hợp các UTXO đang hoạt động.

Mỗi UTXO có thể được xử lý độc lập và song song, do đó việc xác thực giao dịch độc lập với nhau. Bây giờ chúng ta đi đến phần giải thích lý do tại sao các giao dịch trên Cardano được xác thực một cách xác thực.

Trong mô hình UTXO, việc xác thực một giao dịch được xác định dựa trên đầu ra của nó, do đó loại bỏ nhu cầu về trạng thái chung toàn cầu. Điều này có vẻ hơi mâu thuẫn với văn bản trước đó, trong đó tôi đã tuyên bố rằng tập hợp UTXO đang hoạt động tạo thành một trạng thái global.

Toàn bộ bộ UTXO không cần thiết để xác thực giao dịch mà chỉ cần một tập hợp con nhỏ của nó, cụ thể là các UTXO đầu vào. Các UTXO còn lại trong bộ UTXO không liên quan.

Tính hợp lệ của giao dịch chỉ phụ thuộc vào việc liệu UTXO đã sử dụng có hợp lệ và chưa được sử dụng hay không và liệu giá trị tổng hợp của đầu vào có khớp với giá trị tổng hợp của đầu ra hay không.

Đầu vào giao dịch là các thực thể bất biến độc lập, do đó việc xác thực có tính quyết định. Có thể dự đoán với mức độ chắc chắn cao về kết quả xác nhận, bao gồm cả UTXO đầu ra.

Có thể xác thực giao dịch tại thời điểm gửi, vì chắc chắn rằng đầu ra sẽ không thay đổi tại thời điểm giao dịch tương tự sẽ được mạng xác thực, tức là khi nhà sản xuất khối kết hợp giao dịch vào một khối ứng cử viên mới. Kết quả xác nhận có thể sẽ giống hệt nhau trong cả hai trường hợp. Do đó, nếu giao dịch vượt qua xác thực cục bộ thì nó cũng sẽ vượt qua xác thực mạng.

Hình ảnh mô tả trình xác thực xây dựng khối mới, N+4, chứa các giao dịch TX 9 và TX 10. Đầu vào để xác thực là các giao dịch mà một node lấy từ mem-pool của nó và một tập hợp UTXO hoạt động mà mỗi node duy trì.

Các giao dịch mới, TX 9 và TX 10, sử dụng các UTXO đầu ra cũ chưa được chi tiêu (được mô tả bằng các hộp màu xanh lam) để tạo thành các UTXO đầu vào (được biểu thị bằng các hộp màu đỏ). Trình tự các giao dịch trong khối không quan trọng vì các giao dịch này là tự động và không ảnh hưởng lẫn nhau. Giao dịch TX 10, được gửi ngay sau khi tạo khối N+2, có thể sử dụng UTXO từ giao dịch trong khối đó. Việc tạo khối N+4 mới dẫn đến việc tạo ra các UTXO mới từ các UTXO đầu vào. Với việc bổ sung khối N+4 vào Blockchain, mạng sẽ chuyển sang trạng thái global mới.

Như được minh họa trong hình ảnh, khối N+4 mới đã được thêm vào blockchain, dẫn đến thay đổi trạng thái global. Từ tập hợp UTXO đang hoạt động, các UTXO được sử dụng trong các giao dịch có trong khối N+4 sẽ bị loại bỏ (màu xanh lá cây). Các UTXO mới tạo (màu tím) đã được thêm vào bộ này. Khối này được phổ biến trên mạng, do đó, tập hợp UTXO đang hoạt động sẽ được cập nhật trên tất cả các node trong mạng chấp nhận khối mới.

Xác thực giao dịch xác định

Hãy xem lại ví dụ trong đó Alice có 3 UTXO trong ví của mình, mỗi cái có giá trị lần lượt là 6,9 ADA, 47 ADA và 459,7 ADA.

Alice dự định gửi 5 ADA mỗi người cho ba cá nhân - Bob, Carol và Dave, mỗi lần thực hiện một giao dịch mới. Mặc dù Alice có thể gửi một giao dịch duy nhất với ba người nhận, nhưng chúng tôi cố tình chọn ba giao dịch riêng biệt trong ví dụ này để minh họa khái niệm về tính tất định. Tất cả các giao dịch được gửi đi nhanh chóng và đều có thể được xử lý trong khối tiếp theo.

Như được mô tả trong hình ảnh, mỗi giao dịch sử dụng một UTXO từ ví của Alice (được biểu thị bằng hộp màu đỏ), do đó đảm bảo rằng mỗi giao dịch có đầu vào độc lập. Mỗi giao dịch mang lại hai UTXO đầu ra, được biểu thị bằng các hộp màu xanh lam. Một UTXO, có giá trị 5 ADA, được phân bổ cho người nhận và UTXO thứ hai, chứa ADA còn lại, được trả lại vào ví của Alice. UTXO đầu ra được xác định tại thời điểm gửi giao dịch. Để đơn giản, phí giao dịch đã được bỏ qua trong ví dụ này.

Sau khi xác thực cục bộ thành công, các giao dịch sẽ được phổ biến trên mạng. Tất cả các giao dịch được xử lý trong khối tiếp theo. Trong hình ảnh tiếp theo, bạn có thể quan sát UTXO trong ví của Alice và tất cả những người nhận.

Hãy lưu ý rằng UTXO đầu vào đã được sử dụng (được mô tả bằng các hộp màu xanh lá cây). Sáu UTXO mới đã được tạo ra. Ba UTXO được trả lại cho Alice. Mỗi người trong số ba người nhận nhận được một UTXO.

Quan sát rằng một giá trị được bảo toàn trong mỗi giao dịch. Tổng UTXO đầu vào bằng tổng của tất cả UTXO đầu ra. Điều này đúng cho tất cả các giao dịch.

Trình tự trong đó các giao dịch được xác thực là không quan trọng. Kết quả xác thực sẽ không thay đổi ngay cả khi chỉ có một giao dịch được thực hiện ở khối tiếp theo và hai giao dịch còn lại được đưa vào các khối tiếp theo (vì bất kỳ lý do nào). Trạng thái global có thể trải qua bất kỳ thay đổi nào (trên nhiều khối) giữa việc xác thực giao dịch cho Bob và các giao dịch cho Carol và Dave mà không ảnh hưởng đến việc xác thực giao dịch.

Việc xác thực các giao dịch là độc lập với nhau do sự độc lập của các UTXO đầu vào với nhau. Do đó, việc xác thực giao dịch là mang tính quyết định. Mặc dù trạng thái global có thể thay đổi giữa việc gửi giao dịch và quá trình xử lý giao dịch đó trên mạng nhưng điều đó không ảnh hưởng đến kết quả. Kết quả (hợp lệ hoặc không hợp lệ) chỉ có thể được xác định dựa mainnet giao dịch và UTXO đầu vào của nó.

trạng thái global của Cardano là sự tổng hợp của các UTXO độc lập và bất biến. Với tính độc lập của các UTXO này, việc làm việc song song với chúng là khả thi. Điều này ngụ ý rằng nhiều giao dịch có thể được xác thực đồng thời, điều này có thể nâng cao đáng kể thông lượng và hiệu quả của mạng.

Trong hình ảnh, bạn có thể thấy mỗi giao dịch chỉ tiêu thụ UTXO từ tập hợp UTXO. Nếu tất cả các ví và dApps đều được thiết kế tốt thì không thể xảy ra trường hợp hai giao dịch tiêu thụ cùng một UTXO. Các UTXO đã sử dụng sẽ bị xóa khỏi tập hợp hoạt động và các UTXO mới sẽ được chèn vào.

Việc tiêu thụ UTXO và thêm UTXO mới vào bộ không được hiển thị trong hình. Hình này chỉ minh họa cách tham chiếu giao dịch đầu vào UTXO

Một lợi thế nữa là các nguyên tắc ứng dụng cho các giao dịch tiêu chuẩn cũng mở rộng sang việc thực thi các tập lệnh xác thực. Việc xây dựng một giao dịch vượt qua xác thực cục bộ, bao gồm cả việc thực thi tập lệnh là khả thi. Giao dịch như vậy cũng có nhiều khả năng vượt qua quá trình xác thực mạng, vì tất cả đầu vào xác thực, bao gồm Datum và Redeemer, sẽ vẫn nhất quán. Nói cách khác, ngay cả việc thực thi trình xác thực tập lệnh cũng không phụ thuộc vào trạng thái global bên ngoài mà chỉ phụ thuộc vào đầu vào giao dịch. Sự khác biệt duy nhất là trong trường hợp giao dịch tập lệnh, có nhiều đầu vào hơn.

Tính quyết định được quy định bởi tính độc quyền truy cập vào UTXO.

Đối với các giao dịch tiêu chuẩn, chủ sở hữu UTXO là người thực hiện giao dịch. Ví, hoạt động như một trung gian, đảm bảo rằng mỗi UTXO chỉ được đưa vào giao dịch một lần.

Trong ví dụ của chúng tôi, Alice sở hữu tất cả UTXO mà cô ấy muốn chi tiêu. Không ai khác có thể xây dựng một giao dịch có chữ ký hợp lệ.

Nếu ví cho phép hai giao dịch được gửi với cùng UTXO làm đầu vào thì chỉ một trong số các giao dịch có cơ hội thành công. Tuy nhiên, một chiếc ví được thiết kế tốt sẽ không cho phép người dùng mắc sai lầm như vậy.

Trong trường hợp các ứng dụng phi tập trung (DApps), tác nhân có thể là một thực thể không phải là ví (ví dụ: batcher). Thực thể này chịu trách nhiệm cung cấp quyền truy cập độc quyền vào UTXO khi xây dựng giao dịch. Điều này đảm bảo rằng mỗi UTXO được sử dụng chính xác một lần, duy trì tính tất định và bảo mật của hệ thống.

Trong hình ảnh bên dưới, bạn có thể thấy pool thanh khoản với các token X và Y. Batchers, trong trường hợp này là các bộ phận off-chain của DEX, đang cố gắng thực hiện 2 lần hoán đổi. Cụ thể, đợt 1 và đợt 3. Các nhà phân phối phải liên lạc với nhau off-chain để đảm bảo quyền truy cập độc quyền vào UTXO trong pool thanh khoản (trong hình, giao tiếp off-chain được thể hiện bằng màu xanh lam).

Nếu các bộ phân phối không giao tiếp off-chain, họ có thể thử sử dụng cùng UTXO làm đầu vào giao dịch. Bạn có thể thấy tình huống này trong hình. Hai người phân đợt, những người không biết ý định của nhau, mỗi người có thể gửi một giao dịch có đầu vào giống nhau UTXO từ pool thanh khoản. Cả hai giao dịch sẽ vượt qua xác thực cục bộ, nhưng chỉ một trong số các giao dịch đó có cơ hội vượt qua xác thực mạng.

Giao dịch Cardano có thể không thành công nếu một trung gian hoặc một số trung gian độc lập với nhau gửi giao dịch hợp lệ với cùng một UTXO đầu vào. Tình trạng này là do ví hoặc dApps được thiết kế kém.

Tóm lại, chúng tôi có thể tuyên bố rằng các giao dịch Cardano có thể được coi là không trạng thái.

Mô hình dựa trên tài khoản Ethereum

Mô hình dựa trên tài khoản Ethereum rất dễ mô tả vì hoạt động tương tự như tài khoản ngân hàng thông thường. Mỗi tài khoản trong Ethereum đều có một trạng thái được liên kết với nó, bao gồm số dư Ether (ETH) hiện tại. Số dư này được lưu trữ trực tiếp trong trạng thái của tài khoản và có thể được cập nhật bằng các giao dịch.

Trong hình bên dưới, bạn có thể thấy sự chuyển đổi giữa các trạng thái. Lưu ý những thay đổi về số dư tài khoản người dùng. Để đơn giản, chỉ có một số dư đại diện cho ETH.

trạng thái global của Ethereum có thể được xem dưới dạng 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 các tài sản khác nhau trên mạng. Mỗi khi một khối mới được thêm vào, trạng thái của hệ thống sẽ được cập nhật theo tất cả các giao dịch có trong khối đó.

Trạng thái global này được lưu trữ cục bộ trên mỗi node trong mạng Ethereum.

Khi một giao dịch được tạo, nó sẽ chỉ định tài khoản người gửi, tài khoản người nhận, số lượng Ether được chuyển và một số dữ liệu và GAS tùy chọn. Nếu người nhận là tài khoản hợp đồng, giao dịch sẽ kích hoạt việc thực thi mã của hợp đồng.

Trong hình, bạn thấy một giao dịch thay đổi trạng thái global N thành trạng thái N+1. Giao dịch làm thay đổi số dư trong tài khoản của Alice và Bob.

Khi một giao dịch được xử lý, mạng Ethereum sẽ kiểm tra xem tài khoản của người gửi có đủ số dư để chi trả cho việc chuyển khoản và chi phí gas hay không. Nếu séc thành công, mạng sẽ khấu trừ số tiền thích hợp từ số dư của người gửi và thêm vào số dư của người nhận (hoặc vào số dư của hợp đồng, nếu người nhận là tài khoản hợp đồng).

trạng thái global của Ethereum được cập nhật với mỗi giao dịch được xử lý và trạng thái cập nhật này được lưu trữ trong mỗi khối mới được thêm vào blockchain Ethereum.

Khi giao dịch được xử lý, EVM sẽ tính toán trạng thái mới dựa trên trạng thái hiện tại và giao dịch. Trạng thái mới này sau đó trở thành trạng thái hiện tại cho giao dịch tiếp theo. Bằng cách này, trạng thái của blockchain Ethereum không ngừng phát triển theo từng giao dịch.

Như được mô tả trong hình ảnh, khối được thêm gần đây nhất là N+3, tạo thành trạng thái global N+3. Mạng cố gắng chuyển sang trạng thái mới, N+4 và do đó khối N+4 mới được xây dựng. Cần lưu ý là việc xác thực giao dịch TX 1 trong khối N+4 (được biểu thị bằng hộp màu xanh lá cây) phụ thuộc vào trạng thái global. TX 1 là giao dịch đầu tiên mà node sản xuất khối cố gắng đưa vào khối mới N+4.

trạng thái global được thể hiện bằng trạng thái hiện tại của tất cả các tài khoản và hợp đồng thông minh.

Khi giao dịch TX 1 được tích hợp vào khối N+4, giao dịch tiếp theo có thể được xác thực, điều này sẽ phụ thuộc vào cả trạng thái global và giao dịch trước đó.

Hình ảnh cho thấy việc xác thực giao dịch TX 2 không chỉ phụ thuộc vào trạng thái global hợp lệ trong khối N+3 mà còn phụ thuộc vào giao dịch TX 1.

Node sản xuất khối Ethereum xử lý các giao dịch một cách tuần tự. Mỗi giao dịch bổ sung được thêm vào khối mới được xây dựng sẽ thay đổi trạng thái global hiện tại của node. Khi khối được khuếch tán vào mạng, các node xác thực phải tiến hành tương tự, tức là xác thực các giao dịch một cách tuần tự theo đúng thứ tự mà chúng được node sản xuất khối chèn vào khối.

Một trong những lý do khiến giao dịch Ethereum có thể thất bại là do trạng thái global không thể đoán trước được tại thời điểm xác thực giao dịch. Khi một giao dịch đang được xây dựng, không thể dự đoán được kết quả của nó. Trạng thái global trong quá trình xác thực giao dịch có thể khác với trạng thái trong quá trình xây dựng giao dịch. Trong thời gian tạm thời giữa việc gửi và xác thực giao dịch, số dư tài khoản của những người tham gia giao dịch có thể đã thay đổi. Những thay đổi về số dư tài khoản này có thể khiến giao dịch không được thực hiện như dự định ban đầu của người gửi.

Hình minh họa khoảng thời gian giữa việc gửi giao dịch TX 10, xảy ra xung quanh khối N+2 (trạng thái +2) và quá trình xác thực giao dịch tiếp theo sau khi xác thực giao dịch TX 9. Trong giai đoạn này, nhiều thay đổi trong hệ thống toàn cầu trạng thái xảy ra. Việc xác thực giao dịch TX 10 phụ thuộc vào cả trạng thái chung và các thay đổi do giao dịch TX 9 đưa ra. Giao dịch TX 9 hoặc bất kỳ thay đổi nào trước đó có thể khiến giao dịch TX 10 không thành công.

Đầu vào giao dịch là số dư tài khoản và đây là tài nguyên được chia sẻ. Điều này có nghĩa là tại thời điểm người dùng gửi giao dịch, số dư tài khoản có thể khác với thời điểm giao dịch được xác thực. Đầu vào giao dịch không mang tính quyết định như trong trường hợp mô hình UTXO. Sẽ vô nghĩa nếu thực hiện xác thực cục bộ để tiết lộ liệu giao dịch sau đó có vượt qua xác thực mạng hay không.

Cách tốt nhất để giải thích sự khác biệt là quay lại ví dụ với Alice, người muốn gửi 5 ETH cho 3 người nhận. Trong trường hợp của Ethereum, cả 3 giao dịch được gửi đều có cùng một đầu vào, đó là số dư tài khoản của Alice.

Việc xác thực các giao dịch diễn ra tuần tự và mỗi lần 5 ETH được khấu trừ từ số dư của Alice và được ghi có vào tài khoản của một trong những người nhận.

Sau khi thêm khối mới chứa tất cả các giao dịch, tài khoản người dùng sẽ giống như được mô tả trong hình.

Hình ảnh này không chính xác. Sau này chúng ta sẽ chỉ ra chính xác quá trình chuyển đổi giữa các trạng thái diễn ra như thế nào.

Ethereum xác thực các giao dịch một cách tất định theo nghĩa là với cùng một đầu vào (dữ liệu giao dịch) và cùng một trạng thái (trạng thái global hiện tại của blockchain Ethereum), EVM sẽ luôn tạo ra cùng một đầu ra. Tuy nhiên, kết quả xác thực giao dịch là không xác định. Kết quả xác nhận có thể khác với mong đợi của người dùng.

Trong quá trình gửi giao dịch, người dùng không thể dự đoán trạng thái global tại thời điểm xác thực giao dịch. Và không thể ước tính kết quả xác nhận với mức độ chắc chắn cao. Nó chỉ có thể được giả định.

Nếu nhiều người dùng có thể truy cập vào cùng một số dư, có thể dễ dàng xảy ra trường hợp nhiều giao dịch sẽ được gửi để khấu trừ một số tiền nhất định từ cùng một số dư. Giả sử số tiền là 1200 ETH. Ba người dùng đã gửi một cách độc lập một giao dịch nhằm khấu trừ 500 ETH từ số tiền.

Tại thời điểm gửi giao dịch, bối cảnh có thể khiến số tiền nhất định được khấu trừ khỏi số dư. Chưa có giao dịch nào được thêm vào trạng thái global (được mạng chấp nhận). Tuy nhiên, khi 2 giao dịch được xác thực thì giao dịch thứ ba sẽ không thành công. Hai giao dịch đã trừ tổng cộng 1000 ETH. Số dư sẽ là 200 ETH. Vì vậy không thể rút lại 500 ETH được nữa. 2 giao dịch thành công và 1 giao dịch thất bại.

Trong hình các bạn có thể thấy chỉ có 2 giao dịch của Bob và Carol muốn lấy (trừ) 500 ETH từ tài khoản ứng dụng thành công. Dave đã không may mắn và giao dịch của anh ấy không thành công.

Ngay cả bức tranh này cũng không hoàn toàn chính xác vì nó không nắm bắt được những thay đổi dần dần của các cân bằng trong quá trình chuyển đổi trạng thái. Hình ảnh tiếp theo sẽ làm rõ điều đó.

Bây giờ hãy giải thích tầm quan trọng của thứ tự khi chèn giao dịch vào một khối. Ngay cả khi Dave gửi giao dịch trước Bob và Carol, anh ấy có thể đã không gặp may. Nó phụ thuộc vào thứ tự node sản xuất khối chèn các giao dịch vào khối mới.

Tương tự, nếu giao dịch của Dave và Carol được đưa vào khối thứ nhất và thứ hai, giao dịch của Bob sẽ thất bại.

Vào thời điểm Bob, Carol và Dave gửi giao dịch, họ không thể đảm bảo mạng xác thực thành công giao dịch đó vì không thể có quyền truy cập vào phần số dư dành riêng cho giao dịch của họ. Điều này khác với mô hình UTXO vì nó cho phép giao dịch có quyền truy cập độc quyền vào UTXO đầu vào.

Trong hình, bạn có thể thấy 4 trạng thái biểu thị các thay đổi trạng thái trong quá trình chuẩn bị khối. Các giao dịch trắng nằm trong mem-pool. Hai giao dịch xanh là những giao dịch đã trừ 500 ETH khỏi số dư dApps ở trạng thái N+1 và N+2. Màu đỏ là giao dịch không thành công ở trạng thái N+3. Bạn có thể thấy số dư dApps (từ đó giá trị được trừ dần) thay đổi như thế nào ở mỗi trạng thái mới. Lúc đầu giá trị là 1200, sau đó là 700 và cuối cùng chỉ còn 200.

Lưu ý rằng ở trạng thái N+2, tất cả các giao dịch đều tham chiếu cùng số dư dApps, nhưng nó có giá trị khác với trạng thái N+1 và N.

trạng thái global của Ethereum có thể được coi là trạng thái của tất cả các tài khoản và tài khoản hợp đồng. Trạng thái của tài khoản bao gồm số dư Ether và đối với tài khoản hợp đồng, trạng thái hiện tại của hợp đồng thông minh, bao gồm mọi biến được xác định trong hợp đồng.

Mô hình dựa trên tài khoản của Ethereum yêu cầu các giao dịch phải được xử lý tuần tự. Điều này là do mỗi giao dịch có thể ảnh hưởng đến trạng thái của bất kỳ tài khoản nào trên mạng và kết quả của giao dịch có thể phụ thuộc vào thứ tự xử lý giao dịch đó. Do đó, để đảm bảo tính nhất quán và ngăn chặn chi tiêu gấp đôi, trạng thái global phải được 'khóa' cho mỗi lần xác thực, nghĩa là mỗi lần chỉ có thể xử lý một giao dịch.

Việc khóa trạng thái global là cần thiết để đảm bảo tính toàn vẹn của hệ thống. Nếu không có cơ chế khóa này, hai giao dịch có thể cùng lúc cố gắng chi tiêu cùng một khoản tiền, dẫn đến sự không nhất quán trong trạng thái global và có thể cho phép chi tiêu gấp đôi. Bằng cách xử lý các giao dịch một cách tuần tự và cập nhật trạng thái global sau mỗi giao dịch, Ethereum đảm bảo rằng mỗi giao dịch được xử lý ở trạng thái nhất quán và thứ tự giao dịch không ảnh hưởng đến trạng thái cuối cùng của hệ thống.

Hình ảnh minh họa trạng thái global của Ethereum. Mỗi giao dịch sửa đổi hai số dư. Mũi tên màu đỏ biểu thị việc khấu trừ giá trị từ số dư, trong khi mũi tên màu xanh lá cây biểu thị việc bổ sung giá trị vào số dư. Đáng chú ý là một số giao dịch được xử lý theo trình tự sẽ điều chỉnh số dư giống hệt nhau. Ví dụ: cả TX 1 và TX 2 đều khấu trừ giá trị từ cùng một số dư, trong khi TX 3 và TX 4 cộng giá trị vào cùng một số dư.

Các giao dịch Ethereum có thể được mô tả là có trạng thái.

Lời kết

Nếu không có ngữ cảnh hoặc trạng thái global, sẽ chỉ khả thi khi xác thực một số thuộc tính nhất định của giao dịch, chẳng hạn như chữ ký mật mã từ chủ sở hữu khóa riêng. Khả năng sử dụng nguồn lực cần có bối cảnh. Tất cả các node trong mạng phải duy trì trạng thái global nhất quán được sử dụng khi một node xây dựng một khối mới và cả trong quá trình xác thực tiếp theo của nó bởi các node khác trong mạng.

Đôi khi người ta tuyên bố rằng Cardano thiếu một trạng thái global được chia sẻ. Đây là một sự tương tự khá phù hợp trong bối cảnh tầm quan trọng của trạng thái global trong trường hợp của Ethereum. Tuy nhiên, bối cảnh để xác thực các giao dịch cũng rất quan trọng đối với Cardano. Trong trường hợp của Cardano, trạng thái global bao gồm một tập hợp các đối tượng độc lập và duy nhất chỉ có thể được sử dụng một lần trong một giao dịch. Việc tiêu thụ UTXO đầu vào dẫn đến việc tạo ra các UTXO mới. Trong trường hợp của Ethereum, số dư là những thực thể lâu dài có thể được sửa đổi nhiều lần bởi các giao dịch tại bất kỳ thời điểm nào. Hai giao dịch Ethereum không thể sửa đổi cùng một số dư cùng một lúc. Và việc xử lý tuần tự các giao dịch là cần thiết. Trong trường hợp của Cardano, tính song song là khả thi vì các giao dịch độc lập với nhau.

Tính tất định là thuận lợi cho mật mã Zero-knowledge. Ví dụ: trong hệ sinh thái Cardano, có thể tạo Zero-knowledge Rollup mà không cần trình sắp xếp thứ tự.

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