朋友 corrió al verificador de Dusk y me preguntó si, por haber perdido la producción de bloques de forma consecutiva y haber sido sancionado, eso cuenta como mala fe. Al principio pensé que una sanción es una sanción; en el estilo de Cosmos, con firmas dobles te cierran el “cuartito” y no hay mucho que discutir.
Luego revisé el mecanismo de sanciones de Dusk y descubrí que hay dos tipos. Soft Slashing, sanción suave: se encarga de faltas no maliciosas, por ejemplo, que el nodo se desconecte cuando debía producir bloques, que no difunda dentro de la ventana correspondiente. No implica maldad, solo problemas de operación. La sanción consiste en que, por cada incumplimiento consecutivo, se descuenta N por un multiplicador de 10% de los intereses de la participación (staking). N es la cantidad de incumplimientos consecutivos. Además, se expulsa el nodo del consenso durante N epochs: un epoch es el periodo de consenso de Dusk, y al finalizar cada ronda, el conjunto de validadores rota una vez. El DUSK penalizado no se destruye; se transfiere desde el staking activo y el nodo puede recuperarlo.
Hard Slashing, sanción dura: se encarga de la conducta maliciosa. Generar bloques inválidos descuenta 10% del staking y destruye; hacer doble votación o doble producción de bloques descuenta 20% y destruye. La destrucción es real: desaparece, no es un bloqueo temporal para luego devolverlo.
No entendía por qué había dos categorías. Más tarde, al leer la parte de documentación sobre “rendición de cuentas”, lo entendí. Si el nodo solo se perdió un bloque por fluctuaciones de la red y tú lo vuelves a castigar fuerte, los validadores van a colocar el nodo en la nube más cara para evitar fallos, con lo cual el costo de operación sube y, paradójicamente, la descentralización empeora. La Soft Slashing sirve para sacar de manera gradual los nodos poco confiables del conjunto activo, dándoles oportunidad de recuperarse. Como cada penalización es pequeña, no arruina a quienes operan de forma honesta.
Lo que realmente cambió mi criterio fue el ajuste de N. Cuantos más incumplimientos consecutivos, mayor es el descuento y más largo el tiempo de expulsión. La primera vez que se cae: se descuenta 10% y se eliminan 1 epoch. La segunda vez: 20% y se eliminan 2 epochs. Eso genera presión de forma prácticamente exponencial: el nodo o vuelve a la estabilidad o se marcha automáticamente. La Hard Slashing queda para el daño claro: una sola destrucción, sin ventana de recuperación.
Tomemos Polkadot como ejemplo. En Polkadot el Slashing también es por niveles, pero los porcentajes de penalización son más finos: van de 0.1% a 100%, y el dinero de la multa se reparte con quien denuncia. El esquema de Dusk es más simple: o es negligencia o es malicia, el porcentaje es fijo y la destrucción no premia a los denunciantes. La ventaja es que los validadores pueden predecir el costo de cometer un error y no se atreven a no correr nodos por reglas complicadas.
Mi amigo, después de escucharlo, dijo que esta vez aceptó la Soft Slashing; se le cayó la red en casa durante media hora. También entiendo por qué Dusk separa tan claramente el mecanismo. Sin sanciones graduadas, los nodos honestos y los maliciosos se tratan igual#dusk $DUSK @Dusk
Luego revisé el mecanismo de sanciones de Dusk y descubrí que hay dos tipos. Soft Slashing, sanción suave: se encarga de faltas no maliciosas, por ejemplo, que el nodo se desconecte cuando debía producir bloques, que no difunda dentro de la ventana correspondiente. No implica maldad, solo problemas de operación. La sanción consiste en que, por cada incumplimiento consecutivo, se descuenta N por un multiplicador de 10% de los intereses de la participación (staking). N es la cantidad de incumplimientos consecutivos. Además, se expulsa el nodo del consenso durante N epochs: un epoch es el periodo de consenso de Dusk, y al finalizar cada ronda, el conjunto de validadores rota una vez. El DUSK penalizado no se destruye; se transfiere desde el staking activo y el nodo puede recuperarlo.
Hard Slashing, sanción dura: se encarga de la conducta maliciosa. Generar bloques inválidos descuenta 10% del staking y destruye; hacer doble votación o doble producción de bloques descuenta 20% y destruye. La destrucción es real: desaparece, no es un bloqueo temporal para luego devolverlo.
No entendía por qué había dos categorías. Más tarde, al leer la parte de documentación sobre “rendición de cuentas”, lo entendí. Si el nodo solo se perdió un bloque por fluctuaciones de la red y tú lo vuelves a castigar fuerte, los validadores van a colocar el nodo en la nube más cara para evitar fallos, con lo cual el costo de operación sube y, paradójicamente, la descentralización empeora. La Soft Slashing sirve para sacar de manera gradual los nodos poco confiables del conjunto activo, dándoles oportunidad de recuperarse. Como cada penalización es pequeña, no arruina a quienes operan de forma honesta.
Lo que realmente cambió mi criterio fue el ajuste de N. Cuantos más incumplimientos consecutivos, mayor es el descuento y más largo el tiempo de expulsión. La primera vez que se cae: se descuenta 10% y se eliminan 1 epoch. La segunda vez: 20% y se eliminan 2 epochs. Eso genera presión de forma prácticamente exponencial: el nodo o vuelve a la estabilidad o se marcha automáticamente. La Hard Slashing queda para el daño claro: una sola destrucción, sin ventana de recuperación.
Tomemos Polkadot como ejemplo. En Polkadot el Slashing también es por niveles, pero los porcentajes de penalización son más finos: van de 0.1% a 100%, y el dinero de la multa se reparte con quien denuncia. El esquema de Dusk es más simple: o es negligencia o es malicia, el porcentaje es fijo y la destrucción no premia a los denunciantes. La ventaja es que los validadores pueden predecir el costo de cometer un error y no se atreven a no correr nodos por reglas complicadas.
Mi amigo, después de escucharlo, dijo que esta vez aceptó la Soft Slashing; se le cayó la red en casa durante media hora. También entiendo por qué Dusk separa tan claramente el mecanismo. Sin sanciones graduadas, los nodos honestos y los maliciosos se tratan igual#dusk $DUSK @Dusk
