Contratos Inteligentes para o Povo
19 de outubro de 2018
Muitas notícias relacionadas a blockchain atualmente estão nos dizendo que um banco X ou uma corporação Y
vão usar uma "blockchain" para "reduzir custos". Basicamente, isso significa que apenas mais uma palavra da moda é
considerada pelos grandes banqueiros como apenas mais uma ferramenta para extrair valor de todos os lugares de forma mais eficiente,
e também para economizar em cortes de postos de trabalho.
Enquanto evito dizer qualquer coisa sobre "a visão de Satoshi" (nada além de especulações poderia ser encontrado lá após
seu êxodo), uma visão ampla que testemunhei nos primeiros anos em torno de fóruns online é que uma criptomoeda
deveria fornecer ferramentas para enriquecer as pessoas comuns por trás de seus pequenos negócios, que não estão muito acima de fazer o básico, não o grande capital financeiro despersonalizado. As ferramentas de
uma criptomoeda, aos olhos da visão original da comunidade, deveriam permitir que as pessoas realizassem atividades econômicas independentemente do tamanho do negócio, localização geográfica, taxas de juros definidas por grandes jogadores, e assim por diante.
As ferramentas deveriam permitir que as pessoas fizessem contratos (não contratos em papel, mas contratos digitais, autoexecutáveis e razoavelmente inteligentes) independentemente das diferenças em jurisdições, tradições, práticas comerciais seguidas, etc.
Espero que o Ergo seja útil aqui. Milhares de pequenas cooperativas e empreendedores individuais são mais importantes para o crescimento saudável e sustentável da riqueza ao redor do mundo do que algumas corporações que escondem lucros em paraísos fiscais.
Como exemplo, vamos considerar uma federação cooperativa (como Radical Routes) disposta a fornecer ajuda financeira a um empreendedor a milhares de quilômetros de distância (digamos, em Rojava).
Precisamos assumir alguns detalhes agora. Em primeiro lugar, suponha que existem quatro cooperativas na rede. Elas bloqueiam coletivamente 10.000 Ergs (em partes iguais, então 2.500 Ergs cada) em um contrato, que diz o seguinte:
- As cooperativas estão associadas a chaves públicas pubkeyA, pubkeyB, pubkeyC, pubkeyD. O empreendedor está associado a uma chave pública businessKey.
- As cooperativas estão bloqueando dinheiro em uma moeda protegida por um contrato de financiamento, depois fazendo a devida diligência e votando se devem financiar o empreendedor ou não. Todo o fundo do contrato (10.000 Ergs) vai para o empreendedor se 3 votos de 4 forem a favor. Tecnicamente, a votação é feita via assinatura de limiar de 3 de 4. Se a votação não for bem-sucedida (3 de 4 assinaturas não forem coletadas) antes do número do bloco 1.000, qualquer cooperativa (na verdade, qualquer um) pode enviar uma transação de retirada, que retorna 2.500 Ergs (no mínimo) para cada cooperativa. Além disso, o contrato de financiamento também será chamado de contrato de votação.
- Os investimentos podem ser gastos em três objetivos, com alguns limites rigorosos. Ou seja, o empreendedor deve gastar pelo menos 5.000 Ergs em equipamentos, pelo menos 2.000 Ergs na construção de um edifício necessário, outros fundos o empreendedor pode gastar arbitrariamente.
- Para ter certeza de que o dinheiro do equipamento será gasto em equipamentos, a federação cooperativa está usando chaves públicas de vendedores de equipamentos conhecidos na área do empreendedor. Por exemplo, considere que existem vendedores de equipamentos com chaves públicas pubkeyTool1, pubkeyTool2, pubkeyTool3, pubkeyTool4 na área. Tecnicamente, a transferência é organizada como uma assinatura coletiva de um vendedor de equipamentos (portanto, assinatura em anel do anel de vendedores de equipamentos E assinatura do empreendedor)
- Da mesma forma, suponha que existem 3 construtores na área que a federação cooperativa está reconhecendo, associados às chaves públicas pubkeyConstr1, pubkeyConstr2, e pubkeyConstr3.
- Semelhante ao contrato de votação, se os contratos de equipamentos e construção não forem co-assinados antes do número do bloco 5000, as cooperativas da federação poderão retirar fundos.
Existem diferentes maneiras de definir contratos no Ergo. Um script na linguagem de baixo nível, ErgoTree, descreve uma (única) condição lógica sobre se uma moeda pode ser gasta de acordo com isso, e também uma prova de gasto fornecida por uma transação de gasto. Internamente, a condição é representada como uma árvore de sintaxe tipada, daí o nome. A estrutura nos permite fazer análise de custo antecipada, etc. A linguagem de nível superior chamada ErgoScript permite ter uma descrição mais tradicional e legível, usar variáveis e dividir a lógica em sub-rotinas.
Vamos começar com o contrato principal definido em (1-3) acima:
{
val votingSuccess = atLeast(3, Array(pubkeyA, pubkeyB, pubkeyC, pubkeyD))
val properSpending = OUTPUTS(0).value >= 5000L &&
blake2b256(OUTPUTS(0).propositionBytes) == spendingContract1Hash &&
OUTPUTS(1).value >= 2000L &&
blake2b256(OUTPUTS(1).propositionBytes) == spendingContract2Hash
val withdrawCondition = HEIGHT >= 1000L &&
OUTPUTS(0).value >= 2500L && OUTPUTS(0).propositionBytes == pubkeyA.propBytes &&
OUTPUTS(1).value >= 2500L && OUTPUTS(1).propositionBytes == pubkeyB.propBytes &&
OUTPUTS(2).value >= 2500L && OUTPUTS(2).propositionBytes == pubkeyC.propBytes &&
OUTPUTS(3).value >= 2500L && OUTPUTS(3).propositionBytes == pubkeyD.propBytes
(votingSuccess && properSpending) || withdrawCondition
}
Este script em ErgoScript deve ser compilado em uma árvore de sintaxe (que será escrita na blockchain em uma forma serializada) vinculando-o a valores concretos para variáveis (pubkeyA, pubkeyB, pubkeyC, pubkeyD, spendingContract1Hash, spendingContract2Hash). spendingContract1Hash é um hash do script de gasto de equipamentos (serializado) que será fornecido abaixo, spendingContract2Hash é um hash do script de gasto de construção.
O script de gasto de equipamentos está abaixo:
{
val spendingSuccess = (pubkeyTool1 || pubkeyTool2 || pubkeyTool3 || pubkeyTool4) && businessKey
val withdrawCondition = HEIGHT > 5000L &&
OUTPUTS(0).value >= 1250L && OUTPUTS(0).propositionBytes == pubkeyA.propBytes &&
OUTPUTS(1).value >= 1250L && OUTPUTS(1).propositionBytes == pubkeyB.propBytes &&
OUTPUTS(2).value >= 1250L && OUTPUTS(2).propositionBytes == pubkeyC.propBytes &&
OUTPUTS(3).value >= 1250L && OUTPUTS(3).propositionBytes == pubkeyD.propBytes
spendingSuccess || withdrawCondition
}
E o script de construção é:
{
val spendingSuccess = (pubkeyConstr1 || pubkeyConstr2 || pubkeyConstr3) && businessKey
val withdrawCondition = HEIGHT > 5000L &&
OUTPUTS(0).value >= 500L && OUTPUTS(0).propositionBytes == pubkeyA.propBytes &&
OUTPUTS(1).value >= 500L && OUTPUTS(1).propositionBytes == pubkeyB.propBytes &&
OUTPUTS(2).value >= 500L && OUTPUTS(2).propositionBytes == pubkeyC.propBytes &&
OUTPUTS(3).value >= 500L && OUTPUTS(3).propositionBytes == pubkeyD.propBytes
spendingSuccess || withdrawCondition
}
Agora suponha que a federação cooperativa criou uma moeda protegida pelo contrato de votação. Abaixo está como o empreendedor pode fazer seu negócio:
- Criar uma transação que consome a moeda e cria pelo menos três moedas, uma com o contrato de gasto de equipamentos, outra com o contrato de gasto de construção, a terceira criando uma moeda protegida pela chave pública do empreendedor.
- Enviar a transação para as cooperativas, esperar que a transação com a entrada assinada por limiar seja publicada na blockchain.
- Considerar um contrato com um vendedor de equipamentos, co-assinar uma transação de gasto.
- Considerar um contrato com um construtor, co-assinar uma transação de gasto.
O empreendedor pode facilmente fugir sem fazer nenhum negócio, mas com não mais que 3.000 Ergs. Isso pode ser corrigido, por exemplo, esse dinheiro poderia ser torná-lo gastável apenas após o número do bloco 5.000, e antes disso o dinheiro poderia ser retirado pelas cooperativas. Para gastos de equipamentos e construção, o empreendedor está trabalhando junto com algum, presumivelmente já respeitável, negócio. Assim, o investidor está reduzindo seus riscos.
Você pode encontrar código e exemplos de transações online. Por favor, note que temos mais exemplos de esquemas de assinatura complexos, contratos de múltiplas etapas (com caminhos de execução em andamento revelando, como MAST no Bitcoin, mas com ciclos permitidos), oráculos, crowdfunding e assim por diante. Por favor, verifique nosso repositório de exemplos.
Share post
13 de agosto de 2025
12 de agosto de 2025
9 de julho de 2025
12 de maio de 2025

7 de abril de 2022

8 de março de 2022


















