Skip to main content

Bài 9: Marlowe Playground

Hướng dẫn này giới thiệu tổng quan về Marlowe Playground, một công cụ trực tuyến cho phép người dùng tạo, phân tích, tương tác và mô phỏng hoạt động của các hợp đồng Marlowe được nhúng.

Giới thiệu Marlowe Playground

Để Marlowe có thể sử dụng được trong thực tế, người dùng cần có khả năng hiểu các hợp đồng sẽ hoạt động như thế nào khi được triển khai vào blockchain, nhưng không cần triển khai. chúng ta có thể làm điều đó bằng cách mô phỏng hành vi của họ ngoài chuỗi, tương tác bước qua việc đánh giá hợp đồng trong công cụ dựa trên trình duyệt, Marlowe Playground, một công cụ web hỗ trợ xây dựng tương tác, sửa đổi và mô phỏng các hợp đồng thông minh được viết bằng Marlowe.

Hợp đồng có thể được tạo ra theo bốn cách khác nhau trong Playground. Chúng ta có thể viết trực tiếp bằng Marlowe, hoặc sử dụng biểu diễn Blockly của Marlowe. Marlowe cũng được nhúng trong Haskell và JavaScript, và chúng ta có thể tạo hợp đồng bằng các ngôn ngữ này và sau đó chuyển đổi (“biên dịch”) chúng sang Marlowe trong Playground. Khi hợp đồng đã được viết bằng Blockly, Haskell hoặc JavaScript, chúng ta có thể chuyển sang Trình mô phỏng để phân tích và mô phỏng hợp đồng.

Công việc từ Playground có thể được lưu dưới dạng ý chính trên github. Các dự án có thể được tải lại hoặc sao chép sau đó. Ngay cả khi không sử dụng github, dự án vẫn được lưu giữa các phiên, nhưng điều này rất dễ bay hơi và sẽ bị mất nếu bộ nhớ đệm của trình duyệt được cập nhật.

Phần còn lại của phần này sẽ trình bày chi tiết hơn về hoạt động của Sân chơi. Lưu ý rằng chúng ta sử dụng kiểu in đậm cho các node và các thành phần khác trong phần sau.

Bắt đầu

Trang đích của Marlowe Playground trông như thế này

Picture

Thanh tiêu đề có một liên kết đến hướng dẫn này ở phía bên tay phải và chân trang có một số liên kết chung.

Trang cung cấp ba tùy chọn

  • Mở dự án hiện có Thao tác này sẽ mở một dự án đã được lưu trước đó. Xem phần Lưu và Mở Dự án bên dưới để biết thêm chi tiết về cách thiết lập.
  • Mở một ví dụ Thao tác này sẽ tải một ví dụ vào dự án hiện có, trong môi trường do người dùng chọn.

Picture

  • Bắt đầu một cái gì đó mới Tại đây bạn được lựa chọn để bắt đầu bằng Javascript, Haskell, Marlowe hoặc Blockly.
  • Mỗi lựa chọn trong số này đều được bảo hiểm ngay bây giờ.
  • Bất cứ nơi nào bạn bắt đầu, bạn sẽ có cơ hội để mô phỏng các hợp đồng mà bạn phát triển.

Trình chỉnh sửa chương trình được sử dụng trong Playground là trình chỉnh sửa Monaco https://microsoft.github.io/monaco-editor/ và nhiều tính năng của nó có sẵn, bao gồm cả menu có sẵn khi nhấp chuột phải.

Trình soạn thảo JavaScript: phát triển các hợp đồng nhúng

Để biết chi tiết về cách xác định cách nhúng JavaScript cho Marlowe, hãy xem Marlowe nhúng trong JavaScript

Chúng ta có thể sử dụng JavaScript để làm cho các định nghĩa hợp đồng dễ đọc hơn bằng cách sử dụng các định nghĩa JS cho các thành phần phụ, chữ viết tắt và các hàm mẫu đơn giản. Trình chỉnh sửa JS được hiển thị ở đây.

Picture

Trình soạn thảo JS được mở ở đây trên Escrow với ví dụ tài sản thế chấp có trong các ví dụ. Để mô tả một hợp đồng Marlowe trong trình soạn thảo, một giá trị của kiểu Contract phải được trả về do hàm được cung cấp bằng cách sử dụng hướng dẫn return.

Picture

Trình chỉnh sửa hỗ trợ tự động hoàn thành, kiểm tra lỗi trong quá trình chỉnh sửa và thông tin về các ràng buộc khi di chuột qua. Đặc biệt, sử dụng chuột qua bất kỳ liên kết được nhập nào sẽ hiển thị loại của nó (trong TypeScript).

Các node trong thanh tiêu đề cung cấp chức năng tiêu chuẩn:

  • Tạo một dự án mới
  • Mở một dự án hiện có
  • Mở một trong các ví dụ dựng sẵn
  • Đổi tên dự án hiện có
  • Lưu dự án hiện tại dưới tên hiện tại của nó (nếu có).
  • Lưu dự án hiện tại thành dự án mới được đặt tên.

Khi bạn nhấp vào node Biên dịch (ở góc trên cùng bên phải), mã trong trình chỉnh sửa được thực thi và đối tượng JSON do hàm trả về từ quá trình thực thi được phân tích cú pháp thành một hợp đồng Marlowe thực tế; sau đó bạn có thể nhấn Gửi đến trình mô phỏng để bắt đầu mô phỏng hợp đồng.

Nếu biên dịch thành công, mã đã biên dịch được hiển thị bằng cách chọn Mã đã tạo ở chân trang; điều này sau đó cũng có thể được giảm thiểu.

Picture

Nếu hợp đồng không thể được chuyển đổi thành công sang Marlowe, các lỗi cũng được hiển thị trong một lớp phủ có thể truy cập được dưới dạng Lỗi ở chân trang.

Picture

Nhìn lại phần chân trang, bạn có thể thấy rằng bạn có thể truy cập kết quả của Phân tích tĩnh, như được mô tả bên dưới, cũng như kiểm tra và chỉnh sửa Siêu dữ liệu hợp đồng.

Picture

Trình chỉnh sửa siêu dữ liệu chứa các trường cho các mô tả chung của mọi hợp đồng, nhưng cũng hỗ trợ nhậpthông tin mô tả

  • Vai trò
  • Thông số
  • Sự lựa chọn

Khi hợp đồng được biên dịch thành công, trình chỉnh sửa siêu dữ liệu sẽ nhắc bạn thêm siêu dữ liệu cho các trường tương ứng với các phần tử thích hợp của hợp đồng và xóa các trường không tương ứng với bất kỳ nội dung nào trong hợp đồng.

Siêu dữ liệu hợp đồng không chỉ cung cấp tài liệu cho các hợp đồng Marlowe mà còn được sử dụng trong Marlowe Run, ứng dụng khách người dùng cuối sẽ được sử dụng để chạy các liên hệ Marlowe trên blockchain Cardano.

Trình chỉnh sửa Haskell: phát triển các hợp đồng nhúng

Người biên tập hỗ trợ phát triển các hợp đồng Marlowe được mô tả trong Haskell. chúng ta có thể sử dụng Haskell để làm cho các định nghĩa hợp đồng dễ đọc hơn bằng cách sử dụng các định nghĩa Haskell cho các thành phần phụ, chữ viết tắt và các hàm mẫu đơn giản. Trình chỉnh sửa Haskell được hiển thị trong hình ảnh sau đây.

Picture

Trình chỉnh sửa hỗ trợ tự động hoàn thành, kiểm tra lỗi trong quá trình chỉnh sửa và thông tin về các ràng buộc khi di chuột qua. Các node trong thanh tiêu đề cung cấp chức năng tiêu chuẩn:

  • Tạo một dự án mới
  • Mở một dự án hiện có
  • Mở một trong các ví dụ dựng sẵn
  • Đổi tên dự án hiện có
  • Lưu dự án hiện tại dưới tên hiện tại của nó (nếu có).
  • Lưu dự án hiện tại thành dự án mới được đặt tên.

Trình soạn thảo Haskell được mở ở đây trên ví dụ Ký quỹ có trong các ví dụ. Để mô tả hợp đồng Marlowe trong trình soạn thảo, chúng ta phải xác định giá trị cấp cao nhất Contract của loại Contract; chính giá trị này được chuyển đổi thành Marlowe thuần túy bằng node Biên dịch (ở góc trên cùng bên phải). Nếu biên dịch thành công, mã đã biên dịch được hiển thị bằng cách chọn Mã đã tạo ở chân trang:

Picture

Khi biên dịch thành công, kết quả có thể được gửi đến trình mô phỏng hoặc đến Blockly: các tùy chọn này được cung cấp bởi các node Gửi tới Trình mô phỏngGửi tới Blockly ở góc trên cùng bên phải của trang.

Nếu không thể chuyển đổi thành công hợp đồng sang Marlowe, các lỗi cũng được hiển thị bằng cách chọn Lỗi ở chân trang:

Picture

Nhìn lại phần chân trang, bạn có thể thấy rằng bạn có thể truy cập kết quả của Phân tích tĩnh, như được mô tả bên dưới, cũng như kiểm tra và chỉnh sửa Siêu dữ liệu hợp đồng.

Picture

Trình chỉnh sửa siêu dữ liệu chứa các trường cho các mô tả chung của mọi hợp đồng, nhưng cũng hỗ trợ nhập thông tin mô tả

  • Vai trò
  • Thông số
  • Sự lựa chọn

Khi hợp đồng được biên dịch thành công, trình chỉnh sửa siêu dữ liệu sẽ nhắc bạn thêm siêu dữ liệu cho các trường tương ứng với các phần tử thích hợp của hợp đồng và xóa các trường không tương ứng với bất kỳ nội dung nào trong hợp đồng.

Siêu dữ liệu hợp đồng không chỉ cung cấp tài liệu cho các hợp đồng Marlowe mà còn được sử dụng trong Marlowe Run, ứng dụng khách người dùng cuối sẽ được sử dụng để chạy các liên hệ Marlowe trên blockchain Cardano.

Phát triển hợp đồng trong Blockly

Sân chơi cung cấp một cơ chế để tạo và xem các hợp đồng dưới dạng trực quan, thay vì dưới dạng văn bản. Điều này được thảo luận trong phần trước trên Blockly. Lưu ý rằng trình chỉnh sửa Blockly cũng cung cấp quyền truy cập vào trình chỉnh sửa siêu dữ liệu và phân tích tĩnh.

Phát triển hợp đồng trong Marlowe

Cũng có thể tạo hợp đồng trong Marlowe “thô”. Marlowe được chỉnh sửa trong trình chỉnh sửa Marlowe và điều này cho phép định dạng tự động (khi nhấp chuột phải) và hỗ trợ cả các lỗ.

Picture

Các lỗ cho phép một chương trình được xây dựng từ trên xuống. Nhấp vào bóng đèn bên cạnh một lỗ sẽ hiển thị menu hoàn thành, trong mỗi trường hợp, thay thế mỗi thành phần phụ bằng một lỗ mới. Ví dụ: chọn Pay lấp đầy lỗ ở mức cao nhất sẽ dẫn đến điều này (sau khi định dạng bằng cách nhấp chuột phải):

Picture

Các lỗ có thể được kết hợp với chỉnh sửa văn bản thông thường, để bạn có thể sử dụng hỗn hợp các cấu trúc từ dưới lên và từ trên xuống trong việc xây dựng các hợp đồng Marlowe. Hơn nữa, các hợp đồng có lỗ có thể được chuyển đến và đi từ Blockly: các lỗ trong Marlowe trở thành lỗ theo nghĩa đen trong Blockly. Để chuyển sang Blockly, hãy sử dụng View as blocks ở góc trên cùng bên phải của màn hình và ngược lại.

Mô phỏng các hợp đồng và mẫu của Marlowe

Tuy nhiên, một hợp đồng được viết ra, khi nó được gửi đến mô phỏng thì đây là khung nhìn được nhìn thấy đầu tiên. Ở đây chúng ta đang xem xét ví dụ về trái phiếu Zero coupon.

Picture

Trước khi bắt đầu mô phỏng, bạn cần cung cấp một số thông tin.

  • Số slot để bắt đầu mô phỏng.
  • Bất kỳ tham số giá trị nào : trong trường hợp này là số tiền đã cho vay và số tiền lãi (cộng thêm) phải trả.
  • Bất kỳ thông số slot nào : ở đây chúng ta đưa ra thời gian mà người cho vay phải gửi số tiền và thời gian mà người vay cần trả lại số tiền đó kèm theo lãi suất.

Đoạn mã hiển thị ở đây trình bày toàn bộ hợp đồng đang được mô phỏng. Khi quá trình mô phỏng đã bắt đầu, bất kỳ điều gì trong hợp đồng vẫn được mô phỏng sẽ được đánh dấu. Chân trang cung cấp dữ liệu về mô phỏng.

Đối với ví dụ của chúng ta, hãy điền vào các thông số như thế này và giữ lại slot 0 làm điểm bắt đầu.

Picture

Quá trình mô phỏng được bắt đầu bằng cách nhấp vào node Bắt đầu mô phỏng và khi điều này được thực hiện, các thực thi có sẵn sẽ thúc đẩy hợp đồng sẽ được trình bày. Cũng lưu ý rằng toàn bộ hợp đồng được đánh dấu, cho thấy rằng chưa có hợp đồng nào được thực hiện.

Picture

Trong trường hợp này, có hai thực thi tiềm ẩn: Người cho vay có thể đặt cược 10.000 Ada, hoặc khoảng thời gian (thời gian) có thể tiến tới 10mà thời gian chờ đợi hết tiền. Hai thực thi chung khác cũng có thể được thực hiện

  • Hoàn tác sẽ hoàn tác thực thi cuối cùng được thực hiện trong trình mô phỏng. Điều này có nghĩa là chúng ta có thể khám phá một hợp đồng một cách tương tác, thực hiện một số động thái, hoàn tác một số chúng và sau đó tiến hành theo một hướng khác.
  • Đặt lại sẽ đặt lại hợp đồng và trạng thái của nó trở lại giá trị ban đầu: hợp đồng đầy đủ và trạng thái trống. Nó cũng dừng mô phỏng.

Đối với ví dụ của chúng ta, hãy để chúng ta chọn Người cho vay thực hiện khoản tiền gửi 10.000 Ada. Chúng ta có thể làm điều đó với node + bên cạnh đầu vào này. Sau khi làm điều đó, chúng ta thấy

Picture

nơi chúng ta thấy ở bên phải màn hình rằng khoản tiền gửi đã được thực hiện, sau đó là khoản thanh toán tự động cho Bên vay. Chúng ta cũng có thể thấy rằng phần được đánh dấu đã thay đổi để phản ánh thực tế là khoản tiền gửi và khoản thanh toán ban đầu đã được thực hiện.

Phần còn lại của hợp đồng là hoàn trả: nếu Bên vay chọn thực thi này, chúng ta thấy rằng hợp đồng đã hoàn thành.

Picture

Nhật ký ở phía bên phải của màn hình hiện đưa ra danh sách đầy đủ các thực thi được thực hiện bởi những người tham gia và của chính hợp đồng. Một lưu ý cuối cùng: chúng ta đã chọn không chuyển slot vào bất kỳ lúc nào: điều này phù hợp với thiết kế hợp đồng; mặt khác, chúng ta không thấy bất kỳ thực thi hết thời gian nào xảy ra. Tại sao không thử điều này cho mình?

Mô phỏng Oracle

Như chúng ta đã lưu ý trước đó trong phần trên ??? , Sân chơi cung cấp các giá trị Oracle để mô phỏng cho vai trò "kraken". Khi mô phỏng đạt đến điểm mô phỏng cấu trúc này

Picture

thì giá trị được điền trước trong mô phỏng như sau:

Picture

Lưu và Mở dự án

Dự án có thể được lưu trên github và vì vậy khi bạn lưu dự án lần đầu tiên, bạn sẽ được nhắc:

Picture

và, nếu bạn chọn Đăng nhập ở đó, bạn sẽ được đưa đến màn hình đăng nhập cho github:

Picture

Khi bạn chọn Open Project, bạn sẽ thấy một lựa chọn như sau:

Picture

Marlowe Playground không cung cấp cơ chế xóa dự án, nhưng điều này có thể được thực hiện trực tiếp trên github.

Phân tích hợp đồng

Phân tích tĩnh của một hợp đồng được thực hiện bằng cách chọn tab Phân tích tĩnh ở chân trang ở cuối trang.

Picture

Để phân tích một mẫu, cần phải cung cấp các giá trị cho bất kỳ thông số nào của nó, như bạn có thể thấy trong ảnh chụp màn hình.

Nhấp vào node Phân tích để biết cảnh báo dẫn đến hợp đồng hiện tại ở trạng thái hiện tại đang được phân tích. Kết quả là để nói rằng hợp đồng đã vượt qua tất cả các bài kiểm tra hoặc giải thích cách nó không thành công và đưa ra chuỗi các giao dịch dẫn đến lỗi. Như một bài tập, hãy thử điều này với Escrowhợp đồng, thay đổi khoản tiền gửi ban đầu từ Alice thành một thứ nhỏ hơn 450 lovelace. Chi tiết hơn được đưa ra trong phần về phân tích tĩnh bên dưới.

node Phân tích khả năng tiếp cận sẽ kiểm tra xem có bất kỳ phần nào của hợp đồng sẽ không bao giờ được thực hiện hay không, tuy nhiên những người tham gia tương tác với nó.

Phân tích cho các khoản hoàn lại khi Đóng sẽ kiểm tra xem liệu có thể Close hoàn trả bất kỳ công trình nào trong số các công trình xây dựng hoặc liệu Close tất cả các khoản tiền trong hợp đồng đã được hoàn trả hay chưa.

Sử dụng Marlowe Playground để tương tác với các hợp đồng mẫu và đặc biệt là thử các hợp đồng với các giá trị tham số khác nhau, đồng thời sửa đổi chúng theo nhiều cách khác nhau để xem các hợp đồng có thể không đáp ứng được phân tích như thế nào.


Picture