Configura tu entorno y arranca la red local
Esta guía te lleva desde cero hasta tener un contrato de ejemplo desplegado y funcionando en una red ISBE local.
Prerrequisitos
| Herramienta | Versión mínima | Verificar |
|---|---|---|
| Node.js | 18 | node --version |
| npm | 9 | npm --version |
| Git | cualquiera | git --version |
| Docker | cualquiera | docker --version |
- Node.js: nodejs.org (versión LTS recomendada)
- Docker: docker.com — debe estar en ejecución antes de arrancar la red
1. Clona el template
ISBE proporciona un repositorio template que ya tiene la estructura correcta, las dependencias necesarias y un contrato de ejemplo funcionando:
git clone https://github.com/red-isbe/isbe-clients-template mi-contrato
cd mi-contrato
npm install
El npm install descarga @red-isbe/isbe-contracts junto con Hardhat, TypeChain y las dependencias de OpenZeppelin. Puede tardar un minuto.
2. Configura las variables de entorno
cp .env_sample .env
El fichero .env_sample ya viene con las credenciales correctas para la red local:
ACCOUNT_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
ACCOUNT_PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
LOCALHOST_URL=http://localhost:8545
Estas son las credenciales de la cuenta #0 de Hardhat, que está pre-financiada y tiene permisos de administrador en el Diamond de la red local.
⚠️ Estas credenciales son públicas. Solo son válidas para desarrollo local — nunca las uses en mainnet ni en ningún entorno con valor real.
3. Levanta la red ISBE en local
El template incluye una red ISBE completa que corre en Docker. Desde la raíz del repositorio:
cd isbe-network-case
./startNetwork.sh
El script arranca 4 nodos Hyperledger Besu con consenso QBFT. Cuando termine, comprueba que están corriendo:
docker ps
Deberías ver algo así:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
24705181db60 hyperledger/besu:latest "besu-entry.sh --con…" ... Up ... 0.0.0.0:8548->8548/tcp, 0.0.0.0:9549->9549/tcp, 0.0.0.0:30307->30307/tcp node4
7a10430e6928 hyperledger/besu:latest "besu-entry.sh --con…" ... Up ... 0.0.0.0:8547->8547/tcp, 0.0.0.0:9548->9548/tcp, 0.0.0.0:30306->30306/tcp node3
a1890c407fd0 hyperledger/besu:latest "besu-entry.sh --con…" ... Up ... 0.0.0.0:8546->8546/tcp, 0.0.0.0:9547->9547/tcp, 0.0.0.0:30305->30305/tcp node2
d24c318022a2 hyperledger/besu:latest "besu-entry.sh --con…" ... Up ... 0.0.0.0:8545->8545/tcp, [::]:8545->8545/tcp, 0.0.0.0:9545->9545/tcp, 0.0.0.0:30303->30303/tcp bootnode
4 contenedores en estado Up. El nodo bootnode expone el RPC en http://localhost:8545 — es el que usan todos los scripts de Hardhat.
El Diamond de gobernanza de ISBE está pre-desplegado en génesis en 0x00000000000000000000000000000000000015BE. No necesitas desplegarlo — está disponible desde el momento en que la red arranca.
Para parar la red cuando termines:
./stopNetwork.sh
4. Compila los contratos
Vuelve a la raíz del repositorio:
cd ..
npx hardhat compile
Deberías ver:
Generating typings for: N artifacts in dir: typechain-types for target: ethers-v6
Successfully generated N typings!
Compiled N Solidity files successfully (evm target: istanbul).
Si hay errores, comprueba que npm install se ejecutó correctamente y que tu versión de Node es ≥ 18.
5. Despliega el contrato de ejemplo
El template incluye un contrato de ejemplo de Modalidad 1 — HashTimestamp — que sella hashes en blockchain con su timestamp. Es un contrato completo y funcional que sirve como referencia.
Para desplegarlo en la red local:
npx hardhat run scripts/hashtimestamp/deployHashTimestamp.ts --network isbe
La salida muestra las direcciones del despliegue:
[1/3] deploy...
Implementation: 0x...
[2/3] setConfiguration...
[3/3] deployUseCase...
✓ Deployment complete
Proxy: 0x<tu-proxy>
Resolver key: 0x...
Config ID: 0x...
La dirección Proxy es con la que interactúas desde ahora.
6. Verifica que funciona
npx hardhat console --network isbe
const proxy = await ethers.getContractAt(
'HashTimestampFacet',
'0x<tu-proxy>'
)
await proxy.eip712Domain() // → nombre, chainId, contrato
await proxy.exists(ethers.ZeroHash) // → false
Si eip712Domain() responde sin revertir, el contrato está bien desplegado y enrutado a través del Diamond.
Siguiente paso
Con el entorno funcionando y el ejemplo desplegado, consulta:
- Modalidades de despliegue — Para entender qué modalidad se ajusta a tu caso de uso antes de escribir código propio.
- Guías prácticas — Snippets de código para implementar storage, RBAC y pausa en tu contrato.