WEB3DEV

Cover image for Dominando os endere├žos Ethereum
Fatima Lima
Fatima Lima

Posted on

Dominando os endere├žos Ethereum

Bem-vindo ­čĹő a outra s├ęrie de artigos sobre o dom├şnio dos endere├žos Ethereum. Neste artigo, exploraremos os aspectos fundamentais dos endere├žos Ethereum e sua fun├ž├úo crucial no ecossistema da Ethereum. Simplificaremos conceitos complexos, forneceremos exemplos pr├íticos e compartilharemos pr├íticas recomendadas para ajud├í-lo a entender e utilizar os endere├žos Ethereum de forma eficaz.

Ao final deste artigo, voc├¬ ter├í uma compreens├úo abrangente dos endere├žos Ethereum, o que lhe permitir├í lidar com confian├ža com transa├ž├Áes, interagir com contratos inteligentes e proteger seus ativos no ecossistema da Ethereum. Vamos nos aprofundar e dominar os endere├žos na Ethereum!

O que ├ę um endere├žo Ethereum?

├ë como nossa conta banc├íria tradicional usada para fazer transa├ž├Áes. Um endere├žo Ethereum ├ę um n├║mero hexadecimal de 20 bytes usado para identificar uma conta na blockchain Ethereum. Eles s├úo identificadores exclusivos usados para enviar, receber e armazenar Ether (ETH), tokens e acessar aplicativos descentralizados na blockchain Ethereum. Eles servem como uma representa├ž├úo digital de um participante ou entidade dentro do ecossistema Ethereum. Cada endere├žo Ethereum ├ę composto por uma sequ├¬ncia de caracteres alfanum├ęricos e geralmente come├ža com "0x" para indicar seu formato hexadecimal.

Tipos de contas Ethereum

H├í dois tipos de contas Ethereum, cada uma com seu endere├žo:

  • Contas de propriedade externa (EOAs) s├úo contas controladas pelos usu├írios. As EOAs podem manter e gerenciar Ether (ETH) e outros tokens na blockchain Ethereum. Elas s├úo usadas principalmente para iniciar transa├ž├Áes, como o envio de Ether ou tokens para outros endere├žos. As EOAs podem ser criadas com a gera├ž├úo de uma nova conta Ethereum usando um software de carteira como a MetaMask.
  • Contas de contratos s├úo de propriedade de contratos inteligentes e podem ser usados para interagir com a blockchain Ethereum. Os endere├žos de contrato s├úo endere├žos exclusivos associados a contratos inteligentes implantados na blockchain Ethereum.

Um contrato inteligente ├ę um programa autoexecut├ível que ├ę executado na M├íquina Virtual Ethereum (EVM) e realiza fun├ž├Áes predefinidas quando acionado por determinadas condi├ž├Áes.

Quando um contrato inteligente ├ę implantado, ├ę atribu├şdo a ele um endere├žo de contrato, que serve como seu identificador na rede Ethereum. Os endere├žos de contrato s├úo usados para interagir com contratos inteligentes, enviando transa├ž├Áes para invocar suas fun├ž├Áes, acessar seus dados, modificar o estado do contrato ou produzir resultados espec├şficos.

Portanto, basicamente temos endere├žos de propriedade externa e endere├žos de contrato.

Diferen├ža entre as EOAs e a Conta de Contrato

  • Cria├ž├úo: As EOAs s├úo criadas pelos usu├írios. Por outro lado, as contas de contrato s├úo criadas pela implanta├ž├úo de um contrato inteligente na blockchain Ethereum.
  • Par de Chaves: As EOAs t├¬m um par de chaves p├║blica e privada. A chave privada ├ę usada para assinar transa├ž├Áes e fornecer prova de propriedade. Ao contr├írio das EOAs, n├úo h├í chaves p├║blicas ou privadas associadas a uma conta de contrato.
  • Controle: As EOAs s├úo controladas pelos usu├írios, o que significa que os usu├írios t├¬m controle sobre as chaves privadas associadas ├ás suas EOAs. Por outro lado, as contas de contrato s├úo controladas pela l├│gica do c├│digo de contrato inteligente. O c├│digo define as regras e o comportamento da conta do contrato.
  • Assinatura da Transa├ž├úo: Somente as EOAs podem assinar transa├ž├Áes porque t├¬m uma chave privada. A assinatura gerada usando a chave privada garante a autenticidade e a integridade da transa├ž├úo. As contas de contrato, no entanto, n├úo podem assinar transa├ž├Áes porque n├úo t├¬m uma chave privada.
  • Intera├ž├Áes: As EOAs podem interagir com a blockchain Ethereum por meio de transa├ž├Áes. Elas podem enviar Ether (ETH) ou interagir com outros contratos inteligentes invocando suas fun├ž├Áes, enquanto as contas de contrato podem interagir com a blockchain Ethereum por meio de transa├ž├Áes e eventos, que s├úo registrados na blockchain e podem ser observadas por partes externas.
  • A├ž├Áes: As EOAs podem executar a├ž├Áes explicitamente permitidas pelo usu├írio. Elas podem transferir fundos, interagir com contratos e iniciar v├írias transa├ž├Áes com base nas inten├ž├Áes do usu├írio. Por outro lado, as contas de contrato podem executar a├ž├Áes explicitamente permitidas pelo c├│digo. O comportamento de uma conta de contrato ├ę definido no c├│digo do contrato inteligente e ela s├│ pode executar fun├ž├Áes e a├ž├Áes que tenham sido programadas nela.

Semelhan├žas entre as EOAs e as Contas de Contrato

  • Ambas possuem endere├žos. As EOAs e os endere├žos de contrato s├úo cadeias hexadecimais de 20 bytes que identificam a conta na blockchain Ethereum.
  • Ambas podem conter Ether e tokens ERC-20. As EOAs e as contas de contrato podem conter Ether e tokens.
  • Ambas podem interagir com a blockchain Ethereum. As EOAs e as contas de contrato podem enviar e receber Ether e ambas podem interagir com aplicativos descentralizados (DApps).

Como Endere├žos s├úo gerados

Os endere├žos Ethereum s├úo gerados usando um processo chamado ECDSA (Elliptic Curve Digital Signature Algorithm ou algoritmo de assinatura digital de curva el├şptica). O ECDSA ├ę um algoritmo criptogr├ífico que usa um par de chaves, uma chave p├║blica e uma chave privada, para assinar e verificar assinaturas digitais.

As assinaturas digitais usam algoritmos criptogr├íficos para gerar uma impress├úo digital exclusiva, ou hash, de um documento ou mensagem. O hash ├ę ent├úo criptografado usando a chave privada do signat├írio para criar uma assinatura. O destinat├írio pode verificar a autenticidade da assinatura usando a chave p├║blica do signat├írio para descriptografar o hash e compar├í-lo com o hash do documento ou mensagem original. Se os hashes forem iguais, a assinatura ├ę v├ílida.

Uma assinatura digital pode ser criada para assinar qualquer mensagem. Para as transa├ž├Áes da Ethereum, os detalhes da pr├│pria transa├ž├úo s├úo usados como mensagem. A matem├ítica da criptografia, nesse caso, a criptografia de curva el├şptica, fornece uma maneira de a mensagem (ou seja, os detalhes da transa├ž├úo) ser combinada com a chave privada para criar um c├│digo que s├│ pode ser produzido com o conhecimento da chave privada. Esse c├│digo ├ę chamado de assinatura digital.

Gera├ž├úo de endere├žos de propriedade externa

A chave p├║blica ├ę calculada a partir da chave privada usando a multiplica├ž├úo da curva el├şptica, que ├ę praticamente irrevers├şvel: K = k * G, onde k ├ę a chave privada, G ├ę um ponto constante chamado de ponto gerador, K ├ę a chave p├║blica resultante e * ├ę o operador especial de "multiplica├ž├úo" da curva el├şptica.

Observe que a multiplica├ž├úo da curva el├şptica n├úo ├ę como a multiplica├ž├úo normal.

A aritm├ętica na curva el├şptica ├ę diferente da aritm├ętica de n├║meros inteiros "regulares". Um ponto (G) pode ser multiplicado por um n├║mero inteiro (k) para produzir outro ponto (K). Mas n├úo existe divis├úo, portanto, n├úo ├ę poss├şvel simplesmente "dividir" a chave p├║blica K pelo ponto G para calcular a chave privada k. Essa ├ę uma fun├ž├úo matem├ítica unidirecional.

Uma chave privada pode ser convertida em uma chave p├║blica, mas uma chave p├║blica n├úo pode ser convertida novamente em uma chave privada, porque a matem├ítica s├│ funciona em um sentido. A chave privada ├ę usada para assinar transa├ž├Áes e comprovar a propriedade de um endere├žo.

­čÜĘNunca compartilhe sua chave privada com ningu├ęm!!! Compartilhar sua chave privada pode levar a acesso n├úo autorizado e controle sobre sua conta Ethereum, incluindo a capacidade de transferir ou manipular fundos.

Aqui est├úo algumas outras dicas para manter seu endere├žo Ethereum e sua chave privada seguros:

  • Armazene sua chave privada em um local off-line seguro.
  • Use uma senha forte para proteger sua carteira.
  • Mantenha seu software atualizado.
  • Tenha cuidado com ataques de phishing.

As chaves privadas nunca devem ser compartilhadas ou reveladas a ningu├ęm, pois s├úo o principal meio de comprovar a propriedade e o controle sobre os endere├žos Ethereum e os ativos associados.

Os endere├žos de propriedade externa s├úo gerados usando as seguintes etapas:

  • Chave privada aleat├│ria: Vamos supor que geramos uma chave privada aleat├│ria: 0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef.
  • Gera├ž├úo de chave p├║blica: Usando a chave privada, geramos uma chave p├║blica correspondente usando criptografia de curva el├şptica (especificamente, a curva secp256k1).
  • Gera├ž├úo de hash: Geramos um hash da chave p├║blica usando o algoritmo de hash Keccak-256. Hash da chave p├║blica: 0x4b6f5a3dfc911e992c3d8f38c6bb9d1563b5e9a526260ee1a83693a8e56f4f48.
  • Deriva├ž├úo do endere├žo: Do hash Keccak-256 da chave p├║blica, pegamos os ├║ltimos 20 bytes (160 bits) para obter o endere├žo EOA. Endere├žo EOA: 0x4b6f5a3dfc911e992c3d8f38c6bb9d1563b5e9a5.
  • Prefixa├ž├úo: Por fim, prefixamos o endere├žo EOA de 20 bytes com "0x" para indicar seu formato hexadecimal. Endere├žo EOA prefixado: 0x4b6f5a3dfc911e992c3d8f38c6bb9d1563b5e9a5.

Este ├ę um exemplo simplificado para demonstrar o processo de gera├ž├úo de um endere├žo EOA. Na realidade, h├í considera├ž├Áes adicionais, como algoritmos de gera├ž├úo de pares de chaves e formatos de codifica├ž├úo, mas o conceito b├ísico permanece o mesmo.

Gera├ž├úo de Endere├žo de Contrato

Os endere├žos de contrato s├úo gerados usando uma combina├ž├úo do endere├žo da conta de implanta├ž├úo e um valor nonce, que representa o n├║mero de transa├ž├Áes enviadas dessa conta.

O endere├žo do contrato ├ę derivado pela codifica├ž├úo RLP do endere├žo da conta de implanta├ž├úo e do nonce usando o algoritmo de hash Keccak-256.

Os endere├žos de contrato s├úo determin├şsticos, o que significa que o mesmo contrato implantado a partir da mesma conta com o mesmo nonce sempre resultar├í no mesmo endere├žo.

Aqui est├í uma explica├ž├úo mais detalhada do processo:

  • O endere├žo da conta de implanta├ž├úo ├ę obtido. Vamos supor que o endere├žo da conta do implantador seja: 0x0123456789abcdef0123456789abcdef0123456.
  • O valor nonce ├ę obtido. Vamos supor que o valor nonce seja 5.
  • O endere├žo da conta de implanta├ž├úo e o valor nonce s├úo concatenados. Concatenamos o endere├žo da conta de implanta├ž├úo e o valor nonce: 0x0123456789abcdef0123456789abcdef01234565.
  • A concatena├ž├úo ├ę ent├úo codificada em RLP.
  • Hash Keccak-256: 0x4b6f5a3dfc911e992c3d8f38c6bb9d1563b5e9a526260ee1a83693a8e56f4f48
  • Os primeiros 20 bytes do hash s├úo usados como o endere├žo do contrato. De acordo com nosso exemplo, o endere├žo do contrato ├ę prefixado com o caractere "0x": 0x4b6f5A3dFc911E992c3D8F38C6bb9D1563B5e9A5.

Observe que este ├ę um exemplo simplificado para fins ilustrativos e que, na pr├ítica, outras etapas e considera├ž├Áes podem estar envolvidas no processo de implanta├ž├úo.

Caracter├şsticas dos Endere├žos Ethereum

  • Os endere├žos Ethereum t├¬m 20 bytes de comprimento ou 160 bits.
  • Os endere├žos Ethereum s├úo representados em formato hexadecimal, usando nota├ž├úo de base 16. Cada caractere no endere├žo corresponde a 4 bits. Um endere├žo Ethereum consiste em exatamente 40 caracteres, escolhidos no intervalo de 0-9 e a-f (um total de 16 valores poss├şveis por caractere).
  • Os endere├žos Ethereum s├úo sempre prefixados com "0x" para indicar o formato hexadecimal. Esse prefixo ├ę necess├írio para distinguir os endere├žos Ethereum de outros tipos de dados. Portanto, o comprimento total de um endere├žo Ethereum, incluindo o prefixo, ├ę de 42 caracteres.

Ao compreender o comprimento, o formato e o prefixo dos endere├žos Ethereum, voc├¬ poder├í identific├í-los com precis├úo e trabalhar com eles no Solidity e em outros aplicativos relacionados ├á Ethereum.

Solidity ├ę a linguagem de programa├ž├úo usada para escrever contratos inteligentes em cadeias compat├şveis com EVM.

├ë importante observar que os endere├žos Ethereum n├úo diferenciam mai├║sculas de min├║sculas, o que significa que a capitaliza├ž├úo n├úo afeta sua interpreta├ž├úo. Todas as carteiras e sistemas do ecossistema Ethereum s├úo projetados para aceitar endere├žos Ethereum expressos em caracteres mai├║sculos ou min├║sculos, sem qualquer distin├ž├úo.

Por exemplo, os endere├žos

"0x4b6f5a3dfc911e992c3d8f38c6bb9d1563b5e9a5" e
"0x4B6F5A3DFC911E992C3D8F38C6BB9D1563B5E9A5"
Enter fullscreen mode Exit fullscreen mode

seriam considerados o mesmo endere├žo e se refeririam ├á mesma conta Ethereum.

Import├óncia da representa├ž├úo hexadecimal nos endere├žos Ethereum

  • Compacidade: O hexadecimal ├ę um sistema num├ęrico de base 16, o que significa que cada d├şgito pode representar um dos 16 valores (0-9 e A-F). Isso torna os endere├žos hexadecimais muito mais compactos do que os endere├žos decimais, que exigiriam 32 d├şgitos para representar as mesmas informa├ž├Áes.
  • Exclusividade: Os endere├žos hexadecimais s├úo exclusivos, o que ├ę importante para evitar fraudes e erros. Por exemplo, se um endere├žo decimal for inserido incorretamente, ele poder├í ser facilmente confundido com outro endere├žo.
  • Compatibilidade: Os endere├žos hexadecimais s├úo compat├şveis com outras blockchains que usam endere├žos hexadecimais, como o Bitcoin e outros. Isso facilita a transfer├¬ncia de fundos entre diferentes blockchains.

Import├óncia do recurso checksum nos endere├žos Ethereum

  • Preven├ž├úo de erros: O recurso checksum (├ę um pequeno c├│digo de informa├ž├Áes computadas que trata da integridade e seguran├ža dos dados) ajuda a evitar erros ao inserir endere├žos Ethereum. Se um erro for cometido, o checksum n├úo corresponder├í e a transa├ž├úo falhar├í. Isso ajuda a proteger os usu├írios contra a perda de fundos devido a erros de digita├ž├úo ou outros erros.
  • Seguran├ža: O recurso checksum tamb├ęm acrescenta uma camada extra de seguran├ža aos endere├žos Ethereum. Se um invasor tentasse criar um endere├žo falso, a soma de verifica├ž├úo n├úo corresponderia e a transa├ž├úo fracassaria. Isso ajuda a proteger os usu├írios contra fraudes e roubos.

A representa├ž├úo hexadecimal e o recurso checksum s├úo recursos importantes dos endere├žos Ethereum. Eles ajudam a garantir que os endere├žos sejam compactos, exclusivos, compat├şveis, ├á prova de erros e seguros. Consulte a EIP55 para mais detalhes sobre o checksums.

Endere├žos no Contrato Inteligente Solidity

No Solidity, os endere├žos s├úo um tipo primitivo. Isso significa que eles podem ser usados em express├Áes e declara├ž├Áes da mesma forma que outros tipos primitivos, como inteiros e strings.

Aqui est├úo algumas das coisas que voc├¬ pode fazer com endere├žos no Solidity:

Declarar uma vari├ível de endere├žo no Solidity
Voc├¬ pode declarar uma vari├ível de endere├žo usando a palavra-chave address. Por exemplo:

address myAddress;
Enter fullscreen mode Exit fullscreen mode

Atribuir um endere├žo a uma vari├ível
Voc├¬ pode atribuir um endere├žo a uma vari├ível usando o operador =. Por exemplo:

myAddress = 0x2e504C9c22089cE75a600fF113e891d2c2D53d57;
Enter fullscreen mode Exit fullscreen mode

Comparar endere├žos no Solidity
Voc├¬ pode comparar endere├žos usando os operadores == e !=. Por exemplo:

if (myAddress == 0x2e504C9c22089cE75a600fF113e891d2c2D53d57) {
// Fazer alguma coisa
}
Enter fullscreen mode Exit fullscreen mode

Acessar um endere├žo de contrato inteligente
Voc├¬ pode acessar o endere├žo de um contrato inteligente usando o m├ętodo address(this). Por exemplo:

address contractAddr = address(this);
Enter fullscreen mode Exit fullscreen mode

Obter o saldo de um endere├žo de contrato inteligente
Voc├¬ pode obter o saldo de Ether de um contrato inteligente usando o m├ętodo address(this).balance. Por exemplo:

uint256 balance = address(this).balance;
Enter fullscreen mode Exit fullscreen mode

Convers├úo expl├şcita de endere├žo no Solidity
├ë importante observar que nem todos os endere├žos s├úo pag├íveis, e se voc├¬ tentar enviar Ethers para um endere├žo n├úo pag├ível, a transa├ž├úo falhar├í. A convers├úo para "endere├žo pag├ível" pode ser feita usando payable(address(x)). A convers├úo de endere├žo para "endere├žo pag├ível" ├ę feita para permitir o envio de Ethers para o endere├žo.

Essa convers├úo ├ę usada ao chamar uma fun├ž├úo de contrato que tenha o modificador "payable", que permite receber Ether. A palavra-chave "payable" faz com que a fun├ž├úo aceite Ether e aumenta o saldo do contrato pela quantidade de ether recebida. \
Consulte meu artigo sobre a fun├ž├úo pag├ível e n├úo pag├ível para saber mais.

// address payable fornece a fun├ž├úo de transfer├¬ncia
address payable payableAddress;
Enter fullscreen mode Exit fullscreen mode

Enviar Ether de um contrato inteligente
Voc├¬ pode enviar Ether de um contrato inteligente usando o m├ętodo send, transfer ou call. Por exemplo:

contract SendEther {
   function sendViaTransfer(address payable _to) public payable {
       // Esta fun├ž├úo n├úo ├ę mais recomendada para enviar Ether.
       _to.transfer(msg.value);
   }

   function sendViaSend(address payable _to) public payable {
       // Send retorna um valor booleano que indica sucesso ou falha.
       // Essa fun├ž├úo n├úo ├ę recomendada para o envio de Ether.
       bool sent = _to.send(msg.value);
       require(sent, "Failed to send Ether");
   }

   function sendViaCall(address payable _to) public payable {
       // Call retorna um valor booleano que indica sucesso ou falha.
       // Este ├ę o m├ętodo recomendado atualmente para uso.
       (bool sent, bytes memory data) = _to.call{value: msg.value}("");
       require(sent, "Failed to send Ether");
   }
}
Enter fullscreen mode Exit fullscreen mode

Interagir com um contrato inteligente
Quando se trata de interagir com um contrato inteligente na blockchain Ethereum, h├í v├írios m├ętodos dispon├şveis. Uma maneira comum ├ę usar a fun├ž├úo call, a delegatecall ou fun├ž├Áes semelhantes. Por exemplo:

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

// NOTA: Implantar o contrato primeiro
contract B {
   // NOTA: o layout do armazenamento deve ser o mesmo do contrato A
   uint public num;
   address public sender;
   uint public value;

   function setVars(uint _num) public payable {
       num = _num;
       sender = msg.sender;
       value = msg.value;
   }
}

contract A {
   uint public num;
   address public sender;
   uint public value;

   function setVars(address _contract, uint _num) public payable {
       // O armazenamento de A ├ę definido, B n├úo ├ę modificado.
       (bool success, bytes memory data) = _contract.delegatecall(
           abi.encodeWithSignature("setVars(uint256)", _num)
       );
   }
}
Enter fullscreen mode Exit fullscreen mode

O contrato acima consiste em dois contratos: contrato A e contrato B.

O contrato B foi projetado para armazenar tr├¬s vari├íveis: num (um n├║mero inteiro sem sinal), sender (um endere├žo) e value (um n├║mero inteiro sem sinal). A fun├ž├úo setVars no contrato B permite que essas vari├íveis sejam definidas com os valores fornecidos.

O contrato A tamb├ęm tem as mesmas tr├¬s vari├íveis: num, sender, e value. A fun├ž├úo setVars no contrato A ├ę usada para interagir com o contrato B. Ela leva um par├ómetro de endere├žo _contract que representa o endere├žo do contrato B e um par├ómetro uint _num. Dentro da fun├ž├úo setVars no contrato A, uma delegatecall ├ę criada para o contrato B, passando o valor _num para sua fun├ž├úo setVars.

O objetivo desse contrato ├ę demonstrar como uma delegatecall pode ser usada para interagir com outro contrato e modificar seu armazenamento. Ao fazer uma delegatecall para o contrato B, o contrato A pode modificar suas pr├│prias vari├íveis de armazenamento usando a fun├ž├úo setVars do contrato B. Isso pode ser ├║til em determinados cen├írios em que voc├¬ deseja reutilizar ou estender a funcionalidade de outro contrato, mantendo o layout de armazenamento.

Consulte meu artigo sobre Delegatecall para saber mais.

Retornar um tipo de endere├žo
Ao trabalhar com contratos inteligentes na Ethereum, ├ę comum ter m├ętodos que retornam valores para o tipo de endere├žo. Aqui est├úo alguns exemplos de como voc├¬ pode lidar com m├ętodos que retornam um endere├žo:

  • Acesso ao Mapeamento: se o m├ętodo retornar um endere├žo em um mapeamento, voc├¬ poder├í acess├í-lo usando a chave correspondente. Por exemplo:
mapping(uint256 => address) addressesMapping;

address myAddress = addressesMapping[key];
Enter fullscreen mode Exit fullscreen mode
  • Fun├ž├úo Call: Voc├¬ pode chamar diretamente o m├ętodo e usar o valor do endere├žo retornado em opera├ž├Áes subsequentes. Por exemplo:
mapping(uint256 => address) addressesMapping;

function returnAddress(uint256 _key) external view returns(address){
   return addressesMapping[_key]
}

Enter fullscreen mode Exit fullscreen mode
  • Acesso ao Array: Se o m├ętodo retornar um endere├žo dentro de um array, voc├¬ poder├í acess├í-lo usando o ├şndice. Por exemplo:
address myAddress = myArray[index];
Enter fullscreen mode Exit fullscreen mode

Endere├žo Zero

O endere├žo zero, tamb├ęm conhecido como endere├žo nulo ou conta zero, refere-se ao endere├žo Ethereum:

0x0000000000000000000000000000000000000000
Enter fullscreen mode Exit fullscreen mode

├ë um endere├žo especial no ecossistema Ethereum que ├ę codificado para ter o valor de todos os zeros. ├ë um endere├žo especial que n├úo tem saldo e n├úo pode ser usado para enviar ou receber transa├ž├Áes.

O endere├žo zero ├ę usado de algumas maneiras diferentes na Ethereum:

  • Para criar novos contratos: Quando um novo contrato ├ę criado, ├ę atribu├şdo a ele o endere├žo zero. O endere├žo do contrato ├ę ent├úo atualizado quando a transa├ž├úo ├ę minerada.
  • Para queimar tokens: Quando os tokens s├úo queimados, eles s├úo enviados para o endere├žo zero. Isso os torna permanentemente indispon├şveis.

Aqui est├úo algumas das coisas que voc├¬ n├úo pode fazer com o endere├žo zero:

  • Enviar Ether para o endere├žo zero: Qualquer Ether enviado para o endere├žo zero ├ę perdido permanentemente.
  • Criar um contrato no endere├žo zero: Qualquer transa├ž├úo que tentar criar um contrato no endere├žo zero falhar├í.
  • Interagir com um contrato no endere├žo zero: Qualquer transa├ž├úo que tentar interagir com um contrato no endere├žo zero falhar├í.

O endere├žo zero ├ę um endere├žo especial que n├úo deve ser usado para nenhuma outra finalidade que n├úo as listadas acima. Se voc├¬ enviar Ether para o endere├žo zero ou tentar criar um contrato ou interagir com um contrato no endere├žo zero, voc├¬ perder├í seus fundos ou sua transa├ž├úo falhar├í.

Como os endere├žos s├úo armazenados na EVM

Os endere├žos s├úo armazenados na trie (├írvore de prefixos) de estado da EVM. A trie de estado ├ę uma estrutura de dados que armazena todas as informa├ž├Áes de estado na blockchain Ethereum. Isso inclui os saldos de todas as contas, o c├│digo de todos os contratos e os dados de todas as vari├íveis de armazenamento.

A trie de estado ├ę uma ├írvore Merkle, que ├ę um tipo de estrutura de dados muito eficiente para armazenar e recuperar dados. A ├írvore de estado ├ę organizada por endere├žo, sendo que cada endere├žo tem seu pr├│prio ramo na ├írvore.

Image description

Árvore Merkle Patricia

Quando um endere├žo ├ę armazenado na EVM, ele ├ę primeiro submetido a um hash usando o algoritmo de hash Keccak-256. Em seguida, o hash ├ę usado para localizar a ramifica├ž├úo correspondente na ├írvore de estado. O saldo do endere├žo, o c├│digo de qualquer contrato no endere├žo e os dados de qualquer vari├ível de armazenamento s├úo todos armazenados nesse ramo.

Os endere├žos s├úo armazenados na EVM de forma descentralizada. Isso significa que nenhuma entidade individual tem controle sobre o armazenamento de endere├žos. Isso ajuda a garantir a seguran├ža e a confiabilidade da rede Ethereum.

Ofusca├ž├úo de endere├žo

A ofusca├ž├úo de endere├žo ├ę uma t├ęcnica que visa ocultar ou ofuscar a verdadeira propriedade ou identidade associada a um endere├žo Ethereum. Essas t├ęcnicas podem ser usadas para aumentar a privacidade e impedir o rastreamento ou a an├ílise com base no endere├žo. Isso pode ser feito usando uma variedade de t├ęcnicas, como:

  • Hashing: Um endere├žo Ethereum pode ser transformado em hash para criar um identificador mais curto e mais an├┤nimo.
  • Nonce: Um nonce ├ę um n├║mero aleat├│rio que pode ser usado para ofuscar um endere├žo Ethereum.
  • Mistura: V├írios endere├žos Ethereum podem ser misturados para criar um ├║nico endere├žo an├┤nimo.

Aqui est├úo algumas t├ęcnicas de ofusca├ž├úo de endere├žos comumente empregadas:

  1. Evitar a reutiliza├ž├úo de endere├žos: Para evitar o rastreamento baseado em endere├žo, os usu├írios podem gerar um novo endere├žo para cada transa├ž├úo ou intera├ž├úo, garantindo que n├úo haja duas transa├ž├Áes associadas ao mesmo endere├žo.
  2. Mistura de moedas: Os servi├žos de mistura de moedas (tamb├ęm conhecidos como coin tumblers ou mixers) permitem que os usu├írios juntem seus fundos com outros usu├írios e depois os redistribuam para endere├žos diferentes, dificultando o rastreamento do fluxo de fundos.
  3. Carteiras Determin├şsticas Hier├írquicas (HD): As carteiras HD geram uma ├írvore hier├írquica de endere├žos a partir de uma ├║nica semente principal. Ao usar endere├žos filho diferentes para cada transa├ž├úo, os usu├írios podem ofuscar seu hist├│rico de transa├ž├Áes e sua propriedade.
  4. Endere├žos Secretos: Os endere├žos secretos permitem que o destinat├írio gere um endere├žo ├║nico e exclusivo para cada transa├ž├úo. O remetente criptografa o pagamento com o endere├žo secreto do destinat├írio, garantindo que somente o destinat├írio pretendido possa decifr├í-lo.

Zero-knowledge proofs (ZKPs)

As Zero-knowledge proofs ou provas de conhecimento zero, s├úo uma t├ęcnica criptogr├ífica que permite que duas partes verifiquem informa├ž├Áes uma sobre a outra, sem revelar nenhuma informa├ž├úo confidencial. Isso pode ser usado para proteger a privacidade do usu├írio na blockchain Ethereum, permitindo que os usu├írios provem que possuem determinados ativos sem revelar os valores ou endere├žos espec├şficos.

Benef├şcios do uso de ofusca├ž├úo de endere├žos e provas de conhecimento zero

  • Privacidade Aumentada: A ofusca├ž├úo de endere├žos e as ZKPs podem ajudar a proteger a privacidade do usu├írio, dificultando a associa├ž├úo de um endere├žo Ethereum a uma identidade do mundo real.
  • Risco de fraude reduzido: A ofusca├ž├úo de endere├žos e as ZKPs podem ajudar a reduzir o risco de fraude, tornando mais dif├şcil para os invasores rastrearem a atividade do usu├írio e roubarem fundos.
  • Experi├¬ncia do usu├írio aprimorada: A ofusca├ž├úo de endere├žos e as ZKPs podem ajudar a melhorar a experi├¬ncia do usu├írio, facilitando a participa├ž├úo dos usu├írios em aplicativos descentralizados sem medo de que sua privacidade seja comprometida.

Algumas das desvantagens do uso de ofusca├ž├úo de endere├žos e ZKPs

  • Transpar├¬ncia reduzida: A ofusca├ž├úo de endere├žos e as ZKPs podem reduzir a transpar├¬ncia, dificultando o rastreamento do fluxo de fundos na blockchain Ethereum.
  • Possibilidade de abuso: A ofusca├ž├úo de endere├žos e as ZKPs podem ser usadas para facilitar atividades ilegais.

Essas solu├ž├Áes focadas na privacidade aproveitam t├ęcnicas criptogr├íficas avan├žadas para proteger a privacidade do usu├írio, aprimorar o anonimato transacional e fornecer garantias de privacidade mais fortes no ecossistema Ethereum. Elas oferecem aos usu├írios mais controle sobre suas informa├ž├Áes pessoais e reduzem os riscos associados ao rastreamento e ├á an├ílise baseados em endere├žos.

Conclusão

Dominar os endere├žos Ethereum ├ę fundamental para navegar com efici├¬ncia no ecossistema da Ethereum. Ao dominar os endere├žos Ethereum, voc├¬ ganha confian├ža nas transa├ž├Áes, nas intera├ž├Áes de contratos inteligentes e na seguran├ža dos ativos. A compreens├úo das melhores pr├íticas fortalece a participa├ž├úo na revolu├ž├úo descentralizada. Obrigado por dedicar seu tempo para ler este artigo. Espero que tenha sido informativo e ├║til para entender os endere├žos Ethereum. Fique atento ao meu pr├│ximo artigo!

Referências e Ferramentas

Solidity Documentation on Addresses \
Mastering Delegatecall in Solidity \
Mastering Payable and Non payable functions in Solidity \
EIP55 on Checksum \
Ethereum Explorer \
Ethereum Yellowpaper \
Metamask Extension

Esse artigo foi escrito por Oluwatosin Serah e traduzido por Fátima Lima. O original pode ser lido aqui.

Top comments (0)