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
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:
- La Máquina Virtual Ethereum
- Precompilaciones en Solidity
- Descomponiendo un Contrato Inteligente
- Distribución de Variables de Estado en Almacenamiento
- Distribución en Memoria
- Distribución de Datos de Llamada
- Especificación del ABI del Contrato
- Personalizando la EVM con Precompilaciones Estatales
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
.
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
:
- Clona el repositorio (Subnet-EVM o Precompile-EVM) con Git
- Clona el repositorio AvalancheGo con Git
- Instala Avalanche Network Runner
- Instala solc
- Instala Node.js y NPM Para copiar y pegar fácilmente, usa los siguientes comandos:
cd $GOPATH
mkdir -p src/github.com/ava-labs
cd src/github.com/ava-labs
Clona el repositorio:
- Subnet-EVM
- Precompile-EVM
git clone [email protected]:ava-labs/subnet-evm.git
git clone [email protected]:ava-labs/precompile-evm.git
Alternativamente, puedes usarlo como un repositorio de plantillas desde github.
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.
- Subnet-EVM
- Precompile-EVM
Para un ejemplo completo, también puedes consultar la Precompilación del Administrador de Recompensas.
Was this page helpful?