Saltar a contenido

Recompensas para Validadores

Al conectarse a DoubleZero, acepto los Términos de Uso de DoubleZero

Cómo Funciona

Los validadores que publican leader shreds en DoubleZero Edge obtienen recompensas en cada época. Antes de que se puedan pagar las recompensas, cada validador debe registrar dónde se envían las recompensas configurando una cuenta ValidatorPublisherRewards en Solana. Esa cuenta almacena:

  • el mint de recompensas — el token en el que se pagan las recompensas es 2z (a menos que se cambie manualmente)
  • el propietario de recompensas — la wallet que posee la Associated Token Account (ATA) que recibe las recompensas

El comando configure establecerá estos campos, y los pagos automáticos se realizarán época por época a partir de ese momento. Puede volver a ejecutar configure más adelante para cambiar cualquiera de los campos.

Si aún no ha completado la Configuración, la Conexión del Validador a Mainnet-Beta y la Conexión Multicast del Validador, hágalo primero.

Requisitos Previos

  • Validadores publicando leader shreds - consulte Conexión Multicast del Validador.
  • La última versión del CLI doublezero-solana: sudo apt update && sudo apt install doublezero-solana, como mínimo 0.5.6.
  • Acceso al keypair de identidad del validador, ya sea en la misma máquina o mantenido offline con la capacidad de firmar un mensaje.
  • Una pubkey de wallet de destino que será propietaria de la ATA de recompensas.

1. Configurar para Reclamar Recompensas

Ejecute configure con el keypair de identidad del validador como -k.

doublezero-solana shreds publisher-rewards configure \
    --node-id <ValidatorIdentity111111111111111111111111111> \
    --rewards-token-owner <Wallet567Identity111111111111111111111111111> \
    -k <path-to-validator-identity-keypair.json>
Ejemplo de Salida
Shred subscription - Configure Validator Publisher Rewards
Node ID:           ValidatorIdentity111111111111111111111111111
Rewards owner:     ValidatorIdentity111111111111111111111111111
Rewards mint:      J6pQQ3FAcJQeWPPGppWRb4nM8jU3wLyYbRrLh7feMfvd
Rewards ATA:       11111111111Pt3PatTj59dG5BhYuqPb9QJDUr1111111
Auth path:         direct
Configured validator publisher rewards: 41111111ntmoBTnvcKcP1g2a1111111HPoN3z5uf11111112jjzBJsr1B2JrTRff4dSGe1pdM1111111TMADi3Nz
Configured validator publisher rewards: muestra el txt que puede ver en un explorador de bloques.

Flag Descripción
--node-id Pubkey de identidad del nodo validador.
--rewards-token-owner Wallet que será propietaria de la ATA receptora.
--rewards-token-mint El token en el que se recibirán las recompensas de la wallet en 2z. Los tokens soportados también incluyen usdc y wsol.
-k Ruta al keypair de identidad del validador. En la ruta directa, la pubkey del keypair debe coincidir con --node-id o el comando devolverá un error indicando que cambie a la ruta offchain.

La ATA se inicializa automáticamente en la misma transacción si aún no existe.

Si se Devuelve un Error

Si la pubkey de -k no coincide con --node-id

El keypair del pagador de comisiones que proporcionó no es la identidad del validador. Proporcione el keypair de identidad del validador como -k, o cambie a la ruta offchain.


2. Verificar la Configuración

doublezero-solana shreds publisher-rewards show --node-id <NODE_ID>

El comando muestra el Node ID, Rewards owner, Rewards mint, la dirección ATA resuelta y el estado de la ATA. La ATA Resuelta es la dirección determinística derivada del propietario de recompensas + mint de recompensas — es donde se depositarán las recompensas en cada época.


Apéndice: Alternativa de Ruta Offchain

Tres sub-pasos: preparar, firmar, configurar.

1. Preparar el mensaje offchain

Ejecute esto en cualquier lugar — es de solo lectura y no necesita el keypair de identidad del validador. Imprime el blob hexadecimal a firmar y el slot absoluto en el que expira la firma.

doublezero-solana shreds publisher-rewards prepare-offchain-message \
    --node-id <ValidatorIdentity111111111111111111111111111> \
    --rewards-token-owner <Wallet567Identity111111111111111111111111111> \
    --valid-for 1h
Ejemplo de Salida

Hex message:    123457fc138f556a2578bdb079dc923342cc4e4a376683dc4c6cb923051e0be3
Deadline slot:  422954444

Sign with:
  solana sign-offchain-message 123457fc138f556a2578bdb079dc923342cc4e4a376683dc4c6cb923051e0be3 --keypair <validator-identity>

Then submit:
  doublezero-solana shreds publisher-rewards configure \
    --node-id ValidatorIdentity111111111111111111111111111 --rewards-token-mint J6pQQ3FAcJQeWPPGppWRb4nM8jU3wLyYbRrLh7feMfvd --rewards-token-owner Wallet567Identity111111111111111111111111111 \
    --deadline-slot 422954444 --signature <BASE58>
Flag Descripción
--node-id Pubkey de identidad del nodo validador.
--rewards-token-owner Wallet que será propietaria de la ATA receptora.
--rewards-token-mint El token en el que se recibirán las recompensas de la wallet en 2z. Los tokens soportados también incluyen usdc y wsol.
--valid-for Tiempo de vida de la firma relativo al slot actual. Acepta <n>s, <n>m, o <n>h. Por defecto: 1h.
--deadline-slot Alternativa a --valid-for: slot absoluto en el que expira la autorización. Mutuamente excluyente con --valid-for.
--json Emite JSON ({ hex, deadline_slot }) en lugar del resumen legible.

El comando imprime el mensaje de autorización codificado en hexadecimal, el slot de vencimiento resuelto y fragmentos de shell listos para ejecutar para los dos pasos siguientes.

2. Firmar el mensaje

En la máquina que contiene el keypair de identidad del validador:

solana sign-offchain-message <123457fc138f556a2578bdb079dc923342cc4e4a376683dc4c6cb923051e0be3> \
--keypair <path-to-validator-identity-keypair.json>

Esto imprime una firma en base58.

Ejemplo de Salida

SignatureTBUwGq511mPLMCEE4f5fNsmX1PQrozXBBJeCdSrcbhqSX1MwFp8NsNZbhCNMZ1kPWakjsLL9e3GUxxp

3. Enviar configure

De vuelta en la máquina con su wallet pagadora de comisiones:

doublezero-solana shreds publisher-rewards configure \
    --node-id <ValidatorIdentity111111111111111111111111111> \
    --rewards-token-owner <Wallet567Identity111111111111111111111111111> \
    --signature <SignatureTBUwGq511mPLMCEE4f5fNsmX1PQrozXBBJeCdSrcbhqSX1MwFp8NsNZbhCNMZ1kPWakjsLL9e3GUxxp> \
    --deadline-slot <DEADLINE_SLOT>

--signature y --deadline-slot deben proporcionarse juntos. Los valores deben coincidir con los producidos en los pasos 2b.i y 2b.ii.

La ATA se inicializa automáticamente en la misma transacción si aún no existe.

Ejemplo de Salida

Shred subscription - Configure Validator Publisher Rewards
Node ID:           ValidatorIdentity111111111111111111111111111
Rewards owner:     ValidatorIdentity111111111111111111111111111
Rewards mint:      J6pQQ3FAcJQeWPPGppWRb4nM8jU3wLyYbRrLh7feMfvd
Rewards ATA:       11111111111Pt3PatTj59dG5BhYuqPb9QJDUr1111111
Auth path:         offchain
Configured validator publisher rewards: 41111111ntmoBTnvcKcP1g2a1111111HPoN3z5uf11111112jjzBJsr1B2JrTRff4dSGe1pdM1111111TMADi3Nz

Nota: Si la Firma ha Expirado

Cada firma offchain tiene un slot de vencimiento. Si pasa demasiado tiempo entre prepare-offchain-message y configure, vuelva a ejecutar prepare-offchain-message, firme de nuevo y reenvíe. La validez por defecto es de 1 hora — extiéndala con --valid-for 4h o similar si necesita más tiempo para un flujo de firma offline.