The-Marlowe-Model
The Marlowe model
Marlowe được thiết kế để hỗ trợ thực hiện các hợp đồng tài chính trên blockchain và đặc biệt là hoạt động trên Cardano. Hợp đồng được xây dựng bằng cách tập hợp một số ít cấu trúc có thể kết hợp để mô tả nhiều loại hợp đồng tài chính khác nhau.
Trước khi mô tả các cấu trúc đó, chúng ta cần xem xét cách tiếp cận chung của chúng ta để lập mô hình hợp đồng ở Marlowe và bối cảnh mà các hợp đồng Marlowe được thực thi, chuỗi khối Cardano. Khi thực hiện việc này, chúng tôi cũng giới thiệu một số thuật ngữ mà chúng tôi sẽ sử dụng, biểu thị các định nghĩa bằng chữ in nghiêng .
Constracts
Hợp đồng ở Marlowe chạy trên blockchain nhưng cần tương tác với thế giới ngoài chuỗi. Các bên của hợp đồng, mà chúng tôi còn gọi là những người tham gia , có thể tham gia vào nhiều hành động khác nhau : họ có thể được yêu cầu gửi tiền hoặc đưa ra lựa chọn giữa các lựa chọn thay thế khác nhau. Thông báo là một dạng đầu vào khác được sử dụng để thông báo cho hợp đồng rằng một điều kiện nhất định đã được đáp ứng, bất kỳ ai cũng có thể làm điều này và nó chỉ cần thiết vì một khi hợp đồng không hoạt động (quiescent), nó không thể tự "thức dậy" , nó chỉ có thể đáp ứng với đầu vào.
Việc thực hiện hợp đồng cũng có thể tạo ra tác động bên ngoài bằng cách thanh toán cho các bên trong hợp đồng.
Participants, roles, and public key
Chúng ta nên tách biệt các khái niệm về người tham gia , vai trò và khóa công khai trong hợp đồng Marlowe. Người tham gia (hoặc bên) trong hợp đồng có thể được đại diện bởi a role
hoặc a public key
(khóa chung cuối cùng sẽ được thay thế bằng địa chỉ ).
Các vai trò được thể hiện bằng mã thông báo và chúng được phân phối đến các địa chỉ tại thời điểm hợp đồng được triển khai trên blockchain. Sau đó, bất kỳ ai có mã thông báo đại diện cho một vai trò đều có thể thực hiện các hành động được chỉ định cho vai trò đó và nhận các khoản thanh toán được phát cho vai trò đó.
Điều này cho phép các vai trò trong việc điều hành hợp đồng được giao dịch giữa những người tham gia, thông qua cơ chế mã hóa . Điều này sẽ có sẵn trong quá trình triển khai Marlowe trên chuỗi nhưng mô phỏng trong Marlowe Playground chỉ đơn giản trình bày các vai trò hợp đồng.
Các bên khóa công khai , được biểu thị bằng hàm băm của khóa chung (hoặc cuối cùng là địa chỉ ). Sử dụng khóa chung để đại diện cho các bên đơn giản hơn vì nó không yêu cầu xử lý mã thông báo, nhưng chúng không thể được giao dịch, bởi vì một khi bạn biết khóa riêng của một khóa chung nhất định, bạn không thể chứng minh rằng mình đã quên nó.
Accounts
Tất cả các bên tham gia hợp đồng đều ngầm sở hữu một tài khoản mang tên mình. Toàn bộ tài sản lưu giữ trong hợp đồng phải thuộc tài khoản của một trong các bên; Bằng cách này, khi hợp đồng được hoàn tất, tất cả tài sản còn lại trong hợp đồng sẽ thuộc về ai đó và do đó có thể được hoàn trả cho chủ sở hữu tương ứng của họ. Các tài khoản này mang tính cục bộ : chúng chỉ tồn tại trong thời gian thực hiện hợp đồng và trong thời gian đó, chúng chỉ có thể truy cập được từ trong hợp đồng.
Steps and states
Hợp đồng Marlowe mô tả một loạt các bước , thường bằng cách mô tả bước đầu tiên, cùng với một hợp đồng (phụ) khác mô tả những việc cần làm tiếp theo.
Ví dụ: hợp đồng Pay a p t v cont
có nội dung "thanh toán giá trị v
mã thông báo t
cho bên p
từ tài khoản a
và sau đó thực hiện theo hợp đồng cont
". Chúng tôi gọi cont
là tiếp tục hợp đồng.
Khi thực hiện một hợp đồng, chúng ta cần theo dõi hợp đồng hiện tại (tức là phần còn lại của hợp đồng): sau khi thực hiện một bước như ví dụ trên thì hợp đồng hiện tại là phần tiếp theo.
Blockchain
Marlowe là ngôn ngữ cấp cao dành riêng cho miền (DSL) sử dụng cho các hợp đồng tài chính được xây dựng trên Plutus. Sân Chơi Marlowe, một nền tảng xây dựng ứng dụng dễ sử dụng mà những người không phải là lập trình viên cũng có thể sử dụng để xây dựng các hợp đồng thông minh tài chính.
Marlowe được thiết kế để hoạt động với các chuỗi khối nói chung, một số chi tiết về cách nó tương tác với chuỗi khối có liên quan khi mô tả ngữ nghĩa và cách triển khai Marlowe.
UTXO, wallets
Chuỗi khối dựa trên UTXO là một chuỗi các khối, mỗi khối chứa một tập hợp các giao dịch. Mỗi giao dịch có một tập hợp đầu vào và đầu ra và chuỗi khối được xây dựng bằng cách liên kết đầu ra giao dịch chưa được chi tiêu (UTXO) với đầu vào của giao dịch mới. Có thể tạo tối đa một khối trong mỗi khe , dài 1 giây.
Ví người dùng: sử dụng để tương tác với các hợp đồng thông minh chạy trên blockchain. Tương tác ở đây là dùng để xác thực các giao dịch sử dụng tài sản điện tử. Có 2 cách để ví tương tác là API Marlowe Rest HOẶC Marlowe CLI.
Omniscient simulation
Sân chơi Marlowe hỗ trợ mô phỏng hợp đồng. Đây là một mô phỏng toàn diện , trong đó người dùng có thể thực hiện bất kỳ hành động nào cho bất kỳ vai trò nào và do đó có thể quan sát việc thực hiện từ quan điểm của tất cả người dùng cùng một lúc. Điều này trái ngược với trải nghiệm thực hiện hợp đồng với khách hàng, trong đó mỗi người tham gia nhìn nhận hợp đồng theo quan điểm riêng của họ. Đặc biệt, người tham gia chỉ có thể tương tác với một hợp đồng đang chạy đang chờ họ nhập liệu; nếu không đúng như vậy thì họ sẽ thấy rằng việc thực hiện hợp đồng đang chờ sự tham gia của người khác.
Values and tokens
Trong các ví dụ trước, bất cứ khi nào a Value
được yêu cầu, chúng tôi chỉ sử dụng Ada. Điều này rất có ý nghĩa vì Ada là loại tiền tệ cơ bản được Cardano hỗ trợ.
Tuy nhiên, Marlowe đưa ra một khái niệm tổng quát hơn về giá trị , hỗ trợ các mã thông báo gốc , tùy chỉnh , có thể thay thế được, không thay thế được hoặc thực sự là hỗn hợp. 3 Ở Marlowe là gì ?Value
newtype Value = Value
{getValue :: Map CurrencySymbol (Map TokenName Integer)}
Các loại CurrencySymbol
và TokenName
đều là các hàm bao đơn giản xung quanh ByteString
.
Khái niệm giá trị này bao gồm Ada, mã thông báo có thể thay thế (ví dụ như tiền tệ), mã thông báo không thể thay thế hoặc NFT (mã thông báo tùy chỉnh không thể hoán đổi với các mã thông báo khác) và các trường hợp hỗn hợp kỳ lạ hơn:
- Ada có khoảng trống
bytestring
asCurrencySymbol
vàTokenName
. - Mã thông báo có thể thay thế được biểu thị bằng một
CurrencySymbol
trong đó có chính xác mộtTokenName
mã có thể có số nguyên không âm tùy ý (trong đó Ada là trường hợp đặc biệt). - Một loại mã thông báo không thể thay thế là một loại
CurrencySymbol
có nhiềuTokenName
s, mỗi mã có số lượng là một. Mỗi tên này tương ứng với một mã thông báo không thể thay thế duy nhất. - Mã thông báo hỗn hợp là những mã có nhiều
TokenName
s và số lượng lớn hơn một.
Cardano cung cấp một cách đơn giản để giới thiệu một loại tiền tệ mới bằng cách đúc tiền bằng cách sử dụng tập lệnh chính sách đúc tiền . Điều này nhúng các tiêu chuẩn Ethereum ERC-20/ERC-721 một cách hiệu quả làm giá trị nguyên thủy trong Cardano. Ở Marlowe, chúng tôi sử dụng mã thông báo tùy chỉnh để đại diện cho những người tham gia trong mỗi hợp đồng thực hiện trên chuỗi.
Executing a Marlowe contract
Việc thực thi hợp đồng Marlowe trên chuỗi khối Cardano có nghĩa là hạn chế các giao dịch do người dùng tạo theo logic của hợp đồng. Nếu tại một thời điểm thực hiện cụ thể, một hợp đồng yêu cầu Alice đặt cọc 100 Ada thì chỉ giao dịch như vậy mới thành công, mọi giao dịch khác sẽ bị từ chối.
Một giao dịch chứa một danh sách các đầu vào hoặc hành động được sắp xếp theo thứ tự . Trình thông dịch Marlowe được thực thi trong quá trình xác thực giao dịch. Đầu tiên, nó đánh giá hợp đồng từng bước cho đến khi không thể thay đổi được nữa nếu không xử lý bất kỳ thông tin đầu vào nào, một điều kiện được gọi là không hoạt động . Ở giai đoạn này, chúng tôi xử lý bất kỳ When
thời gian chờ nào đã trôi qua và tất cả các cấu trúc If
, Let
, Pay
và Close
mà không tiêu tốn bất kỳ đầu vào nào .
Sau đó, đầu vào đầu tiên sẽ được xử lý, sau đó hợp đồng sẽ được thực hiện lại một bước cho đến khi không hoạt động và quá trình này được lặp lại cho đến khi tất cả đầu vào được xử lý. Ở mỗi bước, người liên hệ hiện tại và trạng thái sẽ thay đổi, một số thông tin đầu vào có thể được xử lý và thanh toán được thực hiện.
Một giao dịch như vậy , như được hiển thị trong sơ đồ bên dưới, sẽ được thêm vào chuỗi khối. Điều chúng tôi làm tiếp theo là mô tả chi tiết các hợp đồng của Marlowe trông như thế nào và cách chúng được đánh giá từng bước.
Chúng tôi đã chỉ ra rằng hành vi của Marlowe không phụ thuộc vào cách thu thập đầu vào vào giao dịch và vì vậy khi mô phỏng hành động của hợp đồng, chúng tôi không cần phải nhóm các đầu vào vào giao dịch một cách rõ ràng. Để cụ thể hơn, chúng ta có thể coi mỗi giao dịch có nhiều nhất một đầu vào. Mặc dù ngữ nghĩa của hợp đồng không phụ thuộc vào cách nhóm đầu vào thành giao dịch nhưng chi phí thực hiện có thể thấp hơn nếu nhiều đầu vào có thể được nhóm thành một giao dịch.
Trong mô phỏng toàn tri có sẵn trong sân chơi Marlowe, chúng ta có thể loại bỏ nhóm giao dịch một cách an toàn vì việc nhóm không ảnh hưởng đến hành vi của hợp đồng.