Verificação de Contrato
Last updated
Was this helpful?
Last updated
Was this helpful?
A verificação de contrato é o processo de corresponder um contrato ink! implantado com o código-fonte e os metadados gerados quando ele foi construído.
O processo de verificação para linguagens de contrato inteligente baseadas em Wasm é mais complexo do que linguagens baseadas em EVM, como o Solidity, devido ao compilador Rust não fornecer compilações determinísticas de contratos.
Para verificar um contrato ink! ou Wasm, o processo de verificação deve recompilar o contrato em um ambiente de hospedagem idêntico ao qual foi originalmente construído. A forma mais simples de fazer isso é usando um contêiner Docker.
Como isso não será possível com contratos inteligentes existentes, foi criado um mecanismo alternativo onde um implantador de contrato pode fornecer um arquivo de metadados assinado para associar ao contrato. Esta abordagem também é detalhada abaixo.
NOTA: No momento atual, a ferramenta CLI cargo-contract
não fornece uma imagem Docker para criação de compilações verificáveis do ink!.
A seguinte issue foi criada com detalhes sobre isso. Como solução intermediária, a Web3 Labs está publicando uma imagem de contêiner para verificação do código-fonte de contratos inteligentes ink!.
A Web3 Labs disponibilizou uma versão pública de seu para atender aos ecossistemas ink! e DotSama. Isso pode ser usado em conjunto com o contêiner de imagem de compilação verificável para verificar contratos inteligentes ink!.
Os seguintes passos delineiam como criar uma compilação verificável e posteriormente verificá-la usando esses serviços.
You should already be familiar with using cargo-contract
to .
You will need to install the ink! verified image crate:
Você já deve estar familiarizado com o uso do cargo-contract
para .
Você precisará instalar o crate ink-verified-image:
Agora você pode realizar uma compilação verificada executando o seguinte comando na pasta do projeto de contratos inteligentes:
NOTA: As compilações reproduzíveis só funcionam com o cargo-contract >= 2.0.2
e contratos gerados com essa versão em diante. Para contornar isso, você pode usar o arquivo de metadados assinado.
Se você tiver algum problema ao executar a compilação, você pode compilá-la manualmente executando os seguintes comandos:
Agora haverá um arquivo zip do pacote disponível que contém o código-fonte do contrato, metadados e o binário Wasm:
Após a implantação, será necessário anotar o hash do código do contrato para poder verificá-lo.
Por favor, escreva em português.
O processo de verificação envolve as seguintes etapas:
O solicitante faz o upload do arquivo de pacote de origem para uma rede e hash de código
O servidor verifica o seguinte:
O código-fonte para a rede e hash de código não está sendo verificado ou já foi verificado
Existem recursos suficientes no host para iniciar uma nova verificação
O servidor faz o download do código Wasm original correspondente à rede e hash de código fornecidos
O servidor transmite o arquivo de arquivamento se for um arquivo compactado
O servidor move os arquivos de encenação para o diretório de processamento
O servidor executa um processo de contêiner para a imagem do verificador para verificar o pacote em processamento. Consulte o fluxo de trabalho de verificação do código-fonte para obter detalhes.
No caso de saída do contêiner, o servidor move os artefatos verificados para o diretório de publicação se a verificação for bem-sucedida, caso contrário, mantém um registro no diretório de erros.
Depois que um contrato for verificado, você poderá usar os endpoints /contract/{codeHash}/metadata.json
e /contract/{codeHash}/src
para recuperar os metadados e o código-fonte, respectivamente.
Sirato Substrate é um explorador de contratos inteligentes para contratos ink!. Ele integra-se ao serviço de verificação de contratos, permitindo que os usuários façam upload de arquivos de pacote gerados pela imagem de construção verificável por meio da interface do usuário do Sirato, em vez de usar o endpoint da web.
Além disso, uma vez que um contrato tenha sido verificado, os detalhes de qualquer atividade do contrato e eventos que ocorram em uma parachain ou cadeia Substrate são decodificados para o usuário no Sirato.
A partir daí, você pode navegar até o código implantado clicando na referência do código que corresponde ao código hash retornado pela chamada de instanciação do contrato do cargo contract.
Alternativamente, você pode navegar diretamente digitando a URL https://substrate.sirato.xyz/codes/0x<code-hash>
.
Agora clique na guia de código-fonte:
Em seguida, faça o upload do arquivo package.zip
verificado que você gerou anteriormente.
Agora você pode iniciar o processo de verificação, que inicia uma compilação dos recursos fornecidos.
Ao clicar em "Contract successfully verified
", serão exibidos os arquivos de metadados e código-fonte associados ao seu contrato.
Ao clicar em "Procurar arquivos verificados", serão exibidos os metadados e arquivos de código-fonte associados ao seu contrato.
Se voltarmos para a instância do contrato, todos os métodos ou eventos agora serão decodificados.
Podemos verificar isso invocando um método no contrato. Agora podemos ver o método decodificado que foi chamado no Sirato.
O serviço de verificação suporta o envio de metadados de contrato assinados como uma alternativa adicional aos metadados gerados por builds reproduzíveis. Por favor, observe que os metadados assinados não são verificados e o proprietário do código hash é confiável.
Essa funcionalidade responde a:
O suporte para dados de build_info
está disponível apenas a partir do cargo-contract
2.0.2.
Ainda não há uma imagem ou procedimento oficial em relação a builds reproduzíveis.
No entanto, queremos expandir a utilidade do serviço nesse meio tempo.
Embora não seja a forma ideal de associar os metadados a um determinado código hash, isso impede a exploração trivial por meio de:
Verificar se a assinatura é do proprietário da conta do código hash.
Verificar se a mensagem assinada corresponde ao sha256
do metadata.json
enviado + o código hash do bytecode
do contrato enviado.
Se você estivesse usando o , você veria uma saída semelhante à seguinte:
Agora que você criou a compilação verificada, pode .
O Serviço de é um serviço web RESTful criado para verificar contratos inteligentes implantados usando pallet-contracts
.
A Web3 Labs hospeda uma instância pública do serviço em . Uma interface Swagger para o serviço também está disponível em .
Ele funciona com qualquer rede que esteja definida no pacote .
Para verificar um contrato implantado usando o serviço, você precisará usar o endpoint /verify/{network}/{codeHash}
, que está documentado .
Por exemplo, para verificar um contrato implantado na parachain Rococo, você pode acessar a instância do Sirato em .
Para fornecer metadados assinados, você precisará usar o endpoint /upload/{network}/{codeHash}
, que está documentado .
No corpo da solicitação, você precisará assinar esta mensagem usando a conta que enviou o contrato. Você pode usar a e verificação no Polkadot.js.
Também é possível usar o Sirato para isso, você pode encontrar instruções .