ZYCORD documentación
Español

Minería

Proof of work con RandomX, en el procesador que ya tienes en el ordenador. Sin granja de ASIC con la que competir y sin premine — las monedas vienen de la minería y de ningún otro sitio.

Todo lo que hay#

# A payout address. The node never sees the key behind it.
zcd wallet new --out miner.json

# Mine to it.
zycordd --testnet --dir ./testnet \
  --mine --payout $(zcd wallet address --key miner.json)

En la testnet pública y en mainnet esos son los binarios -randomx — zcd-randomx y zycordd-randomx. Un binario compilado sin la etiqueta se niega a arrancar en lugar de recurrir al motor de desarrollo. Véase Instalación.

Arráncalo cuando quieras#

Un nodo arrancado antes de que corresponda el primer bloque de su red no mina de forma anticipada y no necesita volver a arrancarse a la hora en punto. Se niega a construir un bloque cuya marca de tiempo su propio reloj no ha alcanzado, espera, y empieza por su cuenta. Lo dice mientras espera, con la hora que está esperando y cuánto queda:

waiting to mine: the next block cannot be dated before 2026-10-01T00:00:01Z
(unix 1790812801), and this node's clock reads 2026-09-30T20:12:31Z - 3h47m30s
to wait. Leave this running: mining starts on its own and there is nothing to
restart or reconfigure.

Eso es una negativa a minar, no una negativa a funcionar: el nodo se empareja, sincroniza y sirve su RPC todo el tiempo. El mensaje se repite cada diez minutos para que una espera larga no parezca un bloqueo.

Si nunca deja de decir esto, tu reloj está mal

La espera se calcula contra el reloj de esta máquina, así que un reloj atrasado días espera días. Compruébalo antes que ninguna otra cosa.

Esa negativa es también la razón por la que es seguro publicar una hora de arranque siquiera. Sin ella el minero fechaba su cabecera hacia adelante hasta el suelo mediano, que antes de la génesis es el propio genesis_time — así que un arranque anticipado producía una cadena privada que nadie más podía juzgar y, como la regla de dificultad mide los tiempos de resolución declarados, una cuyo objetivo se endurecía en cada bloque contra intervalos que no tenían nada que ver con el tiempo real transcurrido. Nadie tenía que ser deshonesto para eso; es lo que hacía dejarlo funcionando de noche.

La dirección de pago debe ser persistente#

Debe ser una dirección persistente (0x02) — zcd wallet address imprime una por defecto — y zycordd rechaza cualquier otra en lugar de avisar. El nodo nunca ve la clave que la controla, y no podría gastar la recompensa aunque quisiera.

Por qué una dirección de pago de un solo uso pierde dinero en silencio

Un pago a una dirección de un solo uso (0x01) mina correctamente hasta que gastas desde ella una vez. Ese cargo marca la dirección como gastada para siempre, y el fold quema toda recompensa en maduración dirigida a ella desde ese mismo bloque en adelante — el anillo de madurez rota después de que aterricen los certificados del bloque, así que el bloque que lleva el gasto ya es el primer bloque que pierde dinero, y lo que quede de tus últimos coinbase_maturity bloques todavía en el anillo se va con él.

Nada da error. El único rastro está en la propia línea de bloque de ese nodo: matured=0, que es también lo que imprime una ranura vacía corriente del anillo, y un burned= que ha absorbido en silencio toda la parte del productor junto a las comisiones base y de omisión que informa normalmente. Ninguno de los dos campos dice "coinbase". Una dirección persistente no puede entrar nunca en el registro de gastadas, así que el fallo se elimina en lugar de acotarse — véase la regla 3 del monedero.

Madurez del coinbase#

Las recompensas maduran tras coinbase_maturity bloques — 100 tanto en mainnet como en la testnet pública. Hasta entonces son visibles en el estado e ingastables, que es lo que financia los primeros depósitos en una cadena sin premine: durante aproximadamente los primeros cien bloques, solo los mineros pueden transaccionar.

Mainnet no tiene faucet y no lo tendrá, así que en mainnet esa rampa es toda la distribución: minar para jugar. La testnet pública tiene un faucet, financiado con minería como todo lo demás en ella, porque una red cuyas monedas no valen nada no pierde nada por dejar que alguien ensaye un monedero antes de ensayar un minero.

Lo que cuesta ejecutarlo#

La función de trabajo es un parámetro de consenso, no un ajuste. zcd params la imprime:

proof of work    randomx-v1 (re-keyed every 2048 blocks, 64-block lag)

Memoria#

Verificar necesita unos 256 MiB por época de clave retenida, y la tabla retiene dos para que una reorganización que cruce un límite de clave no reconstruya una por bloque. Presupuesta más que esa tabla, porque la tabla no es la cota. Una caché es residente desde el momento en que se reserva y el llenado con Argon2 que la hace cara viene después — así que hasta dos más están vivas mientras se construyen — y una entrada desalojada mientras algo sigue usándola retiene todo lo que tiene hasta que ese usuario la suelta, que es lo que hace un minero durante el llenado de un conjunto de datos.

RolPresupuestoPor qué
Nodo verificador~1 GiB para el motorEl pico de caché contra la tabla de dos entradas se midió en 1280 MiB con ambos efectos a la vez — no los 512 MiB que sugiere la tabla.
Nodo minero~3,3 GiBAdemás reserva el conjunto de datos de ~2 GiB, y es el caso que retiene a un prestatario durante el relleno.

Una máquina que puede verificar con holgura no necesariamente puede minar.

Hilos#

--mine-threads vale por defecto uno por núcleo. No cambia nada sobre la validez; es la velocidad a la que este nodo busca una solución.

Qué ocurre en un cambio de clave#

La función de trabajo se vuelve a clavar cada randomx_key_interval bloques. Un nodo minero reconstruye entonces el conjunto de datos de ~2 GiB y deja de minar mientras lo hace — del orden de diez segundos, según la máquina; mide el tuyo desde el primer límite en el registro.

Sigue verificando durante todo ese tiempo, y una reconstrucción no puede atascarlo: una cabecera de cualquier época de clave distinta de la que se está minando se verifica sobre la caché de 256 MiB de esa época, que el conjunto de datos no toca. Las dos calculan resúmenes idénticos, así que la única diferencia que introduce una reconstrucción en la verificación es la velocidad. La caché de la época siguiente se precalienta durante los últimos randomx_key_lag bloques de la época.

Redrandomx_key_intervalPausa de minería, aproximada
mainnet2048 bloquesuna cada ~17 horas
testnet pública512 bloquesuna cada ~4 horas

El intervalo más corto de la testnet es deliberado: ensayar ese límite más a menudo es parte de lo que la red existe para medir. Construir el conjunto de datos de la época siguiente por adelantado es posible — la clave viene de la altura, así que se conoce mucho antes del límite — y deliberadamente no se hace: significaría retener dos de ellos, 4 GiB, para ahorrar una pausa que le cuesta a un minero unos segundos al día.

Detener un nodo minero#

SIGTERM (o Ctrl-C) lo detiene, y lo detiene sin demora: una señal alcanza todos los bucles, no solo aquel que resulte estar esperando en el canal.

Una parada que cae durante un cambio de clave espera a que termine el llenado del conjunto de datos — el motor no liberará un búfer de ~2 GiB mientras las llamadas de hash sigan leyéndolo, lo cual es un uso después de liberar en C que ninguna herramienta de Go informaría. Es una parada que espera a un evento fijo en lugar de competir con él: medido a lo largo de diez ejecuciones, el instante de salida no se movió por muy pronto que llegara la señal, mientras que la espera se redujo de 4,5 s a 0,7 s, sin ningún SIGSEGV.

Así que presupuesta un tiempo de espera de parada superior al tiempo de llenado de tu máquina. Un segundo SIGTERM no espera — el primero devuelve la señal al sistema operativo, así que pulsar Ctrl-C otra vez durante esa pausa mata el proceso de inmediato.

Pools, y por qué no hay ninguna#

No existe ninguna en el lanzamiento y ninguna es oficial. El nodo mina en solitario nada más sacarlo de la caja, y con la dificultad de la génesis esa es la forma sensata de entrar. Si aparecen pools son terceros; aplica el escepticismo que aplicarías en cualquier otro sitio.

Botnets, nombradas en lugar de negadas#

La minería con CPU las invita. Toda moneda minable con CPU las ha combatido y este proyecto no espera ser la excepción. El intercambio se acepta con los ojos abiertos: una distribución sesgada por botnets sigue siendo más amplia que una decidida en una venta, y mantener competitivo el portátil que ya tienes es la razón entera por la que existe RandomX.

Verlo funcionar#

El explorador de testnet muestra cada bloque y cada certificado, incluida la página que ningún explorador de otra cadena puede mostrar: si cada certificado se aplicó, o se omitió y se cobró, y qué read declarado dejó de cumplirse. Tu propio nodo responde a las mismas preguntas en /status, /head y /metrics — véase la superficie de solo lectura.