Skip to main content

Tệp lệnh tham chiếu (CIP33)

tip

Đề xuất này đã được chấp thuận và được triển khai trong bản nâng cấp Hardfork Vasil cùng với 3 đề xuất khác là CIP 31, 32, 40. Đây là các đề xuất rất quan trọng giúp nâng cao hiệu suất của mạng lưới Cardano trong kỷ nguyên Basho.

NỘI DUNG

Script tham khảo

Tóm tắt

Chúng ta đề xuất cho phép đính kèm tập lệnh (""tập lệnh tham chiếu"") vào đầu ra và cho phép sử dụng tập lệnh tham chiếu để đáp ứng các yêu cầu về tập lệnh trong quá trình xác thực, thay vì yêu cầu giao dịch chi tiêu phải làm như vậy. Điều này sẽ cho phép các giao dịch sử dụng tập lệnh phổ biến nhỏ hơn nhiều.

Mục tiêu

Kích thước tập lệnh đặt ra một vấn đề quan trọng. Điều này thể hiện theo hai cách:

  1. Mỗi khi tập lệnh được sử dụng, giao dịch gây ra việc sử dụng phải cung cấp toàn bộ tập lệnh như một phần của giao dịch. Điều này làm phình to chuỗi và chuyển chi phí phình to đó cho người dùng dưới dạng phí quy mô giao dịch.
  2. Giới hạn kích thước giao dịch là vấn đề đối với người dùng. Ngay cả khi các tập lệnh riêng lẻ không đạt đến giới hạn, một giao dịch sử dụng nhiều tập lệnh có nguy cơ đạt đến giới hạn cao hơn tương ứng.

Chúng ta muốn giảm bớt những vấn đề này.

Ý tưởng chính là sử dụng đầu vào tham chiếu và đầu ra đã sửa đổi mang các tập lệnh thực tế (""tập lệnh tham chiếu"") và cho phép các tập lệnh tham chiếu đó đáp ứng yêu cầu chứng kiến ​​tập lệnh cho một giao dịch. Điều này có nghĩa là giao dịch sử dụng tập lệnh sẽ hoàn toàn không cần cung cấp tập lệnh đó, miễn là nó tham chiếu đến một đầu ra có chứa tập lệnh.

Sự chỉ rõ

Chúng ta mở rộng đầu ra của giao dịch bằng một trường tùy chọn mới, chứa một tập lệnh (""tập lệnh tham chiếu"").

Giá trị UTXO tối thiểu cho đầu ra có trường tập lệnh bổ sung tùy thuộc vào kích thước của tập lệnh, tuân theo tham số giao thức coinsPerUTxOWord.

Khi chúng ta đang xác thực một giao dịch và chúng ta tìm kiếm tập lệnh tương ứng với hàm băm tập lệnh, ngoài các tập lệnh được cung cấp trong nhân chứng giao dịch, chúng ta cũng xem xét bất kỳ tập lệnh tham chiếu nào từ đầu ra được gọi bởi đầu vào của giao dịch.

Bối cảnh Script

Tập lệnh được truyền thông tin về giao dịch thông qua Script context. Chúng ta đề xuất bổ sung Script context để bao gồm một số thông tin về các tập lệnh tham chiếu.

Việc thay đổi Script context sẽ yêu cầu phiên bản ngôn ngữ Plutu mới trong sổ cái để hỗ trợ giao diện mới. Sự thay đổi là: một trường tùy chọn mới được thêm vào đầu ra và đầu vào để thể hiện các tập lệnh tham chiếu. Các tập lệnh tham chiếu được biểu thị bằng hàm băm của chúng trong Script context.

Giao diện cho các phiên bản cũ của ngôn ngữ sẽ không được thay đổi. Các tập lệnh có phiên bản cũ không thể được sử dụng trong các giao dịch bao gồm các tập lệnh tham chiếu, cố gắng làm như vậy sẽ là lỗi xác thực giao dịch giai đoạn 1.

CĐDL

CDDL cho đầu ra giao dịch sẽ thay đổi như sau để phản ánh trường mới.

giao dịch_đầu ra =
[ Địa chỉ
, số lượng : giá trị
, ? `dữ liệu`: $hash32
, ? ref_Script : plutus_Script
]

VIỆC CẦN LÀM: chúng ta có thể sử dụng một loại chung hơn cho phép tập lệnh bất kỳ theo cách tương thích chuyển tiếp không?

Cơ sở lý luận

Ý tưởng chính của đề xuất này là ngừng gửi các tập lệnh được sử dụng thường xuyên đến chuỗi mỗi khi chúng được sử dụng, mà thay vào đó cung cấp chúng theo cách liên tục on-chain.

Phương pháp triển khai tuân theo CIP-31 (Đầu vào tham chiếu) và CIP-32 (Datum nội tuyến). Cái trước xem xét cách chia sẻ dữ liệu on-chain và kết luận rằng tham chiếu UTXO là một giải pháp tốt. Phần sau cho thấy cách chúng ta có thể lưu trữ dữ liệu quan trọng một cách an toàn trong UTXO bằng cách tận dụng các cơ chế hiện có để kiểm soát kích thước.

Do đó, việc sử dụng cùng một cách tiếp cận cho các tập lệnh là điều tự nhiên: đặt chúng vào UTXO và tham chiếu chúng bằng đầu vào tham chiếu.

Lưu trữ tập lệnh trong đầu ra

Có một số lựa chọn thay thế khả thi về nơi lưu trữ tập lệnh tham chiếu trong đầu ra.

1: Trường địa chỉ

Về nguyên tắc, chúng ta có thể thêm tiện ích mở rộng ""tập lệnh nội tuyến"" cho phép sử dụng chính tập lệnh trong trường địa chỉ thay vì băm tập lệnh. Sau đó, chúng ta có thể sử dụng các tập lệnh đó làm tập lệnh tham chiếu.

Tuy nhiên, cách tiếp cận này gặp phải sự nhầm lẫn lớn về vai trò chức năng của Script. Bạn sẽ chỉ có thể cung cấp một tập lệnh tham chiếu cũng kiểm soát chi tiêu của đầu ra. Đây rõ ràng không phải là điều bạn muốn: tập lệnh tham chiếu có thể là bất kỳ thứ gì, có lẽ là tập lệnh chỉ được thiết kế để sử dụng trong những trường hợp khá cụ thể; trong khi trong nhiều trường hợp, người dùng có thể muốn giữ quyền kiểm soát đầu ra bằng một khóa chung đơn giản.

2: Trường datum

Với datum nội tuyến, chúng ta có thể đặt các tập lệnh tham chiếu trong trường datum của đầu ra.

Cách tiếp cận này có hai vấn đề. Đầu tiên, có một sự nhầm lẫn về biểu diễn: chúng ta sẽ cần một số cách để biết rằng một datum cụ thể có chứa một tập lệnh tham chiếu hay không. Chúng ta có thể làm điều này một cách ẩn ý, ​​nhưng sẽ tốt hơn nếu có một dấu hiệu rõ ràng.

Thứ hai, điều này ngăn không cho đầu ra bị khóa bởi tập lệnh cần datum có tập lệnh tham chiếu trong đó. Mặc dù đây là một tình huống bất thường hơn, nhưng nó không nằm ngoài câu hỏi. Ví dụ: một nhóm người dùng có thể muốn sử dụng tập lệnh đa chữ ký dựa trên Plutu để kiểm soát UTXO bằng tập lệnh tham chiếu trong đó.

3: Một trường mới

Một trường mới là giải pháp đơn giản nhất: nó tránh được những vấn đề này vì trường mới rõ ràng có một mục đích cụ thể và chúng ta không làm quá tải ý nghĩa của các trường khác.

Kích thước thiết lập UTXO

Đề xuất này mang lại cho mọi người động lực rõ ràng để đưa một lượng lớn (tức là kilobyte) dữ liệu vào đầu ra dưới dạng tập lệnh tham chiếu.

Về cơ bản, đây là cùng một vấn đề mà CIP-32 gặp phải và chúng ta có thể có lập trường tương tự. Chúng ta không muốn làm tăng bộ UTXO một cách không cần thiết, nhưng chúng ta đã có các cơ chế để hạn chế điều đó (ở dạng giá trị UTXO tối thiểu) và những cơ chế này sẽ hoạt động minh bạch đối với các tập lệnh tham chiếu giống như đối với datum nội tuyến.

Thay đổi Script context

Chúng ta không nhất thiết phải thay đổi Script context. Chúng ta có thể đơn giản bỏ qua bất kỳ thông tin nào về các tập lệnh tham chiếu được mang theo bởi các đầu ra. Điều này có nghĩa là chúng ta không cần thay đổi giao diện.

Chúng ta không có các trường hợp sử dụng rõ ràng cho thông tin về tập lệnh tham chiếu, nhưng cộng đồng có thể đưa ra các trường hợp sử dụng và chính sách chung của chúng ta là cố gắng cung cấp càng nhiều thông tin về giao dịch càng tốt, trừ khi có lý do chính đáng không để.

Chúng ta cũng có câu hỏi phải làm gì với các tập lệnh cũ. Chúng ta thực sự không thể trình bày thông tin về các tập lệnh tham chiếu cho họ một cách trung thực, không có nơi nào để đưa thông tin vào. Chúng ta có thể bỏ qua thông tin hoàn toàn, nhưng điều này nguy hiểm theo một cách khác. Việc bỏ qua thông tin có thể dẫn đến các tập lệnh đưa ra các giả định về giao dịch không đúng sự thật; vì lý do này, chúng ta không muốn âm thầm bỏ qua thông tin như một nguyên tắc chung. Điều đó khiến chúng ta chỉ còn một lựa chọn: từ chối các giao dịch mà chúng ta sẽ phải trình bày thông tin về các tập lệnh tham chiếu cho các tập lệnh cũ.

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


Picture