Saltearse al contenido

Operaciones del Pool de Staking

Este documento describe cómo realizar operaciones del pool de staking. Nota que un pool de staking solo puede aceptar stake del propietario del pool de stake. Solo puedes hacer stake cuando cumples el requisito mínimo de staking.

Ver también las instrucciones relacionadas de Operaciones del Pool de Delegación para aceptar stake de múltiples delegadores para alcanzar el requisito mínimo de staking.

Antes de inicializar un pool de staking, asegúrate de que haya una cuenta propietaria existente con 1 Millón APT.

  1. Inicializa el CLI de Aptos con una clave privada de una cuenta existente, como una billetera, o crea una nueva cuenta.
Ventana de terminal
aptos init --profile mainnet-owner \
--network mainnet

Puedes ya sea ingresar la clave privada de una billetera existente, o crear una nueva dirección de billetera.

  1. Ejecuta el siguiente comando para inicializar el pool de staking:
Ventana de terminal
aptos stake create-staking-contract \
--operator <operator-address> \
--voter <voter-address> \
--amount 100000000000000 \
--commission-percentage 10 \
--profile mainnet-owner
  1. Una vez que el pool de staking haya sido inicializado, puedes proceder a conectarte a la Red de Aptos.

Realizar operaciones del propietario del pool

Sección titulada «Realizar operaciones del propietario del pool»
Ventana de terminal
aptos account transfer \
--account <operator-address> \
--amount <amount> \
--profile mainnet-owner
Ventana de terminal
aptos stake set-operator \
--operator-address <new-operator-address> \
--profile mainnet-owner
Ventana de terminal
aptos stake set-delegated-voter \
--voter-address <new-voter-address> \
--profile mainnet-owner
Ventana de terminal
aptos stake add-stake \
--amount <amount> \
--profile mainnet-owner
Ventana de terminal
aptos stake increase-lockup --profile mainnet-owner
Ventana de terminal
aptos stake unlock-stake \
--amount <amount> \
--profile mainnet-owner
Ventana de terminal
aptos stake withdraw-stake \
--amount <amount> \
--profile mainnet-owner
Ventana de terminal
aptos move run --function-id 0x1::staking_contract::update_commission \
--args address:<operator_address> u64:<commission_percentage> \
--profile mainnet-owner

Establecer direcciones beneficiarias para operadores

Sección titulada «Establecer direcciones beneficiarias para operadores»

Los operadores del pool de staking pueden establecer direcciones beneficiarias para recibir la comisión del operador ganada por el pool de staking.

  • Las direcciones beneficiarias pueden establecerse por el operador usando el siguiente comando:

    Ventana de terminal
    aptos move run --profile mainnet_operator \
    --function-id 0x1::staking_contract::set_beneficiary_for_operator \
    --args address:<new_beneficiary_address>
  • Para ver la dirección beneficiaria establecida para el operador, usa el siguiente comando:

    Ventana de terminal
    aptos move view --url <REST API for the network> \
    --function-id 0x1::staking_contract::beneficiary_for_operator \
    --args address:<operator_address>

Cualquier recompensa de comisión no pagada existente será pagada al nuevo beneficiario. Para asegurar el pago al beneficiario actual, uno debería primero llamar distribute antes de cambiar el beneficiario. En caso de que un operador opere múltiples pools de staking, el operador puede establecer un beneficiario para todos los pools de staking, no uno separado para cada pool.

Una vez que la dirección beneficiaria esté establecida, ya sea el operador o el beneficiario puede solicitar la comisión del operador por request_commission.

Para verificar los detalles de tu pool de stake, ejecuta el comando CLI abajo con la opción get-stake-pool proporcionando los campos --owner-address y --url.

El comando abajo es para una dirección propietaria de ejemplo e7be097a90c18f6bdd53efe0e74bf34393cac2f0ae941523ea196a47b6859edb.

Ventana de terminal
aptos node get-stake-pool \
--owner-address e7be097a90c18f6bdd53efe0e74bf34393cac2f0ae941523ea196a47b6859edb \
--profile mainnet-operator

Salida de ejemplo:

{
"Result": [
{
"state": "Active",
"pool_address": "25c3482850a188d8aa6edc5751846e1226a27863643f5ebc52be4f7d822264e3",
"operator_address": "3bec5a529b023449dfc86e9a6b5b51bf75cec4a62bf21c15bbbef08a75f7038f",
"voter_address": "3bec5a529b023449dfc86e9a6b5b51bf75cec4a62bf21c15bbbef08a75f7038f",
"pool_type": "StakingContract",
"total_stake": 100525929489123,
"commission_percentage": 10,
"commission_not_yet_unlocked": 15949746439,
"lockup_expiration_utc_time": "2022-10-07T07:12:55Z",
"consensus_public_key": "0xb3a7ac1491b0165f08f136c2b02739846b6610084984d5298c2983c4f8e5553284bffca2e3fe2b99167da82717501732",
"validator_network_addresses": [
"/ip4/35.91.145.164/tcp/6180/noise-ik/0xeddf05470520af91b847f353dd804a04399e1213d130a4260e813527f2c49262/handshake/0"
],
"fullnode_network_addresses": [],
"epoch_info": {
"epoch": 594,
"epoch_interval_secs": 3600,
"current_epoch_start_time": {
"unix_time": 1665087178789891,
"utc_time": "2022-10-06T20:12:58.789891Z"
},
"next_epoch_start_time": {
"unix_time": 1665090778789891,
"utc_time": "2022-10-06T21:12:58.789891Z"
}
}
}
]
}

state

  • “Active”: El validator ya está en el conjunto de validators y proponiendo.
  • “Pending_active”: El validator será agregado al conjunto de validators en la siguiente época. **No trates de unirte al conjunto de validators otra vez antes de la llegada de la siguiente época, o recibirás un error. **

pool_address

  • Usa esta “pool_address” (no la dirección del operador) en tu archivo validator.yaml. Si por error usaste la dirección del operador, recibirás el mensaje: “Validator not in validator set”.

commission_percentage

  • Esto solo puede establecerse por el propietario del pool de stake. El operador recibe el “commission_percentage” de las recompensas de staking generadas. Si solicitas la comisión (puedes hacerlo ejecutando el comando aptos stake request-commission), entonces al final del lockup_expiration_utc_time la parte de comisión de las recompensas irá a la dirección del operador mientras el resto permanecerá en el pool de stake y pertenecerá al propietario. Aquí “la parte de comisión de las recompensas” significa el valor de commission_not_yet_unlocked.

    Por ejemplo, en un escenario con un lock-up de un mes, llamas aptos stake request-commission cada mes. Esto pagará la comisión que se acumuló durante el mes anterior pero solo cuando se desbloquee al final del mes anterior. Independientemente de cuán seguido ejecutes aptos stake request-commission durante el mes, la comisión solo se paga al completarse lockup_expiration_utc_time.

commission_not_yet_unlocked

  • La cantidad de comisión (cantidad de APT) que aún no está desbloqueada. Se desbloqueará en el lockup_expiration_utc_time. Esta es la cantidad total de comisión disponible para el operador, es decir, las recompensas de staking solo para el operador. Esto no incluye las recompensas de staking para el propietario.

lockup_expiration_utc_time

  • La fecha cuando la comisión se desbloqueará. Sin embargo, esta comisión desbloqueada no será auto-desembolsada. Solo se desembolsará cuando el comando aptos stake request-commission sea llamado otra vez.

epoch_info

  • Usa Epoch Converter o una herramienta similar para convertir el unix_time en tiempo legible por humanos.

Ya sea un propietario, un operador o el beneficiario del operador puede solicitar comisión. Debes solicitar comisión dos veces, una vez antes del final del período de lockup y una segunda vez después de que el período de lockup termine, es decir, al final de lockup_expiration_utc_time, ejecutando el comando aptos stake request-commission. Asegúrate de proporcionar las direcciones del operador y del propietario. Ver un comando de ejemplo abajo:

Ventana de terminal
aptos stake request-commission \
--operator-address 0x3bec5a529b023449dfc86e9a6b5b51bf75cec4a62bf21c15bbbef08a75f7038f \
--owner-address 0xe7be097a90c18f6bdd53efe0e74bf34393cac2f0ae941523ea196a47b6859edb \
--profile mainnet-operator

Cuando ejecutes el comando aptos stake request-commission antes del final de la expiración del lockup, el comando iniciará el desbloqueo para cualquier comisión bloqueada ganada hasta ese momento en el tiempo. La comisión permanecerá en pending_inactive hasta el final del período de lockup, continuará ganando recompensas hasta que el período de lockup expire. La comisión no será retirable hasta después del final del período de lockup, cuando aptos stake request-commission sea llamado una segunda vez.

Ver ejemplo abajo:

Mes 1 Día 29, llamas el comando, iniciaría desbloqueo para 29 días de comisión.

Mes 2, Día 29, si llamas el comando otra vez, desembolsaría la comisión completamente desbloqueada del mes anterior (29 días de valor), e iniciaría desbloqueo de comisión para Mes 1 Día 30 + Mes 2 Día 1-29 (30 días de valor).

Mes 3, Día 29, si llamas la comisión otra vez, 30 días de comisión serían desembolsados, y un nuevo lote de comisión iniciaría desbloqueo.

Puedes llamar el comando múltiples veces, y la cantidad que recibes depende del día cuando solicitaste desbloqueo de comisión previamente.

La comisión se desbloquea cuando se llama request-commission, el staker desbloquea stake, o el staker cambia operador.

Para ver tu rendimiento de validator en las épocas actuales y pasadas y las recompensas ganadas, ejecuta el comando abajo. La salida mostrará el rendimiento del validator en propuestas de bloques, y en votación de gobernanza y propuestas de gobernanza. Se usan valores por defecto en el comando abajo. Escribe aptos node get-performance --help para ver valores por defecto usados.

Ventana de terminal
aptos node get-performance \
--pool-address <pool address> \
--profile mainnet-operator

Salida de ejemplo:

{
"Result": {
"current_epoch_successful_proposals": 56,
"current_epoch_failed_proposals": 0,
"previous_epoch_rewards": [
"12312716242",
"12272043711",
"12312912674",
"12313011054",
"12313109435",
"12180092056",
"12313305136",
"12313403519",
"12313501903",
"12313600288"
],
"epoch_info": {
"epoch": 68,
"epoch_interval": 3600000000,
"last_epoch_start_time": {
"unix_time": 1665074662417326,
"utc_time": "2022-10-06T16:44:22.417326Z",
"local_time": "Thu Oct 6 16:44:22 2022"
},
"next_epoch_start_time": {
"unix_time": 1665078262417326,
"utc_time": "2022-10-06T17:44:22.417326Z",
"local_time": "Thu Oct 6 17:44:22 2022"
}
}
}
}

current_epoch_successful_proposals

previous_epoch_rewards

  • Una lista ordenada de recompensas ganadas (cantidades APT) para las 10 épocas anteriores, comenzando con la 10 época en el pasado. En el ejemplo anterior, una recompensa de 12312716242 APT fue ganada hace 10 épocas y una recompensa de 12313600288 APT fue ganada en la época más reciente. Si una recompensa es 0 para cualquier época, entonces:
    • Ya sea el validator no era parte del conjunto de validators en esa época (podría haber estado en estado de validator inactivo o pending_active), o
    • El validator perdió todas las propuestas de líder.

Verificar el rendimiento para todas las épocas

Sección titulada «Verificar el rendimiento para todas las épocas»

Para verificar el rendimiento de todas las épocas desde el génesis, ejecuta el comando abajo. Puedes filtrar los resultados para tu dirección de pool con grep, como se muestra abajo:

Ventana de terminal
aptos node analyze-validator-performance \
--analyze-mode detailed-epoch-table \
--profile mainnet-operator \
--start-epoch 0 | grep <pool address>

DistributeEvent se emite cuando hay una transferencia de staking_contract al operador o staker (propietario). Las recompensas pueden rastrearse ya sea escuchando a DistributeEvent o usando la función View para llamar staking_contract_amounts. Esto devolverá accumulated_rewards y commission_amount.