🇻🇳 XÁC THỰC 2 GIAI ĐOẠN TRONG KỶ NGUYÊN ALONZO: PART 2

XÁC THỰC GIAO DỊCH CỦA ALONZO ĐƯỢC THỰC HIỆN TRONG HAI GIAI ĐOẠN ĐỂ ĐẢM BẢO TRẢ PHÍ CÔNG BẰNG CHO CÔNG VIỆC XÁC THỰC

Trong bài đăng trên blog trước của chúng tôi, chúng tôi đã thảo luận về bản chất xác định của giao dịch và xác thực tập lệnh trên sổ cái Alonzo, điều này đảm bảo rằng kết quả của ứng dụng giao dịch trên chuỗi và script validation (trình xác thực) có thể được dự đoán chính xác ở phần off-chain, trước khi giao dịch được gửi đi.

Dựa trên những đảm bảo được tạo nên bởi thiết kế xác định của sổ cái Alonzo, chúng tôi đã triển khai một mô hình xác thực hai giai đoạn cụ thể. Nó được thiết kế để giảm thiểu tài nguyên mà các node sử dụng để xác thực các giao dịch mạng đồng thời loại bỏ các chi phí không mong muốn cho người dùng. Trong bài đăng trên blog này, chúng tôi đi sâu hơn vào cách hoạt động của xác thực hai giai đoạn.

Trong kỷ nguyên Shelley, Allegra và Mary, xác thực giao dịch là một quy trình một bước. Ảnh hưởng của một giao dịch hợp lệ trên sổ cái hoàn toàn có thể dự đoán được trước khi nó được thực thi. Nếu một giao dịch hợp lệ, nó sẽ được đưa vào một khối và được thêm vào sổ cái. Nếu không, một node sẽ từ chối nó sau khi thử xác thực không thành công và giao dịch sẽ không được ghi vào một khối. Tuy nhiên, các node xác thực giao dịch đã sử dụng thời gian và tài nguyên, bất kể giao dịch có kết thúc trong một khối hay không.

Alonzo giới thiệu các tập lệnh Plutus, có thể yêu cầu nhiều tài nguyên hơn đáng kể để xác thực chúng so với các tập lệnh đơn giản trong các kỷ nguyên trước. Để giải quyết vấn đề các node sử dụng tài nguyên trên các tập lệnh xác thực của các giao dịch bị từ chối, Alonzo giới thiệu phương pháp xác thực hai giai đoạn. Chiến lược này duy trì một kết quả có thể dự đoán được của việc áp dụng các giao dịch vào sổ cái và cũng đảm bảo sự đền bù/trả phí công bằng cho các node đối với công việc và việc sử dụng tài nguyên của chúng.

XÁC THỰC GIAO DỊCH HAI GIAI ĐOẠN

Xác thực giao dịch trên Cardano được chia thành hai giai đoạn. Lý do chính để giới thiệu xác thực hai giai đoạn là để hạn chế số lượng công việc xác nhận không được trả phí của các node. Mỗi giai đoạn phục vụ một mục đích trong việc đạt được mục tiêu này. Nói một cách đại khái, giai đoạn đầu tiên kiểm tra xem giao dịch có được xây dựng chính xác hay không và có thể trả phí xử lý của nó hay không. Giai đoạn thứ hai chạy các tập lệnh có trong giao dịch. Nếu giao dịch hợp lệ giai đoạn 1, các tập lệnh giai đoạn 2 sẽ chạy. Nếu giai đoạn 1 không thành công, không có tập lệnh nào chạy và giao dịch sẽ bị hủy ngay lập tức.

Do đó, các node dự kiến ​​sẽ thêm các giao dịch có thể xử lý vào một khối ngay cả khi các giao dịch không hợp lệ ở giai đoạn 2. Điều này có nghĩa là:

  • một số lượng nhỏ công việc không được đền bù/trả phí được thực hiện bởi một node để phát hiện ra rằng giao dịch không thể xử lý được, nhưng không có xác thực giai đoạn 2 tốn tiền nào được thực hiện hoặc
  • giao dịch có thể xử lý được. Sau đó, node có thể thực hiện xác thực giai đoạn 2 của các tập lệnh, gắn thẻ giao dịch tương ứng là giai đoạn 2 hợp lệ hoặc giai đoạn 2 không hợp lệ và thêm nó vào một khối. Trong cả hai trường hợp, node sau đó sẽ được trả phí cho cả hai giai đoạn xác thực thông qua phí hoặc tài sản thế chấp thu được từ giao dịch này.

Kỳ vọng là rất hiếm khi xảy ra lỗi giai đoạn 2, bởi vì người dùng gửi một giao dịch với các tập lệnh không thành công sẽ mất ada trong khi không đạt được gì. Điều này có thể dự đoán được tại local/off-chain (thường là ngay trên ví người dùng) và do đó là một sự kiện có thể ngăn ngừa được. Giai đoạn này là một biện pháp bảo vệ bắt buộc để đảm bảo bù đắp cho quá trình tính toán có khả năng sử dụng nhiều tài nguyên của trình xác thực.

Chúng ta hãy xem xét kỹ hơn các chi tiết cụ thể của từng giai đoạn.

Giai đoạn 1

Giai đoạn xác nhận đầu tiên phải đơn giản. Nếu giai đoạn này không thành công, một node sẽ không được trả phí cho công việc mà nó đã thực hiện, vì nó không thể chấp nhận phí xử lý từ các giao dịch không thể xử lý.

Xác thực giai đoạn 1 xác minh hai điều: rằng một giao dịch được xây dựng chính xác và có thể thêm nó vào sổ cái. Xác thực này bao gồm các kiểm tra sau đây và một số kiểm tra bổ sung:

  • nó trả số phí chính xác và cung cấp số tài sản thế chấp chính xác (tức là số tiền được thu trong trường hợp tập lệnh không chạy được, được giải thích bên dưới)
  • nó bao gồm tất cả dữ liệu cần thiết để thực thi các tập lệnh Plutus
  • nó không vượt quá bất kỳ giới hạn nào được đặt trong các tham số giao thức (về kích thước đầu ra, v.v.)
  • đầu vào của nó đề cập đến các UTXO hiện có trên sổ cái
  • ngân sách tính toán đã đưa ra cho giao dịch không vượt quá giới hạn tài nguyên tối đa cho mỗi lần kiểm tra tính toàn vẹn của giao dịch, v.v.

Trước khi thêm một giao dịch sắp có vào mempool (và cuối cùng, vào một khối), một node phải thực hiện tất cả các kiểm tra xác thực giai đoạn 1. Nếu bất kỳ lần kiểm tra nào trong số này không thành công, giao dịch sẽ bị từ chối mà không được đưa vào một khối và không bị tính phí. Trong các kỷ nguyên trước, đây là giai đoạn xác thực duy nhất và Cardano đã xử lý tất cả các lỗi xác thực theo kiểu này.

Các node trung thực, không bị xâm phạm sẽ không cố tình tạo ra các giao dịch không thể xử lý. Các node cũng có thể bỏ các kết nối đến kẻ gian/pool ko trung thực thực hiện các giao dịch không hợp lệ giai đoạn 1.

Giai đoạn 2

Giai đoạn xác thực thứ hai chạy các tập lệnh Plutus, có thể tốn kém hơn về mặt tính toán. Do đó, phí được tính sau khi thành công hoặc thất bại trong giai đoạn thứ hai. Ada thu thập được đi vào khoản phí và do đó bù đắp/trả phí cho các node cho các tài nguyên được sử dụng trong quá trình xác thực.

Việc xác thực giai đoạn 1 thành công không đảm bảo rằng tất cả các hành động của giao dịch đều có thể xử lý được, nó chỉ có thể thu thập tài sản thế chấp. Giai đoạn 2 thực hiện xác thực tập lệnh Plutus và quyết định có thực hiện toàn bộ quá trình xử lý hay chỉ thu thập tài sản thế chấp được đưa ra dựa trên kết quả của việc xác thực:

  • áp dụng đầy đủ cho giao dịch (khả năng duy nhất trước Alonzo) – nếu các tập lệnh Plutus xác thực tất cả các hành động của giao dịch, hoặc
  • thu thập ada tài sản thế chấp và bỏ qua phần còn lại của giao dịch – nếu một trong các tập lệnh Plutus không thành công.

Nhớ lại rằng việc xác thực có kết quả có thể dự đoán cục bộ/ngoài chuỗi và được đảm bảo kết thúc. Người dùng có thể kiểm tra kết quả xác thực tập lệnh ở cục bộ/ngoài chuỗi và sẽ không có bất đồng giữa các node trung thực về cách xử lý một giao dịch nhất định và các tập lệnh trong đó.

Tài sản thế chấp

Nếu các script/tập lệnh không xác thực, chúng tôi vẫn cần bù đắp/trả phí cho các node công việc của chúng. Nhưng chúng ta không thể chỉ lấy tiền từ các đầu vào giao dịch, bởi vì những đầu vào đó có thể đã bị khóa bằng các tập lệnh – những tập lệnh không thành công! Vì vậy, thay vào đó, Alonzo giới thiệu một điều khoản đặc biệt cho việc này. Tài sản thế chấp của một giao dịch là số tiền ada sẽ được thu dưới dạng phí trong trường hợp xác thực tập lệnh giai đoạn 2 không thành công. Trong một giao dịch có thể xử lý, số tiền này ít nhất phải bằng một tỷ lệ phần trăm nhất định của phí giao dịch, được chỉ định trong một tham số giao thức.

Số tiền này được xác định tại thời điểm xây dựng giao dịch. Không phải trực tiếp, mà bằng cách thêm collateral inputs (đầu vào tài sản thế chấp) vào giao dịch. Tổng số dư trong các UTXO tương ứng với các đầu vào được đánh dấu đặc biệt này là số tiền thế chấp của giao dịch. Các UTXO này phải có địa chỉ khóa công khai (thay vì tập lệnh) và không chứa token nào khác ngoài ada.

Các đầu vào tài sản thế chấp chỉ bị xóa khỏi sổ cái UTXO nếu bất kỳ tập lệnh nào không xác thực được ở giai đoạn 2. Nếu tất cả các tập lệnh vượt qua đc, số tiền phí giao dịch được chỉ định sẽ được thu, như trong các kỷ nguyên trước. Đặc biệt, số tiền đến từ các yếu tố đầu vào thông thường, không có tài sản thế chấp, và các yếu tố đầu vào tài sản thế chấp chỉ đơn giản là bị bỏ qua. Và, tin tốt là! Nó được phép sử dụng các đầu vào giống nhau như cả tài sản thế chấp và thông thường, vì chỉ một trong hai tập hợp được xóa khỏi UTXO.

Các chữ ký cần thiết để xác nhận việc chi tiêu các đầu vào tài sản thế chấp cũng đóng một vai trò quan trọng trong việc duy trì tính toàn vẹn của một giao dịch. Họ làm như vậy bằng cách ngăn chặn kẻ gian thay đổi nội dung của nó để nó tiếp tục có thể xử lý được nhưng không xác nhận được giai đoạn 2. Ví dụ về điều này sẽ là một kẻ gian thay thế một redeemer. Cần phải có chữ ký của những người nắm giữ chìa khóa thế chấp để thực hiện thay đổi như vậy. Những người nắm giữ khóa tài sản thế chấp cũng là những người dùng duy nhất có thể mất bất kỳ ada nào nếu quá trình xác thực tập lệnh không thành công.

Vì đánh giá tập lệnh là tính xác định, chủ sở hữu khóa tài sản thế chấp có thể kiểm tra cục bộ/ngoài chuỗi xem giao dịch có vượt qua quy trình xác thực giai đoạn 2 trên chuỗi hay không trước khi họ ký nó (tức là thực hiện giao dịch). Nếu có, thì họ có thể chắc chắn rằng nó cũng sẽ hoạt động ở trên chuỗi và chắc chắn họ sẽ không bị mất tài sản thế chấp của mình. Một người dùng có thiện chí sẽ không bao giờ bị mất tài sản thế chấp của họ. Điều đó cũng có nghĩa là họ có thể tái sử dụng cùng một tài sản thế chấp đầu vào cho nhiều giao dịch và đảm bảo rằng tài sản thế chấp không bị thu hồi.

Bây giờ chúng tôi đã khởi chạy testnet công khai Alonzo, chúng tôi hoan nghênh tất cả người dùng và nhà phát triển đánh giá nó bằng cách xây dựng và thực thi các tập lệnh Plutus. Bạn có thể tìm hiểu thêm thông tin trong kho lưu trữ testnet chuyên dụng của Alonzo hoặc thảo luận về các chủ đề Plutus và Alonzo với cộng đồng đa dạng của chúng tôi.

Dịch & biên soạn: @chiennguyen
Nguồn: No-surprises transaction validation: part 2 - IOHK Blog
https://cardano.com.vn/xac-thuc-giao-dich-2-giai-doan-alonzo.html

1 Like

Thank Mr. @TranCuong to upload for everyone.