Introducción
Bloquelon combina prueba de trabajo (PoW) para la entropía inicial y prueba de participación (PoS) para finalidad rápida, con un engine de consenso sencillo de integrar. El objetivo es ofrecer un stack comprensible, con RPC compatible y herramientas de despliegue simples.
Objetivos
- Facilidad de adopción
- Seguridad práctica
- Escalabilidad gradual
Componentes
- Core:
Blockchain,Block,ChainStorage - Consenso:
ConsensusEngine,ValidatorSet - P2P:
p2p.php,PeerManager,NodeClient
Estado
- Testnet estable
- Licencias privadas para nodos
- Documentación viva
Arquitectura
La arquitectura se organiza en capas, separando responsabilidades y permitiendo reemplazos/optimizaciones sin romper contratos internos.
Instalación
Requisitos
- PHP 8.1 con
curlyjson - Extensión
openssl(firmas y TLS) - Acceso a CLI para ejecutar php
Estructura recomendada
bloquelon/
core/
Blockchain.php
Block.php
ChainStorage.php
consensus/
ConsensusEngine.php
ValidatorSet.php
AttestationManager.php
lib/
PeerManager.php
NodeClient.php
data/
peers.json
rpcserver.php
p2p.php
config.php
Configuración
Ejemplo de config.php optimizado para testnet PoS:
<?php
const BLOQUELON_CONFIG = [
'network_id' => 'bloquelon-testnet',
'block_time' => 5,
'gas_limit' => 20_000_000,
'auto_scaling' => true,
'p2p_token' => 'bloquelon-network-key',
'self_url' => 'http://127.0.0.1:8080',
'authorized_peers' => [
'http://127.0.0.1:8080'
]
];
p2p_token y cualquier clave fuera del repositorio si vas a publicar el código.Ejecutar un Nodo
Desarrollo local
php -S 127.0.0.1:8080 -t ./
Usa 127.0.0.1 para evitar exposición involuntaria.
Prueba entre 2 nodos
// Nodo A (local): aade IP pública del Nodo B en data/peers.json
php -S 0.0.0.0:8080 -t ./
// Nodo B (remoto): aade IP pública del Nodo A
php -S 0.0.0.0:8080 -t ./
Al forjar un bloque, el nodo llamará a NodeClient::broadcast() p2p.php del peer.
RPC API
Bloquelon expone un RPC JSON sencillo. Todas las solicitudes usan Content-Type: application/json y siguen el estándar JSONRPC 2.0 cuando aplica.
| Método | Parámetros | Respuesta |
|---|---|---|
getChainInfo | { networkId, currentHeight, peers } | |
getBlockByHash | { hash } | { index, hash, parentHash, txs, timestamp } |
getLatestBlock | Bloque completo | |
sendRawTransaction | { rawTx } | { txHash } |
minePending | { newBlockHash } |
curl -s http://localhost:8080/rpcserver.php \
-H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0",
"method":"getChainInfo",
"params":{},
"id":1
}'
Protocolo P2P
La mensajería P2P se realiza vía POST /p2p.php con el token compartido. Mensajes soportados:
| type | payload | acción |
|---|---|---|
HELLO | { sender } | Registra el peer si está autorizado. |
NEW_BLOCK | { block } | Valida y aade el bloque a la cadena. |
PING | Respuesta 200 OK. |
// Ejemplo de envío desde NodeClient
POST /p2p.php
{
"type":"NEW_BLOCK",
"sender":"http://127.0.0.1:8080",
"token":"bloquelon-network-key",
"data": { "block": { /* ... */ } }
}
Seguridad
- Limita el RPC con lista blanca de IPs o capa Nginx.
- Usa HTTPS (Lets Encrypt) o túneles SSH para pruebas remotas.
- Token P2P obligatorio y validación de bloques exhaustiva.
- Evita exponer
php -Sen Internet sin controles. - Registra y expulsa peers con comportamiento inválido.
Licencias & Planes
Community
- Testnet
- Sin SLA
- Uso educativo
Pro
- Nodos licenciados
- Soporte prioritario
- Herramientas de monitoreo
Enterprise
- Red permissionada
- Integración onprem
- Consultoría y SLAs
Operación & Monitoreo
Recomendado desplegar detrás de Nginx + PHPFPM. Ejemplo mínimo:
server {
listen 443 ssl;
server_name rpc.bloquelon.io;
ssl_certificate /etc/letsencrypt/live/rpc.bloquelon.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/rpc.bloquelon.io/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Monitorea logs en data/p2p.log y data/peers.log. Configura métricas (Prometheus/JSON) según tus necesidades.
Contribuir
- Abre un issue con propuesta clara.
- Haz fork y crea rama
feature/.... - Incluye pruebas o ejemplos reproducibles.
- Cumple guía de estilo y firmas de commits si aplica.
FAQ
Puedo correr Bloquelon en hosting compartido?
Sí para demos (solo HTTP), pero para producción usa VPS con Nginx + PHPFPM y HTTPS.
Cómo conecto un segundo nodo?
Aade su URL en data/peers.json, comparte el token P2P y asegura reachability del puerto.
Existe explorador de bloques?
Se sugiere un subdominio scan.bloquelon.io donde publicar bloquelonscan.php y vistas relacionadas.
Changelog
- 0.9.0 Documentación inicial, API RPC básica, P2P con token, guía de despliegue.
- 0.8.x Refactor de consenso y almacenamiento.