Quer conhecer o mecanismo de funcionamento do contrato aplicado no AO? Então, vamos pegar o código do contrato e descobrir. Use um miniaplicativo python para obter facilmente o contrato do processo especificado.

Autor: txohyeah

Avaliado por: outprog

Fonte: Content Guild - Notícias

Introdução ao AO

O que é AO?

Já se passou menos de meio ano desde que o testnet AO foi lançado e há muito conteúdo sobre AO. O conteúdo deste artigo concentra-se principalmente em processos e contratos inteligentes, incluindo o que é AO, o que é processo e a vida. ciclo do Processo. Por fim, focaremos em como visualizar o código do contrato do Processo.

AO é uma função de computação desenvolvida pela Arweave com base na melhoria do armazenamento distribuído. Seu objetivo é obter suporte abrangente a aplicativos descentralizados, correspondendo primeiro ao caminho de desenvolvimento do cálculo do Ethereum e depois ao armazenamento. Simplificando, AO representa contratos inteligentes ou poder de computação na plataforma Arweave e é uma extensão de camada lógica sobre sua solução de armazenamento permanente.

AO consiste em três unidades, MU/SU/CU

MU: Recebe mensagens enviadas pelos usuários para garantir que estejam assinadas.

SU: Carimbe a data e hora e classifique as mensagens, depois agrupe e publique no Arweave. SU também é o protagonista que usaremos hoje e terá um papel importante na revisão do contrato posteriormente.

CU: Processe a mensagem e calcule o resultado.

O que o processo está sendo executado no AO?

AO é essencialmente um computador superparalelo construído com base em um Protocolo de Dados, onde os Dados existem na forma do elemento básico Mensagem definido em AO. Então Process desempenha um papel importante no processamento de mensagens e é a unidade básica para processamento de mensagens no AO. O processo é executado na CU e pode ser considerado como uma máquina virtual na CU. Portanto, Process contém a capacidade básica de receber e enviar mensagens dentro da rede. Em seguida, os desenvolvedores criam recursos de processamento de mensagens para Process adicionando manipuladores a Process. O contrato a ser discutido posteriormente é realmente implantado enviando uma mensagem para Process e, em seguida, usando o manipulador _eval integrado. O manipulador adicionado pode ser entendido como a função de processamento de mensagens do contrato.

Ciclo de vida do processo

Se quisermos encontrar uma analogia em nosso mundo atual, então acho que o contêiner (Container) no docker pode ser uma boa comparação e compreensão do Processo. A seguir, usarei a analogia do ciclo de vida do Container no docker para comparar o ciclo de vida do Processo.

Todos nós sabemos que a criação de um Container no docker depende de uma imagem (Imagem). Por exemplo, crie um Container MySQL baseado na Imagem MySQL, e então você pode chamar o serviço MySQL neste container. O mesmo vale para Processo no AO A criação do Processo depende do Módulo, e também haverá Módulos com funções diferentes. Existem os Módulos mais simples, Módulos que suportam tarefas agendadas e Módulos que incluem sqlite. Atualmente, existem centenas de módulos para os desenvolvedores escolherem para criar seu próprio processo. Além disso, você também pode criar seu próprio módulo personalizado. Acredito que num futuro próximo também haverá módulos que suportam GPUs e módulos que suportam vários recursos de IA.

O processo no AO também é diferente do Container no docker. Os contêineres no Docker oferecem suporte a várias ações, como iniciar, parar e excluir. Atualmente, não existem tais operações no Processo AO. Afinal, no mundo das aplicações descentralizadas, essas funções controladas por indivíduos centralizados são muito inconsistentes. A execução do Processo no AO depende inteiramente do valor do próprio Processo. Se ele tiver valor suficiente, então mais UCs ​​estarão definitivamente dispostas a executá-lo. isso. Então este processo desaparecerá silenciosamente.

Função de avaliação e implantação de contrato AO

O que é um contrato AO? Compare os contratos inteligentes do Ethereum. O código Lua em Process rodando em AO pode ser considerado aproximadamente como um contrato inteligente.

Quando criamos um Processo, cada Módulo carregado terá dois manipuladores padrão (manipuladores podem ser entendidos como funções abertas a outros Processos), um dos quais é o manipulador _eval. A principal função deste manipulador é executar o código Lua. Por exemplo, se você inserir 1+1 em aos, será retornado um 2, que é processado por este manipulador. Então, implantar o contrato significa, na verdade, enviar uma mensagem ao Processo e adicionar um manipulador personalizado que pode lidar com a lógica de negócios do Processo por meio do manipulador _eval.

Há uma coisa a ser observada: veja o código abaixo. Esta é a seção de código em process.lua no projeto oficial de código aberto AO. O manipulador _eval só pode ser executado quando o remetente da mensagem for consistente com o Proprietário do Processo (o Proprietário é o endereço da carteira quando o contrato foi criado). Em outras palavras, se o Proprietário for definido como nulo (ou seja, o Processo estiver definido para não ter nenhum Proprietário), então o contrato neste Processo se tornará um contrato que ninguém pode modificar.

Além disso, como o AO é realmente construído com base no Paradigma de Consenso Baseado em Armazenamento (SCP, Paradigma de Consenso Baseado em Armazenamento), o contrato em execução deve ser encontrado no "consenso de armazenamento", ou seja, todas as mensagens em execução no Processo, incluindo através O código do contrato implantado pelo manipulador _eval é armazenado no Arweave. Portanto, qualquer pessoa pode encontrar o código do contrato neste “consenso de armazenamento”.

Ver contrato

Então, voltando ao assunto de hoje, como encontrar o código do contrato? Abaixo apresentarei os dois métodos e fornecerei um programa Python para capturar o contrato.

Arweave

O primeiro método é, obviamente, consultar diretamente no Arweave (você pode usar graphql https://arweave.net/graphql). Esta abordagem requer que os dados sejam compactados no Arweave para serem úteis.

SU - Navegador

O segundo método é o método introduzido principalmente hoje. Como todos os dados serão carregados via SU, eles também podem ser consultados no SU. Pessoalmente, acho que cada SU terá um cache local dos dados carregados por si só, portanto, o código do contrato correspondente pode ser encontrado consultando o SU. Primeiro, você pode consultar diretamente digitando o endereço no navegador. No entanto, as deficiências deste método também são óbvias: 1. Alguns processos enviam e recebem grandes quantidades de mensagens, portanto a quantidade de dados carregados na cadeia também é enorme. No entanto, os dados que o navegador pode carregar são limitados e ocorrem frequentemente travamentos do navegador. 2. É difícil filtrar os dados do contrato desejados dos dados massivos.

A figura abaixo mostra todas as mensagens do processo (processo de token AO) com id de processo m3PaWzK4PTG9lAaqYQPaPdOcXdO8hYqi5Fe9NWqXd0w dentro de dois carimbos de data/hora.

SU - SDK

Aqui eu escrevi um pequeno programa, usando um SDK ao escrito por um líder da indústria baseado em python, para filtrar as mensagens cuja ação é Eval. (As mensagens cuja ação é Eval são todas processadas pelo manipulador _eval, incluindo o código do contrato carregado.) A imagem a seguir é a mensagem que peguei do SU, na qual o conteúdo do campo de dados é um código de contrato com escape de caractere. Obviamente, as mensagens capturadas também conterão conteúdo de código de contrato que não seja de implantação, como a execução de 1 + 1, etc. Porém, o número de mensagens após a filtragem não é mais grande e o código do contrato pode ser selecionado manualmente.

O programa é de código aberto, aqui está o endereço do github: https://github.com/txohyeah/ao-sc

Contrato de token AO

Então, vamos ficar entusiasmados e dar uma olhada no código do contrato do token ao. (O código do contrato capturado também será colocado no armazém de código-fonte aberto)

Primeiro, ao inicializar o estado, TotalSupply = "21000000000000000000" é definido para ser consistente com a emissão de Bitcoin.

Denominação = Denominação ou 12 também define o ponto decimal como 12 dígitos.

É definido que se a função de transferência for executada antes da geração de 100.000 blocos, "Transferência bloqueada" será retornado diretamente.

Como um bloco é gerado a cada cinco minutos, 100 mil blocos serão gerados por volta de fevereiro do próximo ano.

Há informações mais relevantes, por isso não vou entrar em detalhes. Todos podem navegar alegremente neste contrato clássico de AO.

Instruções do programa

Apresentei o código do contrato capturado acima. A seguir, apresentarei brevemente este programa. É muito simples, acredito que quem não conhece código pode utilizá-lo facilmente.

O primeiro passo é instalar a versão 3.12 do python. O programa é escrito em python e é necessária a instalação do python.

A segunda etapa é instalar os pacotes necessários. Este programa depende do SDK dos líderes do setor e do everpay.

A terceira etapa é modificar start_time/end_time/process em fetch_sc_record.py. e execute fetch_sc_record.py.

start_time e end_time são os períodos de tempo que você precisa capturar. process é o ID do processo que você precisa para capturar o contrato.

Na quarta etapa, a mensagem Eval correspondente aparecerá no arquivo msg_eval.json. Navegue pelas mensagens e você encontrará o código do contrato que precisa!

PS: Também precisa ser igual à execução aos. Defina HTTPS_PROXY.

🏆 Prêmios por "detectar bugs": Se você encontrar erros de digitação, frases incorretas ou descrições incorretas neste artigo, clique em mim para denunciar e você receberá incentivos.

Isenção de responsabilidade: este artigo não representa as opiniões ou posições da PermaDAO. PermaDAO não fornece consultoria de investimento nem endossa nenhum projeto. Solicita-se aos leitores que cumpram as leis do país onde estão localizados e conduzam as atividades da Web3 em conformidade.

🔗 关于 PermaDAO:Site | Twitter | Telegrama | Discórdia | Médio | YouTube