Juego de cadena completa 101: contratos precompilados

Fuente: Gametaverso

En la actualidad, los dos motores de juegos de cadena completa con mayor potencial, Curio y Argus, optan por mejorar el rendimiento de las consultas del estado del juego y aumentar la adaptabilidad a juegos de cadena completa específicos mediante la personalización del contrato precompilado del nodo. Qué es la precompilación?¿Los contratos, y por qué los contratos precompilados pueden mejorar el rendimiento? Para concluir, lea este artículo de divulgación científica: Contratos precompilados de juegos de cadena completa 101.

**¿Qué es un contrato precompilado? **

Los contratos precompilados son un método de compromiso que se utiliza en EVM para proporcionar funciones de biblioteca más complejas (normalmente se utilizan para operaciones complejas como el cifrado y el hash). También se puede entender como un contrato especial, y estas funciones no son adecuadas para escribir códigos de operación. Son adecuados para contratos que son simples pero que se invocan con frecuencia, o contratos que son lógicamente fijos pero computacionalmente intensivos. Los contratos precompilados se implementan mediante el código de cliente de nodo y, dado que no requieren un EVM, se ejecutan rápidamente. También es menos costoso para el desarrollador que usar funciones que se ejecutan directamente en el EVM.

Como se puede ver en el siguiente código, la función de ejecución en el contrato evm.go tiene dos ramas: la primera rama es para instanciar el parámetro de índice a través del índice precompilado para especificar el contrato precompilado, y la segunda rama es para especificar el precompilado. contract si no es un contrato precompilado Ese evm se llamará.

// run ejecuta el contrato dado y se encarga de ejecutar precompilaciones con un respaldo al intérprete de código de bytes. func run(evm *EVM, contract *Contract, input []byte, readOnly bool) ([]byte, error) { if contrato.CodeAddr != nil { precompila := PrecompiledContractsHomestead si evm.ChainConfig().IsByzantium(evm.BlockNumber) { precompila = Contratos Precompilados Byzantium } if p := precompila[*contrato.CodeAddr]; p != cero { devuelve RunPrecompiledContract(p, entrada, contrato) } } for _, interprete := rango evm.intérpretes { if interpreter.CanRun(contrato.Código) { if evm.intérprete != intérprete { // Asegurarse de que el puntero del intérprete se restablezca // a su valor actual al regresar. diferir func(i Intérprete) { evm.intérprete = i }(evm.intérprete) evm.intérprete = intérprete } devolver intérprete. Ejecutar (contrato, entrada, solo lectura) } } devuelve cero, ErrNoCompatibleInterpreter }

Si se expresa gráficamente, la lógica específica es la siguiente:

qywWWb5gt8l7VZJQbIvoAyoVlqiSjncPOnWk7feQ.png

Entonces, ¿dónde está el cuello de botella del contrato precompilado?

Ethereum actualmente tiene ocho contratos precompilados:

  1. ECRecover - Recuperar la dirección correspondiente a través de la firma
  2. SHA256 - Calcula el hash SHA256
  3. RIPEMD160 - Calcula el hash RIPEMD160
  4. Identidad: devuelve el valor original de los datos de entrada
  5. ModExp - Realiza la exponenciación de módulo
  6. ECAdd - Adición de puntos de curva elíptica
  7. ECMul - Multiplicación de puntos de curva elíptica
  8. ECPairing - operación de emparejamiento, verificación de puntos de curva elíptica

Puede ver que los contratos precompilados del primero al cuarto brindan firma básica, hash y otras funciones de encriptación, y del quinto al octavo brindan operaciones de curva elíptica, que están relacionadas con zk-snark.

Entonces, la pregunta es, ¿por qué la precompilación de Ethereum solo admite ocho contratos precompilados?, ¿los contratos precompilados no reducen el consumo de gas? ¿Y por qué no implantar directamente ECS (el marco de todo el juego en cadena) en el contrato precompilado de Ethereum?

De hecho, hay tres razones principales:

  1. La dependencia excesiva de contratos precompilados reducirá el grado de descentralización de toda la plataforma:

En primer lugar, el código del contrato precompilado debe integrarse en el código del nodo del cliente, lo que aumenta la complejidad del cliente. En segundo lugar, los nodos de verificación pueden filtrar el cálculo de los contratos precompilados por razones de seguridad, por lo que la mayoría de las solicitudes de contratos precompilados se completan con nodos completos. Actualmente, solo hay entre 4000 y 6000 nodos completos de Ethereum en el mundo y hay 500 000 de verificación. nodos, que de hecho es mucho más centralizado que los contratos no precompilados.

  1. La adición y modificación de contratos precompilados requiere actualizaciones de hard fork, que no son fáciles de evolucionar de manera flexible.

El soporte de contratos precompilados requiere el proceso EIP, por ejemplo: EIP-196 agrega dos contratos precompilados, ECADD() y ECMUL(), en la curva alt_bn128. EIP-197 agrega la función de emparejamiento en la curva alt_bn128. Básicamente, es hacer que la privacidad esté disponible en Ethereum para soporte, y todo el proceso de EIP es largo y elegante, y esperar a que pase EIP no es un problema realista.

  1. Es difícil interactuar y combinar contratos precompilados, y la escalabilidad es deficiente.

Esto no es mucho para explicar, es muy intuitivo.

¿Qué papel juega el contrato precompilado en todo el juego de la cadena?

Los contratos precompilados omiten EVM y se ejecutan directamente a través de nodos, lo que puede mejorar la eficiencia informática, pero al mismo tiempo reduce el grado de descentralización de toda la cadena. La precompilación de la lógica central de los juegos de uso frecuente puede optimizar el rendimiento de dichos juegos. Los diferentes tipos de juegos tienen diferentes lógicas de teclas. Por lo tanto, para la cadena dedicada de un determinado tipo de juego, su diseño precompilado puede optimizar en gran medida las necesidades de este tipo de juego. Durante el proceso de iteración del juego, se optimizará gradualmente la combinación de contrato precompilado más eficiente.

Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
  • Recompensa
  • Comentar
  • Compartir
Comentar
0/400
Sin comentarios
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)