WEB3DEV

Cover image for Construindo um sistema descentralizado de verificação de identidade com RPC do QuickNode
Diogo Jorge
Diogo Jorge

Posted on

Construindo um sistema descentralizado de verificação de identidade com RPC do QuickNode

Image description

Pré-requisitos;

  • O que é um sistema descentralizado de verificação de identidade.
  • Principais recursos e componentes de um contrato inteligente de sistema descentralizado de verificação de identidade.
  • Casos de uso de um contrato inteligente de sistema descentralizado de verificação de identidade.
  • Escrevendo um contrato inteligente de um sistema de verificação de identidade descentralizado.
  • Implantação com a RPC do QuickNode.

O QUE É UM CONTRATO INTELIGENTE DE SISTEMA DE VERIFICAÇÃO DE IDENTIDADE DESCENTRALIZADO?

Um contrato inteligente de sistema de verificação de identidade descentralizado é um protocolo baseado em blockchain projetado para gerenciar e autenticar identidades digitais de maneira descentralizada. Permite que indivíduos ou entidades provem a sua identidade sem depender de uma autoridade centralizada, como um governo ou um prestador de serviços terceirizado.

A identidade descentralizada é uma abordagem para identificar e autenticar usuários e entidades sem autoridade centralizada.

O gerenciamento de identidade usa atributos como nome, data de nascimento, número do Seguro Social ou endereço de e-mail para verificar se uma pessoa ou entidade interage e realiza transações com um serviço online. Uma identidade digital é uma persona online e representação de uma pessoa agindo online.

Com sistemas de identidade centralizados, o gerenciamento de identidades geralmente fica isolado por uma única autoridade onde a identidade do usuário é armazenada e autenticada. A identidade centralizada pode ser controlada e criada por uma entidade governamental. Por exemplo, o departamento estadual de veículos motorizados controla a identificação da carteira de motorista de uma pessoa. A identidade centralizada pode ser tão básica quanto um nome de usuário e uma senha criados em um serviço online.

Por outro lado, a identidade descentralizada permite que usuários e organizações gerenciem e controlem sua identidade em uma abordagem distribuída. Em vez de depender de um fornecedor de identidade isolado, o modelo descentralizado baseia-se numa abordagem Web 3.0, utilizando tecnologia de contabilidade distribuída (DLT), incluindo blockchain, e armazenando informações numa carteira digital.

A identidade descentralizada não deve ser confundida com identidade federada ou abordagens de logon único para gerenciamento de identidade e acesso. Com essas abordagens, um serviço de identidade centralizado permite que a identidade do usuário seja compartilhada entre vários aplicativos em locais diferentes. A identidade descentralizada permite que a identidade do usuário único seja acessada por diferentes sites e serviços para autenticar uma identidade armazenada em uma carteira digital.

Como funciona a identidade descentralizada?

Como todas as tecnologias da Web 3.0, a identidade descentralizada tem a DLT blockchain em sua base.

Os sistemas de identidade descentralizados dependem da criptografia de infraestrutura de chave pública (PKI- Public Key Infrastructure) para proteger e gerenciar a identidade. Com PKI, existe uma chave pública e uma chave privada para criptografar dados. Todas as transações na blockchain são imutáveis, portanto não podem ser adulteradas e são distribuídas a todos os nós do livro-razão distribuído.

Com a blockchain, existe uma entrada que representa a identidade do usuário. É aí que entra em jogo o conceito de identificadores descentralizados (DIDs). Com todas as formas de identidade, há necessidade de identificadores – informações sobre uma determinada entidade, como nome ou data de nascimento. Os identificadores descentralizados são diferentes, pois não são emitidos por uma autoridade central. Os identificadores descentralizados são controlados por indivíduos.

PRINCIPAIS RECURSOS E COMPONENTES DE UM CONTRATO INTELIGENTE DE SISTEMA DE VERIFICAÇÃO DE IDENTIDADE DESCENTRALIZADO.

  1. Registro de usuário: Os usuários podem registrar sua identidade na blockchain fornecendo as informações necessárias. Essas informações podem incluir dados pessoais, dados biométricos ou chaves criptográficas.
  2. Processo de verificação de identidade: O contrato pode implementar vários métodos de verificação de identidade, como autenticação multifatorial, assinaturas criptográficas, oráculos e potencialmente outros mecanismos. Este processo garante que as informações de identidade fornecidas sejam válidas.
  3. Atestado de identidade: entidades ou autoridades terceirizadas podem atestar a validade da identidade de um usuário. Esses atestados são armazenados na blockchain e podem ser usados ​​como prova de identidade.
  4. Medidas de privacidade e segurança: O contrato inteligente deve incorporar criptografia robusta e técnicas de preservação de privacidade para proteger informações confidenciais do usuário.
  5. Revogação e Recuperação: Deve haver um mecanismo para revogar ou recuperar a identidade de um usuário em caso de perda, roubo ou outras emergências.
  6. Controle de acesso: O contrato pode incluir recursos para gerenciamento de permissões e direitos de acesso, permitindo que os usuários controlem quem pode acessar suas informações de identidade verificadas.
  7. Interoperabilidade: O contrato inteligente deve ser concebido para funcionar com outros sistemas ou padrões de gestão de identidade para garantir a compatibilidade e facilidade de integração com os serviços existentes.
  8. Eventos e registros: são cruciais para manter um registro transparente e auditável de todas as atividades relacionadas à identidade na blockchain.
  9. Mecanismo de Governança: Dependendo do caso de uso, pode haver necessidade de um mecanismo de governança que permita aos participantes tomar decisões coletivamente sobre a operação e as regras do sistema de verificação de identidade.
  10. Interface do usuário (opcional): embora não faça parte do contrato inteligente em si, uma interface do usuário (IU) pode ser desenvolvida para fornecer uma maneira amigável para os indivíduos interagirem com o sistema de verificação de identidade.

CASOS DE USO DE UM CONTRATO INTELIGENTE DE VERIFICAÇÃO DE IDENTIDADE DESCENTRALIZADA.

  1. Finanças Descentralizadas (DeFi): Nas plataformas DeFi, os usuários precisam verificar suas identidades para cumprir os regulamentos Conheça Seu Cliente (KYC - know your customer) e Anti-Lavagem de Dinheiro (AML - anti money laundry). Um sistema descentralizado de verificação de identidade pode agilizar esse processo, garantindo a conformidade e ao mesmo tempo mantendo a privacidade do usuário.
  2. Serviços Governamentais: As agências governamentais podem utilizar a verificação de identidade descentralizada para emitir e gerir identificações digitais para os cidadãos. Isso pode incluir passaportes, carteiras de motorista e outros documentos oficiais, permitindo uma identificação segura e à prova de falsificação.
  3. Assistência médica: Um sistema descentralizado de verificação de identidade pode ser utilizado para gerenciar com segurança os registros dos pacientes e conceder acesso aos profissionais médicos, mantendo a confidencialidade do paciente. Também pode ser usado para verificar as credenciais dos profissionais de saúde.
  4. Educação e Credenciais: As instituições educacionais podem emitir e verificar credenciais acadêmicas no blockchain. Isto permitiria aos empregadores e outras instituições verificar facilmente as qualificações educativas de uma pessoa sem depender de autoridades centralizadas.
  5. Mercados online: as plataformas de comércio eletrônico podem implementar verificação de identidade descentralizada para construir confiança entre compradores e vendedores. Pode ajudar a verificar as identidades dos vendedores, garantindo um processo de transação mais seguro e transparente.
  6. Cadeia de abastecimento e logística: A verificação de identidade descentralizada pode ser usada para autenticar vários intervenientes numa cadeia de abastecimento, tais como fabricantes, distribuidores e retalhistas. Isso garante que os produtos sejam adquiridos e entregues de fontes legítimas.
  7. Imóveis: As transações imobiliárias geralmente exigem verificação de identidade. Um sistema descentralizado pode agilizar o processo, permitindo compras, aluguéis e arrendamentos seguros de propriedades.
  8. Redes Sociais e Plataformas de Conteúdo: A verificação de identidade descentralizada pode ajudar a combater problemas como contas falsas e roubo de identidade em plataformas de redes sociais. Os usuários podem ter perfis verificados, aumentando a confiança na comunidade.
  9. Controle de acesso e segurança: As empresas podem usar verificação de identidade descentralizada para conceder acesso a instalações seguras ou recursos digitais. Acrescenta uma camada extra de segurança, pois o acesso está vinculado a identidades verificadas.
  10. Sistemas de votação: A verificação de identidade descentralizada pode ser utilizada em sistemas de votação eletrônica para garantir que apenas os eleitores elegíveis votem. Pode ajudar a prevenir a fraude eleitoral e melhorar a integridade do processo eleitoral.
  11. Viagens e Imigração: Os aeroportos e as autoridades de imigração podem utilizar a verificação de identidade descentralizada para controle de passaportes, emissão de vistos e outros processos relacionados com viagens.
  12. Serviços jurídicos e notariais: Os escritórios de advocacia e notários podem utilizar a verificação de identidade descentralizada para autenticar as identidades de clientes e testemunhas em transações jurídicas.

ESCREVER UM CONTRATO INTELIGENTE DE VERIFICAÇÃO DE IDENTIDADE DESCENTRALIZADA.

Ei, chega de fundamentos, é hora de ir para a parte técnica!

Abaixo está um código de contrato inteligente de VERIFICAÇÃO DE IDENTIDADE DESCENTRALIZADA;

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract IdentityVerification {
   struct Identity {
       string fullName;
       uint256 idNumber;
       bool isVerified;
   }

   mapping(address => Identity) public identities;

   event IdentityVerified(address indexed user);

   modifier onlyAdmin() {
       require(msg.sender == admin, "Apenas administradores podem chamar essa função");
       _;
   }

   address public admin;

   constructor() {
       admin = msg.sender;
   }

   function registerIdentity(string memory _fullName, uint256 _idNumber) external {
       require(_idNumber > 0, "Numero de ID number deve ser maior que zero");
       require(bytes(_fullName).length > 0, "Nome completo não deve estar vazio");

       identities[msg.sender] = Identity({
           fullName: _fullName,
           idNumber: _idNumber,
           isVerified: false
       });
   }

   function verifyIdentity(address _user) external onlyAdmin {
       Identity storage identity = identities[_user];
       require(bytes(identity.fullName).length > 0, "Identidade não registrada");
       require(identity.idNumber > 0, "Numero de ID inválido");
       require(!identity.isVerified, "Identidade já verificada");

       identity.isVerified = true;
       emit IdentityVerified(_user);
   }

   function getIdentity(address _user) external view returns (string memory, uint256, bool) {
       Identity memory identity = identities[_user];
       return (identity.fullName, identity.idNumber, identity.isVerified);
   }
}
Enter fullscreen mode Exit fullscreen mode

Uma explicação detalhada do código abaixo:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract IdentityVerification {
Save to grepper

Enter fullscreen mode Exit fullscreen mode
  • Esta linha especifica o identificador de licença SPDX do contrato, indicando a licença do contrato. Neste caso, utiliza a licença MIT.
  • pragma solidity ^0.8.0; especifica a versão do compilador Solidity a ser usada, neste caso, versão 0.8.0.
solidityCopy code

struct Identity {
       string fullName;
       uint256 idNumber;
       bool isVerified;
   }

Save to grepper

Enter fullscreen mode Exit fullscreen mode
  • Aqui uma struct chamada Identity é definida. Representa a estrutura de uma identidade, incluindo o nome completo (uma string), o número de identificação (um número inteiro não assinado) e um status de verificação (um sinalizador booleano). Esta estrutura será usada para armazenar identidades de usuários.
solidityCopy code

mapping(address => Identity) public identities;

Save to grepper

Enter fullscreen mode Exit fullscreen mode
  • Esta linha declara uma variável de estado público identities que é um mapeamento. Ela mapeia endereços Ethereum para suas estruturas de Identidade correspondentes. Os usuários podem consultar esse mapeamento para recuperar informações de identidade associadas ao seu endereço Ethereum.
solidityCopy code

event IdentityVerified(address indexed user);

Save to grepper

Enter fullscreen mode Exit fullscreen mode
  • Esta linha declara um evento chamado IdentityVerified. Os eventos são usados ​​para registrar ocorrências importantes na blockchain. Nesse caso, ele registra quando a identidade de um usuário é verificada. A palavra-chave indexed (indexado) indica que o endereço do usuário poderá ser pesquisado nos logs de eventos.
solidityCopy code

modifier onlyAdmin() {
       require(msg.sender == admin, "Apenas administradores podem chamar essa função");
       _;
   }

Save to grepper

Enter fullscreen mode Exit fullscreen mode
  • Aqui, um modificador chamado onlyAdmin é definido. Modificadores são usados ​​para adicionar condições às funções. Este modificador restringe o acesso a determinadas funções apenas ao administrador do contrato. Verifica se o remetente da transação (msg.sender) é igual ao administrador do contrato.
solidityCopy code
address public admin;

   constructor() {
       admin = msg.sender;
   }
Save to grepper

Enter fullscreen mode Exit fullscreen mode
  • Esta seção declara uma variável de estado pública admin para armazenar o endereço do administrador do contrato. O construtor é chamado quando o contrato é implantado e define o endereço do implantador (msg.sender) como administrador.
solidityCopy code
function registerIdentity(string memory _fullName, uint256 _idNumber) external {
       require(_idNumber > 0, "Numero de ID deve ser maior que zero");
       require(bytes(_fullName).length > 0, "Nome completo não pode estar vazio");

       identities[msg.sender] = Identity({
           fullName: _fullName,
           idNumber: _idNumber,
           isVerified: false
       });
   }
Save to grepper

Enter fullscreen mode Exit fullscreen mode
  • Esta função,registerIdentity, permite que usuários externos registrem sua identidade no contrato. São necessários dois parâmetros:_fullName (o nome completo) e _idNumber (o número de identificação).
  • Ela contém instruções exigidas para garantir que o número de ID fornecido seja maior que zero e que o nome completo não esteja vazio.
  • Após a validação, ela cria uma nova struct de Identity com os dados fornecidos e define o status de verificação para falso. Essas informações de identidade são associadas ao endereço do chamador (msg.sender) e armazenadas no mapeamento identities.
solidityCopy code

function verifyIdentity(address _user) external onlyAdmin {
       Identity storage identity = identities[_user];
       require(bytes(identity.fullName).length > 0, "Identidade não registrada");
       require(identity.idNumber > 0, "Numero de ID invalido");
       require(!identity.isVerified, "Identidade já verificada");

       identity.isVerified = true;
       emit IdentityVerified(_user);
   }
Save to grepper

Enter fullscreen mode Exit fullscreen mode
  • A função verifyIdentitypermite que o administrador do contrato verifique a identidade de um usuário. Ela usa _user como parâmetro, que é o endereço Ethereum do usuário a ser verificado.
  • Ele primeiro recupera as informações de identidade do usuário do mapeamento identities com base no endereço fornecido.
  • Em seguida, verifica se a identidade do usuário está registrada, se o número de identificação é válido e se a identidade ainda não foi verificada.
  • Se essas condições forem atendidas, o status de verificação será definido como true e emite o evento IdentityVerified para registrar a verificação.
solidityCopy code
function getIdentity(address _user) external view returns (string memory, uint256, bool) {
       Identity memory identity = identities[_user];
       return (identity.fullName, identity.idNumber, identity.isVerified);
   }
}
Save to grepper

Enter fullscreen mode Exit fullscreen mode
  • A função getIdentity permite que qualquer pessoa recupere as informações de identidade de um usuário com base em seu endereço Ethereum.
  • Leva _user como parâmetro, procura a identidade do usuário no mapeamento identities e retorna uma tupla contendo o nome completo, número de ID e status de verificação.

Esse contrato inteligente IdentityVerification fornece uma estrutura básica para os usuários registrarem, verificarem e consultarem informações de identidade na blockchain Ethereum. Lembre-se de que este é um exemplo simplificado e que os aplicativos do mundo real exigiriam considerações adicionais de segurança, privacidade e escalabilidade.

Vamos escrever este código em nosso IDE REMIX.

Image description

Image description

IMPLANTAÇÃO COM RPC QUICKNODE.

PASSO 1.

Crie um novo nó sepolia no QuickNode. Você teria que navegar até o Painel QuickNode e clicar em “Criar”.

Image description

Depois, certifique-se de clicar na cadeia Ethereum. Confira uma captura de tela abaixo;

Image description

Clique em Sepolia:

Image description

Em seguida, clique em ‘continuar’ para prosseguir. Por fim, clique em ‘criar endpoint’ para obter seu URL da Sepolia.

Image description

PASSO 2.

Clique em “Adicionar rede”. Siga as instruções sobre como adicionar o URL RPC ao navegador da sua carteira.

Image description

Clique em “Adicionar rede manualmente”.

Image description

ETAPA 3.

Digite um nome (qualquer) desde que você esteja usando QuickNode, Você pode usar ‘QKN’ para copiar/colar seu endpoint Web3 (certifique-se de incluir “/” no final!), insira ChainID e clique em “Salvar”.

Estamos usando o Sepolia Teastnet, então é aconselhável usar o ID da cadeia Sepolia, que é ‘11155111’.

Image description

Finalmente, você obteria o resultado abaixo.

Image description

Perfeito! Estamos quase terminando, agora estaríamos solicitando um pouco de Eth da Sepolia Testnet para podermos implantar nosso contrato inteligente.

PASSO 4.

Agora, para obter taxas de gás, usaremos https://faucet.quicknode.com/drip. Abaixo está o procedimento.

Image description

Em seguida, conecte a carteira e obtenha um pouco de Eth.

Depois de fazer isso, você obteria o resultado abaixo:

Image description

Com isso, estamos prontos para implantar nosso contrato inteligente para Verificação de identidade descentralizada.

Implantando código de contrato inteligente no Sepolia testnet.

Image description

Clique em ‘confirmar’ para finalizar as transações.

Conclusão

Parabéns por criar com sucesso seu próprio contrato inteligente de verificação de identidade descentralizada na rede Ethereum! .

Inscreva-se para QuickNode Boletim de Notícias para mais artigos e guias sobre Ethereum. Se você tiver algum comentário, sinta-se à vontade para entrar em contato conosco por meio do Twitter. Você sempre pode conversar conosco no nosso servidor Discord da comunidade, apresentando alguns dos desenvolvedores mais legais que você já conheceu :)

Este artigo foi escrito por Playboi.eth e traduzido por Diogo Jorge. O artigo original pode ser encontrado aqui.

Latest comments (0)