Jogo Full Chain 101: Contratos pré-compilados

**O que é um contrato pré-compilado? **

Os contratos pré-compilados são um método de compromisso usado no EVM para fornecer funções de biblioteca mais complexas (geralmente usadas para operações complexas, como criptografia e hash), e também podem ser entendidas como um contrato especial que não é adequado para escrever opcodes. Eles são adequados para contratos que são simples, mas invocados com frequência, ou contratos que são logicamente fixos, mas computacionalmente intensivos. Os contratos pré-compilados são implementados usando o código do cliente do nó e, como não exigem um EVM, são executados rapidamente. Também é mais barato para o desenvolvedor do que usar funções executadas diretamente no EVM.

Como pode ser visto no código a seguir, a função run no contrato evm.go tem duas ramificações: a primeira ramificação é instanciar o parâmetro de índice por meio do índice pré-compilado para especificar o contrato pré-compilado e a segunda ramificação é especificar o pré-compilado contract se não for um contrato pré-compilado Esse evm será chamado.

// run executa o contrato fornecido e cuida da execução de pré-compilações com um fallback para o interpretador de código de byte. func run(evm *EVM, contract *Contract, input []byte, readOnly bool) ([]byte, error) { if contract.CodeAddr != nil { pré-compila:= PrecompiledContractsHomestead if evm.ChainConfig().IsByzantium(evm.BlockNumber) { precompiles = PrecompiledContractsByzantium } if p := pré-compila[*contract.CodeAddr]; p != nil { return RunPrecompiledContract(p, entrada, contrato) } } for _, interpreter := range evm.interpreters { if interpreter.CanRun(contract.Code) { if evm.interpreter != interpreter { // Certifique-se de que o ponteiro do interpretador está definido para trás // ao seu valor atual ao retornar. defer func(i Interpretador) { evm.interpreter = i }(evm.interpreter) evm.interpreter = interpretador } return interpreter.Run(contract, input, readOnly) } } return nil, ErrNoCompatibleInterpreter }

Se expressa graficamente, a lógica específica é a seguinte:

Full Chain Game 101: Precompiled Contract

Onde está o gargalo do contrato pré-compilado?

Atualmente, a Ethereum possui oito contratos pré-compilados:

  1. ECRecover - Recupere o endereço correspondente através da assinatura
  2. SHA256 - Calcula hash SHA256
  3. RIPEMD160 - Calcula o hash RIPEMD160
  4. Identity - retorna o valor original dos dados de entrada
  5. ModExp - Executa a Exponenciação do Módulo
  6. ECAdd - Adição de ponto de curva elíptica
  7. ECMul - Multiplicação de Pontos de Curvas Elípticas
  8. ECPairing - operação de emparelhamento, verificando os pontos da curva elíptica

Você pode ver que do primeiro ao quarto contratos pré-compilados fornecem assinatura básica, hash e outras funções de criptografia, e do quinto ao oitavo fornecem operações de curva elíptica, que estão relacionadas ao zk-snark.

Portanto, a questão é: por que a pré-compilação do Ethereum suporta apenas oito contratos pré-compilados? Os contratos pré-compilados não reduzem o consumo de gás? E por que não implantar diretamente o ECS (a estrutura de todo o jogo da cadeia) no contrato pré-compilado do Ethereum?

Na verdade, existem três razões principais:

  1. A dependência excessiva de contratos pré-compilados reduzirá o grau de descentralização de toda a plataforma:

Em primeiro lugar, o código do contrato pré-compilado precisa ser integrado ao código do nó cliente, o que aumenta a complexidade do cliente. Em segundo lugar, os nós de verificação podem filtrar o cálculo de contratos pré-compilados por motivos de segurança, portanto, a maioria das solicitações de contratos pré-compilados são concluídas por nós completos. Atualmente, existem apenas 4.000-6.000 nós completos Ethereum no mundo e existem 500.000 verificações nodes, que é de fato muito mais centralizado do que contratos não pré-compilados.

  1. A adição e modificação de contratos pré-compilados requerem atualizações de hard fork, que não são fáceis de evoluir de forma flexível.

O suporte de contratos pré-compilados requer o processo EIP.Por exemplo: EIP-196 adiciona dois contratos pré-compilados, ECADD() e ECMUL(), na curva alt_bn128. EIP-197 adiciona a função Pairing na curva alt_bn128. Basicamente, é disponibilizar privacidade no Ethereum para suporte, e todo o processo EIP é longo e elegante, e esperar que o EIP passe não é um problema realista.

  1. É difícil interagir e combinar contratos pré-compilados e a escalabilidade é ruim.

Isso não é muito para explicar, é muito intuitivo.

Qual é o papel do contrato pré-compilado em todo o jogo da cadeia?

Os contratos pré-compilados ignoram o EVM e são executados diretamente através dos nós, o que pode melhorar a eficiência da computação, mas ao mesmo tempo reduz o grau de descentralização de toda a cadeia. A pré-compilação da lógica principal de jogos usados com frequência pode otimizar o desempenho desses jogos. Diferentes tipos de jogos têm diferentes lógicas de chave. Portanto, para a cadeia dedicada de um determinado tipo de jogo, seu design pré-compilado pode otimizar muito as necessidades desse tipo de jogo. Durante o processo de iteração do jogo, a combinação de contrato pré-compilada mais eficiente será gradualmente otimizada.

Ver original
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
  • Recompensa
  • 1
  • Compartilhar
Comentário
0/400
THULEBTCvip
· 2024-01-13 03:49
2024 TO DA MOON 🌕
Responder0
  • Marcar
Faça trade de criptomoedas em qualquer lugar e a qualquer hora
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)