"Agentes Autônomos" ou execute o código na plataforma aberta de criptografia Obyte



O Obyte é uma plataforma criptográfica aberta que usa um gráfico acíclico direcionado (DAG, gráfico direcionado sem ciclos) como um registro de transações em vez de uma blockchain, com acesso livre e igual ao registro para todos os participantes. O DAG, ao contrário do blockchain usual para todos, possibilita enviar dados para um registro distribuído diretamente sem a participação de mineradores devido à rejeição de blocos e à estrita ordenação de transações. Comparada às blockchains, a arquitetura do DAG não precisa de classes privilegiadas de usuários, como mineradores, falsificadores ou produtores de blocos, portanto, não há intermediários entre o usuário e o registro na rede e todos têm acesso igual e direto para adicionar transações ao registro.

Neste artigo, gostaria de falar sobre a Obyte, agentes autônomos e comparar tudo isso com o Ethereum.

O que são agentes autônomos?


Este é um programa cujo código fonte é armazenado no registro (DAG) e possui seu próprio endereço, semelhante aos endereços de qualquer outro participante da rede. O programa descreve as ações que serão executadas em resposta ao envio de moedas e dados para este endereço. Se você conhece os contratos inteligentes da Ethereum, os agentes autônomos têm um significado muito próximo deles.

Um exemplo da vida é uma máquina de venda automática. Em resposta ao número do produto digitado no teclado e digitando a quantidade, o dispositivo fornece ao usuário o próprio produto. Há uma diferença importante entre AA e máquinas de venda automática: as máquinas de venda automática são controladas por seus proprietários e os usuários esperam apenas que as ações do dispositivo correspondam às expectativas do usuário. Os agentes autônomos são verdadeiramente autônomos: todo o programa é armazenado no DAG, seu código-fonte é visível para todos os participantes da rede, não pode ser alterado, desativado ou excluído.

Por exemplo, você pode programar o AA para trocar tokens. Para programação, a linguagem desenvolvida para essas tarefas é Oscript.
Obyte também tem o conceito de contratos inteligentes, mas eles não são iguais aos contratos inteligentes AA ou Ethereum. A principal diferença entre os contratos inteligentes AA e Obyte é que contratos inteligentes, como contratos regulares no mundo real, operam entre dois participantes e dizem sob quais condições um contrato pode ser executado. Simplificando, um conjunto de condições que permitem ou proíbem uma transação. Ao mesmo tempo, um agente autônomo é um participante programado independente, interagindo com o qual iniciamos sua resposta (novas transações, etc.).

A execução do código AA começa após a transação do gatilho ter se estabilizado (ou seja, houve consenso sobre a transação e o gasto duplo está definitivamente ausente). Cada nó completo executará o código AA em sua cópia do registro e registrará o resultado da execução apenas em seu banco de dados. Não há necessidade de retransmitir o resultado da execução para outros nós, porque o estado de todos os participantes da rede é o mesmo e o resultado da execução também é determinístico e o mesmo para todos. O estado final do registro é determinado apenas pelas regras de execução de AA e não é controlado por mineradores, nem eleitores, nem por mais ninguém.

Por que eles são necessários?


AA permite no modo descentralizado criar coisas como

  • opções
  • contratos futuros
  • moedas algoritmicamente estáveis
  • ativos sintéticos
  • outros derivados
  • empréstimos de segurança
  • margem de negociação
  • trocas descentralizadas
  • oráculos descentralizados
  • canais de pagamento
  • jogos econômicos
  • formadores de mercado
  • gerenciamento automático de portfólio de investimentos

E muito mais ...

Transparência do Usuário


Obyte, desde o primeiro dia de existência, oferece a oportunidade de concluir um contrato inteligente entre pessoas de uma forma compreensível para os seres humanos. A transparência e a facilidade de percepção dos usuários foram e continuam sendo um dos principais princípios na criação da plataforma.

Apesar de o Oscript ser uma linguagem de programação e ter sido criado para a percepção da máquina e dos programadores, e não das pessoas comuns, tentamos não nos afastar de nossos princípios. Portanto, para pessoas que não estão familiarizadas com a programação, uma carteira da GUI tentará interpretar o código AA antes de fazer uma transação e mostrará à pessoa o resultado da maneira que ela entende:



Oscript - linguagem do agente independente


Os desenvolvedores familiarizados com qualquer linguagem do tipo C não terão dificuldade em trabalhar com o AA.

Primeiro, eu gostaria de entender os recursos.

AA funciona apenas no acionamento de transações. Pode ser apenas pagamento ou transferência de dados AA. Por exemplo, você passa os dados {foo: 'bar', value: 100} e eles serão recebidos por AA como entrada e, com base nisso, as ações são executadas.

A que AA tem acesso


  • para quaisquer variáveis ​​que descrevam o estado atual do DAG
  • Montantes recebidos na transação acionadora
  • dados do acionador de transação
  • quem enviou a transação acionadora
  • variáveis ​​de estado do nosso e de outros AA
  • acesso a vários dados públicos do DAG, como data_feed de oráculos, atestados de nomes reais, etc.
  • saldos de nossa e de outras AA
  • informações sobre ativos

Recursos Oscript


Oscript - NÃO Turing a linguagem completa, no entanto, em seu arsenal, existem:

  • operações aritméticas
  • operações lógicas (e, ou, etc.)
  • comparações
  • concatenação de cadeias
  • algumas funções matemáticas
  • funções criptográficas (criação de hash, verificação de assinatura)
  • ramificação (if / else)
  • sem loops e funções (para evitar recursões infinitas). Você pode descobrir mais no manual neste link

Para controlar o uso de recursos e impedir cenários maliciosos, os AAs estão limitados a um máximo de 100 operações que exigem muita mão-de-obra, como funções de criptografia ou acessos ao banco de dados. A verificação ocorre no momento da implantação do código do agente.

Mas não existem fórmulas complicadas para calcular o custo do desempenho do AA. Não existem tais fórmulas, a execução do código é gratuita, os usuários, como o próprio AA, pagam apenas pela adição de dados ao registro do DAG, como qualquer outro membro da rede - 1 byte na moeda Obyte para cada byte de dados adicionado ao DAG. No entanto, AA deve manter seu saldo em bytes não inferior ao tamanho de todas as variáveis ​​de estado que armazena.

Se, na execução, o AA acionar a execução de outro AA, primeiro a transação resultante do primeiro AA será registrada no registro e somente então o próximo AA começará a ser executado.

Agentes Autônomos em Ação


Agora vamos escrever o script de pingue-pongue mais simples. Nós enviamos dinheiro para AA, ele deixa uma quantia para si e envia o resto de volta. Vamos resolver o mesmo problema em duas plataformas - Obyte e Ethereum, e comparar. No Ethereum, entidades AA semelhantes são comumente chamadas de contratos inteligentes (embora o white paper do Ethereum os chame de agentes autônomos uma vez).

Ethereum


Eu farei tudo através de geth. Execute o nó no modo de luz e aguarde a sincronização.

geth --testnet --ws --wsapi "admin,db,eth,net,web3,personal" --syncmode "light" --allow-insecure-unlock 

Agora, temos duas opções para o desenvolvimento de eventos:

  1. aguarde até que os pares sejam detectados e a sincronização comece
  2. adicionar pares manualmente

Eu escolhi a segunda opção. E rfikki e sua lista de comandos prontos vêm em socorro . Estamos conectados ao nó e adicionamos pares:

 geth attach ws://127.0.0.1:8546 admin.addPeer("enode://bc827e035cf3a42c249374be7ddc9c2fb819765c440116cf01aa6a8d70d03043d29ccd42b32a283f5ab08294467eb3b92fc40111e9af1770c84bc116edae89c0@104.248.199.52:30303"); admin.addPeer("enode://2d86877fbb2fcc3c27a4fa14fa8c5041ba711ce9682c38a95786c4c948f8e0420c7676316a18fc742154aa1df79cfaf6c59536bd61a9e63c6cc4b0e0b7ef7ec4@13.83.92.81:30303"); admin.addPeer("enode://053d2f57829e5785d10697fa6c5333e4d98cc564dbadd87805fd4fedeb09cbcb642306e3a73bd4191b27f821fb442fcf964317d6a520b29651e7dd09d1beb0ec@79.98.29.154:30303"); admin.addPeer("enode://690c93ac2f6e6f711a175cc6a73a3cf3b649eea83c458ce34364c69d1b557bb408693f06bdf6fc31538a744d5c231fdd904cce5665d04ce165032c0fc009a208@104.248.199.160:30303"); 

Depois disso, o processo de sincronização será iniciado e, para não perder tempo, crie uma conta. Para fazer isso, escreveremos os seguintes comandos em nossa conexão e definiremos a senha:

 personal.newAccount(); 

No console, veremos o endereço, copie-o e vá para a torneira . Cole no campo e clique em enviar.
Agora verifique a sincronização:

 eth.syncing #   false eth.blockNumber #        https://ropsten.etherscan.io/ 

E verifique o saldo:

 eth.getBalance(eth.accounts[0]) #   1000000000000000000 

A preparação está concluída e agora podemos passar a escrever e publicar o contrato.

Crie um arquivo, por exemplo, pingPong.sol e escreva nosso contrato nele:

 pragma solidity ^0.5.10; contract PingPong{    function deposit() payable public {        msg.sender.transfer(msg.value - 20000);    }       function getBalance() public view returns(uint256){        return address(this).balance;    } } 

Neste contrato, criamos duas funções públicas:
depósito - ligue por reabastecimento e devolva menos 20.000.
getBalance - apenas mostra o saldo do endereço do contrato.

Em seguida, precisamos compilá-lo, para isso eu uso o módulo npm solc :

 solcjs -o . --bin --abi pingPong.sol 

Agora prepare os arquivos compilados para download rápido no cliente geth . Mude o arquivo abi para olhar
 var pingPongContract = eth.contract([{"constant":true,"inputs":[],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"}]); 

E bin para visualizar

 personal.unlockAccount(eth.accounts[0]) var pingPong = pingPongContract.new( { from: eth.accounts[0], data: "", gas: 500000}); 

Acesse o cliente geth e conecte esses scripts

 loadScript('sol2/pingPong_sol_PingPong.abi') loadScript('sol2/pingPong_sol_PingPong.bin') 

Onde sol2 é o caminho para sua pasta de scripts. Depois de executar o segundo script, ele solicitará que você desbloqueie sua conta. Feito.

Em seguida, escreva `pingPong`. Se, como resultado, você vir que o endereço não está vazio - o contrato foi publicado, se não - você precisará esperar um pouco e tentar novamente.

Depois disso, executaremos a função de depósito , enviando o dinheiro e verificando como tudo correu.

 personal.unlockAccount(eth.accounts[0]) pingPong.deposit({from: eth.accounts[0], value: 500000}); 

Na saída, podemos ver o ID da transação. Copie-o, precisaremos mais tarde. Antes disso, chamamos a função getBalance e vemos 20.000, que subtraímos.

 pingPong.getBalance() 

Agora vamos mudar para etherscan. Lá, você verá em "Transações internas" um pagamento de devolução de 48.000. Acabou assim - https://ropsten.etherscan.io/tx/0xc3fab9f39f2ec32eadffc54608a61c3c77c4ac0f3630037b5c312d3b66ee85f8#internal

Obbyte


Para publicação, usaremos o editor Oscript

Limpe o modelo que ele nos oferece. Vamos escrever do zero. AA mínimo é um objeto com uma matriz de mensagens.

 { messages: [] } 

Como enviaremos o pagamento, precisamos adicionar um objeto com as propriedades indicando isso nas mensagens:

 { messages: [        {            app: 'payment',            payload: {                asset: 'base',                outputs: [                    {address: "{trigger.address}", amount: "{trigger.output[[asset=base]] - 20000}"}                ]            }        }    ] } 

Aqui vemos os metadados padrão para o pagamento. Eles são alterados usando "{}" nas linhas. O objeto acionador é usado para transferir valores e armazena informações sobre o pagamento recebido. Você pode aprender mais sobre a sintaxe na documentação .

Colamos esse código no editor e, em seguida, clique em Implantar. Isso é tudo!
AA publicado e abaixo vemos o endereço. Agora precisamos de uma carteira da GUI testnet , instale-a e execute-a. Em seguida, para obter algumas moedas de teste, vá para o "bate-papo", selecione "Bot Store" e adicione "Faucet Bot" lá. Nosso bate-papo será aberto, clique no menu à esquerda e selecione "Inserir meu endereço"


Em seguida, enviamos e aguardamos a mensagem de que o dinheiro chegou até nós: "Pagamento: ...". Em seguida, precisamos ir para a principal e aguardar até que a inscrição “Incluindo confirmação pendente” desapareça (alguns minutos), o que significa que as moedas recebidas são confirmadas e podem ser usadas.

Tudo o que resta para nós é ir para "receber", inserir o endereço AA, inserir o valor "500000" e pressionar "enviar". Agora precisamos esperar até que a transação se estabilize (verificando o histórico). Isso é necessário para disparar. Verificaremos se o dinheiro retornou para nós:



Isso é tudo, funciona. Indo ao explorador da AA, podemos ver que seu saldo aumentou em 20.000 menos a taxa pelo pagamento. Na Obyte, os próprios agentes autônomos pagam uma comissão pelas ações que realizam.

Conclusões


Como podemos ver na comparação acima, o Obyte é muito mais fácil de publicar, escrever e controlar o que acontece. Por exemplo, no Ethereum, nem sempre é possível selecionar corretamente o gás de uma transação de saída, pelo que ela pode ser confirmada por um período muito longo. Entre as vantagens do Ethereum, pode-se destacar sua rápida publicação e confirmação (cerca de um minuto, dependendo do gás fornecido). Enquanto em Obyte, a publicação ocorre imediatamente e o tempo de confirmação depende da carga da rede, com uma carga leve - cerca de 10 a 15 minutos, com uma carga grande - menos de três minutos.

Nos artigos a seguir, analisaremos alguns exemplos interessantes e animados, por exemplo, como implementar o DAO simples usando AA e responder suas perguntas.

Concorrência


Em conexão com a inovação, convidamos os desenvolvedores a participar da competição pela aplicação mais interessante e impressionante dos agentes autônomos. A competição já está em andamento e durará até meados de outubro. Como exemplos de pedidos já recebidos, existem vários AAs de financiamento coletivo, duas trocas, vários "registros" e rastreadores de reputação, loterias, jogos etc. A cada duas semanas, um júri da equipe Obyte anuncia as melhores inscrições.

O orçamento total do concurso é de US $ 38.000 (na taxa de GB no momento do lançamento).

Você pode ler mais sobre a competição neste artigo .

Source: https://habr.com/ru/post/pt467209/


All Articles