Crear una Subnet con una Máquina Virtual Personalizada
Este tutorial guía a través del proceso de crear una Subnet con una máquina virtual personalizada y desplegarla localmente. Aunque el tutorial utiliza un fork de Subnet-EVM como ejemplo, puedes extender sus lecciones para soportar cualquier binario de VM personalizado.
Hacer un Fork de Subnet-EVM
En lugar de construir una VM personalizada desde cero, este tutorial comienza haciendo un fork de Subnet-EVM.
Clonar Subnet-EVM
En primer lugar, clona el repositorio de Subnet-EVM en un directorio de tu elección.
git clone https://github.com/ava-labs/subnet-evm.git
El método de clonación del repositorio utilizado es HTTPS, pero también se puede usar SSH:
git clone [email protected]:ava-labs/subnet-evm.git
Puedes encontrar más información sobre SSH y cómo usarlo aquí.
Modificar y Construir Subnet-EVM
Para demostrar que estás ejecutando tu binario personalizado y no el Subnet-EVM de stock incluido con Avalanche-CLI, necesitas modificar el binario de Subnet-EVM haciendo un cambio menor.
Navega al directorio en el que clonaste Subnet-EVM y genera un nuevo commit:
git commit -a --allow-empty -m "commit de vm personalizada"
Toma nota del nuevo hash de commit:
git rev-parse HEAD
c0fe6506a40da466285f37dd0d3c044f494cce32
En este caso, c0fe6506a40da466285f37dd0d3c044f494cce32
.
Ahora construye tu binario personalizado ejecutando
./scripts/build.sh custom_vm.bin
Este comando construye el binario y lo guarda en ./custom_vm.bin
.
Crear un Génesis Personalizado
Para iniciar una VM, necesitas proporcionar un archivo de génesis. Aquí tienes un génesis básico de Subnet-EVM que es compatible con tu VM personalizada.
{
"config": {
"byzantiumBlock": 0,
"chainId": 12345,
"constantinopleBlock": 0,
"eip150Block": 0,
"eip150Hash": "0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0",
"eip155Block": 0,
"eip158Block": 0,
"feeConfig": {
"gasLimit": 15000000,
"targetBlockRate": 2,
"minBaseFee": 25000000000,
"targetGas": 15000000,
"baseFeeChangeDenominator": 36,
"minBlockGasCost": 0,
"maxBlockGasCost": 1000000,
"blockGasCostStep": 200000
},
"homesteadBlock": 0,
"istanbulBlock": 0,
"muirGlacierBlock": 0,
"petersburgBlock": 0
},
"nonce": "0x0",
"timestamp": "0x0",
"extraData": "0x",
"gasLimit": "0xe4e1c0",
"difficulty": "0x0",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"8db97c7cece249c2b98bdc0226cc4c2a57bf52fc": {
"balance": "0xd3c21bcecceda1000000"
}
},
"airdropHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"airdropAmount": null,
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"baseFeePerGas": null
}
Abre un editor de texto y copia el texto anterior en un archivo llamado custom_genesis.json
.
Crear la Configuración de la Subnet
Ahora que tienes tu binario, es hora de crear la configuración de la Subnet. Este tutorial utiliza
myCustomSubnet
como nombre de la Subnet. Invoca el Asistente de Creación de Subnet con este comando:
avalanche subnet create myCustomSubnet
Elige tu VM
Selecciona Personalizada
para tu VM.
Usa las teclas de flecha para navegar: ↓ ↑ → ←
? Elige tu VM:
Subnet-EVM
▸ Personalizada
Ingresa la Ruta a tu Génesis
Ingresa la ruta al archivo de génesis que creaste en este paso.
✔ Ingresa la ruta al génesis personalizado: ./custom_genesis.json
Ingresa la Ruta a tu Binario de VM
A continuación, ingresa la ruta a tu binario de VM. Esta debería ser la ruta al custom_evm.bin
que
creaste anteriormente.
✔ Ingresa la ruta al binario de vm: ./custom_vm.bin
Finalizando
Si todo funcionó correctamente, el comando imprime Configuración de Subnet creada exitosamente
.
Ahora es hora de desplegarla.
Desplegar la Subnet Localmente
Para desplegar tu Subnet, ejecuta
avalanche subnet deploy myCustomSubnet
Asegúrate de sustituir el nombre de tu Subnet si usaste uno diferente a myCustomSubnet
.
A continuación, selecciona Red Local
.
Usa las teclas de flecha para navegar: ↓ ↑ → ←
? Elige una red para desplegar en:
▸ Red Local
Fuji
Mainnet
Este comando inicia una red Avalanche de cinco nodos en tu máquina. Necesita descargar las últimas versiones de AvalancheGo y Subnet-EVM. El comando puede tardar unos minutos en ejecutarse.
Si todo funciona como se espera, la salida del comando debería verse algo así:
> avalanche subnet deploy myCustomSubnet
✔ Red Local
Desplegando [myCustomSubnet] en Red Local
Controlador de backend iniciado, pid: 26110, salida en: /home/fm/.avalanche-cli/runs/server_20230816_131014/avalanche-cli-backend.log
Instalando avalanchego-v1.10.8...
Instalación exitosa de avalanchego-v1.10.8
Ruta de registro del nodo: /home/fm/.avalanche-cli/runs/network_20230816_131608/node<i>/logs
Iniciando red...
VMs listas.
La blockchain ha sido desplegada. Espera hasta que la red lo reconozca...
Red de lista para usar. Puntos finales de los nodos de la red local:
+-------+----------------+------------------------------------------------------------------------------------+-------------------------------------------------+
| NODO | VM | URL | ALIAS URL |
+-------+----------------+------------------------------------------------------------------------------------+-------------------------------------------------+
| node1 | myCustomSubnet | http://127.0.0.1:9650/ext/bc/z9a7L6XmFYskbaHuuLFCxThByKg4xqsYYbaqT5ke6xVutDQTp/rpc | http://127.0.0.1:9650/ext/bc/myCustomSubnet/rpc |
+-------+----------------+------------------------------------------------------------------------------------+-------------------------------------------------+
| node2 | myCustomSubnet | http://127.0.0.1:9652/ext/bc/z9a7L6XmFYskbaHuuLFCxThByKg4xqsYYbaqT5ke6xVutDQTp/rpc | http://127.0.0.1:9652/ext/bc/myCustomSubnet/rpc |
+-------+----------------+------------------------------------------------------------------------------------+-------------------------------------------------+
| node3 | myCustomSubnet | http://127.0.0.1:9654/ext/bc/z9a7L6XmFYskbaHuuLFCxThByKg4xqsYYbaqT5ke6xVutDQTp/rpc | http://127.0.0.1:9654/ext/bc/myCustomSubnet/rpc |
+-------+----------------+------------------------------------------------------------------------------------+-------------------------------------------------+
| node4 | myCustomSubnet | http://127.0.0.1:9656/ext/bc/z9a7L6XmFYskbaHuuLFCxThByKg4xqsYYbaqT5ke6xVutDQTp/rpc | http://127.0.0.1:9656/ext/bc/myCustomSubnet/rpc |
+-------+----------------+------------------------------------------------------------------------------------+-------------------------------------------------+
| node5 | myCustomSubnet | http://127.0.0.1:9658/ext/bc/z9a7L6XmFYskbaHuuLFCxThByKg4xqsYYbaqT5ke6xVutDQTp/rpc | http://127.0.0.1:9658/ext/bc/myCustomSubnet/rpc |
+-------+----------------+------------------------------------------------------------------------------------+-------------------------------------------------+
Detalles de conexión de la extensión del navegador (cualquier URL de nodo de arriba funciona):
URL RPC: http://127.0.0.1:9650/ext/bc/z9a7L6XmFYskbaHuuLFCxThByKg4xqsYYbaqT5ke6xVutDQTp/rpc
Puedes usar la URL RPC
para conectarte e interactuar con tu Subnet.
Interactúa con tu Subnet
Verifica la Versión
Puedes verificar que tu Subnet se haya desplegado correctamente consultando al nodo local para ver qué
Subnets está ejecutando. Necesitas usar el endpoint
getNodeVersion
. Intenta ejecutar este
comando curl:
curl --location --request POST 'http://127.0.0.1:9650/ext/info' \
--header 'Content-Type: application/json' \
--data-raw '{
"jsonrpc":"2.0",
"id" :1,
"method" :"info.getNodeVersion",
"params" :{
}
}'
El comando devuelve una lista de todas las VM que tu nodo local está ejecutando junto con sus versiones.
{
"jsonrpc": "2.0",
"result": {
"version": "avalanche/1.10.8",
"databaseVersion": "v1.4.5",
"rpcProtocolVersion": "27",
"gitCommit": "e70a17d9d988b5067f3ef5c4a057f15ae1271ac4",
"vmVersions": {
"avm": "v1.10.8",
"evm": "v0.12.5",
"platform": "v1.10.8",
"qDMnZ895HKpRXA2wEvujJew8nNFEkvcrH5frCR9T1Suk1sREe": "v0.5.4@c0fe6506a40da466285f37dd0d3c044f494cce32"
}
},
"id": 1
}
Tus resultados pueden ser ligeramente diferentes, pero puedes ver que además de la VM de la Cadena-X
avm
, la VM de la Cadena-C evm
y la VM de la Cadena-P platform
, el nodo está ejecutando la VM
personalizada con el commit c0fe6506a40da466285f37dd0d3c044f494cce32
.
Verifica un Saldo
Si usaste el génesis predeterminado, tu VM personalizada tiene una dirección prefinanciada. Puedes verificar su saldo
con un comando curl. Asegúrate de sustituir la URL del comando con la URL RPC
de tu
salida de despliegue.
curl --location --request POST 'http://127.0.0.1:9650/ext/bc/myCustomSubnet/rpc' \
--header 'Content-Type: application/json' \
--data-raw '{
"jsonrpc": "2.0",
"method": "eth_getBalance",
"params": [
"0x8db97c7cece249c2b98bdc0226cc4c2a57bf52fc",
"latest"
],
"id": 1
}'
El comando debería devolver
{
"jsonrpc": "2.0",
"id": 1,
"result": "0xd3c21bcecceda1000000"
}
El saldo está codificado en hexadecimal, así que esto significa que la dirección tiene un saldo de 1 millón de tokens.
Ten en cuenta que este comando no funciona en todas las VM personalizadas, solo en las VM que implementan la
interfaz eth_getBalance
de la EVM.
Siguientes Pasos
Ahora has desbloqueado la capacidad de desplegar VMs personalizadas. ¡Ve y construye algo genial!
Was this page helpful?