v10.1.0 · C++17

Blockchain
sin compromisos
de seguridad

VectraNetwork es una blockchain P2P construida con criptografía de curva elíptica, cifrado de mensajes ECIES y protección activa contra ataques. Diseñada para la comunicación segura.

0 scrypt N (KDF)
0 bits clave AES
0 módulos de seguridad

Una red diseñada para quienes no dan la seguridad por sentada

VectraNetwork nació como respuesta a la eliminación del anonimato en internet. Se plantean nuevas formas de eliminar el anonimato de las redes sociales, formas de control masivo que, aunque vienen disfrazadas de buenas acciones, la realidad es que no sirven para otra cosa que no sea tener a la población completamente bajo control. El cifrado de punto a punto deja de ser útil cuando la empresa se ve forzada por los gobiernos a entregar los datos guardados en el propio dispositivo. Aquí es cuando entra en juego la descentralización. Concretamente hablamos de blockchain basada en PoW (Proof of Work), similar a los incios de bitcoin.

El proyecto está escrito en C++17, sin frameworks externos innecesarios, dependiendo únicamente de OpenSSL y LevelDB.

Algoritmo de firma ECDSA
KDF wallet scrypt RFC 7914
Cifrado mensajes ECIES + AES-256-GCM
Nonce firma RFC 6979
Hash dirección RIPEMD-160
Formato dirección Base58Check
Modelo UTXO Bitcoin-style
Lenguaje C++17 / OpenSSL

Nueve capas de protección.

Vectra está pensada para priorizar la seguridad frente a distintos ataques y por eso tratamos diversos frentes a la vez. No solo priorizamos el cifrado de los mensajes, sino que también nos aseguramos de que tu información de la wallet y de la blockchain en general esté a salvo.

01

scrypt KDF

Los wallets se cifran. Cada intento de fuerza bruta requiere ~64 MiB de RAM, lo que es equivalente a que una GPU RTX 4090 pueda probar solo ~128 contraseñas en paralelo, frente a miles de millones con SHA-256 puro.

RFC 7914
02

Validación de puntos EC

Toda clave pública recibida pasa por una triple validación. Previene ataques de subgrupo y puntos inválidos antes de cualquier operación ECDH.

secp256k1
03

RFC 6979

Las firmas ECDSA usan HMAC-DRBG para generar el nonce k de forma determinista a partir del mensaje y la clave privada. Elimina la posibilidad de filtrar la clave privada por reutilización de nonce aleatorio débil.

RFC 6979 ECDSA
04

AES-256-GCM con IV de 12 bytes

Los mensajes cifrados usan un nonce de 12 bytes (RFC 5116) generado por CSPRNG. El tag GCM de 16 bytes garantiza integridad.

RFC 5116 AES-256 ECIES
05

Autenticación RPC

El servidor JSON-RPC soporta HTTP Basic Auth con comparación en tiempo constante.

ACL
06

TLS en RPC

El RPC puede configurarse con certificado TLS propio. Se inicializa con SSL_CTX, se fuerza TLS 1.2 mínimo y se rechaza cualquier conexión que no supere el handshake.

TLS 1.2+ OpenSSL
07

Puntuación de reputación de peers

Cada peer acumula puntos de "misbehavior": −10 por transacción inválida, −20 por mensaje malformado. Al llegar a 100 puntos el peer queda baneado 24 horas.

anti-spam
08

Protección eclipse (/24)

Máximo 3 conexiones por subred /24. Las IPs privadas (RFC 1918) están exentas para no perjudicar redes locales.

eclipse
09

Versionado del formato de mensajes

El "wire format" incluye un byte de versión al inicio de cada mensaje cifrado. Permite migrar algoritmos en el futuro sin romper la compatibilidad con nodos anteriores.

backward-compat

Arquitectura ordenada.

Sistema de recompensas

Cada bloque minado sigue un ciclo preciso de distribución económica. Las comisiones de red no van íntegras al minero: la mitad se quema permanentemente y la otra mitad se acumula en una billetera autónoma para repartirse mensualmente entre quienes sostienen la red.

Bloque minado
Recompensa de bloque 100% al minero -> 8 VCT inicial con halvings
Comisiones de red Suma de todas las fees del bloque
50% quemado Eliminado permanentemente de la oferta
50% → Treasury Billetera autónoma sin clave privada
Reparto mensual proporcional Cada 259 200 bloques. Proporcional a los bloques minados. Ejecutado por consenso.

VectraNetwork sigue el modelo UTXO de Bitcoin: cada salida de transacción se consume exactamente una vez. El conjunto de UTXOs se mantiene en LevelDB para un acceso eficiente. Los scripts de desbloqueo son simples y sin contratos complejos que amplíen los vectores de ataque.

Cada bloque referencia al anterior mediante su hash doble SHA-256, formando la cadena inmutable. La validación de consenso rechaza bloques con transacciones que gasten UTXOs ya consumidos, con firmas inválidas o con scripts malformados.

El mempool gestiona las transacciones pendientes con límites de tamaño y validación previa antes de propagar a la red. Las transacciones con mensajes cifrados ECIES se validan de la misma forma que las normales.

Modelo UTXO Cada output se gasta exactamente una vez. Sin estados mutables.
Hash de bloque SHA-256 doble sobre el header. Inmutabilidad encadenada.
Merkle Tree Raíz Merkle de transacciones en cada bloque. SPV-compatible.
Scripts Locking/unlocking scripts sin complejidad innecesaria.
Persistencia LevelDB para UTXOs y bloques.
Mensajes ECIES Mensajes cifrados embebidos en transacciones.

La red no confía.
Verifica.

Conexiones bidireccionales

Tanto entrantes como salientes pasan por el mismo pipeline de validación. No hay tratamiento preferencial por origen de conexión.

Rate limiting por IP

Protección contra flood de conexiones. Límite configurable de intentos por periodo antes de descartar la solicitud.

Propagación selectiva

Las transacciones solo se propagan tras validación completa. Un peer que envía datos inválidos acumula misbehavior points inmediatamente.

Descubrimiento de peers

Lista de peers persistida en disco. Reconexión automática a peers conocidos tras el reinicio del nodo.

Ban por comportamiento

Los peers baneados quedan registrados con un timestamp. Al expirar las 24 horas pueden reconectarse. El historial ayuda a detectar atacantes persistentes.

Aislamiento de subredes

Máximo 3 conexiones por subred /24. Un atacante Sybil con IPs en el mismo rango no puede saturar el slot de peers.

Archivos cifrados.
P2P directo

VNFT (Vectras File Transfer Protocol) es un protocolo de capa superior construido sobre la blockchain de VectraNetwork. Permite transferir archivos de cualquier tamaño de forma completamente cifrada entre dos peers, usando la blockchain únicamente como canal de señalización inicial y la conexión TCP directa para el transporte de datos.

Flujo del protocolo
01
Fragmentar El archivo se divide en chunks de 64 KiB. Se genera una clave de archivo aleatoria de 256 bits con CSPRNG.
02
Cifrar chunks Cada chunk se cifra independientemente con AES-256-GCM. El nonce se deriva deterministamente por índice. Se calcula el hash SHA-256 de cada chunk cifrado.
03
Encapsular clave La clave de archivo se cifra con la clave pública del destinatario mediante ECIES (ECDH secp256k1 + HKDF-SHA256 + AES-256-GCM). Solo el receptor puede descifrarla.
04
Control TX on-chain El emisor publica una transacción de control en la blockchain con la clave cifrada, la raíz Merkle de los chunks, el nombre del archivo, la IP:puerto del servidor y el ID de transferencia único.
05
Detectar + conectar El receptor escanea su historial de wallet en la blockchain buscando transacciones de control dirigidas a su dirección. Al encontrar una, se conecta directamente al emisor por TCP (puerto 42080) y negocia el ECIES para descifrar la clave de archivo.
06
Streaming P2P + verificación Los chunks se transfieren directamente emisor → receptor. Cada chunk se verifica contra el árbol Merkle y se descifra con AES-256-GCM. El archivo se reconstruye solo si la raíz Merkle coincide con la registrada on-chain.
Stack criptográfico
Cifrado de chunks AES-256-GCM Autenticado. Nonce derivado por índice. Tag GCM de 16B garantiza integridad por chunk.
Encapsulación de clave ECIES / secp256k1 ECDH efímero + HKDF-SHA256 para derivar la clave de sesión. Clave de archivo cifrada con la clave EC del destinatario.
Integridad del conjunto Merkle Tree (SHA-256) Árbol Merkle sobre los hashes SHA-256 de cada chunk cifrado. La raíz se publica on-chain y se verifica antes de reconstruir el archivo.
Señalización Blockchain VCT La TX de control es inmutable e indexada en la cadena. No hay servidor central. El emisor no conoce la IP del receptor hasta la conexión.
Transporte de datos TCP P2P directo Conexión directa receptor → emisor en puerto 42080. Los datos viajan cifrados end-to-end; el nodo de la blockchain no ve el contenido.
Tamaño de chunk 64 KiB Sin límite de tamaño de archivo. Tarifa: tarifa base + 0.010 VCT/chunk. Expira en 7 días si no se descarga.
Garantías de seguridad
Confidencialidad: solo el receptor con su clave privada puede descifrar el archivo
Integridad: modificar cualquier chunk invalida la verificación Merkle
No repudio: la TX de control está firmada con la clave privada del emisor
Sin servidor central: el relay no existe; ningún tercero puede interceptar o bloquear la transferencia
▲ Emisor
                  
# Send a file to another peer:
vectra-wallet vnft send \
--to VCT1xzABCDEF... \
--file /your/file/route/file.zip

                      
# Or by using Wallet CLI:
#1. Select 13 option (Send File).
#2. Writte the public wallet address.
#3. Writte the file location (e.g: ./file.dat).
#4. Confirm the transaction.
                      
                  
                
▼ Receptor
# Scan for incoming transactions
vectra-wallet vnft list

# Descargar una transferencia detectada
vectra-wallet vnft receive \
  --id <transfer-id>


# Or by using Wallet CLI:
#1. Select 14 option (File Transfers).
#2. Select "Search for incoming transfers".
#3. Select "Download incoming transfer".
#4. Confirm IP and port and donwload.
                      

Fácil de desplegar.

El nodo completo (vectrad) integra blockchain, mempool, red P2P, servidor RPC y gestión de wallet en un único binario sin dependencias de runtime más allá de OpenSSL y LevelDB.

La configuración se gestiona desde vectra.conf y soporta credenciales RPC, TLS, puertos personalizados y parámetros de red que se pueden escribir mediante argumentos.

# Credenciales RPC
rpcuser=admin
rpcpassword=su-contraseña-aleatoria

# TLS para el RPC
rpctlscert=/etc/vectra/rpc.crt
rpctlskey=/etc/vectra/rpc.key

# Red
maxconnections=125
port=8333
Blockchain + UTXO Set Validación completa de bloques y transacciones. LevelDB.
Mempool Cola de transacciones pendientes con validación previa.
Red P2P Gestión de peers, propagación, protección eclipse.
RPC JSON + TLS API autenticada con ACL por IP y TLS 1.2+.
Minero (vectra-miner) Proceso separado y binario independiente. Se conecta al nodo vía RPC.

Las claves privadas merecen
protección de nivel militar.

Evolución del formato de wallet

v1
SHA-256(password) Deprecated Sin sal, sin iteraciones. Solo lectura.
v2
PBKDF2-HMAC-SHA256 · 200k iter Legacy Compute-bound. Solo lectura en v9.4.1.
v3
scrypt · N=65536 · r=8 · p=1 Actual Memory-hard. ~64 MiB por intento de brute-force.
Política de desbloqueo
Long. mínima 8 chars
Política 1 letra + 1 número
Intentos 3 máx.
Back-off 2s → 4s → locked
⚠ Sin recuperación Sin la contraseña, los fondos no son recuperables. Guárdala en lugar seguro.

Características del wallet

  • Protección por contraseña al inicio Al ejecutar el wallet se solicita la contraseña antes de cargar el archivo vectra_wallet.dat. Sin la contraseña, el archivo cifrado es completamente ilegible aunque sea robado.
  • Bloqueo con back-off exponencial Máximo 3 intentos. Tras el primer fallo: 2 s de espera. Tras el segundo: 4 s. Al tercer fallo el proceso se cierra bloqueado. Esto hace inviable el brute-force en tiempo real.
  • ECIES — mensajes cifrados en transacciones El wallet puede enviar mensajes privados embebidos en transacciones. Solo el destinatario con la clave privada puede descifrarlos.
  • Agenda de contactos cifrada Direcciones y etiquetas guardadas en el archivo de wallet, protegidas por el mismo scrypt + AES-256-GCM.
  • Historial de chat P2P Los mensajes enviados y recibidos se almacenan localmente asociados a la dirección del interlocutor.
  • Secure zero en memoria Las claves y contraseñas se borran explícitamente de RAM con OPENSSL_cleanse y std::fill después de cada uso, incluyendo intentos fallidos.
  • Migración automática v1/v2 → v3 Los wallets heredados se re-cifran en el primer guardado. Sin intervención del usuario.

Mining distribuido.

vectra-miner es un binario independiente que se conecta al nodo completo vía JSON-RPC. Separa la lógica de minado del nodo para mayor modularidad. Puedes ejecutar múltiples mineros contra un mismo nodo, o apuntar a un nodo remoto.

Solicita plantillas de bloque mediante getblocktemplate, realiza la búsqueda del nonce SHA-256d en paralelo usando todos los hilos disponibles, y envía los bloques encontrados automáticamente con submitblock.

El minado de bloques hace uso de los hilos de tu CPU para que más gente pueda minar sin necesitar una tarjeta gráfica. El minado de cada bloque está establecido en un tiempo aproximado de 10 segundos para mayor fluidez de la red. Para llegar al tiempo objetivo se hace uso de un ajuste dinámico en tiempo real de la dificultad de la red.

# Node conection
rpcurl=http://127.0.0.1:8332
rpcuser=admin
rpcpassword=your-password

# Mining threads (0 = auto)
threads=0

# Your wallet public address for the reward
miningaddr=VxxxYourPublicAddress
Miner configuration
./vectra-miner \
  --rpcurl http://127.0.0.1:8332 \
  --rpcuser admin \
  --rpcpassword pass \
  --threads N (1, 2, 3, 4, N) \
  --miningaddr VxxxYourPublicAddress
  --rpcport 8332
  --rpchost 127.0.0.1
Multi-hilo nativo Reparte la búsqueda del nonce entre todos los núcleos disponibles. Configurable con --threads N.
Reconexión automática Si el nodo no está disponible, el minero reintenta la conexión con backoff exponencial. Sin pérdida de trabajo.
▄█
Estadísticas en tiempo real Muestra hash rate, bloques encontrados y dificultad actual directamente en la consola.
Sin estado local El minero no mantiene copia de la blockchain. Todo el estado lo gestiona el nodo. Binario de solo ~500 KB.
!
Recomendación Para mayor seguridad se recomienda abrir un nodo local en tu máquina, conectar el minero mediante el puerto y host rpc establecido y minar desde ahí. Es recomendable mantenter el host/port en local (127.0.0.1:8332) para disminuir los vectores de ataque.
Full Security Network

Contribuye a hacer
la red más segura

El código está en GitHub. Puedes reportar bugs, proponer mejoras, auditar el código criptográfico o ejecutar tu propio nodo. Creemos en la libertad de expresión y en una comunicación libre sin control externo. Si crees que este proyecto encaja contigo no dudes en aportar, toda sugerencia o ayuda es bienvenida.

Cómo poner en marcha
tu nodo, wallet y minero

Sigue estos pasos en orden para tener tu nodo sincronizado, tu wallet operativa y el minero funcionando en pocos minutos.

01
Descarga VectraNetwork

Elige la versión que mejor se adapte a tu sistema. La versión portable no requiere instalación: descomprime el ZIP y ejecuta directamente. La versión instalador realiza la instalación completa en el sistema.

02
Inicia el nodo (vectrad)

Abre una terminal (CMD, PowerShell o consola de comandos) en la carpeta donde has extraído o instalado VectraNetwork y ejecuta:

# Parámetros principales
./vectrad ^
  --datadir  "C:\VectraData"          # Carpeta donde se almacenará la blockchain
  --bind     0.0.0.0                   # Escucha en todas las interfaces (conexión al nodo público)
  --port     8333                      # Puerto P2P
  --rpcport  8332                      # Puerto RPC local (usado por wallet y minero)
  --loglevel info                      # Nivel de log: info | debug
  --addnode  bilbao1-node.duckdns.org:8333         # IP:puerto del nodo público al que conectarte

Consejo: Puedes agregar varios --addnode para conectarte a múltiples nodos públicos simultáneamente y acelerar la sincronización inicial.

Nodos públicos disponibles

Conecta tu nodo a cualquiera de estas direcciones mediante --addnode. Elige el más cercano a tu región para menor latencia.

Europe: Spain
bilbao1-node.duckdns.org:8333
Node Online
Europe: Amsterdam
0.0.0.0:8333
Coming soon...
America: Nueva York
0.0.0.0:8333
Coming soon...
America: São Paulo
0.0.0.0:8333
Coming soon...
Asia: Singapur
0.0.0.0:8333
Coming soon...
03
Abre la wallet (vectra-wallet)

Una vez el nodo esté en marcha y sincronizando con la red, abre la wallet CLI. Tienes dos opciones:

Windows

Doble clic en vectra-wallet.exe, o desde la terminal:

./vectra-wallet.exe
Linux / macOS

Desde la consola:

./vectra-wallet

Al arrancar, la wallet aparecerá como desconectada. Esto es normal: aún no está vinculada a tu nodo local.

04
Conecta la wallet al nodo local

En el menú principal de la wallet, selecciona la opción 7 — Sincronizar con el nodo. A continuación introduce:

IP del nodo 127.0.0.1 (localhost)
Puerto RPC 8332 (o el que hayas configurado con --rpcport)

Una vez sincronizada, la wallet cambiará su estado a conectada y podrás consultar tu saldo, enviar y recibir transacciones, y usar todas las funciones del protocolo.

05
Inicia el minero (vectra-miner)

El minero te permite obtener tokens VCT validando bloques de la red. Se conecta al nodo local vía RPC y trabaja de forma completamente independiente. Desde la terminal ejecuta:

./vectra-miner ^
  --threads     0     # Hilos (0 = automático, usa todos los núcleos)
  --miningaddr  VxxxTuDirecciónPública      # Dirección pública donde recibir la recompensa

¿Para qué minar? El minero tiene dos funciones: (1) obtener tokens VCT con los que realizar transacciones en la red, y (2) validar y confirmar las transacciones de otros usuarios minando bloques, lo que contribuye directamente a la seguridad y descentralización de VectraNetwork.