[Ethereum] Máquina Virtual?

Olá, eu conheço muito pouco sobre etherum e gostaria de saber se o smart contracts são simplesmente programas capazes de receber processar assinaturas digitais que são executados em um máquina virtual descentralizada?

Olá!

A EVM (Ethereum Virtual Machine) permite a execução de uma maquina de Turing completa. Em outros termos, suporta condicionais e loops, enquanto o bitcoin script não suporta loops (propositalmente).

Um “contrato”, de forma super simples, pode ser visto como um endereço ethereum que em vez de ser controlado por um humano, é controlado por um código pré-definido e que é imutável após o seu registro na rede. Por este motivo muitas pessoas dizem que contratos servem para programar dinheiro. Contratos podem receber ether ou tokens (como um endereço tradicional) e enviá-los para outros endereços de forma praticamente autônoma baseadas em uma lógica pré existente. Ou seja, o saldo de ether ou tokens de um contrato é controlado pela lógica do programa.

Verificar assinaturas é algo que é abstraído pela própria plataforma, portanto em geral não é necessário fazer estas validações manualmente, de forma que o programador pode focar somente na lógica do contrato em si, pois qualquer erro de lógica pode fazer com que saldos enviados para um determinado contrato fiquem lá presos para sempre, ou até mesmo seja enviado para endereços errados ou inválidos.

3 curtidas

ok, então significa que na rede ethereum você pode escrever um programa e ele vai ser executado pela rede?

Exatamente. Através de transações você pode chamar métodos de contratos para alterar o seu status (valores de variáveis de estado por exemplo), e terá que pagar ether para mineradores (gas) para que eles executem o código e guardem o novo status das variáveis de estado na blockchain.

É importante notar que a EVM não dá acesso aos contratos para acessar hardware (ou Internet) como um programa de computador tradicional. O escopo do que um contrato pode fazer é limitado de forma intencional.

De forma simplista, fazendo um paralelo com orientação a objeto, um contrato é uma classe, e cada deploy dele na rede se torna um objeto autônomo que em vez de ser identificado por um ponteiro de memória, é um endereço ethereum. Os atributos do objeto permanecem com seu status preservado na blockchain, e a forma de mudar estes atributos é enviando transações para este contrato, que no final das contas funciona como uma chamada de método.

Então quando você paga em ether para o minerador (gas) será realizada a compra de uma parcela de processamento para executar o programa? Se sim, caso alguém compre processamento insuficiente para rodar o programa ele simplesmente para de rodar?

Exatamente. Este é o mecanismo que impede um smart contract de entrar em loop indefinidamente. Neste caso a pessoa que enviou a transação perde os ether, pois eles não serão devolvidos.

Pegue como exemplo essa transação aqui:

Veja que a quantidade de gas utilizada é igual ao gas limit, ou seja, não conseguiu terminar a execução e retornou “out of gas”.

1 curtida

E o que seria o input para essas scripts em ethereum? No caso no bitcoin é o output de uma transação não gasta, certo? E além disso, esses programas que o ethereum executa são o mesmo modelo das scripts de transações do bitcoin que são destravadas com a assinatura digital?

Exatamente. No bitcoin é um UTXO (unspent transaction output)

O modelo no Ethereum é um pouco diferente. Sugiro dar uma lida neste artigo:

Outra boa fonte para entender as transações é o Mastering Ethereum, do Andreas Antonopoulos: https://github.com/ethereumbook/ethereumbook/blob/develop/transactions.asciidoc

Tiago,
Interessante esta questão do “loop”, não tinha reparado nesse detalhe dos smart contracts. Eu achava que atingindo alguma condição estabelecida no script ele “rodava” e finalizava/acabava. E o custo tinha que ser pago/provisionado antecipadamente. Pelo que entendi, se não fizer bem feito pode consumir moedas indevidamente/desnecessariamente gerando prejuízo/perda também neste aspecto.

Oi Cecilio,

Na verdade a pessoa que envia a transação estipula o gasLimit, que seria a quantidade máxima de ether a ser gasta naquela transação. Fica a cargo do emissor em definir este valor.
Dependendo da lógica do programa é impossível dizer ao certo o quanto a transação irá gastar em termos de gas (ether). Por este motivo existe o gasLimit, para proteger o emissor de gastar mais do que pretende em uma certa transação.

1 curtida

como aqueles dois tipos de conta ficam registrado no ethereum?

Não conheço a fundo o funcionamento interno da blockhain do Ethereum, mas os contratos e seus dados são guardados na blockchain através de transações. No bitcoin as transações guardam os registros de inputs e outputs. No Ethereum as transações guardam dados diversos, incluindo o código em si e os dados dos contratos.

1 curtida