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/
2. Introdução a Marlowe
Este tutorial fornece uma visão geral das ideias por trás da Marlowe, como uma linguagem de domínio específico incorporada ao Haskell. Ele também introduz compromissos e tempos limites, que são fundamentais para o funcionamento da Marlowe no contexto do blockchain.
2.1. Linguagens de programação e linguagens de domínio específico
Os primeiros computadores foram programados em “código de máquina”. Cada tipo de sistema tinha um código diferente, e esses códigos eram de baixo nível e inexpressivos: os programas eram longas sequências de instruções muito simples, incompreensíveis para quem não os tivesse escrito. Atualmente, podemos usar linguagens de nível superior como C, Java e Haskell para programar sistemas. Os mesmos idiomas podem ser usados em máquinas amplamente diferentes, e a estrutura dos programas reflete o que eles fazem. No blockchain, seus equivalentes são linguagens como Plutus, Solidity e Simplicity. Essas linguagens de nível superior são de uso geral – elas podem ser usadas para resolver todos os tipos de problemas diferentes – mas as soluções que elas expressam ainda são programas e ainda exigem habilidades de programação para usá-las efetivamente.
Por outro lado, Marlowe é uma linguagem de domínio específico (DSL), projetada para ser utilizada por alguém especialista em um campo específico, em vez de exigir habilidades de programação para usá-lo. No caso de Marlowe, o domínio é o campo dos contratos financeiros.
O uso de uma DSL tem muitas vantagens além do uso por não programadores:
-Podemos garantir que certos tipos de programas ruins nem possam ser gravados, projetando essas possibilidades fora do idioma. Ao fazer isso, podemos ter como objetivo evitar algumas das vulnerabilidades imprevistas que foram um problema para os blockchains existentes.
-Também podemos verificar com mais facilidade se os programas têm as propriedades que desejamos: por exemplo, no caso de um contrato da Marlowe, podemos garantir que o contrato nunca falhe ao efetuar o pagamento que deveria.
-Por ser uma DSL, podemos criar ferramentas para fins especiais para ajudar as pessoas a escrever programas no idioma. No caso de Marlowe, podemos imitar como um contrato se comportará antes de ser executado de verdade na blockchain; isso nos ajuda a garantir que o contrato que escrevemos esteja cumprindo o seu objetivo.
Marlowe também é uma DSL incorporada , hospedado na linguagem de programação Haskell. Embora seja possível usar o Marlowe “puro”, se desejar, a incorporação em uma linguagem de uso geral permite que os redatores de contratos explorem seletivamente os recursos do Haskell ao escrever contratos do Marlowe, facilitando a leitura, apoiando a reutilização e assim por diante.
2.2. Marlowe em poucas palavras
Marlowe é modelado em DSLs de contratos financeiros popularizados na última década por acadêmicos e empresas como a LexiFi, que fornece software de contratos no setor financeiro. No desenvolvimento da Marlowe, adaptamos essas linguagens para trabalhar com o blockchain. Marlowe é implementada na camada de liquidação (SL) da blockchain Cardano, mas poderia igualmente ser implementado na Ethereum / Solidity ou em outras plataformas blockchain; nesse aspecto, é “independente de plataforma”, assim como linguagens de programação modernas como Java e C ++. A ferramenta de emulador online Marlowe Playground permite experimentar, desenvolver, simular e analisar contratos da Marlowe no seu navegador da web, sem precisar instalar nenhum software.
Como é um contrato da Marlowe? Ele é construído combinando um pequeno número de blocos de construção que descrevem o pagamento, a observação de algo no “mundo real”, aguardando até que uma determinada condição se torne verdadeira e assim por diante.
2.3. Tempos limite, depósitos e compromissos
A diferença entre as abordagens não relacionadas ao blockchain é a maneira como garantimos que o contrato seja seguido. Isso significa não apenas que as instruções do contrato não sejam desobedecidas – “ nada de ruim acontece ” – mas também que os participantes participem e não saiam mais cedo, deixando o dinheiro trancado no contrato para sempre: “ coisas boas realmente acontecem ”. Fazemos isso usando os tempos limite .
Um contrato pode solicitar que um participante faça um depósito de alguns fundos, mas obviamente o contrato não pode realmente forçar um participante a fazer um depósito. Em vez disso, o contrato pode esperar um período de tempo para que o participante se comprometa com o contrato: quando esse período expirar, o contrato seguirá algumas instruções alternativas. Isso evita que um participante interrompa um contrato ao não participar, garantindo que “as coisas aconteçam”.
Todas as construções da Marlowe que requerem participação do usuário – incluindo depósitos e opções de usuário – são protegidas por tempos limite. Por causa disso, é fácil ver que o compromisso assumido por um participante de um contrato é finito : podemos prever quando o contrato não terá mais nada a fazer – quando pode ser fechado – nesse ponto, quaisquer fundos não gastos deixados no contrato são reembolsados aos participantes e o contrato para ou termina . Portanto, quaisquer fundos colocados no contrato por um participante não podem ser bloqueados para sempre : nesse momento, o compromisso termina efetivamente.
Além disso, é fácil para nós lermos , a partir do contrato, quando o mesmo termina, chamamos isso de vida útil do contrato: todos os participantes poderão, portanto, descobrir essa vida útil antes de participar do contrato.
Em nosso modelo, um contrato em execução não pode forçar um depósito ou uma escolha a acontecer: tudo o que pode fazer é solicitar um depósito ou uma escolha a um participante. Em outras palavras, para essas ações, não pode “ empurrar “, mas pode “ puxar “. Por outro lado, ele pode efetuar pagamentos automaticamente; portanto, alguns aspectos de um contrato da Marlowe podem “forçar” para que algumas coisas aconteçam, por exemplo, assegurando que um pagamento seja feito a um participante construindo uma saída de transação apropriada.
2.4. Marlowe em ação
Estamos trabalhando em um lançamento de produção da Marlowe no blockchain Cardano no início de 2020. A partir de hoje, você poderá explorar a Marlowe por você mesmo, baixando-o e usando diretamente a implementação Haskell, ou usando a ferramenta de simulação on-line Marlowe Playground; estes são abordados nos tutoriais subsequentes. Eles também abrangerão os detalhes de Marlowe, apresentarão uma série de exemplos e examinarão mais profundamente as ferramentas para Marlowe.
Nos próximos seis meses, aprimoraremos o design da linguagem e desenvolveremos um conjunto de modelos para instrumentos financeiros populares. Como Marlowe é uma DSL, podemos descobrir como os contratos da Marlowe se comportarão sem executá-los: isso significa que podemos fornecer diagnósticos valiosos para os participantes em potencial antes que eles se comprometam com um contrato, usando análise estática . Também podemos usar ferramentas lógicas para provar formalmente as propriedades dos contratos da Marlowe, oferecendo aos usuários o mais alto nível de garantia de que seus contratos se comportam conforme o esperado.
2.5. Onde descobrir mais
Esse tutorial contempla a última versão da Marlowe, enquanto todos os outros, exceto o primeiro, contempla a Marlowe 1.3, que é bastante similar à Marlowe 3.0 em conceito, mas diferente de várias maneiras.