Pesquisa de site

Crie contratos inteligentes de blockchain universais


Chainlink conecta dados de blockchain com dados externos do “mundo real” usando oráculos descentralizados.

Os contratos inteligentes Blockchain têm a capacidade de acessar dados fora da cadeia, integrando oráculos descentralizados. Antes de mergulhar em como usá-los, é importante entender por que os contratos inteligentes são importantes no cenário geral e por que precisam de oráculos para acesso aos dados.

As transações acontecem todos os dias, como acontece há dezenas de milhares de anos. Eles geralmente são regidos por um acordo ou contrato. Isso pode ser motivado pelos termos de serviço do fornecedor, pelas estruturas regulatórias ou por alguma combinação de ambos. Os parâmetros para esses acordos nem sempre são claros ou transparentes e, em última análise, são regidos por uma marca (seja uma pessoa ou uma empresa) e sua disposição de agir de acordo com os termos previamente acordados.

Os contratos, como o resto do mundo, estão se tornando digitais. A ascensão da tecnologia blockchain introduziu contratos inteligentes, um sistema mais inviolável, transparente e justo para governar tais acordos. Os contratos inteligentes são regidos pela matemática, não pelas marcas. Eles impõem automaticamente os parâmetros de um contrato assim que são executados, criando uma estrutura mais equitativa para todas as partes.

O desafio dos contratos inteligentes é que eles geralmente dependem de sua capacidade de conectar dados do mundo real com blockchains (ou dados de um blockchain para outro) para que o contrato inteligente possa reconhecer a qualidade, avaliar dados confiáveis e desencadear resultados acordados uma vez termos são cumpridos. Tradicionalmente, este tem sido um processo excessivamente complexo e difícil, que limitou uma adoção mais ampla.

Sobre Chainlink

Chainlink é uma camada de abstração de código aberto que fornece uma estrutura para conectar facilmente qualquer blockchain a qualquer API externa (ou blockchain separada). Você pode pensar no Chainlink como o equivalente em blockchain da camada de transporte no TCP/IP, garantindo que os dados sejam transmitidos de maneira confiável para dentro e para fora. Chainlink foi projetado para ser a camada de dados padrão para contratos inteligentes, desbloqueando sua verdadeira capacidade de afetar o mundo externo e transformando-os em contratos inteligentes universais e com reconhecimento externo.

Os contratos inteligentes têm o poder de revolucionar a forma como a confiança e a automação são tratadas nos negócios, mas a sua restrição no âmbito a eventos na blockchain limitou severamente o seu potencial. A maioria das coisas com as quais os desenvolvedores desejam interagir existe no "mundo real", como dados de preços, eventos de remessa, eventos mundiais, etc. Para criar contratos inteligentes universais, que sejam externamente conscientes e, portanto, possam lidar com um conjunto amplo e universal de trabalhos com os dados do mundo ao seu alcance, a rede Chainlink oferece à Solidity e a outros desenvolvedores de blockchain uma estrutura de oráculos descentralizados para construir.

Você pode usar esses oráculos para recuperar dados para seu aplicativo descentralizado (dApp) em tempo real na rede principal Ethereum.

Adaptadores de elo de corrente

Adaptadores são as funções de manipulação de dados padrão que cada nó Chainlink suporta por padrão. Os nós são os oráculos descentralizados neste caso. Eles atendem às solicitações de dados, e a rede Chainlink é composta por um número cada vez maior deles. Os nós são administrados por uma infinidade de operadores independentes. Através de adaptadores, todos os desenvolvedores têm uma interface padrão para fazer solicitações de dados, e os operadores de nós têm um padrão para servir esses dados. Esses adaptadores incluem funcionalidades como HTTP GET, HTTP POST, Comparar, Copiar, etc. Os adaptadores são uma conexão de dApp com os dados do mundo externo.

Por exemplo, aqui estão os parâmetros do adaptador HttpGet:

  • get: utiliza uma string contendo o URL da API para fazer uma solicitação GET para
  • cabeçalhos: pega um objeto contendo chaves como strings e valores como arrays de strings
  • queryParams: utiliza uma string ou array de strings para os parâmetros de consulta do URL
  • extPath: utiliza uma string delimitada por barra ou um array de strings para ser anexado ao URL do trabalho

Solicitações de elos de corrente

Para que um contrato inteligente universal interaja com esses adaptadores, você precisa de outra funcionalidade, solicitações. Todos os contratos que herdam de ChainlinkClient podem criar uma estrutura Chainlink.Request que permite aos desenvolvedores formar uma solicitação a um oráculo descentralizado Chainlink. Essa requisição deverá adicionar os parâmetros desejados do adaptador à struct de acordo com a requisição que você deseja fazer. O envio desta solicitação requer alguns campos básicos, como o endereço do nó que você deseja usar como oráculo, o jobId e a taxa acordada. Além desses campos padrão, você pode adicionar os parâmetros do adaptador desejados à estrutura da solicitação:

// Set the URL to perform the GET request on
request.add("get", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD");

Com essa estrutura, as solicitações são flexíveis e podem ser formuladas para se adequarem a diversas situações que envolvem obtenção, postagem e manipulação de dados de qualquer API, pois as solicitações podem conter qualquer uma das funções do adaptador. O que torna este sistema descentralizado é que a rede oracle da Chainlink consiste em muitos desses nós, e os desenvolvedores são livres para escolher quais e quantos desejam solicitar com base em suas necessidades. Isso permite failover redundante e verificação de erros por meio de múltiplas fontes, como os dApps de alta confiabilidade geralmente exigem.

Para obter mais informações sobre a construção de uma solicitação e as funções necessárias para enviá-la e receber uma resposta dentro de um contrato ChainlinkClient, consulte o exemplo completo de solicitação HTTP GET do Chainlink.

Para solicitações comuns, um operador de nó pode já ter um trabalho oracle pré-configurado e, neste caso, a solicitação é muito mais simples. Em vez de criar uma estrutura de solicitação personalizada e adicionar os adaptadores necessários, a estrutura de solicitação padrão é tudo o que você precisa criar. Nenhum parâmetro adicional do adaptador é necessário; o conjunto de oráculos descentralizados que você escolher saberá como responder com base no jobId fornecido ao criar a estrutura da solicitação.

Este exemplo vem da API CoinGecko Consumer completa:

Chainlink.Request memory req = buildChainlinkRequest(jobId, address(this),     this.fulfillEthereumPrice.selector);
sendChainlinkRequestTo(oracle, req, fee);

Você pode usar um serviço de dados oracle descentralizado, como o Chainlink Market, para pesquisar oracles existentes e os empregos que eles suportam, a fim de encontrar o jobId que você precisa.

Adaptadores externos

Mas e se você tiver um caso de uso complexo para seu contrato inteligente que não seja coberto pelas funções padrão do adaptador? E se você precisar realizar alguma manipulação avançada de dados? Talvez não sejam dados brutos que você deseja submeter ao seu contrato, mas sim metadados gerados pela análise estatística de vários pontos de dados. Talvez você possa manipular os dados on-chain com os adaptadores padrão, mas deseja reduzir os custos do gás. Talvez você não queira sua solicitação de API na cadeia devido ao uso de uma fonte credenciada e não queira especificar essas credenciais na cadeia ou nas especificações de trabalho do Oracle. É aqui que entram os adaptadores externos.

(Elo de corrente, ©2020)

Adaptadores externos são "todos os dados que você precisa; nós podemos lidar com eles" do Chainlink. Quando dizemos contratos inteligentes universais, na verdade queremos dizer universais. Como os adaptadores externos são pedaços de código que existem fora da cadeia com o nó oracle Chainlink, eles podem ser escritos em qualquer linguagem de sua escolha e executar qualquer funcionalidade que você possa imaginar - desde que a entrada e a saída dos dados sigam o JSON do adaptador especificação. Adaptadores externos atuam como interface entre a rede oracle descentralizada Chainlink e os dados externos, permitindo que os operadores do nó saibam como solicitar e receber a resposta JSON que é então consumida na cadeia.

Definir essa especificação de interface fora da cadeia por meio de um adaptador externo abre vastas possibilidades: agora você pode armazenar suas credenciais de API fora da cadeia de acordo com seus padrões de segurança pessoais, os dados podem ser programados de qualquer forma na linguagem de sua escolha e tudo isso acontece sem o uso de nenhuma taxa de gás Ethereum para financiar uma transação na rede. De certa forma, os adaptadores externos são como outra camada de um oráculo descentralizado, empacotando dados fora do blockchain com velocidade e baixo custo e colocando-os em um formato JSON organizado para serem verificados na cadeia pelo nó do oráculo Chainlink.

Os adaptadores externos são uma grande parte do que torna o Chainlink uma rede oráculo descentralizada tão versátil. Os desenvolvedores contratados são livres para implementar esses adaptadores conforme necessário ou podem escolher entre os adaptadores existentes no Chainlink Market. Se você é um desenvolvedor de contrato inteligente que deseja criar um adaptador externo, o Chainlink apenas exige que você especifique as interfaces JSON para a solicitação de dados e os dados de retorno; entre essas duas interfaces é onde os desenvolvedores são livres para criar e manipular os dados de acordo com seu caso de uso. Como operador de nó oracle, para suportar o adaptador externo e manipular as solicitações adicionais, você deve criar uma ponte para ele na interface com o usuário do nó e incluir o nome da ponte do adaptador em suas tarefas suportadas.

(ChainLink, ©2020)

{
  "initiators": [
    { "type": "runLog" }
  ],
  "tasks": [
    { "type": "randomNumber" },
    { "type": "copy",
      "params": {"copyPath": ["details", "current"]}},
    { "type": "multiply",
      "params": {"times": 100 }},
    { "type": "ethuint256" },
    { "type": "ethtx" }
  ]
}

Você pode acessar um exemplo completo de criação de um adaptador externo na página de construção de adaptadores externos do Chainlink.

A Chainlink está se esforçando para fornecer aos desenvolvedores de blockchain e de contratos inteligentes as ferramentas para capacitar contratos inteligentes universais com dados do mundo real, exatamente como eles precisam. O design do Chainlink, incorporando chamadas diretas para qualquer API por meio de adaptadores padrão e adaptadores externos extensíveis, oferece aos desenvolvedores uma plataforma flexível para criar como acharem adequado, com quaisquer dados que possam precisar. Isso abre os contratos inteligentes para um mundo literal de dados e os novos casos de uso que isso capacita.

Comece a construir com Chainlink

Se você é um desenvolvedor de contratos inteligentes e deseja aumentar a utilidade de seus contratos inteligentes com dados externos, experimente este exemplo de passo a passo do Chainlink para implantar um contrato inteligente universal que interage com dados fora da cadeia.

Chainlink é de código aberto sob a licença MIT, portanto, se você estiver desenvolvendo um produto que possa se beneficiar dos oráculos descentralizados Chainlink ou gostaria de ajudar no desenvolvimento da Rede Chainlink, visite a documentação do desenvolvedor ou participe da discussão técnica no Discord. Você também pode aprender mais no site da Chainlink, Twitter, Reddit, YouTube, Telegram e GitHub.

Artigos relacionados: