Saltar al contenido principal

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​

HerramientaVersión mínimaVerificar
Node.js18node --version
npm9npm --version
Gitcualquieragit --version
Dockercualquieradocker --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
tip

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.