🇻🇳 EUTXO & TÍNH TẤT ĐỊNH TRONG XÁC THỰC GIAO DỊCH CARDANO

MÔ HÌNH EUTXO CỦA CARDANO CHO PHÉP THỰC THI TẬP LỆNH PLUTUS MỘT CÁCH TẤT ĐỊNH

Chú thích thêm: deterministic còn gọi là tính tất định hay thuyết xác định . Có nghĩa là khi thực thi phải biết rõ nó là cái gì, chạy như thế nào, kết quả nhận được sau khi chạy là gì. Không có bất kỳ sự mơ hồ trong việc thực thi. Trong bài dịch sẽ có sử dụng cả 2 từ trên để mô tả cho deterministic.
Hardfork Alonzo mang lại khả năng chạy hợp đồng thông minh của Plutus core cho Cardano, sổ cái sẽ phát triển để đáp ứng nhu cầu ngày càng tăng về việc triển khai các giải pháp phi tập trung. Thiết kế sổ cái Cardano tập trung vào sự đảm bảo, bảo mật cao và tính chính thức đã được chứng minh. Để phù hợp với chiến lược này, điều quan trọng là phải đảm bảo rằng quá trình xử lý giao dịch là deterministic (xác định), có nghĩa là người dùng có thể dự đoán tác động và kết quả của nó trước khi thực hiện thực tế.
Khả năng đảm bảo phí giao dịch và cách thức giao dịch được chạy trên sổ cái trước khi được tiến hành, thậm chí còn trở nên nổi bật hơn với sự ra đời của hợp đồng thông minh. Các blockchain dựa trên đầu ra giao dịch chưa được chi tiêu (UTXO), như Cardano, cung cấp các khả năng như vậy. Các chuỗi khối dựa trên mô hình kế toán, như Ethereum, là không xác định, có nghĩa là chúng không thể đảm bảo khả năng dự đoán về ảnh hưởng của giao dịch trên chuỗi. Điều này dẫn đến rủi ro mất tiền, phí cao không thể đoán trước và cơ hội cho các hành vi gian lận.

Trong bài đăng trên blog này, chúng tôi xem xét kỹ hơn các lợi ích của thiết kế tính tất định của Cardano cho phép đánh giá giao dịch an toàn và đánh giá tập lệnh trước khi thực hiện. Trong bài đăng trên blog sau, vào cuối tuần này, chúng ta sẽ thảo luận về hai giai đoạn xác thực giao dịch trên Cardano.

THUYẾT TẤT ĐỊNH GIAO DỊCH LÀ GÌ VÀ TẠI SAO NÓ LẠI QUAN TRỌNG?

Tính tất định, trong bối cảnh giao dịch và xử lý tập lệnh, là đồng nghĩa với khả năng dự đoán. Điều này có nghĩa là người dùng có thể dự đoán cục bộ (ngoài chuỗi) giao dịch của họ sẽ ảnh hưởng như thế nào đến trạng thái trên chuỗi của sổ cái mà không phải chịu:
– Lỗi không mong muốn từ kết quả của script validation (trình xác thực)
– Mức phí thay đổi không mong đợi.
– Thay đổi không mong đợi do cập nhật từ sổ cái hoặc trình xác thực.
Một giao dịch trong hệ thống tất định vẫn có thể bị từ chối, ngay cả khi được xây dựng chính xác. Bị từ chối có nghĩa là giao dịch hoàn toàn không thể được áp dụng cho sổ cái, do đó không ảnh hưởng đến trạng thái của nó, vì vậy không có khoản phí nào được thanh toán. Lý do điều này sẽ xảy ra là vì những thay của đổi sổ cái do các giao dịch khác được xử lý gây ra giữa thời điểm giao dịch ban đầu được tạo và thời điểm nó được xử lý. Điều này có thể xảy ra ngay cả với các giao dịch đơn giản. Ví dụ: một giao dịch khác có thể sử dụng UTXO mà một người dùng cũng đang dự định chi tiêu. Thuyết tất đị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.

GIẢI QUYẾT VẤN ĐỀ VỀ THUYẾT KHÔNG XÁC ĐỊNH

Thuyết không xác định có nghĩa là chúng ta không thể dự đoán những ảnh hưởng mà giao dịch sẽ có trên sổ cái trước khi thực hiện. Khi thiết kế sổ cái, cũng như trình thông dịch hợp đồng thông minh, điều quan trọng là phải thấy trước các điều kiện mà tính không xác định có thể xảy ra và đưa ra quyết định thiết kế để tránh chúng. Một trong những mối nguy hiểm chính trong trường hợp này 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ể bị thay đổi hoặc thay thế. Khi các thay đổi mà một giao dịch hoặc một hợp đồng thông minh thực hiện đối với sổ cái phụ thuộc vào trạng thái của nó tại thời điểm xử lý, thay vì chỉ nội dung của giao dịch, tính không xác định có thể trở thành một vấn đề.

Ethereum rất dễ bị ảnh hưởng bởi vấn đề này. Ví dụ: phí gas hoặc tỷ giá phi tập trung (DEX) có thể dao động giữa thời gian người dùng gửi giao dịch và thời gian nó được xử lý. Điều này dẫn đến phí gas bất ngờ, hoặc thay đổi giá của tài sản được mua. Hoặc một tập lệnh có thể bị lỗi, dẫn đến chi phí thực thi cao (hàng trăm đô la) và không có tác dụng nào khác. Điều này có thể xảy ra nếu các khoản tiền có sẵn để trang trải phí gas bị hết giữa quá trình thực thi. Thiết kế sổ cái xác định loại bỏ những khả năng này.

Các nguồn không xác định có thể có khác bao gồm việc cho phép các tập lệnh nhìn thấy:
– Dữ liệu trong khối chứa giao dịch, nhưng không được có trong bất kỳ giao dịch nào, ví dụ: tính ngẫu nhiên của hệ thống, tiêu đề khối hoặc số slot hiện tại.
– Dữ liệu bị kẻ gian thay đổi hoặc thay thế, điều này có thể thay đổi kết quả xác thực tập lệnh, trong khi bản thân giao dịch vẫn có thể xử lý được.

Trong hầu hết các hệ thống, có những cách để giảm thiểu những vấn đề này bằng các phương pháp viết kịch bản được cải tiến hoặc các giải pháp lớp 2. Cardano được thiết kế để đảm bảo kết quả có thể dự đoán được cho tất cả các tập lệnh và giao dịch.

MÔ HÌNH UTXO CƠ BẢN MANG LẠI LỢI ÍCH NHƯ THẾ NÀO VỀ MẶT XÁC ĐỊNH

Sổ cái Cardano được xây dựng trên mô hình chi tiêu là UTXO, có nghĩa là tài sản được lưu trữ trên sổ cái dưới dạng kết quả đầu ra chưa chi tiêu, thay vì trong tài khoản. Mỗi đầu ra này chỉ định số lượng tài sản được lưu trữ trong đó, cùng với địa chỉ của nó. Đầu ra chưa được chi tiêu là không thay đổi, vì vậy một giao dịch có thể tiêu thụ toàn bộ đầu ra, nhưng nó không thể thay đổi nó.

Để gửi tài sản đi, một giao dịch tiêu thụ một hoặc nhiều đầu ra và tạo ra những đầu ra mới, về tổng thể, chứa cùng số lượng tài sản với những đầu ra đã tiêu thụ. Số lượng này – và địa chỉ UTXO của chúng – được chỉ định trong kết quả đầu ra của giao dịch. Cách duy nhất mà một giao dịch có thể ảnh hưởng đến một giao dịch khác được áp dụng cho sổ cái là chi tiêu cùng một UTXO mà giao dịch sau đó cố gắng chi tiêu, do đó khiến node từ chối nó. Đây là đặc điểm chính mà mô hình UTXO dựa vào để duy trì thuyết xác định.

Sổ cái UTXO có cả lợi ích và nhược điểm so với mô hình kế toán/accounting. Ví dụ, sau này sẽ gặp ít trường hợp giao dịch chặn bởi 1 giao dịch khác hơn. Không giống như UTXO, accounting là dữ liệu sổ cái có thể thay đổi. Vì vậy, một giao dịch có thể thấy, ví dụ, một số lượng tài sản khác nhau trong một tài khoản, tùy thuộc vào việc nó được xử lý trước hay sau một giao dịch khác cập nhật cùng tài khoản đó. Trường hợp này có thể không khiến giao dịch bị từ chối, nhưng nó có thể dẫn đến những thay đổi khác – và không thể đoán trước – đối với sổ cái.
Chi tiêu UTXO chỉ là một ví dụ về action (hành động) mà một giao dịch có thể thực hiện. Tiếp theo, chúng tôi giải thích các hành động giao dịch là gì và cách chúng có thể được xác thực. Tập hợp những thay đổi quan trọng nhất được giới thiệu trong Alonzo là những thay đổi đối với quá trình xác thực.

HÀNH ĐỘNG XÁC THỰC VỚI SIGNATURES (CHỮ KÝ) VÀ SCRIPT (TẬP LỆNH)

Một khía cạnh quan trọng của việc xử lý một giao dịch là xác thực các hành động mà nó đang thực hiện. Một giao dịch đang thực hiện một hành động khi nó chứa dữ liệu trong trường cụ thể cho hành động đó. Ví dụ: một giao dịch đang sử dụng UTXO U khi nó chứa tham chiếu đến U trong trường đầu vào của nó và bản thân nó đang tạo token X khi trường đúc của nó chứa X.

Khi node xử lý một giao dịch, nó sẽ xác minh xem liệu nó có thể thực hiện hành động mà nó dự định hay không. Đối với điều này, tác giả của giao dịch phải cung cấp các phần dữ liệu có liên quan, ví dụ: tập lệnh, redeemer hoặc chữ ký. Một ví dụ phổ biến về hành động yêu cầu xác thực là sử dụng UTXO bị khóa bằng khóa công khai. Giao dịch phải cung cấp khóa cá nhân tương ứng để thực hiện hành động này.

Cardano sử dụng các tập lệnh để xác thực các hành động. Các tập lệnh này, là các đoạn mã, triển khai các hàm thuần túy với đầu ra Đúng hoặc Sai. Script validation (quá trình xác thực) là quá trình gọi trình thông dịch tập lệnh chạy một tập lệnh nhất định trên các đối số thích hợp.

Trình xác thực có thể được thực hiện các hành động sau:
– Sử dụng UTXO bị khóa bởi địa chỉ tập lệnh (script address): tập lệnh được chạy là tập lệnh có hàm băm tạo thành địa chỉ.
– Minting token (đúc token): tập lệnh được chạy là tập lệnh có hàm băm tạo thành ID policy (nội quy) của token được đúc.
– Reward withdraw (rút tiền thưởng): tập lệnh được chạy là tập lệnh có hàm băm tạo thành staking address (địa chỉ staking).
– Áp dụng cho chứng chỉ: tập lệnh đang chạy là tập lệnh có hàm băm tạo thành certificate author’s credential (chứng nhận sở hữu)

Bên cạnh việc cho node biết tập lệnh nào sẽ chạy, tất cả các hành động giao dịch chỉ ra cách tập hợp các đối số được truyền cho tập lệnh đó.

Sổ cái đa tài sản của Cardano (Mary) hỗ trợ các ngôn ngữ viết mã multisig (đa chữ ký) và timelock (một kiểu hợp đồng cho phép thực hiện gửi các tài sản tại một thời điểm xác định trong tương lai hoặc khi đạt tới block nào đó) đơn giản. Những điều này cho phép người dùng chỉ định chữ ký cần thiết để thực hiện một hành động (chẳng hạn như sử dụng UTXO hoặc đúc token không thể thay thế (NFT)) và khoảng thời gian mà hành động đó có thể được thực hiện. Một tập lệnh timelock không bao giờ có thể thấy số vị trí thực tế của nó trong giao dịch. Timelock chỉ có thể xem khoảng thời gian hiệu lực của giao dịch đang thực hiện. Việc cho phép tập lệnh timelock xem số vị trí hiện tại (tức là dữ liệu đến từ khối, chứ không phải từ tác giả) sẽ phá vỡ thuyết xác định. Điều này được đảm bảo bởi thực tế là người dùng không thể biết chính xác vị trí mà giao dịch được xử lý và do đó họ không thể dự đoán tập lệnh sẽ hoạt động như thế nào.

Các tập lệnh của Mary, không giống như các hợp đồng của Plutus ở Alonzo, rất hạn chế về những gì chúng có thể diễn đạt. Hard fork Alonzo mở ra một kỷ nguyên mới của các hợp đồng mạnh mẽ, rõ ràng không làm ảnh hưởng đến tài sản sổ cái xác định.

TẬP LỆNH PLUTUS

Alonzo giới thiệu một cách tiếp cận mới để xác thực giao dịch trên Cardano với việc triển khai các tập lệnh Plutus. Mô hình đầu ra giao dịch chưa được chi tiêu mở rộng (EUTXO), được triển khai như một phần của Alonzo, cung cấp cơ sở hạ tầng sổ cái để hỗ trợ các hợp đồng Plutus. Dưới đây, chúng tôi cung cấp tổng quan cấp cao về những thay đổi trong sổ cái và giao dịch. Để biết thêm chi tiết về cách làm việc với sổ cái và tập lệnh Plutus, hãy xem chương trình Plutus Pioneer!

Alonzo thay đổi dữ liệu trên sổ cái như sau:

  1. Tập lệnh Plutus có thể khóa các UTXO.
  2. Một thành phần mới, được thêm vào nội dung của các phần đầu ra của UTXO, cho phép chức năng giống như trạng thái tập lệnh. Ngoài tài sản và địa chỉ, một UTXO bị khóa bởi tập lệnh Plutus cũng chứa một datum. Datum là một phần dữ liệu có thể được coi như một diễn giải của trạng thái script.
  3. Có một số tham số giao thức mới được sử dụng để áp đặt các yêu cầu xác thực bổ sung cho các giao dịch. Chúng bao gồm các giới hạn trên về tài nguyên tính toán mà các tập lệnh có thể sử dụng.

Để hỗ trợ tập lệnh Plutus, các giao dịch đã được nâng cấp như sau:

  1. Đối với mỗi hành động của nó, giao dịch sẽ mang một đối số do người dùng chỉ định, được gọi là redeemer. Tùy thuộc vào tập lệnh, redeemer có thể phục vụ một mục đích khác nhau. Ví dụ: nó có thể hoạt động như giá thầu mà người dùng đặt trong một phiên đấu giá hoặc dự đoán của người dùng trong trò chơi dự đoán, và nhiều chức năng khác.
  2. Giao dịch chỉ định ngân sách thực thi tính toán cho mỗi tập lệnh.
  3. Để đảm bảo rằng một giao dịch có thể trả phí giao dịch, Alonzo giới thiệu các phần dữ liệu bổ sung mà chúng ta sẽ thảo luận trong một bài đăng blog tiếp theo.
  4. Các giao dịch chứa integrity hash (hàm băm toàn vẹn), cần thiết để đảm bảo rằng nó không bị xâm phạm, lỗi thời, v.v.

Ngoài ra còn có một số thay đổi đối với các chi tiết cụ thể của xác thực giao dịch Alonzo so với Mary. Đối với mỗi hành động, nút tập hợp các đối số tập lệnh mà trình thông dịch Plutus mong đợi, bao gồm:

  • datum
  • redeemer
  • execution budget – ngân sách thực hiện
  • a summary of the transaction – bản tóm tắt của giao dịch.

Node thực hiện kiểm tra mới, dành riêng cho Alonzo để đảm bảo giao dịch được xây dựng chính xác. Ví dụ: nó không được vượt quá ngân sách tài nguyên thực thi tối đa. Nó cũng gọi trình thông dịch tập lệnh Plutus để chạy các tập lệnh.

ĐỐI TƯỢNG DATUM SO VỚI TRẠNG THÁI TẬP LỆNH

Giống như các tài khoản có thể thay đổi, trạng thái tập lệnh có thể thay đổi được xếp chung vào danh mục “dữ liệu sổ cái có thể thay đổi” của các nguồn không xác định. Chúng tôi đã thấy rằng mô hình UTXO tránh được vấn đề không xác định được tài khoản không xác định. Nó cũng có thể giúp chúng ta hình dung lại khái niệm trạng thái tập lệnh theo cách duy trì thuyết xác định. Nếu UTXO bị khóa bởi tập lệnh Plutus, thì mã tập lệnh của UTXO đó được liên kết với địa chỉ của nó. Trạng thái tương tự của tập lệnh này là datum được lưu trữ trong UTXO đó. Khi một giao dịch chi tiêu UTXO đó, nó sẽ bị xóa khỏi sổ cái, bao gồm cả datum. Tuy nhiên, nội dung của tập lệnh Plutus có thể bắt buộc rằng giao dịch mang nó cũng phải tạo ra một UTXO chứa một datum cụ thể có thể được xem như cập nhật trạng thái tập lệnh.

Ngân sách thực thi tập lệnh

Mô hình gas không xác định có thể tính phí người dùng lớn không thể đoán trước được. Trong tập lệnh Cardano, nguồn không xác định này được giải quyết bằng cách yêu cầu bản thân ngân sách tài nguyên, cũng như phí cần thiết để trang trải ngân sách này, phải được bao gồm trong giao dịch. Trong Alonzo, người dùng có thể dự đoán cục bộ cả hai khi xây dựng giao dịch. Việc thực thi tập lệnh nhất thiết phải trả về True hoặc False và sẽ không lặp lại vô thời hạn. Lý do cho điều này là mọi hoạt động mà một tập lệnh thực hiện đều sử dụng một lượng tài nguyên khác 0, được theo dõi bởi trình thông dịch. Nếu ngân sách được chỉ định bởi giao dịch bị vượt quá, quá trình thực thi tập lệnh sẽ kết thúc và trả về Sai.

XÁC THỰC GIAO DỊCH Ở ALONZO

Giải quyết các nguồn không xác định có thể xảy ra, các điểm chính sau đây làm cho kết quả của xác thực tập lệnh và giao dịch có thể dự đoán được:

– Trình thông dịch tập lệnh sẽ luôn kết thúc và trả về cùng một kết quả xác thực khi được áp dụng cho các đối số giống nhau.
– Một giao dịch cần thiết phải sửa tất cả các đối số sẽ được chuyển đến trình thông dịch tập lệnh trong quá trình xác thực.
– Một giao dịch chỉ định tất cả các hành động mà nó đang thực hiện yêu cầu xác thực tập lệnh
– Chữ ký bắt buộc trên một giao dịch đảm bảo rằng nó không thể bị thay đổi bởi kẻ gian bằng cách làm cho các tập lệnh bị lỗi.
– Áp dụng một giao dịch trong mô hình sổ cái EUTXO là xác định.

Điểm cuối cùng là sự kế thừa phần lớn từ mô hình UTXO, phần lớn các bản cập nhật giao thức sổ cái Alonzo vẫn giữ nguyên và nhất quán với các bản cập nhật trong các kỷ nguyên trước (bao gồm mô hình ủy thác, v.v.). Sau khi nâng cấp Alonzo, việc xác thực tập lệnh không thành công hoặc thành công sẽ ảnh hưởng đến cách xử lý giao dịch (thêm về điều này trong phần 2!). Tuy nhiên, kết quả Đúng hay Sai, cũng như những thay đổi trên sổ cái liên quan đến một trong hai kết quả, đều có thể dự đoán được cho một giao dịch nhất định.

Hành vi xác định của tập lệnh Cardano và xác thực giao dịch không phải là kết quả tự nhiên của việc sử dụng mô hình EUTXO. Để đảm bảo thuộc tính này, nhóm IOG đã phải theo dõi cẩn thận nguồn của mọi phần dữ liệu mà tập lệnh được phép xem.

Thuộc tính đánh giá tính xác định được chỉ định chính thức trong Alonzo specification (đặc tả/mô tả kỹ thuật Alonzo) và nhóm IOG cũng đã phác thảo bằng chứng rằng trình thông dịch chỉ nhận được những đối số không phá vỡ thuộc tính.
Trong bài đăng blog thứ hai của chúng tôi, chúng tôi sẽ xem xét kỹ hơn quy trình xác thực 2 giai đoạn của các giao dịch Cardano. Vì vậy, hãy chú ý theo dõi phần hai vào cuối tuần này.

Dịch & biên soạn: @chiennguyen
Nguồn: No-surprises transaction validation on Cardano - IOHK Blog
Alonzo specification: https://hydra.iohk.io/build/7172824/download/1/alonzo-changes.pdf
https://cardano.com.vn/eutxo-tinh-tat-dinh-giao-dich-tren-cardano.html

1 Like