Saltar al contenido principal

Antecedentes y Requisitos

Esta es una breve descripción de lo que cubrirá este tutorial.

  • Escribir una interfaz en Solidity
  • Generar la plantilla de la precompilación
  • Implementar las funciones de la precompilación en Golang
  • Escribir y ejecutar pruebas
caution

Las precompilaciones estatales son software en fase alfa. Construye bajo tu propio riesgo.

En este tutorial, usamos una rama basada en la versión v0.5.2 de Subnet-EVM. Puedes encontrar la rama aquí. El código en esta rama es el mismo que Subnet-EVM, excepto por el directorio precompile/contracts/helloworld. El directorio contiene el código de la precompilación HelloWorld. Usaremos esta precompilación como ejemplo para aprender cómo escribir una precompilación estatal. El código en esta rama puede volverse obsoleto. Siempre debes usar la última versión de Subnet-EVM cuando desarrollas tu propia precompilación.

Precompile-EVM

Las precompilaciones de Subnet-EVM se pueden registrar desde un repositorio externo. Esto permite a los desarrolladores construir sus precompilaciones sin mantener un fork de Subnet-EVM. Las precompilaciones se registran en Subnet-EVM en tiempo de construcción.

La diferencia entre usar Subnet-EVM y Precompile-EVM es que con Subnet-EVM puedes cambiar los internos de la EVM para interactuar con tus precompilaciones. Tales como cambiar la estructura de tarifas, agregar nuevas opcodes, cambiar cómo construir un bloque, etc. Con Precompile-EVM solo puedes agregar nuevas precompilaciones estatales que pueden interactuar con la StateDB. Las precompilaciones construidas con Precompile-EVM siguen siendo muy poderosas porque pueden acceder directamente al estado y modificarlo.

Hay un repositorio de plantilla sobre cómo construir una precompilación de esta manera llamado Precompile-EVM. Tanto Subnet-EVM como Precompile-EVM comparten estructuras de directorios y códigos comunes.

Puedes consultar la PR de Precompile-EVM que agrega la precompilación de Hello World aquí.

Requisitos

Este tutorial asume familiaridad con Golang y JavaScript.

Además, los usuarios deben estar profundamente familiarizados con la EVM para entender sus invariantes ya que agregar una Precompilación Estatal modifica la propia EVM.

Aquí hay algunos recursos recomendados para aprender los entresijos de la EVM:

Por favor, instala lo siguiente antes de comenzar.

Primero, instala la última versión de Go. Sigue las instrucciones aquí. Puedes verificarlo ejecutando go version.

Configura la variable de entorno $GOPATH correctamente para que Go busque los Workspaces de Go. Por favor, lee esto para más detalles. Puedes verificarlo ejecutando echo $GOPATH.

info

Consulta aquí las instrucciones para configurar GOPATH basado en las configuraciones del sistema.

Como algunas cosas se instalarán en $GOPATH/bin, asegúrate de que $GOPATH/bin esté en tu $PATH, de lo contrario, es posible que obtengas un error al ejecutar los comandos a continuación. Para hacer eso, ejecuta el comando: export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Descarga los siguientes requisitos previos en tu $GOPATH:

cd $GOPATH
mkdir -p src/github.com/ava-labs
cd src/github.com/ava-labs

Clona el repositorio:

git clone [email protected]:ava-labs/subnet-evm.git

Luego ejecuta los siguientes comandos:

git clone [email protected]:ava-labs/avalanchego.git
curl -sSfL https://raw.githubusercontent.com/ava-labs/avalanche-network-runner/main/scripts/install.sh | sh -s
npm install -g solc

Código Completo

Puedes inspeccionar la solicitud de extracción de ejemplo para ver el código completo.

Para un ejemplo completo, también puedes consultar la Precompilación del Administrador de Recompensas.

Was this page helpful?