Sân chơi Marlowe

Hướng dẫn này giới thiệu tổng quan về Sân chơi Marlowe , 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 Sân chơi Marlowe

Để 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 tôi 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 tôi có thể tạo các 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 tôi 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 nhân bản 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 (volatile) 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 tôi sử dụng kiểu in đậm cho các nút và các thành phần khác trong phần sau.

Bắt đầu

Trang đích của Sân chơi Marlowe trông như thế này

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

  • Open existing project 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.

  • Open an example 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.

  • Start something new 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 để simulate 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 định nghĩa 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.

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ụ (Escrow with collateral). Để mô tả một hợp đồng Marlowe trong trình soạn thảo, một giá trị của kiểu Contractphải được trả về do hàm được cung cấp bằng cách sử dụng hướng dẫn return.

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 nút trong thanh tiêu đề cung cấp chức năng tiêu chuẩn:

  • Tạo một New Project

  • Open một dự án hiện có

  • Open một trong các examples

  • Rename dự án hiện có

  • Save dự án hiện tại dưới tên hiện tại của nó (nếu có).

  • Save dự án hiện tại thành dự án mới được đặt tên.

Khi bạn nhấp vào nút Biên dịch (Compile) (ở 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 (Send to simulator) để 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 (Generated code) ở chân trang; điều này sau đó cũng có thể được giảm thiểu.

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 (Errors) ở chân trang.

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 (Static analysis), như được mô tả bên dưới, cũng như kiểm tra và chỉnh sửa Siêu dữ liệu (Metadata) hợp đồng .

Trình chỉnh sửa siêu dữ liệu chứa các trường mô tả chung về 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ệ của Marlowe trên chuỗi khối 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 tôi 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.

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 nút trong thanh tiêu đề cung cấp chức năng tiêu chuẩn:

  • Tạo một New Project

  • Open một dự án hiện có

  • Open một trong các examples

  • Rename dự án hiện có

  • Save dự án hiện tại dưới tên hiện tại của nó (nếu có).

  • Save dự án hiện tại thành dự án mới được đặt tên.

Trình chỉnh sửa 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 contractcủa loại Contract; chính giá trị này được chuyển đổi thành Marlowe thuần túy bằng nút 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:

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 Blockly: các tùy chọn này được cung cấp bởi các nút Send to SimulatorSend to 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:

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 .

Trình chỉnh sửa siêu dữ liệu chứa các trường mô tả chung về 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ệ của Marlowe trên chuỗi khối 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 “raw”. 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ỗ (holes).

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 Paylấ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):

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 với các lỗ có thể được chuyển đến và đi từ Blockly: các lỗ trong Marlowe trở thành các lỗ trong Blockly theo đúng nghĩa đen. Để 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, đâ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 (Zero coupon bond).

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

  • Thời gian ban đầu (initial time) được mô phỏng để bắt đầu mô phỏng.

  • Bất kỳ thông số thời gian chờ nào (timeout parameters): ở đây chúng tôi đư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.

  • Bất kỳ tham số giá trị nào (value parameters): 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ả.

Đ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 tôi, hãy điền vào các thông số như thế này.

Mô phỏng được bắt đầu bằng cách nhấp vào nút Bắt đầu mô phỏng (Start simulation) và khi việc này được thực hiện, các hành động 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.

Trong trường hợp này, có 4 hành động có thể xảy ra: Người cho vay (Lender) có thể đặt cọc 10.000 Ada, hoặc thời gian có thể kéo dài đến phút tiếp theo, thời gian chờ tiếp theo (trong trường hợp này là thời gian chờ của Thời hạn cho vay (Loan deadline) mà chúng tôi vừa đặt, lúc đó chờ cho một khoản tiền gửi hết hạn), hoặc trực tiếp đến thời gian hết hạn của hợp đồng. Hai hành động chung khác cũng có thể được thực hiện

  • Undo sẽ hoàn tác hành động 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ố trong số chúng và sau đó tiến hành theo một hướng khác.

  • Reset 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 tôi, hãy để chúng tôi chọn Người cho vay (Lender) thực hiện khoản tiền gửi là 10.000 Ada. Chúng ta có thể làm điều đó với nút + bên cạnh đầu vào này. Sau khi làm điều đó, chúng tôi thấy

nơi chúng tôi 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 (Borrower). 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 (Borrower) chọn hành động này, chúng tôi thấy rằng hợp đồng đã hoàn tất.

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 hành động đượ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 tôi đã chọn không gia hạn thời gian vào bất kỳ thời điểm nào: điều này phù hợp với thiết kế hợp đồng; mặt khác, chúng tôi không thấy bất kỳ hành động 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 tôi đã lưu ý trước đó trong phần từng bước về Marlowe , Sân chơi cung cấp các giá trị tiên tri để mô phỏng cho vai trò "kraken". Khi mô phỏng đạt đến điểm mô phỏng cấu trúc này

sau đó giá trị được điền trước (pre-filled) trong mô phỏng như sau:

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:

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:

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

Sân chơi Marlowe 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.

Để 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 nút Analyse for warnings dẫn đến hợp đồng hiện tại ở trạng thái hiện tại (in the current state) đ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.

Nút Analyse reachability 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 hợp đồng.

Analyse for refunds on Close sẽ kiểm tra xem liệu có thể Closehoà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 Closetất cả các khoản tiền trong hợp đồng đã được hoàn trả hay chưa.

Sử dụng Sân chơi Marlowe để 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.

Last updated