Hiểu về UTxO
Ngày 09 tháng 10 năm 2023 - Chia sẻ bài viết này trên Twitter | Facebook | Telegram
Trong bài viết này, chúng tôi sẽ mô tả cách hoạt động của mô hình sổ cái UTxO, nó tương tự như các tiêu tiền giấy (cash). Chúng tôi đã tinh chỉnh bài viết này để giúp nó đơn giản hơn.
UTxO giống như tiền giấy
Khi chúng ta dùng tài khoản ngân hàng, chúng ta thường quan tâm đến số dư. Số dư là con số tăng lên khi ai đó gửi tiền vào tài khoản hoặc giảm nếu chủ tài khoản tiêu tiền. Mô hình sổ cái dựa trên tài khoản (Accounting) mà Ethereum sử dụng hoạt động tương tự theo cách này.
Nếu Alice có 3 ETH trong tài khoản của mình và gửi cho Bob 1 ETH, giao dịch Ethereum sẽ trừ 1 ETH từ tài khoản của Alice và thêm vào tài khoản của Bob. Giao dịch Ethereum là một hoạt động nguyên tử (atomic operation). Điều này có nghĩa là nó xảy ra tại một thời điểm và tạo ra sự thay đổi trạng thái thông qua các khối.
Trong trường hợp của Cardano, không giống với số dư tài khoản ngân hàng. Mô hình UTxO hoạt động hoàn toàn khác về bản chất, mặc dù người dùng sẽ không nhận thấy điều đó nhờ có các ví (wallet) của Cardano.
Mô hình UTxO không dùng các khái niệm như tài khoản và số dư. UTxO hoạt động giống cách mà tiền giấy hoạt động hơn. Và một UTXO có thể mang bất kỳ giá trị danh nghĩa nào. Một UTxO có thể có giá trị là 6,9 ADA, 47 ADA hoặc 459,7 ADA. Ví Cardano sẽ giúp người dùng cộng giá trị tất cả các UTxO trong một ví và hiển thị thông tin tổng hợp giống như số dư tài khoản. Với 3 UTxO có trong ví như được đề cập trong ví dụ trước, Alice nhìn thấy trong ví của cô ấy tổng cộng là 513,6 ADA.
Điều gì xảy ra nếu Alice muốn gửi Bob 50 ADA?
Alice sẽ tạo một giao dịch trong ví Cardano. Ngoài địa chỉ người nhận của Bob, cô còn nhập số tiền cần chuyển là 50 ADA. Ví cần chèn UTxO vào giao dịch, giao dịch này sẽ có tổng cộng 50 ADA cộng với 0,17 ADA cho phí.
Ví có thể sử dụng một UTxO đầu vào duy nhất có giá trị là 459,7 ADA hoặc có thể dùng hai UTxO đầu vào có giá trị 6,9 ADA và 47 ADA làm đầu vào cho giao dịch cần thực hiện. Nếu ví chọn tùy chọn thứ hai. Tổng cộng 53,9 ADA được sử dụng làm đầu vào cho giao dịch.
Giao dịch Cardano chỉ định UTxO đầu vào (hoặc các đầu vào) và UTxO đầu ra (hoặc các đầu ra). Tổng giá trị của đầu vào phải bằng hoặc lớn hơn tổng giá trị của đầu ra.
Mỗi UTxO đầu vào chỉ có thể được sử dụng một lần duy nhất, nghĩa là nó chỉ có thể được sử dụng làm đầu vào cho một giao dịch. Sau khi UTxO được sử dụng làm đầu vào, tổng số tiền của UTxO đó sẽ được sử dụng toàn bộ một lần. Nhiều UTxO mới hơn thường sẽ được tạo ra và đó sẽ là đầu ra của giao dịch> Những đầu ra này có thể được sử dụng làm đầu vào cho giao dịch trong tương lai.
Lưu ý rằng đầu vào giao dịch là số lượng ADA lớn hơn số tiền Alice muốn gửi cho Bob (bao gồm cả phí). Điều này phù hợp với cách hoạt động của mô hình UTxO. Thông qua giao dịch, Alice chi 50,17 ADA, do đó, thông qua UTxO mới được tạo, 3,73 ADA sẽ được trả lại vào tài khoản của cô ấy.
Giao dịch sẽ có 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ể thấy giao dịch được mô tả. Cả hai UTxO đầu vào sẽ được sử dụng hoàn toàn và UTxO đầu ra sẽ được tạo từ chúng. Giá trị của UTxO đầu ra sẽ thấp hơn phí giao dịch. Bob nhận được chính xác 50 ADA.
Phí này không phải là UTxO mới mà là sự chênh lệch giữa tổng giá trị đầu vào và tổng giá trị đầu ra. Phí được trả cho mạng để xử lý và xác thực giao dịch. Phí giao dịch được ghi chép giống như một mô hình dựa trên tài khoản, vì nó được khấu trừ từ số dư của người gửi và được thêm vào số dư của mạng mà không tạo ra đầu ra mới. Tuy nhiên, không giống như mô hình dựa trên tài khoản, phí không được chỉ định rõ ràng trong giao dịch mà được mạng tính toán ngầm.
UTxO hoạt động giống như khi thanh toán bằng tiền giấy tại máy tính tiền trong cửa hàng. Nếu bạn phải trả 36 đô la, bạn có thể thanh toán bằng tờ 50 đô la và nhân viên thu ngân sẽ trả lại cho bạn 14 đô la. Hoặc bạn có thể sử dụng hai tờ 20 đô la và nhân viên thu ngân sẽ trả lại cho bạn 4 đô la. Nếu bạn thanh toán chính xác số hàng hóa trị giá 20 đô la, bạn có thể thanh toán bằng tờ 20 đô la và nhân viên thu ngân sẽ không trả lại cho bạn bất cứ thứ gì. Tất nhiên, với Cardano, bạn luôn phải trả phí giao dịch.
Ai đó có thể thấy hữu ích khi so sánh UTxO với các phiếu ghi số được dán trên bảng đen. Chi tiêu có nghĩa là gạch bỏ số trên phiếu hiện có và dán số mới vào phiếu mới sao cho giá trị của số gạch bỏ và số trên phiếu mới bằng nhau.
Hãy để tôi chuyển tạm sang chủ đề ngắn gọn khác.
Thật tốt khi hiểu mô hình UTxO trong bối cảnh giá trị truyền mạng 24 giờ được báo cáo.
Trong ví dụ của chúng tôi với Alice và Bob, chỉ có 50 ADA được chuyển giữa 2 người tham gia. Đây là số tiền cần phải báo cáo. Có 3.73 ADA đã được trả lại vào tài khoản của Alice và không được đưa vào báo cáo. Các nhà phân tích sẽ dễ dàng tìm ra UTxO đầu ra nào đã chuyển đến địa chỉ mới (bên ngoài) và địa chỉ nào sẽ quay trở lại ví của người gửi. Chìa khóa stake thường được sử dụng để phân biệt.
Không thể đưa UTxO đầu vào làm báo cáo vì ví của Alice có thể đã sử dụng UTxO đầu vào có giá trị 1000 ADA (nếu nó không phù hợp hơn trong ví), điều này sẽ làm sai lệch báo cáo rất nhiều. Tuy nhiên, điều này cũng có thể xảy ra nếu các nhà phân tích không nhận dạng chính xác UTxO đã chuyển đến địa chỉ mới (bên ngoài) và UTxO đã trả lại một phần tiền vào ví của người gửi.
UTxO là gì?
Trong phần giải thích ở trên, chúng tôi đã thực hiện một số đơn giản hóa để dễ hiểu hơn. Hãy sửa lại một chút.
UTxO là viết tắt của Unspent Transaction Output (Đầu ra giao dịch chưa chi tiêu). UTxO là đầu ra của giao dịch trước đó, giao dịch này có thể được chi tiêu trong tương lai.
UTxO đầu vào có thể được mô tả đơn giản như một cấu trúc bao gồm mã định danh và giá trị. Mã định danh được gọi là điểm xuất phát. Điểm xuất phát hoạt động như một con trỏ tới vị trí của UTxO trong blockchain. Nói cách khác, nó là tham chiếu đến đầu ra giao dịch trước đó. Địa chỉ của chủ sở hữu hiện tại của số tiền được tìm thấy trong giao dịch trước đó. Đầu vào UTxO đề cập đến giao dịch đã tạo ra UTxO thuộc sở hữu của người chi tiêu hiện tại.
Điểm xuất phát (Outpoint) của UTxO đầu vào bao gồm ID giao dịch (Transaction ID) và chỉ mục đầu ra (Output Index) của giao dịch đã tạo UTxO. Chỉ số đầu ra đề cập đến vị trí của đầu ra trong giao dịch. Giá trị (Funds) là số lượng coin hoặc token mà UTxO nắm giữ.
Bạn có thể thấy cấu trúc UTxO đầu vào trong hình ảnh bên dưới.
UTxO đầu ra trong giao dịch trước đó cũng chứa địa chỉ người nhận, là địa chỉ của chủ sở hữu tiền hiện tại. Bạn sẽ làm một ví dụ dưới đây.
Khi UTxO trở thành đầu vào của một giao dịch mới, giao dịch mới sẽ xác định địa chỉ đầu ra (hoặc các địa chỉ) sẽ nhận tiền của đầu vào. Địa chỉ đầu ra có thể là địa chỉ khóa chung (yêu cầu chữ ký để mở khóa) hoặc địa chỉ tập lệnh (yêu cầu Redeemer để mở khóa). Đầu ra UTxO cũng chứa địa chỉ người nhận.
Đó là giao dịch liên kết điểm đến (outpoint) với địa chỉ người nhận (receipient address). Liên kết này không cố định vì địa chỉ người nhận có thể trở thành địa chỉ đích cho một giao dịch khác trong tương lai. Nói cách khác, UTxO liên tục được tiêu thụ và tạo ra bởi các giao dịch trên mạng. Khi một giao dịch mới được tạo, mỗi địa chỉ đầu vào phải được cung cấp một nhân chứng (witness).
Điểm xuất phát (outpoint) là liên kết giữa địa chỉ chủ sở hữu và UTxO, vì nó xác định đầu ra của giao dịch nào mà UTxO thuộc về.
Giao dịch Cardano là một cấu trúc bao gồm bốn thành phần chính: đầu vào, đầu ra, phí và nhân chứng (input, output, fee, witness).
- Đầu vào là UTxO được sử dụng bởi giao dịch.
- Đầu ra là UTxO được tạo bởi giao dịch.
- Phí là số ADA được trả cho mạng để xử lý và xác thực giao dịch.
- Nhân chứng là bằng chứng cho thấy người dùng có quyền chi tiêu đầu vào.
Mỗi đầu ra chứa một thành phần phụ quan trọng, đó là địa chỉ người nhận.
Trong hình ảnh bên dưới, bạn có thể thấy cấu trúc của UTxO đầu ra trong giao dịch, tạo ra UTxO đầu ra (UTxO mới). Lưu ý rằng nó chứa địa chỉ của người nhận.
Trong hình ảnh sau đây, bạn có thể thấy lại giao dịch của Alice. Lưu ý rằng các địa chỉ mà ADA được chi tiêu không phải là một phần của giao dịch. Giao dịch chỉ tham chiếu địa chỉ thông qua các outpoint (mũi tên màu xanh lá cây).
Alice phải chứng minh rằng địa chỉ đó là của cô ấy và cô ấy có quyền tiêu ADA. Có một Nhân chứng (mũi tên đỏ) trong giao dịch cho mỗi địa chỉ bằng tiền.
Có 2 đầu ra trong giao dịch có chỉ mục 0 và 1. Mỗi chỉ mục chứa một UTxO, cũng bao gồm địa chỉ người nhận. Đầu ra có chỉ số 0 chứa UTxO với 50 ADA và địa chỉ người nhận thuộc về Bob. Đầu ra có chỉ số 1 chứa UTxO với 3,73 ADA và địa chỉ người nhận thuộc về Alice. Mũi tên màu xanh biểu thị vị trí trong Blockchain nơi đặt UTxO, nơi sẽ tìm thấy địa chỉ của chủ sở hữu tiền (UTxO mới) khi một giao dịch mới được tạo để chi tiêu chúng.
Khi mọi người trình bầy về UTxO, nó thường ở dạng đơn giản hóa. UTxO chỉ được coi là giá trị được giữ tại địa chỉ của chủ sở hữu và có thể được sử dụng. Chi tiêu có nghĩa là chuyển giá trị từ địa chỉ người gửi sang địa chỉ người nhận. Về cơ bản điều này mô tả những gì đang thực sự xảy ra.
Điều quan trọng là phải nhận ra rằng thông qua các giao dịch, các UTxO đầu vào sẽ bị hủy và các UTxO mới được tạo ra. Các UTxO mới được tạo có thể trở thành đầu vào (UTxO đầu vào) của các giao dịch mới. Lịch sử giao dịch vẫn được lưu trữ trong Blockchain. Mỗi UTxO chỉ có thể được sử dụng một lần. Và, toàn bộ giá trị của UTxO đã được sử dụng. Các node duy trì một tập hợp tất cả các UTxO chưa được sử dụng (đang hoạt động) có thể được sử dụng. Với mỗi khối mới được thêm vào blockchain, tập hợp UTxO sẽ thay đổi.
Trong hình ảnh sau đây, bạn có thể thấy UTxO biến mất như thế nào và UTxO mới được tạo ra như thế nào. Tập hoạt động bao gồm UTxO từ các giao dịch 5, 6, 7, 8 và 9. UTxO từ các giao dịch 1, 2, 3 và 4 sẽ được sử dụng vĩnh viễn (bị hủy).
Để chi tiêu UTxO trong giao dịch 9, Blockchain cần phải xác minh chữ ký của chủ sở hữu số tiền. UTxO đầu vào trong giao dịch 9 đề cập đến địa chỉ của người nhận (là địa chỉ của chủ sở hữu hiện tại) trong giao dịch 4. Chữ ký (Nhân chứng) trong giao dịch 9 được xác minh dựa trên địa chỉ trong UTxO đầu ra từ giao dịch 4.
Nếu giao dịch vượt qua quá trình xác thực và được đưa vào blockchain thông qua một khối mới, chủ sở hữu của UTxO đầu ra trong giao dịch 9 có thể chi tiền trong tương lai.
Trong quá trình phá hủy và tạo ra UTxO, không được tự ý tạo ra các quỹ mới. Trong ví dụ của chúng tôi, giá trị trong UTxO đầu vào từ giao dịch 1 bằng tổng của tất cả các giá trị từ UTxO thuộc về nhóm hoạt động (tất cả UTxO có thể được chi tiêu).
Nếu chúng ta bỏ qua phí thì đúng là giá trị của đầu vào trong giao dịch phải tương ứng với giá trị của đầu ra.
Trong hình ảnh bên dưới, giá trị của UTxO đầu vào là 100 xu trong giao dịch 1. Giá trị này bằng giá trị của tất cả đầu ra trong tập hợp UTxO đang hoạt động. 100 = 8 + 2 + 15 + 5 + 18 + 12 + 3 + 7 + 23 + 7.
Lời kết
Mô hình UTxO có thể phức tạp hơn so với mô hình dựa trên tài khoản. Điều này cũng đúng cho các lập trình viên ứng dụng, những người có thể cảm thấy khó khăn hơn khi làm việc với mô hình này vì họ không làm việc với số dư (như mô hình Accounting) mà làm việc với UTxO. Mặc dù có độ phức tạp cao hơn nhưng mô hình UTxO có một số ưu điểm, chủ yếu trong bối cảnh sử dụng trong các mạng phân tán. Chúng ta sẽ nói nhiều hơn về điều đó trong bài viết tiếp theo.
Nguồn bài viết tại đây
Đọc thêm các bài viết liên quan tại thẻ Tags bên dưới