WEB3DEV

Cover image for Pool de memória Ethereum. Como funciona?
Rafael Ojeda
Rafael Ojeda

Posted on

Pool de memória Ethereum. Como funciona?

Pool de memória Ethereum. Como funciona?

A blockchain Ethereum é na verdade uma ledger distribuída, assim como a blockchain do bitcoin, oferece funcionalidade de computação na forma de contratos inteligentes, mas no seu mais básico, é apenas um monte de blocos presos uns aos outros (1 para 1) contendo transações que mudam o estado da blockchain.

Os nós que formam a rede de ethereum mantêm uma cópia da blockchain e são os encarregados de adicionar novas transações a ela e assegurar sua consistência e validade.

A questão é: como as transações são adicionadas à blockchain pelos nós?

O processo pode ser explicado muito facilmente: os nós recebem transações assinadas de carteiras/usuários, e se as transações forem válidas, eles as adicionam à blockchain.

O problema é que os nós podem receber milhares de transações e os blocos são adicionados à blockchain a uma taxa quase constante (a cada poucos segundos), os nós também podem receber diferentes transações de diferentes usuários e outros nós aos quais estão conectados. Precisamos ser capazes de ter algum tipo de buffer para armazenar todas essas transações recebidas, mas ainda não validadas... É aqui que entra em jogo o pool de memória "MemPool", vou tentar descrever o que é e como funciona de um ponto de vista genérico e que "efeitos colaterais" eles podem ter.

Image description

O que é e como funciona?

Como alguém adicionaria uma nova transação à blockchain? digamos que alguém deseja enviar algum dinheiro para outra conta?
Bem, a primeira coisa que essa pessoa deve fazer é realizar a transação.

Ele ou ela terá que indicar, entre outras coisas :

  • O destinatário da transação
  • O valor a ser pago
  • O valor das taxas que ele ou ela está disposto a pagar pela transação
  • A assinatura da transação (assinada com uma chave privada usando uma carteira, por exemplo).

Uma vez que a transação esteja pronta, ela só precisa ser incluída em um bloco futuro para que seja aceita pela rede.

A maneira de fazer isso é transmitir as transações assinadas para um (ou muitos) nós que formam a rede da blockchain.

Os nós receberão sua transação e verificarão sua validade e autenticidade antes de encaminhá-la para outros nós da rede (eles verificarão se o remetente tem fundos suficientes e, mais importante, se a assinatura está correta).

Após a verificação da transação, os nós a adicionarão ao seu pool de memória. Os nós verificarão novamente todas as suas transações do pool de memória* depois que cada bloco for adicionado à rede, pois pode conter transações que invalidam algumas das transações que estão mantendo em seu pool de memória*.

O pool de memória é basicamente memória RAM dentro dos nós, onde eles mantêm todas as transações validadas que receberam “até agora”, mas que ainda não puderam acrescentar à blockchain.

Image description

De fato, os blocos são gerados a cada poucos segundos ou minutos, dependendo da blockchain, e eles têm um tamanho máximo, o que significa que eles só podem hospedar um número limitado de transações.

Se a taxa na qual os usuários estão enviando transações para a blockchain for maior do que a taxa na qual os blocos podem ser adicionados às blockchains, muitas transações terão que esperar no pool de memória dos nós.

É importante observar que devido à sua natureza descentralizada, os pools de memória dos nós podem ser distintos, e em qualquer ponto do tempo, eles podem realizar diferentes transações.
É igualmente importante observar que sua transação também pode existir em vários nós de pool de memória em qualquer ponto no tempo.

Às vezes nos referimos ao pool de memórias como uma única entidade/localização, mas na verdade é uma combinação de todos os pools de memória que existem no momento.

Image description

Os nós escolherão as transações de seu pool de memória a fim de construir blocos para adicionar à blockchain, mas não seguirão uma estratégia Por Ordem de Chegada, eles escolherão o que considerarem as transações mais convenientes para eles, basicamente aquelas que pagam as taxas mais altas, uma vez que serão eles a cobrá-las.

Image description

Uma vez que uma transação é finalmente selecionada por um minerador de seu pool de memórias e adicionada a um bloco, todos os outros nós que continham a mesma transação em seu pool de memórias procederão para removê-la, uma vez que a mesma transação não pode ser adicionada duas vezes à blockchain.

O *pool de memórias de cada é, então, como a área de espera de uma estação de trem, onde os passageiros esperam a chegada do próximo trem e somente aqueles dispostos a pagar mais entrarão. Com a particularidade de um único passageiro poder estar em várias estações de trem ao mesmo tempo, e no momento em que ele ou ela entra em um trem, ele ou ela desaparece de todas as outras estações de trem!*

Efeitos colaterais relatados

Cancelamento de Transações

Os nós são agentes não confiáveis, no sentido de que eles sempre agirão em seu próprio interesse, como já descrevemos anteriormente, eles escolherão primeiro as transações que mais pagam, este é na verdade um comportamento que podemos usar a nosso favor, pois nos dará a possibilidade de cancelar transações se necessário (transações que ainda não foram adicionadas à blockchain, é claro!!!).

A fim de cancelar uma transação anterior, precisamos submeter à rede uma nova transação da mesma conta utilizando a mesma nonce, mas com uma taxa mais alta.

Os nós receberão sua nova transação e, como ela paga uma taxa mais alta que a anterior, eles a adicionarão primeiro à blockchain. Os nonces de transação Ethereum só podem ser usados uma vez para uma conta específica, o que significa que no momento em que adicionam a nova transação à blockchain, a antiga torna-se inválida e é removida dos pools de memória.

Correndo a Frente

Como os nós mantêm as transações em seus pools de memória antes de adicioná-las à blockchain, eles têm acesso ao seu conteúdo e podem verificar a saída (mudança de estado) que causarão à blockchain com antecedência....

Isto pode ser potencialmente um problema para sua dapp, vamos supor que você esteja oferecendo uma certa recompensa à primeira conta que submete um certo valor (que se precipita em um valor que você armazenou em seu Contrato Inteligente). Se alguém submeter a resposta certa a um , o terá acesso a esse valor e poderá muito facilmente gerar sua própria transação, copiar colar o conteúdo e adicioná-lo à blockchain primeiro, efetivamente "roubando" a recompensa do usuário honesto.

Este é apenas um exemplo de execução frontal, mas há muito mais situações em que a "velocidade" ou "ordem" em que as transações são adicionadas à blockchain pode ter um impacto em sua lógica dapp, você deve sempre ter em mente que isto pode potencialmente causar uma perturbação.

Junte-se ao Coinmonks Telegram Channel e ao Youtube Channel para aprender sobre comércio criptográfico e investimentos

Artigo escrito por Alberto Molina e traduzido para o português por Rafael Ojeda

Você pode ler o artigo original em inglês aqui

Top comments (1)

Collapse
 
gedehuntu37 profile image
anjayani

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.