Adaptador blockchain Ethereum para a plataforma de dados InterSystems IRIS

1. Blockchain


Agora, quando escrevo este artigo, a taxa de câmbio do Bitcoin caiu mais de 5 vezes em relação ao valor máximo e, quando eu disse que estava fazendo algo relacionado à blockchain, a primeira coisa que ouvi foi o ceticismo aberto - "quem agora precisa de toda essa sua blockchain" .

Sim, de fato, o hype em torno da blockchain já passou. Mas as tecnologias subjacentes permaneceram, elas estão se desenvolvendo e continuarão se desenvolvendo e sendo usadas em determinados nichos. Na Internet e, em particular, em Habré, existem muitos materiais que descrevem as duas áreas gerais de aplicação de tecnologia (por exemplo, habr.com/company/bitfury/blog/353350 e exemplos mais específicos de habr.com/company/raiffeisenbank/blog/332756 ).

Como você sabe, blockchain é um registro distribuído, ou seja, um banco de dados distribuído entre vários nós, enquanto cada nó armazena uma cópia completa do registro. A peculiaridade da blockchain é que os registros (transações) são agrupados em blocos e os blocos são combinados em uma cadeia de blocos. No entanto, apenas operações de adição de dados estão disponíveis. Tudo isso leva ao fato de que é quase impossível fazer alterações nas transações já salvas na blockchain.

Existem muitos materiais sobre como o blockchain funciona (se você nunca ouviu falar sobre o blockchain antes, pode começar com este vídeo simples ).

Na época do aumento máximo de interesse na tecnologia blockchain, havia muitas chamadas para usar blockchain absolutamente em todos os lugares. No entanto, existem certos sinais de projetos / tarefas, cuja implementação pode exigir uma blockchain.

Em primeiro lugar, a participação de um grande número de jogadores (usuários) que registram dados, enquanto é necessário evitar inconsistências e aumentar a confiança.

Em segundo lugar, a ausência de terceiros em que todos confiam.

Em terceiro lugar, a necessidade de um mecanismo para verificação de dados públicos.
Se todas as condições acima forem atendidas, você precisará pensar em usar uma blockchain.

Tais tarefas podem surgir em qualquer setor. O projeto www.101blockchains.com coleta informações sobre projetos potenciais e implementados, bem como sobre os recursos do uso de blockchain em diferentes áreas.

Por exemplo, no setor de saúde, a blockchain pode ser usada:

  • para gerenciamento seguro dos dados do paciente;
  • combater drogas falsificadas por meio de transações invariáveis ​​em toda a cadeia de suprimentos;
  • melhorar o monitoramento e a eficácia dos ensaios clínicos, eliminando fraudes e manipulação de dados.

Ao usar o blockchain no segmento corporativo, eles geralmente usam um blockchain privado com vários níveis de permissão (Private Permissioned Blockchain). Essas redes têm um conjunto especial de nós para confirmar transações.

No entanto, ao desenvolver o primeiro adaptador IRIS da InterSystems para trabalhar com o blockchain, escolhemos o Ethereum , que pertence à categoria do Blockchain sem permissão - uma plataforma aberta sem um órgão de governo. Essa opção está associada à popularidade do Ethereum e a uma infraestrutura bastante desenvolvida: a presença de várias ferramentas e bibliotecas. Você também pode perceber que, usando o software Ethereum, você pode criar uma blockchain privada .

2. O adaptador


Agora é hora de seguir para o próprio adaptador.

Um adaptador no InterSystems IRIS (assim como no Ensemble) é uma classe ou pacote de classes InterSystems IRIS que fornece a capacidade de trabalhar com um sistema externo. Os adaptadores InterSystems IRIS são divididos em entrada (para receber dados de um sistema externo quando o sistema externo é o iniciador da interação) e saída (para trabalhar com um sistema externo quando o iniciador da interação é o InterSystems IRIS).

O adaptador IRIS Ethereum é um adaptador de saída e é um pouco diferente da maioria dos outros adaptadores InterSystems IRIS, pois parte desse adaptador é um pacote de classes IRIS da InterSystems, mas o adaptador também inclui um pequeno módulo NodeJS. A arquitetura é mostrada na Figura 1.


Figura 1

O módulo adaptador NodeJS usa bibliotecas NodeJS existentes para trabalhar com o Ethereum.

O adaptador fornece os seguintes recursos:

  • Coloque um contrato inteligente no Ethereum (planejamos preparar outro artigo no qual falaremos mais sobre contratos inteligentes, ferramentas de desenvolvimento e discutiremos um exemplo).
  • Chame métodos de contrato inteligentes: métodos que não alteram o estado da blockchain e métodos que alteram o estado da blockchain
  • Salvando uma transação (transferindo fundos da carteira para a carteira)
  • Chamando métodos auxiliares para obter o estado blockchain
  • Registrando todas as solicitações (executa o módulo NodeJS, útil para depuração)

O adaptador está disponível com o código-fonte do OpenExchange .

3. Um exemplo simples


Um exemplo "Hello world" é instalado com o adaptador.

Para começar a trabalhar com o Ethereum (inclusive para executar este exemplo), você precisa:

  • Escolha com qual rede você trabalhará. Para o desenvolvimento, geralmente são usadas redes de teste como o Ropsten.
  • Crie uma carteira nesta rede e reabasteça
  • Instale um cliente local do Ethereum (por exemplo, Geth) ou obtenha uma chave para trabalhar com um provedor de nuvem (por exemplo, Infura)

Ao configurar uma transação comercial, você deve especificar (Figura 2):

  1. Servidor e porta em que o módulo NodeJS está em execução (a porta padrão é 3000)
  2. Configurações do provedor (neste caso, acesso ao Infura)
  3. Detalhes de acesso (nos detalhes de acesso, você precisa indicar sua carteira como nome de usuário, a chave privada da carteira como senha. No InterSystems IRIS, os detalhes de acesso são armazenados em um banco de dados separado, para o qual a criptografia deve ser ativada)


Figura 2

Para trabalhar com contratos inteligentes, você precisará criar (para cada contrato inteligente que entrará em contato) uma pasta no sistema de arquivos e colocar 2 arquivos lá:
* abi.txt
* bytecode.txt

Esses arquivos devem ter um contrato inteligente ABI e Bytecode. Contrato inteligente ABI - uma descrição formal da interface do contrato inteligente no formato json. ABI e Bytecode são criados no momento em que o contrato inteligente é compilado.

O bytecode é necessário apenas para implantar um contrato.

Usando o serviço de teste, você pode verificar a operação de uma transação comercial.

Na Figura 3, usando o serviço de teste, o contrato inteligente é implantado. O resultado da chamada desta operação de negócios é uma mensagem que contém um hash de transação.


Figura 3

Usando o navegador ropsten.etherscan.io (https://etherscan.io/), você pode encontrar esta transação e obter o endereço do contrato inteligente colocado.

Para executar métodos de contrato inteligentes usando o adaptador, você deve especificar as configurações na configuração do produto: ContractFolder e ContractAddress.

O código para chamar o método de contrato inteligente é bastante simples:

set ..ContractABI = [].%FromJSON(..ContractFolder_"abi.txt") set contract = ..Adapter.GetContract( ##class(Ethereum.Address).%New(..ContractAddress), ..ContractABI) set result = contract.hello() set pResponse = ##class(Ens.StringContainer).%New(result.args) 

Usando o método do adaptador GetContract, que recebe o endereço do contrato inteligente e da ABI, é criado um objeto de contrato inteligente, que é usado para chamar os métodos. Nesse caso, o método hello () deve ser definido no contrato inteligente, que retorna uma string.

Neste exemplo, o método hello () não altera o estado da blockchain, portanto, pode ser chamado de forma síncrona. No entanto, os métodos que alteram o estado da blockchain podem levar muito tempo (aguardando a confirmação da transação).

Para chamar esses métodos, você pode usar o mecanismo de resposta diferida no InterSystems IRIS. O adaptador precisa passar o token diferido e, quando a transação do NodeJS for confirmada, o módulo transmitirá o resultado de sua execução ao InterSystems IRIS. Para fazer isso, você deve configurar o aplicativo Web e adicionar uma transação comercial ao produto que processará a resposta recebida.

Código para chamar um método que altera o estado da blockchain:

 // getting EthereumAccount(wallet) and privateKey do ##class(Ens.Config.Credentials).GetCredentialsObj(.cred, "Ethereum.Demo.EthereumOperation", "Ens.Config.Credentials", ..Credentials) set account = ##class(Ethereum.Address).%New(cred.Username) set privateKey = cred.Password //reading contract ABI set ..ContractABI = [].%FromJSON(..ContractFolder_"abi.txt") // get contract object set contract = ..Adapter.GetContract( ##class(Ethereum.Address).%New(..ContractAddress), ..ContractABI) $$$ThrowOnError(..DeferResponse(.deferred)) // estimate gas do contract.SetOptions(account) set gasJSON = contract.EstimateGas("setName",pRequest.Name) $$$TRACE(gasJSON.gas) do contract.SetOptions(account, privateKey, ##class(Ethereum.Wei).%New(1000000000), ##class(Ethereum.Wei).%New(100*gasJSON.gas),,deferred) set result = contract.setName(pRequest.Name) 

Nesse caso, antes de chamar o método de contrato inteligente setName (), é necessário especificar vários parâmetros, incluindo um token de resposta atrasada.

Em nosso próximo artigo, falaremos mais sobre contratos inteligentes e daremos um exemplo de solução de um aplicativo usando o adaptador InterSystems IRIS Ethereum.

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


All Articles