Skip to main content

Nội dung các bài giảng

Dưới đây là các Video và phần tóm tắt nội dung các bài giảng để người học tiện theo dõi. Phần tóm tắt nội dung đang được tiếp tục cập nhật và hoàn chỉnh.

Bài giảng 01

PPP 040101 - Lời chào và Giới thiệu

PPP 040101 - Welcome and Introduction

  • Chào mừng bạn đến với chương trình Plutus Pioneer Program lần thứ 4 để tìm hiểu Plutus, ngôn ngữ hợp đồng thông minh bản địa của blockchain Cardano.
  • Chương trình sẽ có các bài giảng hàng tuần và các phần hỏi đáp vào thứ Ba hàng tuần, sẽ được ghi lại để thuận tiện cho người tham gia.
  • Có sẵn một số tài nguyên, chẳng hạn như repo GitHub chứa tất cả mã code cho các bài giảng và bài tập về nhà, kênh Discord để thảo luận và Trao đổi ngăn xếp Cardano cho các câu hỏi chung về Plutus.
  • Khóa học sẽ bao gồm tất cả các khía cạnh cần thiết để viết hợp đồng thông minh và DApps, bao gồm mã on-chain và off-chain, trình xác thực, đúc tài sản gốc, NFT, thử nghiệm và triển khai vào mạng thử nghiệm.
  • Nhóm đào tạo sẽ cố gắng trả lời càng nhiều câu hỏi càng tốt, nhưng những người tham gia được khuyến khích hợp tác và giúp đỡ lẫn nhau.
  • Nhóm đào tạo đã làm cho trải nghiệm thiết lập môi trường trở nên dễ dàng hơn nhiều bằng cách cung cấp môi trường trình duyệt chỉ bằng một cú nhấp chuột và bộ chứa Dev cho Visual Studio.
  • Chương trình sẽ bắt đầu với một bản demo để giới thiệu những gì người tham gia có thể làm nếu họ hoàn thành xuất sắc khóa học.
  • Khóa học cũng sẽ bao gồm hai nguyên tắc mã hóa, băm và chữ ký số, và mô hình EUTXO (Đầu ra giao dịch chưa chi tiêu mở rộng) được Cardano sử dụng.
  • Nhóm đào tạo sẽ cố gắng giữ cho khóa học có tính tương tác cao nhất có thể và có thể có những thay đổi tự phát để kết hợp các câu hỏi hoặc mong muốn của người tham gia.
  • Plutus vẫn là một ngôn ngữ mới và đang phát triển, và mặc dù công cụ đã được cải thiện, nhưng nó vẫn không bóng bẩy như trong các blockchain lâu đời hơn.
PPP 040102 - Thiết lập môi trường phát triển của chúng ta

PPP 040102 - Setting up Our Development Environment

  • Video nói về việc thiết lập môi trường phát triển cho khóa học Plutus Pioneer.
  • Có hai tùy chọn: môi trường trực tuyến sử dụng Demeter hoặc môi trường cục bộ sử dụng Docker và VS Code.
    • Để tạo môi trường bằng Demeter, hãy tham khảo hướng dẫn chi tiết tại đây
    • Để tạo môi trường với Docker, hãy tham khảo hướng dẫn chi tiết tại đây
PPP 040103 - Kuber Marketplace Demo

PPP 040103 - Kuber Marketplace Demo

  • Video minh họa một công cụ có tên là Kuber, cho phép người dùng xây dựng và cân đối các giao dịch một cách dễ dàng.
  • Ví dụ được minh họa là thị trường Cardano, có thể được triển khai theo nhiều cách.
  • Kiến trúc được sử dụng là giao diện người dùng giao tiếp với Kuber, sau đó giao tiếp với mạng Cardano.
  • Phần trình diễn được thực hiện bằng Demeter, được sử dụng để tạo không gian làm việc mới.
  • Không gian làm việc là một bản sao của thị trường Cardano, sử dụng ngăn mã hóa TypeScript.
  • Kích thước không gian làm việc nhỏ và được thử nghiệm trên mạng pre-production.
  • Người dùng thêm các tiện ích mở rộng để kích hoạt phiên bản sản xuất Kuber và chỉnh sửa tệp cấu hình.
  • Người dùng xây dựng giao diện người dùng và tạo một máy chủ web, được mở trên localhost:3000.
  • Người dùng đúc một NFT có tên là "Clueless Pioneer NFT" và bán nó trên thị trường.
PPP 040104 - Hashing & Chữ ký số

PPP 040104 - Hashing & Digital Signatures

  • Hashing (băm) và chữ ký số là hai khái niệm mật mã quan trọng.
  • Quá trình Hashing lấy một chuỗi byte làm đầu vào và tạo ra một chuỗi byte khác làm đầu ra.
  • Chuỗi byte đầu ra có độ dài cố định và không thể đoán trước.
  • Những thay đổi nhỏ trong đầu vào có thể dẫn đến kết quả đầu ra hoàn toàn khác.
  • Các thuật toán Hashing được thiết kế để làm cho thực tế không thể tìm thấy các đầu vào Hashing thành một đầu ra với các thuộc tính nhất định mà không ép buộc nó.
  • Chữ ký số được sử dụng để ký điện tử các tài liệu, là các chuỗi byte.
  • Để ký một tin nhắn, cần có một cặp khóa bao gồm khóa riêng và khóa chung.
  • Khóa chung được sử dụng để xác minh chữ ký và đảm bảo rằng thông báo không bị thao túng và người ký là chủ sở hữu của khóa riêng.
  • Cả hàm Hashing và chữ ký số đều được sử dụng trong hầu hết mọi blockchain, đặc biệt là trong Cardano.
  • Chữ ký số rất quan trọng trong việc đảm bảo tính bảo mật của các giao dịch trong Cardano.
PPP 040105 - The eUTXO Model

PPP 040105 - The EUTXO-Model

  • EUTXO là mô hình kết toán được Cardano sử dụng.
  • EUTXO là viết tắt của mô hình Đầu ra giao dịch chưa chi tiêu mở rộng.
  • Bitcoin cũng sử dụng mô hình UTXO, khác với mô hình dựa trên tài khoản của Ethereum.
  • UTXO là đầu ra giao dịch chưa được chi tiêu, là đầu ra từ các giao dịch trước đó chưa được chi tiêu.
  • Đầu vào và đầu ra trong một giao dịch phải là UTXO hoàn chỉnh.
  • Trong một giao dịch, tổng giá trị đầu vào phải bằng tổng giá trị đầu ra. Phí giao dịch và token gốc là ngoại lệ đối với quy tắc này.
  • Khi một giao dịch mới được thêm vào blockchain, một số UTXO cũ sẽ được sử dụng và các UTXO mới xuất hiện.
  • Chữ ký được yêu cầu để chi tiêu một UTXO nhất định.
  • Mô hình EUTXO được mở rộng khi hợp đồng thông minh được giới thiệu.
Bài giảng 02

PPP 040201 - Tập lệnh xác thực không được định Kiểu, Bậc thấp

PPP 040201 - Low-Level, Untyped Validation Scripts

  1. Hợp đồng thông minh có phần on-chain và off-chain.
  2. Phần on-chain (on-chain) liên quan đến việc xác thực các giao dịch để xác định xem chúng có hợp lệ hay không và có thể sử dụng một UTXO nhất định hay không.
  3. Mô hình UTXO mở rộng (eUTXO) giới thiệu các địa chỉ tập lệnh (script addresses) có thể chạy logic tùy biến để xác thực giao dịch.
  4. Redeemers, datum, và context được sử dụng để biểu thị dữ liệu đầu vào trong mô hình UTXO mở rộng.
  5. Kiểu dữ liệu bậc thấp chưa xác định Kiểu được sử dụng để biểu thị dữ liệu đầu vào trong mô hình UTXO mở rộng.
  6. Tùy chọn bậc cao hơn có sẵn nhưng không phải lúc nào cũng được sử dụng vì lý do hiệu suất.
  7. Các Kiểu dữ liệu và hàm tích hợp sẵn trong Plutus không dễ dàng được văn bản hóa.
  8. Tài liệu về các thư viện Plutus có sẵn thông qua các tài liệu mềm.
  9. Plutus có một số hàm tạo (constructors), bao gồm Console, Map, List, Int, và Byte String (B).
  10. Kiểu dữ liệu trong Plutus có thể được thao tác bằng cách sử dụng hàm tạo và có thể được sử dụng để xác định giá trị của Kiểu.

PPP 040202 - Sử dụng Cardano CLI để tương tác với Plutus

PPP 040202 - Using the Cardano CLI to Interact with Plutus

  1. Sử dụng Cardano CLI là cách dễ dàng nhất để tương tác với các hợp đồng thông minh của Plutus.
  2. Cardano CLI được bao gồm trong cả thiết lập cục bộ và Demeter.run, nhưng bạn cần khởi động một node trong thiết lập cục bộ trước khi sử dụng.
  3. Mạng thử nghiệm xem trước (Preview Testnet) được sử dụng trong khóa học này để tránh sử dụng tiền thật và đồng bộ hóa nhanh hơn so với mạng thử nghiệm tiền sản xuất (pre-production test net) hoặc mạng chính (mainnet).
  4. Tập lệnh query-tip.sh có thể được sử dụng để kiểm tra tiến trình đồng bộ hóa của node.
  5. Tập lệnh create-key-pair.sh tạo các cặp khóa công khai (publish-key) và riêng tư (private-key) cũng như tạo một địa chỉ (address).
  6. Tập lệnh query-address.sh để truy vấn kiểm tra số tiền có sẵn cho một địa chỉ.
  7. Testnet Faucet có thể được sử dụng để nạp tiền cho một địa chỉ, nhưng nó chỉ có thể được sử dụng một lần trong 24 giờ.
  8. Tập lệnh make-gift.sh được sử dụng để tạo giao dịch gửi tiền đến địa chỉ tập lệnh của hợp đồng thông minh Plutus. Tệp lệnh này thực hiện các tác vụ
    • Tạo địa chỉ của smartcontract, tệp lệnh được định nghĩa trong gift.plutus.
    • Tạo giao dịch, ký giao dịch và gửi giao dịch
  9. Tập lệnh collect-gift.sh dùng để lấy tiền ra khỏi smartcontract.
  10. Datum và Redeemer đều cần thiết để đính kèm vào địa chỉ tập lệnh Plutus, nhưng dữ liệu nào được đính kèm không quan trọng.
PPP 040203 - Tập lệnh xác thực được định Kiểu, Bậc cao

PPP 040203 - High-Level, Typed Validation Scripts

  1. Thảo luận về một ví dụ về hợp đồng thông minh, trong đó chỉ có đối số Redeemer được kiểm tra xem nó có bằng 42 hay không.
  2. Hợp đồng thông minh được viết bằng Haskell và mã code được cung cấp trong mô-đun 42 trong một thư mục mã.
  3. Kiểu dữ liệu tích hợp sẵn được sử dụng để mô hình hóa Datum tùy chỉnh trong hợp đồng này.
  4. Hàm tạo i-42 được sử dụng để biến 42 thành dữ liệu tích hợp.
  5. Nếu Redeemer không phải là 42, một thông báo lỗi sẽ được tạo ra, nếu không, trình xác thực sẽ trả về đơn vị mà không có lỗi.
  6. Trình xác thực có thể được viết bằng cơ chế bậc thấp này cho tất cả các hợp đồng thông minh.
  7. Haskell coi các hàm là công dân hạng nhất, vì vậy không có hàm tạo nào để mã hóa các hàm dưới dạng dữ liệu tích hợp.
  8. Thật sai lầm khi gộp mọi thứ lại với nhau thành một Kiểu dữ liệu lớn được gọi là dữ liệu tích hợp và nó Kiểu bỏ thông tin về Kiểu.
  9. Lý tưởng là cung cấp các Kiểu phù hợp thực tế cho các đối số trong hợp đồng thông minh, phụ thuộc vào logic trong trường hợp cụ thể.
  10. Bằng cách thêm các Kiểu thích hợp, nhiều thông tin hơn được chuyển tải trong khai báo của trình xác thực và mã phản ánh logic tốt hơn.
PPP 040204 - Tổng kết bài giảng 02

PPP 040204 - Summary

  1. Bài giảng bao gồm các ví dụ đơn giản về trình xác thực, cả chưa tạo kiểu và đã tạo kiểu (untyped và typed).
  2. Trình xác thực đầu tiên luôn thành công và bỏ qua các đối số của nó.
  3. Trình xác thực thứ hai luôn bị lỗi và cũng bỏ qua các đối số của nó.
  4. Trình xác thực thứ ba kiểm tra xem Redeemer có một giá trị được xác định trước nhất định hay không.
  5. Sau đó, bài giảng bao gồm một phiên bản đã nhập của trình xác thực thứ ba, sử dụng các Kiểu dữ liệu tích hợp sẵn.
  6. Các Kiểu Datum tùy chỉnh cũng được thảo luận cho trình xác thực đã xác định Kiểu.
  7. Bài giảng không đề cập đến các ví dụ trong đó Datum hoặc Context được kiểm tra, điều này thường xảy ra trong các tình huống thực tế.
  8. Bài giảng cũng đề cập đến việc sử dụng cardano CLI để tương tác với trình xác thực.
  9. Trình xác thực mẫu cũng được cung cấp trong bài giảng.
  10. Bài giảng tiếp theo sẽ đề cập đến việc kiểm tra Datum hoặc Context.
PPP 040205 - Bài tập về nhà

PPP 040205 - Homework

  1. Bài tập về nhà bao gồm hai mô-đun trong thư mục bài tập về nhà của mã code tuần này.
  2. Mô-đun đầu tiên có Kiểu Datum đơn vị, một cặp booleans cho Redeemer và chỉ yêu cầu xác thực thành công nếu cả hai booleans trong cặp đều đúng.
  3. Nhiệm vụ là cần thay thế cách thực hiện sai bằng cách thực hiện đúng.
  4. Sau khi thực thi giải pháp, hãy chạy "cabal test" để xác minh tính chính xác của giải pháp.
  5. Mô-đun thứ hai tương tự như mô-đun thứ nhất, nhưng thay vì một cặp booleans, mô-đun này sử dụng Kiểu Datum tùy chỉnh "My Redeemer".
  6. "My Redeemer" cũng là một cặp booleans, với hai trường, "flag one" và "flag two", cả hai đều thuộc Kiểu "bool".
  7. Logic cho mô-đun này là nó chỉ có thể sử dụng một UTXO bị khóa tại địa chỉ đó nếu hai flag trong Kiểu bản ghi này khác nhau.
  8. Sau khi hoàn thành các mô-đun, học viên được khuyến khích tương tác với các hợp đồng bằng Cardano CLI.
  9. Học viên cũng nên xem điều gì sẽ xảy ra nếu một Redeemer được cung cấp sai, chẳng hạn như một Redeemer có hai flag giống nhau.
Bài giảng 03

PPP 040301 - Script Contexts

PPP 040301 - Script Contexts

  1. Bài giảng thảo luận về ngữ cảnh tập lệnh (Script Contexts) trong ngữ cảnh của trình xác thực (context of validators) trong blokchain Cardano.
  2. Trình xác thực nhận được ba thông tin: Datum, Redeemer và Context.
  3. Bitcoin và Ethereum khác nhau về kích thước của ngữ cảnh (Context) mà chúng cho phép đối với các tập lệnh.
  4. Context của Cardano là giao dịch đang cần được xác thực.
  5. Ngữ cảnh tập lệnh là Kiều dữ liệu Haskell chứa thông tin về một giao dịch có sẵn từ bên trong tập lệnh Plutus.
  6. Ngữ cảnh tập lệnh là Kiểu bản ghi (record type) có hai trường: thông tin TX và mục đích.
  7. Kiểu thông tin TX chứa thông tin về giao dịch, bao gồm danh sách UTXO tương ứng của chúng.
  8. Các tập lệnh tham chiếu (Reference scripts) cho phép các tập lệnh tham chiếu đến các tập lệnh khác, làm cho các giao dịch nhỏ hơn và hiệu quả hơn.
  9. Có bốn mục đích có thể cho các tập lệnh: chi tiêu, đúc, nhận thưởng và xác thực.
  10. Kiểu đầu ra TX chứa thông tin về đầu ra giao dịch, bao gồm địa chỉ, giá trị, Datum và hàm băm tập lệnh (script hash).
PPP 040302 - Quản lý thời gian

PPP 040302 - Handling Time

  1. Mô hình Cardano EUTXO có lợi thế hơn Ethereum vì quá trình xác thực có thể xảy ra ngay trong ví, đảm bảo việc xác thực được kiểm chứng.
  2. Quản lý thời gian là một thách thức trong Context này vì thời gian không ngừng trôi và logic xác thực phụ thuộc vào nó.
  3. Để giải quyết mâu thuẫn này, Cardano thêm trường khoảng thời gian POSIX chỉ định khoảng thời gian mà giao dịch còn hợp lệ.
  4. Trước khi xác thực, node kiểm tra khoảng thời gian để xác định xem giao dịch có còn hợp lệ hay không. Nếu không, nó sẽ bị lỗi ngay lập tức mà không cần chạy bất kỳ tập lệnh trình xác thực nào.
  5. Tính năng này cho phép việc xác thực được kiểm chứng, mặc dù thời điểm giao dịch được tạo trong ví có thể khác với thời điểm giao dịch đến node để xác thực.
  6. Tất cả các giao dịch thông thường có sử dụng một khoảng thời gian vô hạn kéo dài vĩnh viễn.
  7. Giao thức đồng thuận của Cardano sử dụng các slot để đếm thời gian và các giao dịch phải chuyển đổi giữa thời gian thực và số slot.
  8. Khoảng thời gian của slot xác định rằng các giao dịch phải có giới hạn trên là 36 giờ trong tương lai, vì độ dài của slot có thể thay đổi trong tương lai.
  9. Hạn chế này chỉ áp dụng cho các giao dịch, không phải trình xác thực trong tệp lệnh Plutus Script.
  10. Plutus Scripts có thể đề cập đến ngày tùy chỉnh, cho phép hợp đồng đặt điều kiện trước một thời điểm xa trong tương lai.
PPP 040303 - Một ví dụ về Trao quà

PPP 040303 - A Vesting Example

  1. Plutus có thể được sử dụng để thực thi dự định vesting với một món quà crypto cho bọn trẻ.
  2. Việc thực thi liên quan đến việc tạo một Kiểu Datum tùy chỉnh được gọi là Vesting Datum có chứa thông tin về người thụ hưởng và thời hạn.
  3. Hợp đồng thông minh được thiết kế để chỉ mở khóa sau khi đã đến thời hạn và chỉ khi giao dịch thực hiện chi tiêu được ký bằng khóa của người thụ hưởng.
  4. Tập lệnh trình xác thực kiểm tra xem giao dịch có được ký bởi người thụ hưởng hay không bằng cách sử dụng hàm TX được ký bởi các thư viện Plutus.
  5. Tập lệnh trình xác thực (validator script) cũng kiểm tra xem đã đến thời hạn hay chưa bằng cách sử dụng hàm contains với khoảng thời gian hiệu lực của giao dịch và khoảng thời gian từ khi bắt đầu tại thời hạn cho đến vô tận.
  6. Việc thực thi hợp đồng thông minh là một ví dụ đơn giản về cách sử dụng thời gian trong hợp đồng thông minh và có thể được áp dụng trong nhiều ngữ cảnh khác nhau.
  7. Việc thực thi này giả định rằng chỉ có người thụ hưởng mới có thể mở khóa UTXO.
  8. Các bên khác có thể được phép mở khóa việc vesting bằng cách cung cấp nội dung có giá trị thực cho một địa chỉ cụ thể. Điều này có thể giúp triển khai các dịch vụ cho những người không hiểu biết về blockchain.
  9. Việc thực thi hợp đồng thông minh sử dụng ngữ cảnh được cung cấp và kiểm tra hai điều kiện: được ký bởi người thụ hưởng và đã đạt đến thời hạn.
  10. Hạn chót là trường thứ hai tính từ Datum và có thể được truy cập bằng trình truy cập thời hạn (deadline accessor).
PPP 040304 - Hợp đồng được tham số hóa

PPP 040304 - Parameterized Contracts

  1. Trong các ví dụ được trình bày trước đây, chỉ có một trình xác thực cụ thể được sử dụng, chứa tất cả các tham số của hợp đồng.
  2. Hợp đồng được tham số hóa hoặc tập lệnh được tham số hóa có thể được sử dụng để đưa tính biến thiên (khả năng thay đổi) vào chính hợp đồng, Datum biến đổi sẽ được sử dụng thay vì thay vì Datum cố định.
  3. Các hợp đồng được tham số hóa có thể được khởi tạo cho các giá trị cụ thể của các tham số, cho phép tạo ra một nhóm tập lệnh.
  4. Thay vì sử dụng Datum, các tham số có thể được mã hóa trực tiếp vào hợp đồng.
  5. Hợp đồng vesting (vesting) đã được sửa đổi để sử dụng các hợp đồng được tham số hóa và dữ liệu thử nghiệm đã được thay đổi thành quyền vesting.
  6. Chữ ký của hợp đồng vesting đã thay đổi để bao gồm một tham số bổ sung, đó là tham số của hợp đồng.
  7. Người thụ hưởng và thời hạn bây giờ sẽ được tìm thấy trong các tham số chứ không phải trong Datum.
  8. Hàm trình xác thực bây giờ sẽ là một Hàm chuyển Tham số thành Trình xác thực và tham số P được đặt ở vị trí thích hợp trong hàm.
  9. Mã biên dịch có thể có lỗi liên quan đến mẫu Haskell xảy ra khi thực thi mã code.
  10. Mẫu Haskell là một bước tiền biên dịch và nó yêu cầu tất cả dữ liệu cần thiết phải được biết tại thời điểm biên dịch, không thể biết được thông số tìm kiếm.
PPP 040305 - Mã Offchain với Lucid

PPP 040305 - Offchain Code with Lucid

  1. Mã offchain là một Kiểu tương tác với blockchain liên quan đến việc truy vấn và xây dựng các giao dịch.
  2. Cardano CLI là một công cụ được sử dụng cho mã offchain nhưng nó đòi hỏi nhiều thao tác thủ công.
  3. Lucid là một công cụ khác được sử dụng cho mã offchain có thể được sử dụng với mã JavaScript hoặc TypeScript.
  4. Lucid có thể được tìm thấy dưới dạng gói npm với các ví dụ cơ bản và tài liệu API.
  5. Ứng dụng dApp được viết để tương tác với hợp đồng vesting sử dụng Lucid.
  6. Để dùng thử dApp, người dùng cần cài đặt npm và chạy npm start trong thư mục Lucid.
  7. dApp được thiết kế để hoạt động với ví Nami, nhưng nó cũng có thể hoạt động với các ví dựa trên trình duyệt khác.
  8. dApp có hai hàm main: tạo hợp đồng chuyển nhượng và yêu cầu hợp đồng chuyển nhượng.
  9. Để tạo hợp đồng vesting, hàm băm khóa công khai của người thụ hưởng và số lượng ADA phải được chỉ định.
  10. Thời hạn yêu cầu hợp đồng vesting cũng được chỉ định và ví Nami sẽ bật lên để yêu cầu xác nhận.
PPP 040306 - Tập lệnh tham chiếu

PPP 040306 - Reference Scripts

  1. dApp Lucid có một biến thể sử dụng tập lệnh tham chiếu (Reference Scripts).
  2. Các giao dịch truyền thống phải bao gồm tập lệnh, nhưng có thể sử dụng tập lệnh tham chiếu để thay thế.
  3. Bao gồm cùng một tập lệnh trong nhiều giao dịch làm cho blockchain lớn hơn.
  4. Tập lệnh tham chiếu là đầu ra bao gồm tập lệnh và có thể được tham chiếu sau này.
  5. Sử dụng tập lệnh tham chiếu rẻ hơn so với việc đưa tập lệnh vào trong giao dịch.
  6. Chi phí tạo tập lệnh tham chiếu sẽ tương đối cao.
  7. Tập lệnh tham chiếu có thể được gửi tới một UTXO tùy biến, nhưng nên sử dụng tập lệnh bản ghi.
  8. Tệp lệnh đốt (burn script ) sẽ không thể được sử dụng, khiến nó được đảm bảo luôn ở đó.
  9. Tập lệnh vesting đã được triển khai dưới dạng tập lệnh tham chiếu và một hàm đã được tạo để truy xuất UTXO cho tập lệnh đó.
  10. Các giao dịch xác nhận quyền sở hữu không còn phải bao gồm tập lệnh vesting vì có thể sử dụng UTXO tham chiếu thay thế.
PPP 040307 - Bài tập về nhà

PPP 040307 - Homework

  1. Bài tập về nhà liên quan đến việc triển khai một biến thể của trình xác thực quyền sở hữu.
  2. Có hai người thụ hưởng và một thời hạn trong phiên bản này.
  3. Người thụ hưởng đầu tiên có thể chi tiêu UTXO trước thời hạn và người thụ hưởng thứ hai có thể chi tiêu sau thời hạn.
  4. Nếu người thụ hưởng đầu tiên không nhận được tiền trước thời hạn, Người tặng muốn nhận lại và người thụ hưởng thứ hai sẽ nhận được tiền.
  5. Bài tập về nhà thứ hai liên quan đến việc viết một hợp đồng thử nghiệm được tham số hóa trong đó tham số là người thụ hưởng và thời hạn là Datum.
  6. Các bài test đã được viết cho bài tập về nhà và chúng có thể được thực hiện bằng cách sử dụng "cabal test" hoặc "bài tập về nhà của bài cabal test trong tuần thứ ba".
  7. Quy ước đặt tên cho bài tập về nhà đã được thay đổi, hãy đặt số tuần làm tiền tố.
  8. Các dAppcó thể được sửa đổi để lọc ra các UTXO không liên quan đến ví hiện tại.
  9. Chỉ các giao dịch UTXO mà ví hiện tại có thể yêu cầu mới được hiển thị.
  10. Các UTXO đã đạt đến thời hạn cũng nên được lọc ra.
PPP 040308 - Tổng kết bài giảng 03

PPP 040308 - Summary

  1. Bài giảng về Kiểu ngữ cảnh tệp lệnh của Plutus đã kết thúc.
  2. Kiểu thông tin TX được thảo luận về khả năng hiển thị giao dịch đối với Plutus.
  3. Xử lý thời gian trong Plutus được thảo luận cho các hợp đồng xác định.
  4. Ví dụ về hợp đồng vesting được sử dụng để minh họa việc xử lý thời gian.
  5. Các tập lệnh được tham số hóa đã được thảo luận.
  6. Mã offline được minh họa cho dApp bằng Lucid.
  7. Tương tác với hợp đồng vesting được hiển thị trong mã offline.
  8. Giải thích cách sử dụng các tệp lệnh tham chiếu.
  9. Tập lệnh tham chiếu được sử dụng để làm cho giao dịch có kích thước nhỏ hơn.
  10. Bài giảng bao gồm các khía cạnh khác nhau của việc phát triển hợp đồng và tệp lệnh của Plutus.
PPP 0403xx Hỏi đáp

Q&A Week 3 - PPP Iteration 4

  1. Bạn nên tạo hợp đồng thông minh theo cách khuyến khích người khác tạo giao dịch để người nhận sử dụng hợp đồng thông minh.
  2. Blockchain là một thực thể thụ động chỉ thực hiện các hành động khi một giao dịch được thực hiện đối với Blockchain tạo ra các thay đổi.
  3. Có một câu hỏi về trạng thái của chứng chỉ Plutus Pioneer NFT có thể được mở khóa sau khi hoàn thành khóa học.
  4. Bộ phận pháp lý đang tư vấn thêm trước khi cấp chứng chỉ NFT.
  5. Một câu hỏi trên Discord đã được trả lời về định dạng dữ liệu trong Lucid cho thẻ dữ liệu Redeemer là một Kiểu dữ liệu đại số.
  6. Redeemer có thể được ghim vào một chỉ mục với tùy chọn A được ghim vào chỉ mục 0 và tùy chọn B vào chỉ mục 1.
  7. Bằng cách sử dụng make là một chỉ mục dữ liệu, mẫu Haskell có thể chuyển đổi nó thành Constructor 0 hoặc Constructor 1 với các trường tương ứng.
  8. Redeemer trong ví dụ có hai tùy chọn: Tùy chọn A với trường trống và Tùy chọn B với danh sách các số nguyên.
  9. Kiểu thẻ dữ liệu Redeemer có thể được in ra JSON để hiển thị định dạng.
Bài giảng 04

PPP 040401 - on-chain và off-chain

PPP 040401 - On-chain VS Off-chain

  1. Bài giảng nói về mã on-chain và off-chain trong hợp đồng thông minh.
  2. Mã on-chain đề cập đến các đoạn mã chạy trong node của quá trình bao gồm các giao dịch và dữ liệu mới được lưu trữ trong blockchain.
  3. Mã off-chain đề cập đến các đoạn mã chạy trong thiết bị của người dùng hoặc nhà cung cấp dịch vụ để truy vấn blockchain, xây dựng và gửi giao dịch.
  4. Mã on-chain đảm bảo tính toàn vẹn, nhưng nó đắt tiền, trong khi mã off-chain không đảm bảo tính toàn vẹn nhưng có quyền truy cập vào ví và tài nguyên của người dùng.
  5. Blockchain là một thực thể thụ động và cách duy nhất để khiến điều gì đó xảy ra trên blockchain là ai đó phải gửi một giao dịch.
  6. Mã on-chain được biên dịch qua một số bước để trở thành Plutus Core chưa được định dạng, ngôn ngữ được chạy on-chain.
  7. Mã off-chain có thể phức tạp và không cần phải có các tiêu chuẩn bảo mật và hiệu suất giống như mã on-chain.
  8. Mã on-chain được lưu trữ trong blockchain, khiến nó không thể thay đổi về mặt mật mã.
  9. Cộng đồng đang xây dựng các thư viện để trình xác thực mã bằng các ngôn ngữ có sẵn khác, các ngôn ngữ dành riêng cho từng lĩnh vực được nhúng và các ngôn ngữ hoàn toàn mới.
  10. Cả mã on-chain và mã off-chain đều có những ưu điểm và hạn chế vốn có, và cần phải phân tách chúng để làm cho blockchain nhanh, nhẹ và giá cả phải chăng nhất có thể.
PPP 040402 - Mã Off-chain, Cardano CLI và GUI

PPP 040402 - Off-chain Code with Cardano CLI and GUI

  1. Bài giảng nói về công cụ Cardano CLI GUI.
  2. Cách sử dụng Cardano CLI thủ công, nhiều UTXO, UTXO của giao dịch, căn chỉnh các giao dịch thủ công và những nhược điểm của Cardano CLI.
  3. Để theo dõi phần trình bày, người ta cần có trình chỉnh sửa Visual Studio Code với container và kho lưu trữ Cardano CLI Green.
  4. GUI không hoạt động từ bên trong container, vì vậy nó cần được cài đặt thủ công.
  5. Các tệp thực thi có sẵn cho Linux và Windows và một tệp thực thi cho Mac OS sẽ được bổ sung sau.
  6. GUI chạy tốt nhất trên hệ điều hành Linux.
  7. Hướng dẫn cài đặt node Cardano có sẵn, bao gồm tải xuống và cài đặt binaries và tệp cấu hình.
  8. Một tập lệnh shell được cung cấp để khởi động node Cardano và một lệnh phải được thêm vào tệp bashfc để CLI hoạt động.
  9. Sau khi mọi thứ được cài đặt, node Cardano cần thời gian để đồng bộ hóa và sau đó có thể sử dụng GUI Cardano CLI để kiểm tra trạng thái đồng bộ hóa.
  10. Để sử dụng GUI, người dùng cần sao chép kho lưu trữ Cardano CLI Green và khởi động GUI từ thư mục thực thi.
PPP 040403 - Mã Off-chain với Kuber

PPP 040403 - Off-chain Code with Kuber

  1. Bài giảng nói về mã off-chain sử dụng Kuber, đây là thư viện Haskell và API JSON để soạn các giao dịch Cardano.
  2. Kuber đạt được giao diện cấp cao để xây dựng các giao dịch theo cách khai báo và phần phụ trợ Kuber căn chỉnh giao dịch.
  3. Người dùng có thể tự xây dựng và chạy Kuber bằng cách làm theo hướng dẫn trong readme hoặc sử dụng điểm cuối API mở trong Demeter Exposes.
  4. Kuber Playground là giao diện người dùng để tương tác với API Kuber nhằm xây dựng và chỉnh sửa các truy vấn JSON.
  5. Người dùng có thể kiểm tra hợp đồng mà không cần cài đặt node đầy đủ bằng Kuber Playground.
  6. Bài giảng sử dụng ví dụ vesting từ tuần trước với trình xác thực có chứa người thụ hưởng, thời hạn với hàm băm khóa công khai và thời gian POSIX.
  7. Người dùng cần tạo một Datum mà họ có thể sử dụng với khóa công khai của ví bằng Kuber.
  8. Để bọc thứ gì đó trong Datum vesting, người dùng có thể sử dụng Datum pre-vesting để nhận định dạng JSON có hàm băm khóa công khai và một chuỗi trả về hoặc in dữ liệu ở dạng JSON.
  9. Người dùng có thể sử dụng Kuber để lấy hàm băm khóa công khai của họ và bọc nó trong byte string xây dựng bằng cách sử dụng byte từ hàm chuyển đổi hex từ mô-đun tiện ích.
  10. Người dùng có thể xây dựng các giao dịch bằng cách sử dụng các lựa chọn, đầu vào, đầu ra, tài sản thế chấp, khoảng thời gian hiệu lực, địa chỉ thay đổi và metADAta. Nếu một tham số nào đó bị bỏ qua, Kuber sẽ tự động điền vào chỗ còn thiếu cho bạn.
PPP 040404 - Mã Off-chain với Lucid

PPP 040404 - Off-chain Code with Lucid

  1. Lucid là một thư viện cho phép tạo các giao dịch Cardano cơ bản và viết mã off-chain chung cho các hợp đồng blockchain bằng JavaScript.
  2. Lucid có thể được chạy qua hai runtimes, Node hoặc Dino. Sau này sẽ có một giải pháp thay thế mới cho Node với một số cải tiến.
  3. Lucid có thể được cài đặt cho Node thông qua npm install lucid-cardano và cho Dino bằng cách nhập nó qua địa chỉ web của nó.
  4. Lucid cũng có thể được đưa trực tiếp vào các ứng dụng web từ mã nguồn.
  5. Lucid đang được tích cực phát triển và bản phát hành mới nhất là 0.9.6.
  6. Kho lưu trữ Lucid GitHub chứa các ví dụ về cách sử dụng nó.
  7. Trang web Dino Land cung cấp phiên bản kết xuất của mã nguồn, giúp khám phá các khả năng của Lucid.
  8. Mã Lucid có thể được viết bằng TypeScript.
  9. Lucid có thể được kết nối với một blockchain thông qua blockfrost, chạy một node đầy đủ và cung cấp khóa API.
  10. Lucid cũng có thể được kết nối với nhiều hỗ trợ khác dành cho các nhà cung cấp dịch vụ tự lưu trữ.
PPP 040405 - Bài tập về nhà

PPP 040405 - Homework

  1. Bài tập về nhà liên quan đến hai trình xác thực.
  2. Bước đầu tiên là hiểu những gì trình xác thực làm.
  3. Học viên có thể sử dụng các công cụ như tests, mã nguồn và trình xác thực trước đó để hiểu trình xác thực là gì.
  4. Khi học viên tìm ra hàm của trình xác thực, họ cần viết mã off-chain cho tất cả các tương tác có thể có với trình xác thực.
  5. Học viên có thể chọn công cụ của riêng mình để viết mã.
  6. Cả hai trình xác thực đều yêu cầu các bước giống nhau, nhưng một trình xác thực được tham số hóa và trình xác thực kia thì không.
  7. Học viên có thể tìm kiếm sự trợ giúp trên Discord hoặc Stack Exchange nếu cần.
Bài giảng 05

PPP 040501 - Giới thiệu

PPP 040501 - Introduction

  1. Đây là phần giới thiệu về bài giảng về token gốc và sự hỗ trợ của Plutus.
  2. Bài giảng sẽ giải thích cách sử dụng Plutus để xác định chính sách đúc tiền cho token gốc.
  3. Bài giảng cũng sẽ đề cập đến việc đốt token gốc và sẽ giải thích ý nghĩa của giá trị trong Cardano.
  4. Bài giảng sẽ tham chiếu mô hình UTXO mở rộng.
  5. Mỗi đầu ra giao dịch chưa chi tiêu trong mô hình UTXO mở rộng có một địa chỉ và một giá trị.
  6. Trong mô hình UTXO mở rộng, mỗi UTXO cũng có một Datum.
  7. Các ví dụ về datum đã được trình bày trong các bài giảng trước.
  8. Khởi đầu, các giá trị duy nhất trên blockchain Cardano là ADA hoặc Lovelace.
  9. Token gốc phải được tạo và đốt một cách rõ ràng khi chúng không còn cần thiết nữa.
PPP 040502 - Giá trị

PPP 040502 - Values

  1. Kiểu giá trị được xác định trong API thư của Plutus trong mô-đun plutus.v1.ledger.value.
  2. Phiên bản 2 sử dụng cùng Kiểu giá trị như phiên bản 1.
  3. Token hoặc coin trên Cardano được định nghĩa bởi Mã tiền tệ (currency symbol) và tên Token (token name).
  4. Lớp tài sản là một Kiểu trình bao bọc xung quanh một cặp {Mã tiền tệ và tên Token}.
  5. ADA là một loại tài sản cụ thể và tất cả các Token gốc là các loại tài sản khác nhau.
  6. Giá trị của Kiểu giá trị là map từ tất cả các coin hoặc Token có thể có thành một số nguyên (integer), cho phép kết hợp các Token khác nhau.
  7. Việc xây dựng một giá trị được thực hiện bằng cách sử dụng hàm giá trị loại tài sản cho trước một loại tài sản và một số nguyên.
  8. Monoid là một lớp trong Haskell và lớp giá trị triển khai monoid.
  9. Một monoid là một lớp Kiểu (type class) định nghĩa một toán tử để kết hợp hai giá trị của Kiểu A với giá trị thứ ba của Kiểu A.
PPP 040503 - Một chính sách đúc token đơn giản

PPP 040503 - A Simple Minting Policy

  1. Minting Policy là một chính sách tiền tệ.
  2. Trong một giao dịch, tập lệnh chính sách đúc tiền tương ứng được định nghĩa cho từng Mã tiền tệ và giá trị (số lượng) là bắt buộc.
  3. Đối với mỗi Mã tiền tệ, luôn có một tập lệnh chính sách tương ứng được thực thi.
  4. Mỗi tập lệnh chính sách đúc tiền có hai đầu vào, Redeemer và Context.
  5. Đối với mỗi Mã tiền tệ trong trường Forge có số tiền khác không, tập lệnh chính sách tương ứng sẽ được chạy với Redeemer và Context.
  6. Context sẽ nhận được dưới dạng TX trong giao dịch đang được xác thực và mục đích tạo tập lệnh.
  7. Giao dịch cung cấp Redeemer cho tất cả các đầu vào tập lệnh.
  8. Lỗi của bất kỳ tập lệnh chính sách đúc tiền nào sẽ khiến toàn bộ giao dịch không thành công.
  9. Chính sách Minting đơn giản trả về true cho tất cả các ngữ cảnh tập lệnh (script contexts).
  10. Phiên bản định Kiểu của Chính sách đúc tiền đơn giản được chuyển đổi thành phiên bản không định Kiẻu sử dụng Hàm wrapPolicy.
PPPP 040504 - Chính sách đúc tiền thực tế hơn

PPP 040504 - A More Realistic Minting Policy

  • Một ví dụ thực tế hơn cho chính sách đúc token, giới hạn những người có thể đúc hoặc đốt token.
  • Chỉ chủ sở hữu của một khóa công khai cụ thể mới có thể đúc hoặc đốt token. Khóa này được liên kết với một dự án hoặc công ty và đóng vai trò của một ngân hàng trung ương.
  • Một mô-đun mới có tên "signed" được giới thiệu, mô-đun này bổ sung thêm một tham số thuộc loại hàm băm Pub Key vào chính sách.
  • Đây là một chính sách được tham số hóa và đối với mỗi lựa chọn tham số, một chính sách cụ thể khác sẽ nhận được.
  • Giao dịch đúc hoặc đốt token phải được ký bởi hàm băm khóa công khai được liên kết với dự án hoặc công ty.
  • Mã này được chuyển đổi thành phiên bản chưa định Kiểu, trong đó tham số thuộc loại dữ liệu tích hợp sẵn. Biến 'pkh' sau đó được chuyển đổi thành dữ liệu tích hợp bằng cách sử dụng Plutus TX không an toàn từ dữ liệu tích hợp để áp dụng cho phiên bản có định Kiểu.
  • Sau đó, bản ghi cho thấy cách làm việc với trình xác thực tập lệnh được tham số hóa trong Lucid hoặc nói chung là từ mã off-chain, sử dụng mã được biên dịch tùy biến có thể được tuần tự hóa vào đĩa.
  • Một hàm mới cho mô-đun tiện ích được thêm vào để tuần tự hóa mã được biên dịch tùy biến.
  • Bản ghi cho biết cách sử dụng Lucid để áp dụng tham số cho chính sách đúc tiền.
  • Tập lệnh Lucid được sử dụng để chọn tham số cho chính sách đúc tiền thành mã băm Pub Key của chính người dùng.
PPP 040505 - NFT's

PPP 040505 - NFT's

  • NFT là token không thể thay thế chỉ có thể tồn tại duy nhất.
  • Các token gốc được nghiên cứu từ đầu bài giảng cho đến giờ không phải là NFT vì chúng có thể được đúc nhiều lần.
  • Việc đúc NFT trong một giao dịch thông thường sẽ không được vì có thể gửi nhiều giao dịch.
  • Sử dụng thời hạn để chỉ cho phép đúc trước một thời điểm nhất định đảm bảo sẽ không có token mới nào được đúc sau thời gian đó.
  • Kiểm tra xem chỉ có một token được đúc trước thời hạn yêu cầu blockchain explorer
  • Plutus cho phép đúc NFT thực sự mà không cần blockchain explorer bằng cách ngăn chặn nhiều giao dịch đúc cho một token.
  • Việc sử dụng UTXO đảm bảo tính duy nhất vì mỗi UTXO là duy nhất và không bao giờ tồn tại nữa.
  • Các giao dịch không có đầu vào và chỉ có đầu ra không có giá trị có thể tồn tại nhiều lần, nhưng các khoản phí sẽ ngăn các giao dịch giống hệt nhau được tạo.
  • Các giao dịch và UTXO là duy nhất và không bao giờ có thể lặp lại.
PPP 040506 - Bài tập về nhà

PPP 040506 - Homework

  1. Bài tập về nhà đầu tiên là mở rộng ví dụ "signed".
  2. Tham số thứ hai của loại thời gian POSIX cần được thêm vào.
  3. Việc đúc hoặc đốt chỉ được phép nếu giao dịch được ký và nó diễn ra trước thời hạn.
  4. Đây là một chính sách đúc tiền thực tế mà nhiều dự án có thể muốn sử dụng.
  5. Các dự án chỉ định Khóa Pub Key của riêng chúng làm tham số đầu tiên và đặt thời hạn.
  6. Sửa đổi có thể được thực hiện trước khi thời hạn trôi qua.
  7. Sau khi thời hạn kết thúc, số lượng token sẽ được cố định.
  8. Mã off-chain cần được sửa đổi để thích ứng với chính sách này.
  9. Bài tập thứ hai là thay đổi chính sách NFT.
  10. Tên token không còn có thể được chọn tự do mà phải là 'byte string' trống.
Bài giảng 06

PPP 040601 - The State Monad trong thực tiễn

PPP 040601 - The State Monad in practice

  • Kiểm tra các thuộc tính của hợp đồng thông minh.
  • Thư viện được sử dụng để kiểm tra trình xác thực được gọi là Thư viện mô hình đơn giản Plutus sử dụng Đơn nguyên trạng thái (State Monad).
  • Kiểm tra thuộc tính đảm bảo rằng các hợp đồng thông minh hoạt động như mong đợi và có thể chứa tài sản trị giá hàng triệu đô la.
  • State Monad được sử dụng để theo dõi trạng thái của blockchain trong khi thực hiện các giao dịch.
  • Trạng thái ban đầu của blockchain được tạo bằng một UTXO chứa một UTXO duy nhất.
  • Hàm trợ giúp có "send value" được tạo để chuyển tiền từ người này sang người khác.
  • Hàm lấy một chuỗi chứa tên của người dùng gửi giá trị, một số nguyên biểu thị lượng giá trị sẽ được chuyển, người nhận giao dịch và trạng thái hiện tại của blockchain.
  • Hàm trả về giá trị Boolean đúng nếu giao dịch thành công và trạng thái mới của blockchain.
  • Nếu tổng số tiền của người gửi nhỏ hơn số tiền được chuyển, hàm sẽ trả về false và cùng trạng thái của blockchain.
PPP 040602 - Giới thiệu về thư viện Plutus Simple Model

PPP 040602 - Introduction to the Plutus Simple Model library

  • Lệnh serve-testing-docs được thêm vào để mở tài liệu trong trình duyệt.
  • Người dùng cần đảm bảo sử dụng phiên bản 5 trở lên của image Docker.
  • Hành động main là điểm bắt đầu khi "cabal test" được gọi.
  • Một hàm main mặc định được Tasty cung cấp để chuyển đổi một cây các bài test thành hành động I/O mà hàm main cần chạy.
  • "testGroup" là hàm cho phép đặt tên cho danh sách các bài test để phân loại chúng.
  • Các bài test thực tế được liệt kê với thông báo hoặc mô tả riêng của chúng.
  • Hai bài test khác nhau được đưa ra, một bài test chi tiêu đơn giản và một bài test không có đủ tiền.
  • Hàm trợ giúp được sử dụng để tạo danh sách ba mã băm PubKeyHash cho ba người dùng mới với một nghìn Loveless được tạo.
  • Các hành động chi tiêu đơn giản và không đủ tiền được thực hiện và sự thành công của các giao dịch bị khóa như một phần của trạng thái blockchain.
PPP 040603 - Unit Testing một Hợp đồng Thông minh

PPP 040603 - Unit Testing a Smart Contract

  • Một loại Datum tùy chỉnh đã được tạo cho trình xác thực để kiểm tra xem Redeemer chính xác có được chấp thuận hay không và liệu thời hạn đã qua chưa.
  • Hàm trình xác thực trích xuất thời hạn từ Datum và kiểm tra xem Redeemer là số âm hay bằng 0 và liệu thời hạn đã qua chưa.
  • Một bộ thử nghiệm đã được tạo với sáu thử nghiệm bao gồm các kết hợp khác nhau giữa Redeemer và thời hạn.
  • Bộ thử nghiệm bao gồm các hàm trợ giúp để thiết lập người dùng và đợi trong một thời gian nhất định trước khi sử dụng UTXO tại địa chỉ tập lệnh.
  • Bộ thử nghiệm sử dụng hàm mconcat kết hợp nhiều giao dịch đơn giản thành một giao dịch phức tạp duy nhất.
  • Bộ thử nghiệm bao gồm một giao dịch khóa chỉ định số tiền người dùng phải chi để tạo giao dịch và cách họ phải thanh toán tập lệnh để tạo giao dịch.
  • Giao dịch khóa được tạo bằng cách kết hợp hai giao dịch bằng hàm mconcat.
  • Bộ thử nghiệm mong muốn hai thử nghiệm đầu tiên thành công và bốn thử nghiệm còn lại thất bại.
  • Bộ thử nghiệm sử dụng giá trị chi tiêu của người dùng làm tham số vì nó phụ thuộc vào trạng thái của blockchain.
PPP 040604 - Thử nghiệm thuộc tính Hợp đồng thông minh

PPP 040604 - Property Testing a Smart Contract

  • Thử nghiệm đơn vị có thể giúp xác định các lỗi logic và các vấn đề trong hợp đồng thông minh nhưng nó không thể cung cấp thông tin về các thuộc tính của hợp đồng.
  • Sơ đồ cho thấy một mặt phẳng đại diện cho tất cả các kết hợp giá trị có thể có trong một hợp đồng thông minh.
  • Thử nghiệm thuộc tính tạo ra các giá trị ngẫu nhiên để kiểm tra các thuộc tính của mã, điều này có thể cung cấp thử nghiệm toàn diện hơn cho hợp đồng thông minh.
  • Kiểm tra nhanh là một thư viện Haskell được sử dụng để kiểm tra thuộc tính tạo ra các giá trị ngẫu nhiên để kiểm tra hàng trăm hoặc hàng nghìn lần mà một thuộc tính nắm giữ.
  • Kiểm tra nhanh không dành riêng cho việc thử nghiệm các hợp đồng thông minh, nhưng nó có thể được sử dụng cho bất kỳ loại thử nghiệm nào.
  • Hàm kiểm tra thuộc tính của Quick Check tự động điền thông số cho các kiểm tra.
  • Bài giảng cung cấp một ví dụ về kiểm tra trình xác thực bằng Kiểm tra nhanh.
  • Phiên bản tùy ý được sử dụng để tạo thời gian posix ngẫu nhiên, cần thiết để kiểm tra trình xác thực.
  • Hàm chạy kiểm tra được sử dụng để chạy kiểm tra và được cung cấp một Boolean, thời gian posix và một số nguyên.
  • Các thuộc tính được thử nghiệm trong bài giảng này bao gồm kiểm tra xem hợp đồng thông minh có thất bại trước thời hạn hay không, liệu Redeemer có giá trị dương sau thời hạn có luôn thất bại hay không và liệu Redeemer có giá trị âm sau thời hạn có luôn thành công hay không.
PPP 040605 - Thử nghiệm hợp đồng thông minh với Lucid

PPP 040605 - Testing Smart Contracts with Lucid

  • Bài giảng nói về việc thử nghiệm các hợp đồng thông minh với Lucid.
  • Tập lệnh đang được kiểm tra là "NegativeRtimed" nằm ở tuần thứ sáu trong thư mục bài giảng.
  • Các công cụ được sử dụng trong thử nghiệm có thể được chia thành ba loại: trình giả lập Lucid, triển khai gốc Dino để thử nghiệm đơn vị và công cụ thử nghiệm dựa trên thuộc tính kiểm tra nhanh.
  • Trình giả lập Lucid có thể được thiết lập để chạy một blockchain được đánh dấu cục bộ nhằm chạy thử nghiệm nhanh chóng và có toàn quyền kiểm soát.
  • Trước khi viết mã off-chain để thử nghiệm, chúng ta cần viết trình xác thực vào hệ thống tệp của mình.
  • Tệp "NegativeRtimed.js" nằm trong thư mục textures tests, thư mục này imports Lucid, thư viện kiểm tra tiêu chuẩn của Dino và thư viện kiểm tra nhanh là FC.
  • Hàm sentToScript sẽ gửi tiền đến vị trí tập lệnh với Datum và khóa riêng.
  • Hàm grab, lọc UTXO cho các UTXOs có Datum nhất định, xây dựng một giao dịch yêu cầu tất cả các UTXOs, ký giao dịch và gửi nó.
  • Hàm chạy thử nghiệm có ba đầu vào: Datum, Redeemer và số slot mà tại đó Hàm grab sẽ được bắt đầu.
  • Nếu số slot trước thời hạn, giao dịch sẽ không thành công và nếu sau thời hạn và được cung cấp đúng Redeemer, giao dịch sẽ xử lý thành công.
PPP 040606 - Chi tiêu gấp đôi và Bài tập về nhà

PPP 040606 - Double Spending and Homework

  1. Chi tiêu gấp đôi xảy ra khi người mua không gửi khoản thanh toán cho token hoặc NFT mà họ nhận được trong một giao dịch.
  2. Hợp đồng hoán đổi (swap) có thể được sử dụng để đảm bảo giao dịch bằng cách khóa token hoặc NFT trong trình xác thực và cung cấp cho người thụ hưởng và giá để chấp nhận.
  3. Datum tùy chỉnh có chứa người thụ hưởng và giá được tạo cho trình xác thực, kiểm tra xem số tiền trả cho người thụ hưởng có bằng với giá hay không.
  4. Tuy nhiên, tồn tại một lỗ hổng trong đó một kẻ ác ý có thể sử dụng hai đầu ra với cùng một mức giá và chỉ trả tiền cho một đầu ra.
  5. Các giải pháp cho vấn đề này bao gồm thêm số nhận dạng vào dữ liệu hoặc đảm bảo một đầu ra duy nhất đang được sử dụng trong giao dịch.
  6. Bài tập về nhà được đưa ra để tạo các thử nghiệm nhằm phát hiện lỗ hổng này và khắc phục trình xác thực.
  7. Bài kiểm tra chi tiêu thông thường hoạt động với hợp đồng thông minh hiện tại.
  8. Thử nghiệm chi tiêu gấp đôi không thành công như mong đợi.
  9. Nếu các thử nghiệm đang chạy ổn, hợp đồng thông minh có thể được sửa chữa và hãy sử dụng Discord để có thể nhận được trợ giúp.
Bài giảng 07

PPP 040701 - Giới thiệu

PPP 040701 - Introduction

  1. Bài giảng nói về Marlowe, một ngôn ngữ dành riêng cho các hợp đồng tài chính được xây dựng dựa trên Plutus.
  2. Trong các bài giảng trước, các thành phần quan trọng để viết ứng dụng của Plutus đã được đề cập, bao gồm mô hình UTXO mở rộng, mô hình kế toán, xác thực on-chain, chính sách đúc tiền và viết mã chuỗi.
  3. Plutus rất mạnh, nhưng tính hoàn thiện Turing của nó đi kèm với cái giá phải trả về mặt phân tích chương trình.
  4. Marlowe không phải là Turing hoàn chỉnh, nhưng nó cho phép phân tích tĩnh trước khi chạy chương trình để xác định thời gian tồn tại và các thuộc tính khác của nó.
  5. Marlowe được thiết kế đơn giản và trực quan cho những người không phải là lập trình viên để thể hiện các hợp đồng tài chính.
  6. Thiết kế của Marlowe được lấy cảm hứng từ một bài báo về việc chính thức hóa các hợp đồng tài chính truyền thống với ít cấu trúc.
  7. Việc thực thi các hợp đồng trên blockchain khác với thế giới thực do không có quyền truy đòi hợp pháp, vì vậy Marlowe bao gồm các trường hợp dự phòng và thời gian chờ.
  8. Marlowe sử dụng cách tiếp cận dựa trên tài khoản, với các tài khoản nội bộ được kiểm soát bởi hợp đồng.
  9. Marlowe Playground là một môi trường dựa trên web đồ họa để mô phỏng và tạo hợp đồng, với các tùy chọn sử dụng Haskell, JavaScript hoặc ngôn ngữ đồ họa có tên là Blockly.
  10. Bài giảng sẽ bao gồm bản giới thiệu Marlowe Playground và một loạt video về bộ công cụ khởi tạo Marlowe.
PPP 040702 - Marlowe Playground Demo

PPP 040702 - Marlowe Playground Demo

  • Có thể truy cập Marlowe Playground tại play.Marlowe-finance.io.
  • Playground cung cấp các tùy chọn khác nhau để tạo hợp đồng Marlowe, bao gồm JavaScript, Haskell, Marlowe và Blockly.
  • Blockly là một công cụ đồ họa cho phép người dùng tạo hợp đồng Marlowe mà không cần có kinh nghiệm lập trình trước đó.
  • Bản demo liên quan đến việc tạo một hợp đồng trong đó ba bên, Alice, Bob và Charlie, gửi 10 Ada vào hợp đồng và Charlie quyết định bên nào trong số hai bên còn lại nhận được tiền.
  • Hợp đồng có điều kiện nếu bất kỳ bên nào không thực hiện nghĩa vụ của mình, mọi người sẽ được bồi hoàn.
  • Bản demo bắt đầu với một hợp đồng đóng không thực hiện bất kỳ hành động nào, nhưng mục tiêu là tạo một hợp đồng chờ khoản tiền gửi của Alice.
  • Bản demo sử dụng cấu trúc "when" để chỉ định các hành động bên ngoài, bao gồm khoản tiền gửi của Alice, khoản tiền gửi của Bob và lựa chọn của Charlie.
  • Bản demo sử dụng cấu trúc ""if" để chỉ định các hành động có điều kiện dựa trên lựa chọn của Charlie.
PPP 040703 - Bài tập về nhà

PPP 040703 - Homework

  1. Bài tập sớm là để học viên có thời gian tập luyện với Marlowe Playground.
  2. Hợp đồng đã được xem xét trong bài giảng cần phải được sửa đổi.
  3. Charlie được yêu cầu đặt cọc số tiền gấp đôi số tiền mà Ellison đã đặt cọc.
  4. Nếu Charlie không đưa ra lựa chọn nào, Alice và Pop, mỗi người sẽ nhận được một nửa số tiền đặt cọc của Charlie.
  5. Trong ví dụ đã cho, cả Ellison và Pop đều kết thúc bằng 20.
  6. Charlie được cho là đặt xuống 20 ngay từ đầu.
  7. Phần còn lại của quá trình tiến hành như bình thường.
  8. Nếu Charlie đưa ra lựa chọn cho Alice, cô ấy sẽ nhận được 20 và Charlie sẽ nhận lại được tiền đặt cọc của mình.
  9. Nếu đến thời hạn mà Charlie không đưa ra lựa chọn nào, 20 người của anh ấy sẽ được chia cho Alice và Pop.

Bài giảng mở rộng Marlowe

Marlowe Starter Kit: Docker

Marlowe Starter Kit: Docker

  • Video giải thích cách cài đặt Marlowe runtime bằng Docker để sử dụng với "Marlowe Starter kit".
  • Có hai cách để sử dụng "Marlowe Starter kit": thông qua dịch vụ đám mây như Demeter.run hoặc tự mình thực hiện thông qua Docker.
  • Để sử dụng Marlowe runtime, bạn cần thiết lập các biến môi trường được kết nối với các dịch vụ.
  • "Marlowe Starter kit" bao gồm nhiều công cụ khác nhau, chẳng hạn như Marla CLI, CLI Marlowe runtime và máy chủ web Marlowe, mỗi công cụ được xác định bởi một tập hợp các biến môi trường.
  • Hệ sinh thái Marlowe bao gồm các dịch vụ lập chỉ mục và đồng bộ hóa chuỗi, dịch vụ lập chỉ mục và đồng bộ hóa Marlowe, node Cardano, dịch vụ xây dựng giao dịch Marlowe và dịch vụ proxy để thuận tiện.
  • NYX development shell được sử dụng để khởi chạy sổ ghi chép Jupiter có ví dụ và bạn cần bật hỗ trợ mảnh hỗn hợp trong đó.
  • Bạn nên đặt mình là người dùng đáng tin cậy trong cấu hình tiếp theo.
  • Bạn cần cài đặt NYX và thêm mình vào nhóm docker để sử dụng Docker.
  • Bạn cũng sẽ cần sao chép kho lưu trữ "Marlowe Starter kit" từ GitHub và nhập thư mục đó.
  • Cuối cùng, bạn cần chọn mạng của mình và khởi động Docker để tìm nạp tất cả image cho container và khởi chạy tất cả dịch vụ.
Marlowe Starter Kit: 0. Preliminaries

Marlowe Starter Kit: 0. Preliminaries

  1. Marlowe Starter Kit yêu cầu các khóa và địa chỉ mật mã để chạy trên blockchain.
  2. Để tạo các khóa và địa chỉ này, bạn cần có quyền truy cập vào một node, có thể lấy được thông qua Demeter.run hoặc bằng cách chạy cục bộ với Docker.
  3. Phần trình diễn trong video sử dụng phương thức Docker trong sổ ghi chép Jupyter.
  4. Các công cụ Marlowe cho phép các quy trình công việc khác nhau, bao gồm quy trình làm việc nhẹ bằng Marlowe CLI, quyền truy cập dòng lệnh vào phần phụ trợ và quyền truy cập web vào phần phụ trợ thông qua API REST của Marlowe.
  5. Các dịch vụ phụ trợ Marlowe runtime lập chỉ mục blockchain, diễn giải các giao dịch Marlowe và cho phép bạn xây dựng các giao dịch cũng như truy vấn lịch sử Marlowe.
  6. Bản trình diễn bắt đầu với một node có thể đã được triển khai từ Demeter.run hoặc thông qua Docker.
  7. Bản trình diễn đặt các biến môi trường để tìm node socket và số network magic numbers.
  8. Một faucet được tạo để phân phối ADA thử nghiệm cho các bên và hợp đồng.
  9. Người cho vay, người đi vay và các điều phối được tạo và các khóa và địa chỉ của họ được tạo.
  10. Các địa chỉ được tài trợ 1000 Ada thử nghiệm bằng cách sử dụng địa chỉ quỹ Marlowe CLI và số dư được truy vấn để xác nhận rằng mỗi địa chỉ có 1000 tADA.
Marlowe Starter Kit: 1. ZCB sử dụng ứng dụng khách dòng lệnh Marlowe Runtime

Marlowe Starter Kit: 1. ZCB using the Marlowe Runtime command-line client

  • Hướng dẫn này là một phần của bộ công cụ dành cho người mới bắt đầu Marlowe và tập trung vào các hợp đồng Trái phiếu không lãi suất (zero coupon Bond - ZCB).
  • Hướng dẫn trình bày ba cách khác nhau để chạy các hợp đồng ZCB, bao gồm sử dụng ứng dụng máy trạm dòng lệnh Marlowe runtime, sử dụng các dịch vụ thời gian chạy trên web thông qua API REST và chạy chúng ở dòng lệnh mà không cần Marlowe runtime.
  • Các dịch vụ phụ trợ Marlowe runtime là bắt buộc, có thể nhận được thông qua Demeter.run, dịch vụ lưu trữ đám mây hoặc bằng cách chạy cục bộ với Docker.
  • Hướng dẫn sử dụng máy tính xách tay Jupiter, được cài đặt sẵn các công cụ Marlowe.
  • Hợp đồng ZCB là một khoản vay mà ai đó cho vay tiền gốc và được trả lại tiền gốc và tiền lãi sau đó.
  • Trong Marlowe Playground, một hợp đồng ZCB có thể được xây dựng trong đó người cho vay gửi tiền gốc, người đi vay nhận được và sau đó trả lại tiền lãi và tiền gốc cho người cho vay, tất cả được tính bằng Ada.
  • Để chạy hợp đồng, cần có khóa và địa chỉ của các bên (người cho vay và người vay).
  • Hợp đồng cần được thiết kế bằng cách sử dụng 80 Ada tiền gốc và 5 Ada tiền lãi.
  • Hợp đồng yêu cầu tối thiểu 2 Ada được đưa vào ban đầu để giữ nó trên blockchain.
  • Hợp đồng có hai thời hạn: một là để bên cho vay đặt cọc khoản vay và một là để bên vay trả lại gốc và lãi.
Marlowe Starter Kit: 2. ZCB sử dụng Marlowe Runtime REST API

Marlowe Starter Kit: 2. ZCB using the Marlowe Runtime REST API

  1. Bộ công cụ dành cho người mới bắt đầu của Marlowe có bài học thứ hai về cách vận hành hợp đồng trái phiếu phiếu giảm giá bằng không với API REST Marlowe Runtimee.
  2. Token thay thế địa chỉ trong bài học thứ hai, vì chúng được sử dụng để ủy quyền cho các giao dịch Marlowe.
  3. Các yêu cầu sơ bộ tương tự như bài học đầu tiên cần phải được đáp ứng, chẳng hạn như biết node socket, network magic và thông tin máy chủ web cũng như lấy khóa và địa chỉ cho người cho vay và người vay.
  4. Thiết kế hợp đồng vẫn giữ nguyên, với tiền gốc là ADA và tiền lãi là 5 ADA, và được bắt đầu với hai ADA để đáp ứng yêu cầu UTXO tối thiểu.
  5. Marlowe Playground có thể được sử dụng để thiết kế hợp đồng, với tùy chọn tải xuống ở định dạng JSON.
  6. Công cụ Marlowe CLI có thể được sử dụng để điền vào mẫu và tạo hợp đồng.
  7. Điều quan trọng là phải kiểm tra mức độ an toàn của hợp đồng, với các bước được cung cấp để hiểu điều gì đang diễn ra, sử dụng các biện pháp bảo mật và thực tiễn tốt nhất, sử dụng Marlowe Playground để thử nghiệm và sử dụng các công cụ phân tích cũng như Mạng thử nghiệm Cardano.
  8. JSON payloads được sử dụng trong các yêu cầu tạo hợp đồng với API REST Marlowe Runtime.
  9. Payloads bao gồm hợp đồng, UTXO tối thiểu và thông tin đúc token vai trò cho người cho vay và người vay.
  10. Lệnh curl được sử dụng để thực hiện yêu cầu và lưu trữ tệp JSON phản hồi với ID hợp đồng và thông tin giao dịch.
Marlowe Starter Kit: 3. ZCB sử dụng Marlowe Runtime CLI

Marlowe Starter Kit: 3. ZCB using the Marlowe Runtime CLI

  • Có ba ví dụ về việc chạy hợp đồng trái phiếu không lãi suất trong Marlowe, hai trong số đó sử dụng Marlowe Runtimee thông qua dòng lệnh hoặc API phần còn lại.
  • Hướng dẫn sẽ xem xét việc thực hiện hợp đồng bằng cách sử dụng các công cụ cấp thấp hơn Marlowe Runtimee.
  • Hướng dẫn sử dụng Jupiter Lab và sổ ghi chép để chạy hợp đồng.
  • Sơ bộ bao gồm kết nối với node socket, ký các khóa và địa chỉ cho người vay và người cho vay, đồng thời thiết lập một số biến môi trường.
  • Thiết kế hợp đồng giống như trước đây, nguyên tắc cho vay và nguyên tắc trả lại cộng với tiền lãi, với tối thiểu 2 Ada tại địa chỉ hợp đồng.
  • Trong hợp đồng này có hai thời hạn, một là để bên cho vay gửi tiền gốc và một là để bên đi vay trả lại tiền gốc và gửi tiền lãi.
  • Mẫu Marlowe CLI được sử dụng để tạo hợp đồng và nó cũng có thể được thiết kế bằng Marlowe playground.
  • Cần kiểm tra tính khả thi của hợp đồng và có sẵn công cụ phân tích để nghiên cứu mức độ an toàn của hợp đồng.
  • Hướng dẫn sử dụng lệnh chạy của công cụ Marlowe CLI, với các lệnh phụ bao gồm khởi tạo và tự động thực thi, để thu thập thông tin về hợp đồng, khởi tạo hợp đồng và thực hiện giao dịch.
Marlowe Starter Kit: 4. Ký quỹ bằng cách sử dụng API REST của Marlowe Runtime

Marlowe Starter Kit: 4. Escrow using the Marlowe Runtime's REST API

  1. Hướng dẫn này nói về việc chạy hợp đồng ký quỹ bằng cách sử dụng Marlowe runtime và API REST của nó.
  2. Hợp đồng ký quỹ có người mua, người bán và người trung gian tham gia vào đó.
  3. Người mua gửi tiền và sau đó họ có cơ hội báo cáo vấn đề Yes hoặc No.
  4. Nếu người mua nói rằng mọi thứ đều ổn, người bán sẽ nhận được giá mua và nếu có vấn đề, người bán có thể đồng ý hoặc không đồng ý.
  5. Nếu người bán đồng ý, người mua được hoàn lại tiền; nếu không, hòa giải viên phải đưa ra quyết định.
  6. Hợp đồng có nhiều đường dẫn thông qua nó và bất kỳ đường dẫn nào trong số chúng đều có thể được chạy.
  7. Hướng dẫn sử dụng máy chủ web Marlowe runtime, với ba bên: bên cho vay, bên đi vay và bên hòa giải, mỗi bên có địa chỉ và khóa được tài trợ.
  8. Các biến môi trường được đặt để truy cập mọi thứ một cách dễ dàng, bao gồm node socket, network magic và URL cho Marlowe runtime.
  9. Hướng dẫn chỉ ra cách thiết kế hợp đồng bằng Marlowe Playground hoặc dòng lệnh, với các tham số khác nhau để điền vào.
  10. Hợp đồng kết quả được lưu trữ ở định dạng tệp JSON hoặc YAML.
Marlowe Starter Kit: 5. Hợp đồng hoán đổi sử dụng API REST của Marlowe Runtime

Marlowe Starter Kit: 5. Swap contract using the Marlowe Runtime's REST API

  • Phần này thảo luận về ví dụ về hợp đồng hoán đổi (swap contract) trong bộ công cụ bắt đầu của Marlowe.
  • Đây là ví dụ thứ năm trong bộ công cụ.
  • Các ví dụ trước đây bao gồm Zero coupon Bond chạy bằng các phương pháp khác nhau và Hợp đồng ký quỹ.
  • Hợp đồng hoán đổi liên quan đến token gốc, trong trường hợp này là Djed.
  • Hợp đồng có một tỷ giá hối đoái được xây dựng trong đó.
  • Máy chủ web của Marlowe runtime được sử dụng để thực hiện hợp đồng.
  • Hợp đồng được thiết kế để hoán đổi 294 ADA lấy 100 Djed.
  • Marlowe playground được sử dụng để tạo hợp đồng.
  • Hợp đồng được xử lý bằng Marlowe runtime và giao dịch được ký bằng CLI.
  • Hợp đồng thành công và các nhà cung cấp nhận được token tương ứng của họ.
Bài giảng 08

PPP 040801 - Giới thiệu

PPP 040801 - Introduction

  1. Bài giảng về staking và mối quan hệ của nó với Plutus
  2. Tập lệnh Plutus có hai mục đích chính: chi tiêu và đúc tiền (spending and minting)
  3. Bài giảng này tập trung vào mục đích thứ ba: trả thưởng (rewarding)
  4. staking trên mạng chính (mainnet) và mạng thử nghiệm (testnet) của Cardano chỉ có thể thực hiện được sau hard fork Alonso
  5. Việc trả thưởng staking phụ thuộc vào các epoch kéo dài năm ngày
  6. Chờ đợi từng epoch để thử nghiệm staking là không thực tế, vì vậy, một giải pháp thay thế là tạo ra một mạng Private Testnet tư
  7. Trong mạng Private Testnet, các tham số có thể được kiểm soát và các epoch có thể được rút ngắn hơn
  8. Bải giảng hướng dẫn cách rruy cập mạng kiểm tra riêng sẽ
  9. Plutus có khả năng hạn chế hoặc ảnh hưởng đến việc rút phần thưởng staking trong một số trường hợp nhất định
  10. Chính sách Minting sử dụng tập lệnh Plutus có thể được sử dụng để trả thưởng staking.
PPP 040802 - Mạng Private Testnet

PPP 040802 - The Private Testnet

  • Private Testnet cho Cardano được cung cấp sẵn trong một container đóng gói sẵn.
  • Mạng Private Testnet nằm trong một thư mục trong container có tên woofpool/cardano-private-testnet-setup.
  • Nhánh chính không được sử dụng; thay vào đó, nhánh babbag được sử dụng để mạng Private Testnet hoạt động.
  • Cấu hình mặc định cho mạng Private Testnet tư được thiết lập để có ba node, ba người dùng và ba nhóm stake với số tiền ban đầu.
  • Để truy cập node cardano, container phải được khởi động lại sau khi phiên bản mới nhất của kho lưu trữ được cập nhật.
  • Để chạy testnet riêng tư, hãy thay đổi thư mục và chạy tập lệnh tự động.
  • Ưu điểm của mạng Private Testnet là tốc độ nhanh.
  • Tuy nhiên, vì nó nhanh hơn nên các khóa KES cần được gia hạn mỗi giờ, nếu không sẽ phát sinh các vấn đề.
  • Bạn nên gia hạn khóa hoặc bắt đầu lại mạng thử nghiệm.
  • Có sẵn nhiều tập lệnh khác nhau để tương tác với mạng Private Testnet tư, chẳng hạn như truy vấn tip, truy vấn UTXO, truy vấn stake pool và rút tiền.
PPP 040803 - Plutus & Staking

PPP 040803 - Plutus & Staking

  • Tập lệnh Plutus nhận trường "ScriptPurpose" làm một trong các đối số.
  • Mục đích tệp lệnh "spending" và "minting" đã được thảo luận, nhưng không phải là mục đích "rewarding" và "certifying", có liên quan đến staking.
  • Địa chỉ staking tập lệnh (Script stake addresses) có thể được tạo bằng cách sử dụng tập lệnh Plutus thay vì cặp khóa công khai-riêng tư.
  • Nếu một Địa chỉ staking tập lệnh được sử dụng, thì tập lệnh tương ứng sẽ được thực thi để xác định xem một giao dịch có được phép rút phần thưởng hay không.
  • Các chứng nhận như chứng chỉ đăng ký, ủy quyền và hủy đăng ký có thể được đính kèm vào một giao dịch.
  • Trường thông tin rút tiền của TX là map từ thông tin xác thực staking đến số nguyên và chứa địa chỉ staking cũng như số lượng phần thưởng sẽ được rút.
  • Nếu thông tin xác thực staking được cung cấp bởi tập lệnh Plutus, tập lệnh sẽ được thực thi để xác định xem việc rút tiền có hợp lệ hay không.
  • Trình xác thực staking có thể được xác định để kiểm soát việc rút tiền thưởng và được tham số hóa bằng một địa chỉ.
  • Trình xác thực staking chỉ cho phép rút tiền nếu ít nhất một nửa số tiền thưởng được rút đến địa chỉ được chỉ định.
  • Phiên bản đã định Kiểu của trình xác thực staking sử dụng các loại Haskell thích hợp và có loại trả về là "unit".
PPP 040804 Dùng thử trên Testnet

PPP 040804 Trying it on the Testnet

  • Thử nghiệm trình xác thực staking trên private testnet.
  • Người dùng được xác định trước thứ hai đưuọc sử dụng trên private testnet để kiểm tra trình xác thực.
  • Họ tuần tự hóa trình xác thực staking vào một thư mục asset.
  • Họ tạo địa chỉ staking từ tập lệnh mà họ vừa tạo, đây là ví dụ đầu tiên về địa chỉ staking dựa trên tập lệnh.
  • Họ đăng ký và ủy quyền cho một pool bằng cách tạo và gửi giao dịch, đồng thời cung cấp tài sản thế chấp vì có liên quan đến các tập lệnh Plutus.
  • Họ đính kèm giấy chứng nhận đăng ký và giấy chứng nhận ủy quyền, đồng thời cung cấp kịch bản làm nhân chứng.
  • Họ ký giao dịch bằng khóa thanh toán của người dùng thứ nhất và ráp chúng với nhau.
  • Họ kiểm tra địa chỉ thanh toán mới được tạo để tìm số tiền từ địa chỉ cũ của người dùng thứ nhất.
  • Hầu như tất cả số tiền ban đầu được chuyển đến địa chỉ thanh toán mới, ngoại trừ tiền gửi đăng ký và phí giao dịch.
  • Họ rút phần thưởng từ địa chỉ staking mới bằng tập lệnh và trả một nửa cho người dùng thứ hai.
PPP 040805 Bài tập về nhà

PPP 040805 Homework

  • Ví dụ về một trình xác thực staking không đúng thực tế lắm.
  • Bất kỳ ai cũng có thể rút phần thưởng mà không bị hạn chế trong hệ thống hiện tại.
  • Bài tập về nhà là cải thiện trình xác thực staking để làm cho nó thực tế hơn.
  • Trình xác thực staking cần đối số thứ hai, hàm PubKeyHash, cần ký mọi giao dịch liên quan đến khóa staking.
  • ubKeyHash được sở hữu bởi khóa thanh toán của người dùng thứ nhất, có nghĩa là chỉ người dùng thứ nhất mới có thể rút phần thưởng hoặc thay đổi/thiết lập ủy quyền.
  • Trong trường hợp rút tiền, một nửa số tiền thưởng vẫn phải được chuyển đến địa chỉ được chỉ định.
  • Điều này làm cho trình xác thực staking an toàn hơn và ít bị lạm dụng hơn.
  • Không có bộ thử nghiệm nào được cung cấp cho nhiệm vụ này.
  • Trình xác thực staking cần được kiểm tra thủ công trên mạng thử nghiệm riêng.
  • Những thay đổi được đề xuất sẽ làm cho trình xác thực staking trở nên thực tế và hữu ích hơn.

PPP 040901 - Tạo Dapp Stablecoin của riêng chúng ta

PPP 040901 - Creating our own Stablecoin Dapp

Bài 9 của Chương trình Plutus Pioneer đề cập đến việc xây dựng một DApp stablecoin theo thuật toán.

  • Dự án bao gồm việc tạo các hợp đồng thông minh và một ứng dụng web đầy đủ Hàm.
  • Stablecoin sẽ là một stablecoin thuật toán được thế chấp vượt mức với cơ chế thanh lý để khuyến khích sự ổn định.
  • Trình xác thực có tên là Tài sản thế chấp sẽ được sử dụng để đăng nhập và giải phóng tài sản thế chấp trong ADA và chính sách Đúc tiền sẽ được sử dụng để quản lý việc đúc và đốt stablecoin.
  • Việc thanh lý xảy ra khi mối quan hệ giữa giá trị của tài sản thế chấp bị khóa và số tiền mà họ đúc nằm dưới ngưỡng được xác định trước.
  • Giá trị của stablecoin sẽ phụ thuộc vào tài sản thế chấp và một Oracle sẽ được sử dụng để giữ giá của ADA bằng đô la Mỹ được cập nhật.
  • Nhà phát triển phải cung cấp một trình xác thực Oracle với tỷ lệ USD/ADA, trình xác thực Tài sản thế chấp khóa tài sản thế chấp trong ADA và chính sách Minting để Mint và đốt stablecoin dựa trên tài sản thế chấp.
  • Các giao dịch cần thiết để triển khai Oracle vào blockchain bao gồm đúc NFT để nhận UTXO mới và triển khai Oracle với giá hiện tại của ADA và NFT làm giá trị.
  • Để giữ cho Oracle luôn cập nhật, nhà phát triển stablecoin phải sử dụng trình xác thực Oracle cũ và tạo một trình xác thực mới với tốc độ cập nhật.
  • Người dùng có thể đúc stablecoin của riêng họ bằng cách cung cấp tài sản thế chấp, chính sách Minting làm tập lệnh tham chiếu và Oracle để tính toán số lượng tài sản thế chấp cần thiết cho stablecoin.
PPP 040902 - Sử dụng giao diện người dùng Dapp Stablecoin của chúng ta

PPP 040902 - Using our Stablecoin Dapp UI

  • Đây là hướng dẫn về cách sử dụng giao diện người dùng Stablecoin Dapp.
  • Hướng dẫn bao gồm các hướng dẫn về cách thay thế một số mã bằng mã của riêng bạn.
  • Oracle, xác định hợp đồng thông minh, được tạo và triển khai.
  • Tỷ lệ phần trăm tài sản thế chấp tối thiểu được chọn trong tab chủ sở hữu và các tập lệnh được triển khai.
  • ID chính sách stablecoin và loại tài sản phụ thuộc vào nó được tạo.
  • Người dùng có thể triển khai các đồng stablecoin mới.
  • Để đúc 10 đồng stablecoin, 15 ADA bị khóa vì Oracle hiện tại là 1 ADA đổi 1 USD.
  • Các chi tiết giao dịch cũng được hiển thị.
  • Hướng dẫn giải thích các bước khác nhau liên quan đến việc triển khai stablecoin và cách sử dụng các loại ví khác nhau.
  • Hướng dẫn cung cấp giải thích chi tiết về các mã code được sử dụng và cách chúng được thay thế.
PPP 040903 - Oracle của Stablecoin

PPP 040903 - Stablecoin's Oracle

Bài giảng tuần 9 đề cập đến Oracle của Stablecoin.

  • Thư mục bài giảng có phần on-chain và off-chain.
  • Phần on-chain có mã nguồn cho các trình xác thực như tài sản thế chấp, chính sách đúc tiền và chính sách NFT.
  • Phần off-chain có ứng dụng Next.js để điều chỉnh đa lạm phát với mã để đúc NFT và triển khai, cập nhật và xóa Oracle.
  • Trong một kịch bản với thế giới thực, Oracle được cập nhật tự động bởi chủ sở hữu phụ trợ.
  • Cần có NFT để triển khai Oracle và quy trình bắt đầu bằng việc tạo và gửi giao dịch.
  • Tệp NFT có chính sách đúc trong đó tham chiếu đầu ra giao dịch phải bằng giá tham số một chiều để thực hiện một lần.
  • Mã off-chain có Hàm NFT đúc để lấy UTXO, tạo tên token và áp dụng các tham số.
  • Lớp tài sản và ID chính sách của NFT được tạo bằng cách sử dụng ID chính sách đúc và tên token trong HEX.
  • Mã trình xác thực của Oracle có Hàm phân tích dữ liệu của Oracle.
PPP 040904 - Deploying Stablecoin's Reference Scripts

PPP 040904 - Deploying Stablecoin's Reference Scripts

  1. Mục tiêu là triển khai các tập lệnh để đúc tiền ổn định.
  2. Trình xác thực nâng cao và chính sách đúc được sử dụng làm tập lệnh tham chiếu.
  3. Hàm triển khai kiểm tra các giá trị bắt buộc ở trạng thái hiện tại.
  4. Chính sách khai thác cuối cùng yêu cầu ba tham số: trình xác thực Oracle, trình xác thực tài sản thế chấp và tỷ lệ % trung bình tài sản thế chấp.
  5. Hàm chính sách Lucid nhận ba tham số để tạo chính sách đúc tiền.
  6. Hàm chính sách đúc cuối cùng get áp dụng các tham số cho Hàm chính sách Lucid.
  7. Tên token phải giống với tên được mã hóa cứng trong chính sách của LinkedIn.
  8. Hàm băm của trình xác thực Oracle thu được bằng cách sử dụng trình xác thực để băm tập lệnh và áp dụng nó vào tập lệnh Oracle.
  9. Hàm băm của trình xác thực tài sản thế chấp được lấy bằng phương pháp tương tự, nhưng với tập lệnh tài sản thế chấp được mã hóa cứng.
  10. Chính sách stablecoin cuối cùng có được bằng cách áp dụng chính sách đúc tiền và hàm băm của trình xác thực tài sản thế chấp cho mã, tạo ID chính sách và tên token cũng như cập nhật trạng thái.
PPP 040906 - Đốt Stablecoin và thanh lý các vị thế

PPP 040906 - Burning Stablecoins and Liquidating positions

  • Video này thảo luận về các trường hợp đốt và thanh lý liên quan đến stablecoin.
  • Có hai ví dụ được chia sẻ với rất nhiều mẫu kiểm tra khác nhau.
    • checkBurnAmountMatchesCollateralDatum được sử dụng trong cả hai trường hợp đốt và thanh lý.
    • checkBurnNegative được sử dụng trong cả hai trường hợp.
  • Trong trường hợp burn, chủ sở hữu tài sản thế chấp checkColOwner phải được kiểm tra, trong khi trong trường hợp thanh lý, hàm băm của trình xác thực tài sản thế chấp được so sánh với nhật ký tài sản thế chấp và tiền ổn định được đúc.
  • Để kiểm tra số lượng ghi khớp với Datum tài sản thế chấp, Datum từ dữ liệu đầu vào tài sản thế chấp được lấy và phân tích cú pháp bằng một hàm được xác định trước đó.
  • Datum đầu vào của tài sản thế chấp được so sánh với hàm băm của trình xác thực tài sản thế chấp trong trường hợp ghi.
  • Trong trường hợp burn, chủ sở hữu tài sản thế chấp bên trong thời hạn của tài sản thế chấp phải là người ký tên.
  • checkBurnNegative được sử dụng trong cả trường hợp 'Đốt' và 'Thanh lý' để ngăn chặn việc đúc tùy tiện.
  • checkLiquidation tương tự như checkMaxMinOut và được sử dụng để kiểm tra xem giá trị trung bình tối đa có nhỏ hơn số tiền đúc hay không.
PPP 040907 - Kiểm tra tập lệnh Stablecoin của chúng ta

PPP 040907 - Testing our Stablecoin's scripts

  • Video này nói về việc thử nghiệm các tập lệnh của stablecoin.
  • Nó chứa hai trường hợp thử nghiệm, 'kiểm tra từ đầu đến cuối' và 'trường hợp thanh lý'.
  • Việc triển khai stablecoin là 'ADA làm tài sản thế chấp', có nghĩa là ADA bị khóa để đúc stablecoin và nó được mở khóa để vận hành Oracle.
  • Để vận hành Oracle, deployOracle đặt giá trị ban đầu của Oracle, trong khi updateOracle thay đổi giá trị của nó.
  • Việc đúc, đốt và thanh lý stablecoin yêu cầu tài sản thế chấp, tham chiếu của trình xác thực Oracle, người dùng đúc, giá trị đúc và các tham số của Oracle.
  • Hàm mintStablecoin chỉ định tài sản thế chấp của người dùng, tập lệnh stablecoin, hàm băm trình xác thực Oracle và hàm băm trình xác thực tài sản thế chấp. Hàm xây dựng giao dịch để tạo ra stablecoin.
  • Hàm burnStablecoin yêu cầu stablecoin của người dùng và giá trị để đốt. Hàm xây dựng giao dịch để đốt stablecoin.
  • Trong trường hợp 'thanh lý', người dùng một và hai đang đúc stablecoin, trong khi người dùng ba cố gắng thanh lý vị thế của họ. Người dùng một không có đủ tài sản thế chấp để được thanh lý, nhưng người dùng hai đã được thanh lý thành công.

Picture