
No artigo, falarei sobre o que é o Contrato de Garantia, também conhecido como um mecanismo para fornecer benefícios públicos e de grupo, e juntos escreveremos nossa própria implementação de crowdfunding baseada em Agentes Autônomos na plataforma Obyte.
Contrato de Garantia é um mecanismo organizado de captação de recursos para a criação de um novo bem público. Um exemplo típico do uso de tais contratos pode ser a seguinte situação: os participantes de uma cooperativa de verão decidiram construir uma estrada para acesso conveniente às suas casas de veraneio. Para fazer isso, colete a quantidade N e transfira-a para o empreiteiro para a construção da estrada. Muitas questões surgem: onde encontrar uma pessoa em quem todos confiariam e cobrariam a cobrança, como fazer com que todos os usuários potenciais da estrada invistam em sua construção, o que acontecerá se não houver dinheiro suficiente coletado etc.
Os contratos de garantia têm um significado muito semelhante ao financiamento coletivo, apenas os investidores não estão expostos ao risco, como é o caso dos investidores que investem em empresas de risco. Esses contratos, assim como o crowdfunding, também podem ter dois resultados - com e sem êxito, dependendo da consecução da meta para o valor arrecadado. O resultado de uma cobrança bem-sucedida será o recebimento pelos investidores, mas às vezes não apenas por eles, de um novo bem público. Em caso de falha, o dinheiro é simplesmente devolvido aos depositantes.
Então, para iniciantes, repetimos as condições básicas. A essência do crowdfunding é arrecadar fundos "em uma multidão" para uma meta predeterminada, com um valor final determinado (não necessariamente fixo, pode ser dinâmico) e uma data final (também nem sempre, mas geralmente). Quando esse valor é atingido, a rodada de financiamento é considerada bem-sucedida e a coleta é interrompida, todos os fundos são alocados para atingir a meta. Em caso de falha, ou seja, ao atingir o prazo e com recursos insuficientes, todos os fundos serão devolvidos aos doadores.
Quais problemas o crowdfunding de criptomoedas resolve? Em primeiro lugar, evita que os investidores tenham que confiar e verificar para quem eles enviam seu dinheiro. O código do agente autônomo para captação de recursos é aberto e cada investidor pode garantir que ele possa retirar sua contribuição a qualquer momento até que o valor final seja atingido, bem como que todos os fundos sejam enviados para um endereço pré-selecionado para criar o bem. Em segundo lugar, a contabilidade transparente de todos os fundos arrecadados ajuda a distribuir benefícios futuros com o alcance da meta proporcionalmente à contribuição feita.
Outro problema que pode ser resolvido com o Contrato de Garantia é o problema de coordenação. Hoje vamos complementar nosso último artigo sobre o
jogo "Attack 51%" , e apenas resolveremos esse problema. Sem o uso de AA, os participantes do jogo correm o risco de "falta" do valor coletado devido à falta de coordenação. Então, aqueles que já conseguiram fazer um investimento simplesmente perderão seu dinheiro por causa de outros participantes que não demonstraram interesse ou simplesmente não tiveram tempo para fazê-lo (lembre-se de que as equipes adversárias têm exatamente 24 horas para desafiar o líder atual). Ao coletar dinheiro através de um contrato de garantia, os jogadores poderão sacar seu dinheiro a qualquer momento até que a quantia necessária seja coletada.
Não aplicável no nosso caso, mas outra característica útil desses contratos é reduzir o impacto do "efeito free rider" ou "problema do free rider". Como o bem público, ou seja, inalienável ou difícil de controlar o acesso a ele, o problema do free rider é o principal na organização de bens públicos. As pessoas não querem investir em algo que os outros possam usar de graça, ou o próprio investidor, aderindo a um comportamento econômico absolutamente racional e escolhendo uma estratégia de “não investir”, no caso de uma coleção bem-sucedida, provavelmente poderá usar o bem criado.
Também falarei sobre a opção de contrato de garantia otimizado, que aumenta as chances de sucesso na captação de recursos, como o comportamento racional dos participantes já será a escolha das estratégias de investimento, em vez de ignorar.
Jogamos o jogo coletivamente
Para o nosso exemplo, usaremos o
jogo "Attack 51%" já conhecido no
último artigo.Na sua implementação atual, os participantes do jogo enviam dinheiro para o endereço AA do jogo. Mas o algoritmo pode ser aprimorado e as chances de perda de dinheiro pelos participantes em caso de perda de equipe podem ser reduzidas.
Para isso, qualquer membro da equipe pode organizar o crowdfunding com uma meta dinâmica igual a pelo menos 51% do pool total do jogo. À medida que a piscina cresce, a meta final de crowdfunding também muda. E somente se for bem-sucedido, o dinheiro será enviado para o endereço AA do jogo e a equipe se tornará imediatamente o líder atual. Se esse evento nunca ocorrer, os participantes não perderão seu dinheiro, desperdiçando o pool do jogo em vão, mas simplesmente pegando o dinheiro do crowdfunding AA.
Os originais de ambos os agentes independentes estão sempre disponíveis no
editor de código Oscript on -
line na forma de modelos; basta selecioná-los no menu suspenso: "51% attack game" e "Fundraising proxy".
Antes de começar a escrever AA no Oscript, recomendo a leitura do
Guia de Introdução (eng) na nossa documentação para familiarizar-se rapidamente com os princípios básicos da escrita de AA.
Escrevendo um código
Primeiro, escrevemos o algoritmo: o doador envia bytes para o endereço AA, recebendo em troca um token de crowdfunding na proporção de 1 para 1. A qualquer momento, ele pode trocar esses tokens de volta por bytes. Depois de receber os bytes, o AA verifica se alcançamos o objetivo de angariar fundos e, nesse caso, envia todos os bytes para o endereço do AA do jogo e recebe os tokens do jogo (tokens da equipe) em troca. O doador agora pode trocar seus tokens de crowdfunding por tokens de jogos, que, no futuro, caso a equipe vença, já poderão ser trocados por bytes nos jogos AA, recebendo até x2 bytes dos originais.
Então, vamos começar.
A unidade de processamento inicial do novo período de captação de recursos. Ao receber o campo "start" na mensagem de dados recebida no endereço do nosso AA, emitiremos nosso token de crowdfunding e gravá-lo no estado, também o devolveremos como resposta ao chamador.
{
Processando depósitos de doadores. Primeiro, filtramos as transações indesejadas com quantias muito pequenas, que não são suficientes nem para uma comissão. Em seguida, verifique as condições básicas de que o jogo não foi concluído e a coleta é possível. Lista completa de blocos:
{
Imediatamente após as verificações iniciais, a lógica principal do nosso AA é:
$total_raised = var['total_raised'] + $amount;
- aqui resumimos a quantia recém-recebida com a quantia total de fundos do agente.
$missing_amount = ceil((balance[$destination_aa][base] + $total_raised)*0.51) - var[$destination_aa]['team_' || $team || '_amount'];
- verifique se a nova quantia arrecadada é suficiente para ganhar o jogo. Observe a referência ao saldo e estado das variáveis de outro AA:
balance[$destination_aa][base]
e
var[$destination_aa]['team_' || $team || '_amount']
var[$destination_aa]['team_' || $team || '_amount']
var[$destination_aa]['team_' || $team || '_amount']
.
Fazemos tudo isso no bloco
init
, que é chamado todas as vezes antes de processar as mensagens de transação. A resposta para a transação recebida, obviamente, será o envio de tokens AA na proporção de um para um em relação aos bytes recebidos (o primeiro bloco da matriz de
mensagens ). O segundo e o terceiro bloco serão executados apenas se a variável local
$ bDone estiver configurada como
true (está configurada no bloco
init ). Neles, enviaremos todos os fundos do endereço deste AA para o endereço do jogo AA, recebendo em troca tokens de jogo. No último bloco de mensagens, simplesmente atualizamos o estado, definindo os status necessários e a quantia coletada.
Processando tokens recebidos do jogo AA, eles já estão no saldo do nosso AA, precisamos apenas alterar o estado do agente:
{
Refand de investimentos por jogadores. Permitimos que você se recuse a participar a qualquer momento e retome seus bytes. Para fazer isso, o jogador envia os tokens desse AA e enviamos a ele os mesmos bytes na transação de retorno:
{
Troca de nossos tokens AA por tokens de jogo. Simplesmente enviamos tokens de jogo que estão no saldo do nosso AA (no caso de passar o bloco if) em uma quantidade igual ao número de "nossos" tokens recebidos.
{
O código do agente está pronto, aqui está uma lista completa:
Código completo do agente { init: `{ $asset = var['asset']; $destination_aa = 'WWHEN5NDHBI2UF4CLJ7LQ7VAW2QELMD7'; $team = 'VF5UVKDSOXPMITMDGYXEIGUJSQBRAMMN'; }`, messages: { cases: [ {
Não implementamos o algoritmo mais trivial, porque nossa meta é dinâmica, o que não é típico de um contrato de garantia típico. Neles, na maioria das vezes o valor alvo é fixo, bem como o prazo final. Isso não exigirá grandes alterações no código; portanto, deixe isso como um exercício para o leitor.
A melhor estratégia é investir!
E agora, de volta ao problema do free rider. No caso do jogo, não temos esse problema, porque apenas titulares de tokens de crowdfunding podem ganhar. Mas resolver o problema do free-rider ajudará no caso do jogo. Nós podemos "estimular" as pessoas a investir. Para isso, o organizador da captação de recursos, que também é o criador do AA, pode estabelecer uma pequena compensação, que ele pagará do seu bolso se o objetivo da coleção não for alcançado. No caso de uma coleção bem-sucedida, o organizador terá uma pequena porcentagem. Ou seja, apresentamos um terceiro que, para obter benefícios, cobrirá o risco de cobrança malsucedida.
Ao aplicar esse “financiamento coletivo otimizado”, o comportamento anteriormente racional de “não investir” (em geral, para qualquer bem público ser um free-rider é sempre a estratégia mais economicamente rentável) pode se tornar menos racional do que investir. Isso pode ser especialmente relevante nos casos de criação de mercadorias de grupo nas quais um certo círculo de pessoas esteja envolvido. Isso não elimina completamente o problema clandestino, mas torna a participação um comportamento racional.
O código que implementa o “contrato de garantia otimizado” também será deixado como um exercício interessante para quem desejar.