Plutus-nhung-dieu-ban-can-biet
Plutus-nhung-dieu-ban-can-biet

Trong bài đăng trên blog trước của chúng tôi, chúng tôi đã thảo luận về Alonzo – tên của chúng tôi được đặt cho bản nâng cấp protocol sẽ giới thiệu hỗ trợ hợp đồng thông minh trên Cardano. Alonzo sẽ thiết lập cơ sở hạ tầng và thêm các công cụ để phát triển hợp đồng thông minh chức năng bằng cách sử dụng Plutus.

Plutus platform cung cấp ngôn ngữ hợp đồng thông minh native cho Cardano blockchain. Để hiểu và thành thạo Plutus, người ta phải hiểu ba khái niệm:

  • Mô hình UTXO mở rộng (EUTXO)
  • Plutus Core – phần ‘on-chain’ của Plutus
  • The Plutus Application Framework (PAF) – một phần ‘off-chain’ của Plutus cho phép tương tác với các hợp đồng thông minh.

Các hợp đồng Plutus bao gồm các phần chạy trên blockchain (on-chain code) và các phần chạy trên máy của người dùng (off-chain or client code). Cả mã on-chain và off-chain đều được viết bằng Haskell và các hợp đồng thông minh của Plutus là các chương trình Haskell hiệu quả. Off-chain code có thể được viết bằng PAF và mã này sau đó được biên dịch bởi GHC (Glasgow Haskell Compiler), trong khi on-chain code (được viết bằng Plutus Core) được biên dịch bởi trình biên dịch Plutus.

Điều quan trọng là phải hiểu mối quan hệ giữa các khái niệm Plutus này và chức năng của token gốc để xem cách tương tác của chúng biến cái sau thành một tính năng hữu ích và mạnh mẽ hơn.

Mô hình UTXO mở rộng

Cardano (như Bitcoin) sử dụng mô hình đầu ra (O) giao dịch (U) chưa chi tiêu (TX). Trong mô hình UTXO, một giao dịch có đầu vàođầu ra, trong đó đầu vào là đầu ra chưa sử dụng từ các giao dịch trước đó. Ngay sau khi một đầu ra được sử dụng làm đầu vào trong một giao dịch, nó sẽ được sử dụng và không bao giờ có thể được sử dụng lại. Đầu ra được chỉ định bởi một địa chỉ (khóa công khai hoặc mã băm khóa công khai) và một giá trị (bao gồm số lượng ada và số lượng token gốc bổ sung, tùy chọn). Địa chỉ của đầu ra xác định giao dịch nào được phép ‘mở khóa’ đầu ra và sử dụng nó làm đầu vào. Một giao dịch phải được bởi chủ sở hữu của khóa cá nhân tương ứng với địa chỉ. Hãy coi địa chỉ như một ‘ổ khóa’ chỉ có thể được ‘mở khóa’ bằng đúng ‘chìa khóa’ – chữ ký chính xác.

Mô hình EUTXO mở rộng mô hình này theo hai hướng:

  1. Nó khái quát khái niệm ‘địa chỉ’ bằng cách sử dụng phép tương tự khóa và chìa khóa. Thay vì giới hạn khóa đối với khóa công khai và khóa đối với chữ ký, địa chỉ trong mô hình EUTXO có thể chứa logic tùy ý dưới dạng tập lệnh. Ví dụ, khi một node xác thực một giao dịch, node đó sẽ xác định xem giao dịch đó có được phép sử dụng một đầu ra nhất định làm đầu vào hay không. Giao dịch sẽ tra cứu tập lệnh được cung cấp bởi địa chỉ của đầu ra và sẽ thực thi tập lệnh nếu giao dịch có thể sử dụng đầu ra làm đầu vào.
  2. Sự khác biệt thứ hai giữa UTXO và EUTXO là đầu ra có thể mang (hầu như) dữ liệu tùy ý ngoài một địa chỉ và giá trị. Điều này làm cho các tập lệnh trở nên mạnh mẽ hơn nhiều bằng cách cho phép chúng mang trạng thái.

Khi xác thực một địa chỉ, tập lệnh sẽ truy cập vào dữ liệu đang được sử dụng bởi đầu ra, giao dịch đang được xác thực và một số phần dữ liệu bổ sung được gọi là redeemer mà giao dịch cung cấp cho mọi đầu vào. Bằng cách tra cứu tất cả thông tin này, kịch bản có đủ ngữ cảnh để đưa ra câu trả lời ‘có’ hoặc ‘không’ trong những tình huống và trường hợp sử dụng có thể là rất phức tạp.

Tóm lại, EUTXO mở rộng mô hình UTXO bằng cách cho phép các địa chỉ đầu ra chứa logic phức tạp để quyết định giao dịch nào có thể mở khóa chúng và bằng cách thêm dữ liệu tuỳ biến vào tất cả các đầu ra.

Mô hình EUTXO cung cấp những lợi thế độc đáo so với các mô hình kế toán khác. Việc xác thực giao dịch thành công hay thất bại chỉ phụ thuộc vào bản thân giao dịch và các đầu vào của nó chứ không phụ thuộc vào bất kỳ thứ gì khác trên blockchain. Do đó, tính hợp lệ của giao dịch có thể được kiểm tra off-chain, trước khi giao dịch được gửi đến blockchain. Một giao dịch vẫn có thể không thành công nếu một số giao dịch khác đồng thời sử dụng đầu vào mà giao dịch đang mong đợi, nhưng nếu tất cả các đầu vào vẫn có mặt, giao dịch được đảm bảo thành công.

Điều này trái ngược với mô hình dựa trên tài khoản (như được sử dụng bởi Ethereum), nơi một giao dịch có thể thất bại trong quá trình thực thi giữa tập lệnh. Điều này không bao giờ có thể xảy ra trong EUTXO. Ngoài ra, chi phí thực hiện giao dịch có thể được xác định off-chain trước khi truyền – một tính năng khác không thể có trên Ethereum.

Cuối cùng, do tính chất ‘local’(cục bộ) của xác thực giao dịch, mức độ song song cao là có thể xảy ra: về nguyên tắc, một node có thể xác thực các giao dịch song song, nếu các giao dịch đó không cố gắng sử dụng cùng một đầu vào. Điều này rất tốt cho cả hiệu quả và lý luận, đơn giản hóa việc phân tích các kết quả có thể xảy ra và chứng minh rằng ‘không có gì xấu’ có thể xảy ra. Bạn có thể tìm hiểu sâu hơn về mô hình EUTXO trong bài đăng trên blog trước.

Plutus Core

Để triển khai mô hình EUTXO, cần phải xác định rõ ràng script (tập lệnh) điều khoản và data (dữ liệu). Các tập lệnh yêu cầu một ngôn ngữ kịch bản xác định, được chỉ định rõ ràng và điều quan trọng là phải xác định loại dữ liệu được gắn vào các đầu ra và được sử dụng như là redeemer.

Đây là nơi Plutus Core xuất hiện. Plutus Core là ngôn ngữ kịch bản được Cardano sử dụng. Nó là một ngôn ngữ lập trình hàm đơn giản tương tự như Haskell và một tập hợp con lớn của Haskell có thể được sử dụng để viết các tập lệnh Plutus Core. Là một tác giả hợp đồng, bạn không viết bất kỳ Plutus Core nào. Tất cả các chương trình Plutus Core đều được tạo bởi một plugin trình biên dịch Haskell.

Các tập lệnh này sẽ được thực thi bởi các node trong quá trình xác thực giao dịch ‘trực tiếp’ on the chain. Họ sẽ khóa các UTXO dưới dạng tập lệnh trình xác thực (validator script) hoặc dưới dạng các chính sách đúc tiền (minting), kiểm soát việc đúc tiền và đốt (burning) của token  gốc (xem bên dưới).

Dữ liệu của Redeemer là một kiểu dữ liệu đơn giản (đại số) có thể được định nghĩa dễ dàng trong Haskell, đó là một lý do khác tại sao Haskell là một lựa chọn tốt để viết các tập lệnh Plutus Core. Trên thực tế, một nhà phát triển hợp đồng thông minh sẽ viết các tập lệnh xác thực trong Haskell, sau đó sẽ được tự động biên dịch vào trong Plutus Core.

Các thư viện Haskell thích hợp giúp đơn giản hóa việc viết logic xác thực như vậy bằng cách cung cấp các kiểu dữ liệu cốt lõi để kiểm tra các giao dịch trong quá trình xác thực và bằng cách cung cấp nhiều chức năng trợ giúp và mức độ trừu tượng cao hơn, cho phép các tác giả hợp đồng tập trung vào logic nghiệp vụ và không phải lo lắng về quá nhiều -các chi tiết cấp thấp (low-level).

The Plutus Application Framework (PAF)

Trạng thái on-chain của các tập lệnh trình xác thực chỉ có thể được sửa đổi bằng các giao dịch chi tiêu và tạo ra đầu ra tập lệnh. Khi viết một ứng dụng Plutus, chúng ta cần xem xét không chỉ phần on-chain của ứng dụng (các tập lệnh Plutus Core) mà còn cả phần off-chain xây dựng và gửi các giao dịch.

Mã off-chain được viết bằng Haskell, giống như mã on-chain. Bằng cách đó, chúng ta chỉ cần viết logic nghiệp vụ một lần. Sau đó, chúng ta có thể sử dụng nó trong tập lệnh trình xác thực và trong mã xây dựng các giao dịch chạy tập lệnh trình xác thực.

Nhiều ứng dụng cần theo dõi bộ UTXO để biết các thay đổi đối với các địa chỉ cụ thể, vì vậy nếu chúng tôi viết hợp đồng của mình dưới dạng máy trạng thái (state machine) chúng tôi cần theo dõi đầu ra chưa sử dụng đại diện cho trạng thái hiện tại của máy và cập nhật trạng thái cục bộ khi on-chain thay đổi trạng thái. Tương tự như vậy, nhiều ứng dụng cần giao tiếp với phụ trợ của ví (wallet backend) để truy cập vào loại tiền điện tử mà chúng đang sử dụng cho các giao dịch.

PAF cung cấp khả năng truy cập dễ dàng vào các dịch vụ thường được các ứng dụng Plutus sử dụng. Các ứng dụng được triển khai bằng cách sử dụng các thư viện của framwork có thể được chạy trên chương trình phụ trợ ứng dụng Plutus, cung cấp hỗ trợ runtime để truy cập vào blockchain và các mối quan tâm khác như tính bền bỉ, ghi nhật ký và giám sát. Các ứng dụng được viết trên PAF tự động cung cấp giao diện HTTP và WebSocket có thể được sử dụng để tương tác với ứng dụng từ trình duyệt web.

Native token

Các token gốc đã có sẵn trên Cardano với đợt hard fork Mary của tháng Hai. Bất kỳ người dùng nào cũng có thể tạo token của riêng họ và token có thể được gửi và nhận một cách tự do, giống như ada. Mỗi token gốc đi kèm với chính sách đúc tiền (minting) riêng của nó, xác định các điều kiện mà token có thể được đúc (mint) và đốt (burn).

Hiện tại, các chính sách đúc tiền này bao gồm sự kết hợp của các quy tắc đơn giản chỉ định chữ kýdấu thời gian. Ví dụ: một chính sách có thể nêu rõ rằng chỉ các giao dịch được ký bởi hai trong số năm chữ ký có thể được phép đúc hoặc đốt token. Một chính sách khác chỉ có thể cho phép đúc tiền trước hoặc sau một khoảng thời gian cụ thể.

Mạnh mẽ như những block xây dựng cơ bản này, chúng không bao gồm mọi mục đích sử dụng có thể tưởng tượng được. Ví dụ, có thể, nhưng khó khăn, để lập mô hình token không thể thay thế (NFT) bằng cách sử dụng các chính sách đơn giản như vậy. Điều này có thể được thực hiện bằng cách sử dụng một mốc thời gian để đúc một NFT, bằng cách giới hạn hoạt động đúc trong một thời điểm cụ thể. Nếu chỉ có một token được đúc trước khi đạt đến thời điểm đó, thì về mặt kỹ thuật, token không thể thay thế được (vì chỉ có một). Nhưng để kiểm tra điều này, chỉ cần kiểm tra chính sách đúc tiền thôi là chưa đủ. Chúng tôi cần xem xét lịch sử đúc tiền của token để đảm bảo rằng nó thực sự chỉ được đúc một lần.

Với việc triển khai Plutus, người dùng sẽ có thể viết các chính sách đúc tiền bằng cách sử dụng Plutus core.Trong quá trình đúc tiền hoặc đốt, tập lệnh chính sách của Plutus Core sẽ được thực thi trong bối cảnh của giao dịch đúc tiền hoặc đốt và tập lệnh sẽ phải chấp thuận hoặc cấm hành động đó. Điều này sẽ đẩy nhanh hơn nữa sự phát triển của NFT trên Cardano bằng cách cho phép tạo ra các chính sách minting phức tạp hơn nhiều và cho phép tạo NFT theo cách đáng tin cậy

Alonzo đang dần được triển khai vào mạng chính thông qua một số testnet, vì vậy các đối tác của chúng tôi và những người tiên phong của Plutus sẽ có thể thử nghiệm Plutus Core bằng cách viết ứng dụng trên Cardano trong suốt tháng 5 và tháng 6 trước khi code freeze. Đây cũng sẽ là giai đoạn đảm bảo chất lượng và kiểm tra sự chấp nhận của người dùng bởi các sàn giao dịch để đảm bảo rằng nền tảng đã hoàn toàn sẵn sàng tại thời điểm nâng cấp mainnet Alonzo. Nếu bạn là nhà phát triển và muốn tìm hiểu thêm về Plutus, hãy cân nhắc tham gia nhóm cohort tiên phong trong tương lai. Ngoài ra, hãy xem kho lưu trữ Plutus GitHub và tham gia vào các cuộc thảo luận về Plutus tại Diễn đàn Cardano.

Tôi muốn ghi nhận Jann Müller về những ý kiến ​​đóng góp và bổ sung cho bài đăng trên blog này.

Source: https://iohk.io/en/blog/posts/2021/04/13/plutus-what-you-need-to-know/