Para acompanhar essa série de conteúdos fique de olho no blog Educação Cardano
Conteúdo original no site https://alpha.marlowe.iohkdev.io/tutorial/
4. O modelo Marlowe
Marlowe foi projetado para apoiar a execução de contratos financeiros no blockchain e, especificamente, para trabalhar no blockchain Cardano. Os contratos são construídos reunindo um pequeno número de construções que, em combinação, podem ser usadas para descrever muitos tipos diferentes de contratos financeiros.
Antes de descrever essas construções, precisamos examinar nossa abordagem geral para modelar contratos em Marlowe e o contexto em que os contratos da Marlowe são executados, o blockchain Cardano. Ao fazer isso, também apresentamos algumas das terminologias que usaremos, indicando definições em itálico .
4.1 Contratos
Os contratos em Marlowe são executados dentro do blockchain, mas precisam interagir com o mundo fora do mesmo. As partes do contrato, a quem também chamamos de participantes , podem se envolver em várias ações : podem ser solicitadas a depositar dinheiro ou a escolher entre várias alternativas. Uma notificação de um valor externo (também chamado de valor oracle – ou oráculo), como o preço atual de uma mercadoria em particular, é a outra forma possível de entrada [3].
A execução de um contrato também produzirá efeitos externos, efetuando pagamentos às partes no contrato.
Contas
O modelo da Marlowe permite a construção de um contrato para controlar dinheiro em várias contas separadas: isso permite um controle mais explícito de como o dinheiro flui no contrato. Cada conta é de propriedade de uma parte específica do contrato e essa parte recebe um reembolso de quaisquer fundos restantes na conta quando o contrato é fechado [4]. Essas contas são locais , pois só existem durante a execução do contrato e, durante esse período, são acessíveis apenas pelas partes no contrato.
Etapas e Estados
Os contratos da Marlowe descrevem uma série de etapas , geralmente descrevendo a primeira etapa, juntamente com outro (sub-) contrato que descreve o que fazer em seguida. Por exemplo, o contrato Pay a p t v cont diz “efetue um pagamento de valor v do token t para a parte p a partir da conta a e siga o contrato cont“. Chamamos cont de continuação do contrato.
Ao executar um contrato, precisamos acompanhar o contrato atual : depois de dar um passo no exemplo acima, o contrato atual é a continuação, cont. Também temos que acompanhar algumas outras informações, como a quantidade armazenada em cada conta: chamamos essas informações de estado: isso também potencialmente muda a cada etapa. Uma etapa também pode ver uma ação ocorrendo, como dinheiro sendo depositado ou um efeito sendo produzido, por exemplo, um pagamento.
4.2 Blockchain
Embora a Marlowe seja projetado para trabalhar com blockchains em geral [5], alguns detalhes de como ele interage com o blockchain são relevantes ao descrever a semântica e a implementação da Marlowe.
Um blockchain baseada em UTxO é uma cadeia de blocos, cada um dos quais contém uma coleção de transações . Cada transação tem um conjunto de entradas e saídas, e o blockchain é construído ao vincular saídas de transação não gastas (UTxO) às entradas de uma nova transação. No máximo, um bloco pode ser gerado em cada slot , com 20 segundos de duração.
Os mecanismos pelos quais esses blocos são gerados e por quem não são relevantes aqui, mas os contratos serão expressos em termos de número de slots , contados a partir do bloco inicial (“genesis”) do blockchain.
UTxO e as carteiras
O valor do blockchain reside no UTxO, que é protegido criptograficamente por uma chave privada mantida pelo proprietário. Essas chaves podem ser usadas para resgatar as saídas e, assim, usá-las como entradas para novas transações, o que pode ser visto como gasto do valor nas entradas. Os usuários normalmente armazenam suas chaves privadas e os valores anexados a elas em uma carteira criptograficamente segura.
É através de suas carteiras que os usuários podem interagir com contratos inteligentes – incluindo contratos da Marlowe – em execução no blockchain. Os depósitos são feitos das carteiras dos usuários e os pagamentos recebidos por eles. Observe, no entanto, que essas são definitivamente ações fora da cadeia que precisam ser controladas pelo código em execução na carteira do usuário: elas não podem ser executadas pelo próprio contrato da Marlowe por si só.
Valor
Nos exemplos anteriores, sempre que um Valor ( Value ) era necessário, usamos Ada exclusivamente. Isso faz muito sentido, já que Ada é a moeda fundamental suportada por Cardano.
No entanto, o Plutus oferece um conceito mais geral de valor , suportando tokens fungíveis, não fungíveis e mistos personalizados
O que é um valor no Plutus?
Os tipos CurrencySymbol e TokenName são simples invólucros em torno de ByteString.
Essa noção de valor abrange Ada, tokens fungíveis (pense em moedas), tokens não fungíveis (um token personalizado que não é intercambiável com outros tokens) e casos mistos mais exóticos:
-
Ada possui a Bytestring vazia como CurrencySymbol e TokenName.
-
Um token fungível é representado por um CurrencySymbol para o qual existe exatamente um TokenSymbol que pode ter uma quantidade inteira não negativa arbitrária (da qual Ada é um caso especial).
-
Uma classe de tokens não fungíveis é um CurrencySymbol com vários TokenNames, cada um em quantidade de um. Cada um desses nomes corresponde a um token não fungível exclusivo.
-
Tokens mistos são aqueles com vários TokenNames e quantidades maiores que um.
Cardano e Plutus fornecem uma maneira simples de introduzir uma nova moeda, implementando-a usando scripts de política monetária . Isso efetivamente incorpora os padrões Ethereum ERC-20 / ERC-721 como valores primitivos em Cardano.
4.3 Executando um contrato Marlowe
Em cada slot, um contrato Marlowe em execução receberá uma lista de entradas em ordem. O contrato é executado avaliando-o passo a passo até que não possa mais ser alterado sem processar nenhuma entrada, uma condição que chamamos de quiescente . A primeira entrada é então processada e, em seguida, o contrato é repetido novamente até a sua quiescência, e esse processo é repetido até que todas as entradas sejam processadas. A cada passo, o contato atual e o estado serão alterados, algumas entradas podem ser processadas e os pagamentos serão feitos.
Reunir isso nos dá uma transação , como mostrado no diagrama abaixo, e essas informações são adicionadas ao blockchain. O que fazemos a seguir é descrever em detalhes como são os contratos da Marlowe e como são avaliados passo a passo.
Construindo a transação
[3] Podemos pensar em oracles (oráculos) como um tipo de participante no contrato; Dentro dessa perspectiva as notificações são como escolhas tomadas por esse participante.
[4] Um modelo totalmente “fungível” é suportado por um contrato com uma única conta e com alocação explícita de quaisquer fundos restantes na rescisão do contrato.
[5] Na verdade, Marlowe poderia ser modificado para funcionar fora do blockchain ou para trabalhar em um blockchain permissionado também.