# 🇧🇷 4/14 Tutorial Marlowe

**URL:** <https://forum.cardano.org/t/4-14-tutorial-marlowe/32704>\
**Category:** Geral\
**Tags:** translation\
**Created:** [6 May 2020 12:09 UTC](https://forum.cardano.org/t/4-14-tutorial-marlowe/32704 "2020-05-06T12:09:42Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![cabral\_joselmo](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.cardano.org/cabral_joselmo/32/17668_2.png) [@cabral\_joselmo](https://forum.cardano.org/u/cabral_joselmo)\
**Post date:** [6 May 2020 12:09 UTC](https://forum.cardano.org/t/4-14-tutorial-marlowe/32704/1 "2020-05-06T12:09:42Z")

</div>

Para acompanhar essa série de conteúdos fique de olho no blog [Educação Cardano](https://educacaocardano.wordpress.com/)

Conteúdo original no site [https://alpha.marlowe.iohkdev.io/tutorial/](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?**

![](https://us1.discourse-cdn.com/flex023/uploads/cardano/original/3X/0/e/0e3d9600889c9fc724e80c46cd668ff271df192e.png)

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**

![](https://us1.discourse-cdn.com/flex023/uploads/cardano/original/3X/1/9/191891f0185f2b9808b1a892d4299d26cb6194bf.png)

[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.
