🇧🇷 3/14 Tutorial Marlowe

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/

3. Um primeiro exemplo

Esse tutorial introduz um simples contrato financeiro em pseudocódigo, antes de explicar como o mesmo é modificado para que funciona na Marlowe, dando o primeiro exemplo de um contrato Marlowe

3.1 Um simples contrato de compromisso

Suponha que Alice queira comprar um gato de Bob, mas nenhum deles confia no outro. Felizmente, eles têm uma amiga em comum, Carol, na qual ambos confiam como neutra (mas não o suficiente para dar a ela o dinheiro e deixar que atue como intermediária). Portanto, eles concordam com o contrato a seguir, escrito usando pseudocódigo funcional simples. Esse tipo de contrato é um exemplo simples de compromisso.

O contrato é descrito usando os construtores de um tipo de dados de Haskell. O construtor mais externo When (quando) possui dois argumentos: o primeiro é uma observação e o segundo é outro contrato. O significado pretendido disso é que, quando a observação se torna verdadeira, o segundo contrato é ativado.

O segundo contrato é outro When – solicitando uma decisão de Bob -, mas dentro disso, há uma escolha: If (se) Alice e Bob concordam com o que fazer, isso é feito; caso contrário, é solicitado que Carol arbitre e tome uma decisão.

De fato, podemos permitir a opção de Bob fazer a primeira escolha, em vez de Alice, e, portanto, em geral When oferece uma lista de casos [1], cada um com uma ação e um contrato correspondente que é acionado quando essa ação acontece:

Neste contrato, Alice ou Bob podem fazer a primeira escolha; logo depois o outro faz uma escolha. Se eles concordam, essa escolha é feita; se não, Carol arbitra.

Exercício: Pense sobre a execução desse contrato na prática, suponha que Alice já tenha comprometido algum dinheiro com o contrato. O que acontece se Bob escolhe não participar mais desse contrato? Nós estamos assumindo que Alice já tenha comprometido seu pagamento, mas suponhamos que tenhamos que escrever um contrato para garantir isso: o que precisaríamos fazer?

3.2 Compromissos em Marlowe

Os contratos de Marlowe incorporam elementos extras que garantem que eles progridam apropriadamente. Cada vez que que vemos um When, precisamos fornecer dois elementos adicionais:

  • Um tempo limite depois do qual o contrato progride automaticamente, e
  • Um contrato de continuação para o qual ele deve progredir.

3.3 Adicionando tempos limite

Primeiro, vamos examinar como modificar o que escrevemos para cuidar do caso em que a condição do When nunca se torna verdadeira. Assim, adicionamos valores de tempo limite e continuação a cada um dos When que ocorrem no contrato.

O When mais externo pede que a primeira escolha seja feita por Alice ou Bob: se nenhum deles fez uma escolha no tempo 40, o contrato é fechado e todos os fundos no contrato são reembolsados.

Close é tipicamente o último passo em cada “caminho” dentro de um contrato da Marlowe, e seu efeito é devolver o dinheiro do contrato aos participantes; descreveremos isso com mais detalhes em um tutorial posterior. Nesse caso específico, o reembolso ocorrerá após 40 slots .

Observando as construções internas, se uma escolha foi feita, aguardamos uma segunda. Se isso não ocorrer após 60 slots , então Carol é chamada a arbitrar. [2]

3.4 Adicionando compromissos

Em seguida, vamos dar uma olhada como o dinheiro é comprometido no primeiro passo de um contrato:

Um depósito de valor price é solicitado a “alice”: se for fornecido, ele será mantido em uma conta, também chamada “alice”. Contas como essa existem apenas durante a vigência do contrato; cada conta pertence a um único contrato.

Há um tempo limite de 10 slots para fazer o depósito; se esse tempo expirar sem que um depósito seja feito, o contrato será fechado e todo o dinheiro já existente no contrato será reembolsado. Nesse caso, isso é simplesmente o fim do contrato.

3.5 Definições

Veremos posteriormente como partes dessa descrição de contrato, como arbitrate (arbitragem), agreement (acordo) e price (preço), utilizam a Marlowe como uma DSL de Haskell para atribuir algumas definições de forma abreviada. Nós também utilizamos o conceito strings sobrecarregadas para fazer algumas descrições – como exemplo accounts em “alice” – mais concisas.

Essas serão discutidas em mais detalhes quando dermos uma olhada em Marlowe incorporado.

Exercício: Comente a escolha de valores para tempo limite, e pense em alternativas. Por exemplo, o que aconteceria se o tempo limite de 40 no When fosse substituído por 60, e vice versa? Seria apropriado ter um tempo limite de 100 em cada When? Se não, por que motivo?

Esse exemplo mostrou muitos dos ingredientes da linguagem de contratos Marlowe; No próximo tutorial será apresentado a linguagem completa.

3.6 Notas

  • Enquanto muitos nomes de conta precisaram ser colocados manualmente no exemplo, esses podem ser gerados dinamicamente pela carteira dos usuários na versão da Marlowe que estará implantada no blockchain

3.7 Onde se aprofundar

[1] Listas em Marlowe são incluídas utilizando-se da notação em colchetes: [2, 3, 4]

[2] Novamente, será descrito como acordo e arbitragem funcionam em um tutorial posterior.

2 Likes