
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:
- aguarde até que os pares sejam detectados e a sincronização comece
- 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
E verifique o saldo:
eth.getBalance(eth.accounts[0])
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#internalObbyte
Para publicação, usaremos o
editor OscriptLimpe 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 .