10. O Marlowe Playground
Este tutorial fornece uma visão geral do Marlowe Playground, uma ferramenta on-line que permite aos usuários criar, analisar, interagir e simular a operação de contratos Marlowe incorporados. Está disponível em https://alpha.marlowe.iohkdev.io.
10.1 Apresentando o Marlowe Playground
Para que o Marlowe seja utilizável na prática, os usuários precisam entender como os contratos se comportarão uma vez implantados no blockchain, mas sem fazer a implantação. Podemos fazer isso simulando seu comportamento fora da cadeia, percorrendo interativamente a avaliação de um contrato na ferramenta baseada em navegador, o Marlowe Playground, uma ferramenta da web que suporta a construção interativa, revisão e simulação de contratos inteligentes escritos em Marlowe.
O playground tem três guias de nível superior:
-
O Editor Haskell
-
O Simulador
-
Blockly, o editor visual
e olhamos para esses três por vez agora.
Usamos negrito para botões e outros componentes a seguir.
10.2 O Editor Haskell: desenvolvendo contratos incorporados
O editor suporta o desenvolvimento de contratos da Marlowe, descritos em Haskell. Podemos usar o Haskell para tornar as definições do contrato mais legíveis, usando as definições do Haskell para subcomponentes, abreviações e funções simples do modelo. A guia do editor Haskell é mostrada na imagem a seguir.
A figura mostra que a ferramenta está no painel do editor Haskell (número 1 no diagrama). A ferramenta contém vários exemplos de contratos e, neste caso, estamos analisando o contrato de “caução” (número 2). Para descrever um contrato da Marlowe no editor, precisamos definir um contrato de valor de nível superior do tipo Contrato (número 3); é esse valor que é convertido em Marlowe puro com o botão Compilar (número 4) e que podemos enviar para o simulador com o botão de mesmo nome (número 5).
10.3 Simulação de contratos Marlowe
A segunda guia no Marlowe Playground permite que os usuários simulem contratos Marlowe transação por transação. Normalmente, esses são contratos desenvolvidos no editor Haskell ou no Blockly, mas também podem ser inseridos e modificados no painel do editor aqui.
A guia de simulação é selecionada no lado esquerdo da tela (número 1 na figura). No pé deste lado da tela, e em todas as guias, está um link para o tutorial on-line para Marlowe (número 2). O painel também contém vários exemplos de contratos e estes são selecionados acima da janela principal do editor (número 3).
Os contratos no simulador podem ser transferidos para o editor visual do Blockly (botão número 4) e, se você tiver uma conta no GitHub, também é possível salvar contratos que você desenvolve como GitHub (número 5). Para fazer isso, faça login na sua conta usando o botão Fazer login no canto superior direito da tela. Você verá botões para permitir publicar ou salvar contratos como listas principais e carregar contratos no GitHub.
O bloco no pé da janela (número 6) fornece informações sobre o contrato atual e seu estado. A guia mostrada aqui fornecerá informações sobre o estado de execução do contrato da Marlowe, incluindo os valores mantidos nas várias contas do contrato, escolhas e pagamentos feitos, o número do bloco atual e assim por diante. Outras guias dão acesso à análise estática e seus resultados, além de outros avisos e erros.
Ao simular um contrato, há duas etapas
-
As entradas são escolhidas e fazem parte de
-
Transações que agregam um número de entradas e pagamentos.
As entradas são escolhidas (número 7) entre as entradas relevantes no ponto específico do contrato. Por relevante aqui, queremos dizer que essas são as (únicas) entradas que farão o contrato progredir nesta fase. Em outras palavras, a escolha da entrada é “inteligente”. Uma entrada é adicionada à transação que está sendo construída, selecionando o botão + (número 7).
Depois que as entradas relevantes foram escolhidas, e elas aparecem aqui na caixa (número 8), a transação pode ser adicionada à cadeia selecionando Aplicar . Mas outros controles também estão disponíveis aqui:
-
O próximo bloco avançará o número do bloco atual.
-
Desfazer desfaz a última ação feita no simulador. Isso significa que podemos explorar um contrato interativamente, fazendo alguns movimentos, desfazendo alguns deles e depois seguindo em uma direção diferente.
-
Redefinir redefinirá o contrato e seu estado de volta aos seus valores iniciais: o contrato completo e um estado vazio.
No canto inferior direito (número 9), há uma caixa para informações contextuais de ajuda.
10.4 Contratos de construção com a Blockly
O playground fornece um mecanismo para criar e visualizar contratos em forma visual, e não em texto. Isso é dado pela terceira guia no playground.
A guia Blockly é indicada no lado esquerdo (número 1). Na parte principal da janela, um contrato é exibido (número 2). Os contratos construídos usando o editor visual podem ser transferidos para o simulador com o botão Para código (número 3), e os elementos visuais para todos os diferentes tipos de Marlowe são selecionados abaixo (número 4). Se Contrato for selecionado, vemos
onde podemos ver versões visuais dos cinco tipos diferentes de contrato (número 1). Eles podem ser selecionados e movidos para a parte principal da janela e juntos para formar um contrato.
10.5 Executando uma simulação
Voltando à guia de simulação e selecionando o contrato de Custódia que vemos
Aqui, focamos no compositor de entradas, que em cada estágio mostra apenas os insumos que farão o contrato progredir. Nesse caso, exigimos que Alice deposite 450 Ada. Podemos fazer isso com o botão + ao lado desta entrada. Depois de fazer isso, vemos
com a entrada como parte da transação a ser executada. Em seguida, podemos adicionar essa transação ao blockchain selecionando Apply , mas observe que também podemos usar os outros controles para desfazer a última etapa (aqui para mover a entrada da transação), para redefinir para o estado inicial ou para mover para o próximo bloco .
Assumindo que selecionamos Aplicar , vemos na parte inferior da tela que o depósito ocorreu
e isso permanece em vista se adicionarmos as escolhas de Alice e Bob à transação. Observe também que o estado atual do contrato é mostrado na parte principal da janela e, de fato, estamos aguardando neste estágio as escolhas de Alice e Bob.
Se Alice e Bob fizerem escolhas diferentes, e aplicarmos a transação, veremos
e, neste ponto da evolução do contrato, aguardamos a escolha de Carol para arbitrar o resultado.
10.6 Analisando um contrato
A análise estática de um contrato é realizada selecionando a guia Análise estática no painel no pé da página.
Clicar no botão Analisar resulta no contrato atual no estado atual sendo analisado. O resultado é dizer que o contrato passou em todos os testes ou explicar como ele falha e fornecer a sequência de transações que levam ao erro. Como exercício, tente isso com o contrato de Custódia, alterando o depósito inicial de Alice para algo menor que 450 Ada.
Exercício
Use o Marlowe Playground para interagir com o contrato de garantia nos vários cenários discutidos anteriormente, no tutorial sobre o uso do Marlowe.
Explore fazendo algumas alterações no contrato e interações com esses contratos modificados.
Exercício
Use o Marlowe Playground para explorar os outros contratos apresentados: o contrato de incentivo ao depósito e o exemplo de financiamento coletivo.