Propuesta de mejora de Qtum 25 — El camino hacia el staking fuera de línea — Parte 2

Recientemente hablé con el equipo de desarrollo de Qtum que está trabajando arduamente en el diseño de staking fuera de línea, y a partir de sus comentarios, se creó el QIP-25 para el staking fuera de línea. Las propuestas de mejora de Qtum (QIP) son un repositorio en Qtum GitHub para propuestas de nuevas características y funciones para Qtum. Los QIP pueden proponer mejoras en la interfaz de usuario, cambios en los parámetros técnicos, nuevos comandos y códigos de operación, etc.
TL; DR: los QIP proponen mejoras para Qtum, y QIP-25 describe la motivación y cómo podría funcionar el staking sin conexión. QIP-25 propone el staking desde direcciones sin conexión, y este blog explica cómo podría funcionar.
Este QIP es el 25 hasta ahora y propone el staking fuera de línea. Tenga en cuenta que este QIP incorpora discusiones de diseño con los desarrolladores e incluye algunas sugerencias adicionales para el staking fuera de línea, que pueden o no implementarse completamente en el lanzamiento
El staking sin conexión es una de las mejoras más solicitadas por la comunidad Qtum. La entrega de staking fuera de línea requerirá cambios en el protocolo de bloqueo / transacción y cambios de consenso, lo que significa una bifurcación difícil. El QIP completo se describe a continuación, con el original en GitHub en la Referencia 1.

Staking sin conexión QIP-25
Resumen
QIP-25
Capa: Protocolo Blockchain
Título: Staking sin conexión
Autor: Jackson Belove jb395official@gmail.com
Resumen de comentarios: Proponer modificaciones de bloque y protocolo de transacción para proporcionar staking fuera de línea que permitirá la delegación de direcciones a través de un contrato inteligente a un nodo en línea que puede apostar por esa dirección, por una tarifa.
Comentarios-URI: https://github.com/qtumproject/qips/issues/25
Estado: borrador
Creado: 2020–04–01
Licencia: GPLv3

Abstracto
Este QIP describe un cambio de protocolo de blockchain y una implementación de contrato inteligente que permite la delegación de direcciones sin conexión a nodos en línea que proporcionan servicios de staking.
Desde su lanzamiento, Qtum ha permitido el consenso de prueba de participación (“staking”) solo desde los nodos en línea que aseguran y operan la blockchain. Este cambio de protocolo permitirá que las direcciones de las billeteras fuera de línea deleguen de manera segura sus UTXO (salidas de transacciones no gastadas) a un nodo en línea que ejecutará el consenso de prueba de participación para los UTXO de esa dirección fuera de línea. La delegación de la dirección se realizará a través de un contrato inteligente. Los nuevos protocolos de encabezado y transacción de blockchain proporcionarán una forma de validar la delegación y respaldarán el pago de una tarifa en tiempo real al nodo en línea. El nodo Qtum Core y los clientes ligeros proporcionarán una manera fácil de asignar y cancelar la asignación de la delegación a través de una llamada de contrato inteligente. La delegación no tendrá custodia (el propietario de la dirección fuera de línea retendrá el control de las claves privadas) y los UTXO delegados no se bloquearán de ninguna manera.
Motivación
Una de las solicitudes más populares de la comunidad Qtum ha sido el staking o sin conexión. Desde su lanzamiento, Qtum Mainnet requirió la participación en línea utilizando un nodo completo de billetera Qtum Core. Estas billeteras de staking sincronizan toda la blockchain Qtum y deben ejecutarse en línea las 24 horas del día, los 7 días de la semana para operar y asegurar la red y calificar para ser editores de bloque.
Los titulares de QTUM que no deseaban ejecutar un nodo completo o tenían problemas de seguridad no podían participar en el staking
Una preocupación secundaria para los miembros de la comunidad eran los recursos y el poder para ejecutar un nodo completo para el staking. La mejor práctica de seguridad es stake desde una máquina dedicada que no se utiliza para correo electrónico y navegar por la web, debido al riesgo de malware. Este fue un problema de recursos, especialmente para los pequeños propietarios que estaban considerando el costo de energía para ejecutar una computadora las 24 horas del día, los 7 días de la semana.
Aunque no es difícil ejecutar un nodo completo Qtum las 24 horas, los 7 días de la semana, esto requiere recursos dedicados, ya sea en las instalaciones o en la nube, y requiere algunas operaciones y mantenimiento continuos para las actualizaciones de nodos, horquillas, actualizaciones del sistema operativo, etc.
Definiciones
Los servicios de staking son los servicios proporcionados por un nodo que acepta direcciones delegadas y apostan las UTXO (monedas) para esas direcciones, por una tarifa.
Solo Staker, una billetera de staking Qtum Core de nodo completo tradicional en línea que stake sus UTXO.
StakingServiceFee la tarifa en porcentaje 0–100 para servicios de staking. Establecido por cada delegador, la tarifa que acuerdan pagar.
Super Staker, un nodo de billetera Qtum Core que se ejecuta en un modo para proporcionar servicios de staking para direcciones delegadas
Staking sin conexión la capacidad de Stake UTXO (monedas) desde una dirección de billetera fuera de línea delegando esa dirección en un nodo Super Staker en línea.
Especificación
Staking sin conexión
Los objetivos de diseño de alto nivel para el staking sin conexión son:
- Solución de staking sin custodia, el usuario retiene el control exclusivo de sus claves privadas.
- Los UTXO para la dirección delegada no están bloqueados y se pueden enviar o stake en solitario en cualquier momento.
- Los UTXO delegados siguen el patrón del período de staking de vencimientos de 500 bloques.
- Los usuarios pueden establecer la tarifa que pagarán por el proveedor de servicios de staking, que puede aceptar esa tarifa.
- Modifique el protocolo Coinstake para proporcionar un pago instantáneo de recompensas en bloque con división para el pago de tarifas.
- Los proveedores de servicios de stake deben estar en línea y comprometerse para evitar el problema de “nada en juego”.
- Desarrolle múltiples soluciones de cliente con asignación de delegación / eliminación de delegación fácil de usar.
Dado que el staking fuera de línea delegará el conjunto UTXO de una dirección que será staked por otro nodo en línea, el “tiempo estimado” para una recompensa de bloque funcionará como actualmente (con variación). El staking delegado no es staking de grupo.
Coinstake Vouts
El coinstake es la segunda transacción en cada bloque que stake UTXO y paga la recompensa de bloque compuesta por 1) QTUM recién acuñado para el subsidio (actualmente 4.0 QTUM) y 2) cualquier tarifa de transacción y Gas para el bloque.
Para el staking sin conexión, se paga la recompensa de bloque:
- 100% menos StakingServicesFee a la dirección delegada
- Tarifa de servicios de staking a la dirección de Super Stacker
Para el staking fuera de línea, el protocolo de transacción de coinstalación se modificará como se muestra en el siguiente ejemplo, donde Alice ha delegado su dirección fuera de línea a Bob, que proporciona servicios de staking. La columna “¿Cambió?” indica un cambio con respecto al protocolo actual.

Para dar un ejemplo numérico, supongamos que hay un usuario de staking fuera de línea Alice que paga una tarifa del 20% delegada al proveedor de servicios de staking Bob, y que hay un usuario de staking fuera de línea Carol que paga una tarifa del 15% al proveedor de servicios de staking David, y que hay 0.1 QTUM en tarifas de transacción y Gas para cada una de sus recompensas en bloque. La recompensa total por bloque para cada bloque sería 4.1 QTUM. Para este escenario, el coinstake Vouts sería:
Recompensa de bloque de Alice:

Recompensa en bloque de Carol:

Notas:
1. La transacción de coinstake no paga honorarios por sí misma.
2. Si la tarifa se establece en 0 o 100 (porcentaje), habría un solo Vout (no se enviaría un Vout cero).
3. Estos ejemplos son solo para fines ilustrativos. Qtum Mutualized Proof-of-Stake actualmente distribuye estos pagos de recompensa en bloque a más de 509 bloques.
Nuevos comandos RPC
Las llamadas a procedimiento remoto (RPC) se emiten a un nodo Super Staker en ejecución. Estos comandos pueden emitirse a través de llamadas RPC, la consola de billetera Qtum-Qt GUI o para la billetera del servidor qtumd daemon a través de la aplicación de interfaz de línea de comandos qtum-cli. Se agregarán nuevos comandos a Qtum Core para administrar el staking sin conexión de la siguiente manera.

New RPC Commands
Las llamadas a procedimiento remoto (RPC) se emiten a un nodo Super Staker en ejecución. Estos comandos pueden emitirse a través de llamadas RPC, la consola de billetera Qtum-Qt GUI o para la billetera del servidor qtumd daemon a través de la aplicación de interfaz de línea de comandos qtum-cli. Se agregarán nuevos comandos a Qtum Core para administrar el staking sin conexión de la siguiente manera
Nuevos parámetros de línea de comando
El Super Staker lee los parámetros de la línea de comandos cuando se inicia. Estos comandos se enumeran en la línea de comandos, por ejemplo, al iniciar la billetera del servidor qtumd daemon:
./qtumd -parameter1 -parameter2=nn -parameter3=nn
Se agregarán los siguientes parámetros de línea de comando:

Operación de nodo — Super Stacker
El Super Staker será una billetera Qtum Core (nodo completo) configurada para stake UTXO de direcciones delegadas. La configuración y los nuevos comandos proporcionarán la siguiente operación:
1. Obtenga una lista de direcciones delegadas utilizando un nuevo comando getdelegationforstaker.
2. Obtenga una lista de UTXO delegados para la dirección utilizando un nuevo comando getaddressutxos.
3. Ordene la lista de UTXO y seleccione según los nuevos comandos para el valor mínimo stakingminutxovalue y la tarifa mínima de replanteo stakingminfee.
4. Ejecute el algoritmo de prueba de participación de Qtum para identificar soluciones de kernel y publicar bloques
5. Cuando se encuentra una solución de kernel, valide la asignación de delegación actual y produzca un bloque con el pago de la tarifa de coinstalación como se describió anteriormente para Alice y Bob
6. Publique el bloque y comprometa una participación UTXO propiedad de Super Stacker.
Operación del cliente — Carteras
Los clientes son billeteras operadas para hacer la asignación de delegación. Los clientes deben proporcionar una manera fácil e intuitiva de delegar su dirección UTXO a un Super Staker que proporciona servicios de staking.
Como ejemplo, (diseño final TBD) la página de staking sin conexión podría verse así:

La capacidad de delegación de staking fuera de línea del cliente requerirá llamadas de contrato inteligentes, que las billeteras Qtum tienen actualmente como capacidad general. Inicialmente, esta capacidad simplificada de staking fuera de línea se proporcionará utilizando la billetera Qtum Core, seguida de la billetera móvil Qtum Web Wallet y Qtum Android. Las billeteras de terceros también pueden proporcionar esta capacidad si integran la funcionalidad de llamada de contrato inteligente.
Tenga en cuenta que Qtum Web Wallet ofrece una opción para “Restaurar desde Ledger” y cuando se actualiza para ofrecer la página simplificada de staking sin conexión permitirá la delegación de staking sin conexión desde las direcciones de billetera de hardware de Ledger.
Delegaciones Smart Contract
Se usará un contrato inteligente para administrar las asignaciones de delegación, con el rol principal de agregar / actualizar información de delegación, eliminar una delegación y obtener la delegación para una dirección específica.
El contrato inteligente mantendrá una tabla de información de delegación:
<dirección de usuario a delegar>
<dirección de super staker a delegar>
<tarifa de delegación que el usuario acepta pagar>
<altura del bloque de delegación>
Continuando con el ejemplo anterior, la tabla de delegación mostraría:

Compatibilidad
Debido a que el staking fuera de línea requiere cambios en el protocolo de bloqueo y transacción, el nodo y los clientes no serán compatibles con versiones anteriores y requerirán una bifurcación dura para la implementación. Sería posible ejecutar una red de prueba separada antes de la implementación de los nuevos nodos y clientes, donde deberían seguir el patrón de la bifurcación dura de Qtum Core v0.18.1, es decir, la activación en Testnet seguida de la activación en Mainnet.
No metas
La versión de lanzamiento del staking fuera de línea será un producto mínimo viable con un enfoque en seguridad y simplicidad. A medida que el staking fuera de línea gana madurez y se basa en solicitudes adicionales de la comunidad, se puede agregar funcionalidad adicional en actualizaciones posteriores.
Las siguientes características no son objetivos y no se proporcionarán en la versión inicial.
- Delegación de direcciones de múltiples firmas.
- Delegación de direcciones SegWit (p2sh-segwit o bech32). Solo se admitirán las direcciones heredadas (que comienzan con una “Q”).
- Staking de UTXO propiedad del nodo de servicios de staking.
- Recombinación de pequeños UTXO por el nodo de servicios de staking.
- Recombinación de pequeños UTXO para la dirección delegada. Esto debe hacerse manualmente.
Reconocimientios
El autor desea agradecer al equipo de desarrollo de Qtum por su diseño y revisión del staking fuera de línea de Qtum, y especialmente a Neil Mahi por el diseño original.
Referencias
- QIP-25 on GitHub https://github.com/qtumproject/qips/issues/25
- Guía del desarrollador http://book.qtum.site/en/
- Documentación de Qtum https://docs.qtum.site/en/