Sobre o mecanismo de colateral
O mecanismo de colateral é uma característica importante projetada para garantir a execução bem-sucedida de contratos inteligentes.
Baseando-se nas garantias fornecidas pelo design determinístico do ledger, Cardano implementa um esquema de validação em duas fases. A principal razão para introduzir a validação em duas fases é limitar a quantidade de trabalho de validação não compensado pelos nós. Cada fase serve a um propósito para alcançar esse objetivo:
- A primeira fase verifica se a transação é construída corretamente e pode pagar sua taxa de processamento.
- A segunda fase executa os scripts incluídos na transação.
Se a transação for válida na fase-1, os scripts da fase-2 são executados. Se a fase-1 falhar, nenhum script é executado e a transação é imediatamente descartada.
O colateral é usado para garantir que os nós sejam compensados pelo seu trabalho em caso de falha na validação da fase-2. Assim, o colateral é a garantia monetária que um usuário dá para assegurar que o contrato foi cuidadosamente projetado e exaustivamente testado. A quantidade de colateral é especificada no momento da construção da transação. Não diretamente, mas adicionando entradas de colateral à transação. O saldo total nos UTXOs correspondentes a essas entradas marcadas de forma especial é a quantidade de colateral da transação. Se o usuário cumprir as condições da garantia, e um contrato for executado, o colateral está seguro.
O cenário
Sem colateral, o usuário não é cobrado se um contrato inteligente falhar. No entanto, no momento em que a transação falha, a rede já incorreu em alguns custos para iniciar e validar a transação. Isso significa que um ator malicioso poderia inundar a rede com transações inválidas, negando serviço a outros usuários a um custo baixo.
A solução
Quando um usuário inicia uma transação, ele compromete ada suficiente para cobrir seu custo de execução. Em Alonzo, transações que chamam e usam contratos inteligentes não nativos (conhecidos como contratos da fase-2) também precisam de colateral suficiente para cobrir custos relacionados a possíveis falhas na transação. Essa quantidade pode ser pequena, mas é suficiente para tornar um ataque de negação de serviço (DOS) proibitivamente caro.
As taxas de colateral são coletadas apenas se uma transação falhar na validação. Se o contrato passar na validação, as taxas da transação são coletadas, mas o colateral não.
O raciocínio
Um usuário honesto nunca está em risco de perder seu colateral.
A blockchain Cardano é determinística em relação aos custos de transação porque esses custos dependem apenas de valores locais e do estado local. Isso significa que um usuário pode calcular o custo de execução (em ada) de uma transação antes de submetê-la. Essa característica é diferente de outras blockchains, incluindo Ethereum, onde outras atividades da rede podem influenciar o custo do gás. A quantidade de colateral necessária depende apenas do custo de execução.
O testnet Cardano fornece um ambiente seguro com ada de teste gratuito, para que os desenvolvedores de aplicativos distribuídos (DApps) possam testar exaustivamente seus contratos inteligentes antes de implantá-los no mainnet. Se as transações tiverem sucesso no testnet, o desenvolvedor pode ter certeza de que todos os scripts de fato terão sucesso.
Se as condições on-chain mudaram desde que a transação foi construída, essa transação será totalmente rejeitada e nenhuma taxa será cobrada. Se uma assinatura estiver faltando, por exemplo, nenhum colateral seria cobrado.
Detalhes técnicos
O termo colateral refere-se ao total de ada contido nos UTXOs referenciados pelas entradas de colateral. Uma transação usa entradas de colateral para cobrir suas taxas se um script da fase-2 falhar.
A especificação formal de Shelley introduziu o conceito de scripts de "multissinatura". Scripts da fase-1, como esses, são capturados inteiramente pelas regras do ledger. Os custos de execução podem, portanto, ser facilmente avaliados antes de serem processados pela implementação, e quaisquer taxas podem ser calculadas diretamente dentro da implementação da regra do ledger, com base no tamanho da transação que inclui o script, por exemplo.
Em contraste, scripts da fase-2 podem realizar computações arbitrárias (e, em princípio, Turing-completas). Exigimos que transações que usam scripts da fase-2 tenham um orçamento em termos de um número de ExUnits abstratas. Este orçamento dá um limite quantitativo sobre o uso de recursos em termos de um número de métricas específicas, incluindo uso de memória ou passos de execução abstratos. O orçamento é então usado como parte do cálculo da taxa da transação. Para mais detalhes, leia a especificação do ledger Cardano para Plutus Core.
Com a atualização Vasil, os desenvolvedores de DApps também têm a possibilidade de especificar um endereço de troco para o colateral do script. Isso significa que, em caso de falha na validação da fase-2 do script, apenas a quantidade correta será retirada, e os fundos restantes serão enviados para o endereço de troco fornecido. O tutorial como usar saídas de colateral fornece mais detalhes.