Polkadot proporciona un módulo que permite a los usuarios establecer cuentas proxy para realizar un número limitado de acciones en su nombre. Al igual que la relación entre las cuentas Stash y Controller en el staking, los proxies permiten a los usuarios mantener una cuenta en almacenamiento en frío y participar activamente en la red con el peso de los tokens en esa cuenta.
Mira nuestro video de YouTube de Polkadot que explica qué son los proxies.
Tipos de proxy #
Puedes establecer una cuenta proxy a través del módulo Proxy. Cuando estableces un proxy, debes elegir un tipo de proxy para la relación. Polkadot ofrece:
- Cualquiera
- No transferencia
- Gobernanza
- Staking
- Juicio de Identidad
- Subasta
Cuando una cuenta proxy realiza una transacción proxy
, Polkadot filtra la transacción deseada para asegurarse de que la cuenta proxy tiene el permiso apropiado para realizar esa transacción en nombre de la cuenta fría.
Cualquier proxy #
Como su nombre indica, un tipo de proxy “Cualquiera” permite a la cuenta proxy realizar cualquier transacción, incluyendo transferencias de saldo. En la mayoría de los casos, esto debería evitarse, ya que la cuenta proxy se utiliza con más frecuencia que la cuenta fría y, por tanto, es menos segura.
Proxies sin Transferencia #
Los proxies del tipo “No transferencia” son cuentas que permiten cualquier tipo de transacción, excepto las transferencias de saldo (incluidas las transferencias de vested).
Proxies de Gobernanza #
El tipo “Gobernanza” permitirá a los proxies realizar transacciones relacionadas con la gobernanza (es decir, desde las paletas de Democracia, Consejo, Tesoro, Comité Técnico y Elecciones).
Consulta Gobernanza para obtener más información sobre los proxies de gobernanza o mira nuestro video explicativo técnico que explora este concepto.
Proxies de Staking #
El tipo “Staking” permite realizar transacciones relacionadas con el staking, pero no hay que confundir un proxy de staking con la cuenta del Controller. Dentro de la paleta de Staking, algunas transacciones deben provenir del Stash, mientras que otras deben provenir del Controller. La cuenta Stash está destinada a permanecer en el almacenamiento en frío, mientras que la cuenta Controller realiza transacciones diarias como establecer claves de sesión o decidir qué validadores nominar. Sin embargo, la cuenta Stash aún necesita realizar algunas transacciones, como la vinculación de fondos adicionales o la designación de un nuevo Controller. Un proxy no cambia las funciones de las cuentas Stash y Controller, pero permite que se acceda al Stash con menos frecuencia.
Proxies de Juicio de Identidad #
Los proxies de “juicio de identidad” se encargan de permitir a los registradores hacer un juicio sobre la identidad de una cuenta. Si no estás familiarizado con los juicios de identidad en cadena, consulta esta página.
Anular Proxies #
Los proxies de tipo “Cancelar” permiten a las cuentas rechazar y eliminar cualquier anuncio de proxys con retraso.
Proxies de Subasta #
Los proxies que son del tipo “Subasta” son cuentas que permiten transacciones pertenecientes a subastas de parachain y crowdloans. La cuenta proxy de subasta puede firmar esas transacciones en nombre de una cuenta en almacenamiento en frío. Si ya configuraste una cuenta proxy “Sin transferencia”, ésta puede hacer todo lo que puede hacer un proxy “Subasta”. Antes de participar en un crowdloan utilizando un proxy de subasta, se recomienda que compruebes con el equipo respectivo de parachain cualquier posible problema relacionado con la distribución de recompensas del crowdloan.
Proxies Anónimos #
Polkadot incluye una función para crear un proxy anónimo, una cuenta a la que sólo se puede acceder mediante un proxy. Es decir, genera una dirección pero no la correspondiente clave privada. Normalmente, una cuenta principal designa una cuenta proxy, pero los proxys anónimos son lo contrario. La cuenta que crea la relación de proxy es la cuenta proxy y la nueva cuenta es la primaria. Ten mucho cuidado con los proxies anónimos; una vez que elimines la relación de proxy, la cuenta será inaccesible.
Obtén más información sobre los proxies anónimos en nuestro video explicativo técnico.
Proxies con Retraso en el Tiempo #
Podemos añadir una capa adicional de seguridad a los proxies dándoles un tiempo de retardo. El retraso se cuantificará en número de bloques (blockNumber). Tanto Polkadot como Kusama tienen bloques de 6 segundos, por lo que un valor de retraso de 10 significará 10 bloques que equivaldrán a 1 minuto de retraso. El proxy anunciará su acción prevista y esperará el número de bloques definido en el tiempo de retardo antes de ejecutarla. El proxy incluirá el hash de la llamada a la función prevista en el anuncio. Dentro de esta ventana de tiempo, la acción prevista puede ser cancelada por las cuentas que controlan el proxy. Ahora podemos usar proxies sabiendo que cualquier acción maliciosa puede ser advertida y revertida dentro de un periodo de retardo.
Por favor, ten en cuenta: Polkadot-JS Apps UI no puede manejar configuraciones complicadas de proxy. (por ejemplo, un proxy -> multisig -> un proxy anónimo que es parte de otro multisig). Estas configuraciones complejas deben hacerse usando la pestaña de extrínsecos directamente.
Estas configuraciones complejas de proxy sólo deben realizarse si te sientes lo suficientemente cómodo interactuando directamente con la cadena, ya que no podrás firmar extrínsecos usando la UI.
¿Por qué utilizar un Proxy? #
Los proxies son excelentes para utilizarlos con fines específicos porque añaden una capa de seguridad. En lugar de utilizar los fondos en una sola cuenta, las cuentas más pequeñas con roles únicos completan las tareas para la cuenta principal oculta. Esto aleja la atención de la cuenta principal y la dirige a los proxies.
Los proxies anónimos, en particular, pueden utilizarse para la gestión sin permisos. En este ejemplo de abajo, hay una multisig con cuatro cuentas diferentes dentro. Dos de las cuentas, Alice y Bob, tienen un proxy anónimo adjunto. En el caso de que la cuenta multisig quisiera añadir o eliminar a Alice o Bob o incluso añadir una nueva cuenta en el proxy anónimo, el proxy anónimo se encargaría de ese cambio. Si una multisig quisiera modificarse a sí misma sin un proxy anónimo, se crearía una multisig completamente nueva.
Cómo configurar un Proxy #
Usando la UI de Polkadot-JS #
Para configurar un proxy, navega a la UI de Polkadot-JS y haz clic en “Developer” > “Extrinsics”. Aquí veremos una página que se parece a esta:
Para agregar un proxy, haz clic en el menú desplegable de selección de paletas. El desplegable está etiquetado como “submit the following extrinsic (presentar el siguiente extrínseco)”. Selecciona la paleta proxy
, y luego el extrínseco addProxy
(en el menú desplegable al lado). La función addProxy(proxy, proxy_type)
tendrá que ser seleccionada para añadir un proxy. La cuenta proxy elegida que establezcas será la cuenta que tenga el proxy en ella. La cuenta seleccionada en la parte superior es la cuenta que será la cuenta principal.
- NOTA: Si ves una opción
unused
(no utilizada) al añadir un proxy, no se trata de un tipo de proxy. Se trata de unenum
(enunciado) vacío, y si intentas agregarlo como proxy, no ocurrirá nada. No se creará ningún proxy nuevo.
Es crítico configurar Proxies Anónimos con los permisos apropiados y ser consciente de los peligros potenciales
Creación de Proxies Anónimos en la UI de Polkadot-JS #
- NOTA: El primer proxy anónimo que agregues debe ser siempre del tipo
Any
. Además, si hay varios proxies anónimos para la cuenta proxy, deberías mantener al menos uno de tipoAny
. Sin tener un proxy de tipoAny
, no podrás enviar fondos, añadir nuevos proxies, matar al proxy anónimo o realizar cualquier acción no permitida específicamente por los tipos de los proxies que tiene la cuenta.
Para los proxies anónimos, habrá que llamar a una función diferente, anonymous(proxy_type, index)
. Esto te permitirá seleccionar el tipo de proxy anónimo que desees establecer si lo eliges, así como el índice.
Uso de Proxies con Retardo de Tiempo #
Al crear un proxy a través de la aplicación PolkadotJS, se nos proporciona un campo de retardo. En este ejemplo estamos creando un proxy con un valor de retardo de 100, lo que significa 100 bloques. 100 * 6(minutos) = 600 minutos, o 10 horas.
Otra forma de crear Proxies #
Hay otra forma de crear un proxy en el Polkadot-JS UI. Ve a “Accounts” (Cuentas) en la navegación y luego haga clic en el botón “Accounts” (Cuentas). Para cada una de las cuentas que tienes en esta página, el botón de tres puntos te permitirá crear un proxy usando “Add proxy”. Esto abrirá una ventana emergente en tu pantalla donde podrás seleccionar el tipo de proxy para esa cuenta específica.
- NOTA: No puedes crear una función anónima desde la página de Accounts (Cuentas), debes estar en la página de Extrinsics (Extrínsecos).
Eliminación de Proxies #
Si quieres eliminar un proxy, hay algunas funciones en la página de extrínsecos que te ayudarán a hacerlo.
Para los proxies no anónimos, puedes utilizar removeProxy
o removeProxies
, pero debes utilizar la función killAnonymous
para los proxies anónimos. Esto debe ser llamado desde el proxy anónimo. Esto significa que el proxy anónimo debe ser añadido como una cuenta a las cuentas de Polkadot-JS.
Los siguientes pasos se pueden utilizar para eliminar el proxy:
- ATENCIÓN: no hay forma de acceder al proxy después de eliminarlo.
- Paso 0: Necesitas conocer la siguiente información:
- la cuenta desde la que creaste el proxy anónimo
- tipo de proxy, índice (casi siempre 0)
- altura del bloque en el que fue creado
- el índice extrínseco en el bloque (en la mayoría de los exploradores de bloques, verás que el ID extrínseco aparece como algo parecido a “9000-2” -> 9000 es la altura del bloque (número de bloque) y 2 es el índice extrínseco. Puedes encontrar esta información buscando tu cuenta en un explorador de bloques.
- Paso 1: Ve a https://polkadot.js.org/apps/#/accounts (asegúrate de que estás en la red correcta).
- Paso 2: Haz clic en
Proxied
y añade tu dirección, llámalaANON PROXY
. Ahora deberías ver esta dirección en las cuentas. Ahora necesitas llamar akillAnonymous
desde el proxy anónimo. Es importante tener en cuenta que los proxies anónimos funcionan al revés; la cuenta original actúa como proxy.
- Paso 3: Ve a https://polkadot.js.org/apps/#/extrinsics
- Paso 4: Llama al extrínseco
proxy.killAnonymous
usando la cuenta seleccionada ANON PROXY y los siguientes parámetros: - Spawner: (cuenta original)
- Proxy type (tipo de proxy)
- Índice 0 (casi siempre, pero se puede ver al crear el extrínseco)
- Número de bloque x
- Índice extrínseco y
- Paso 5: Envía y firma el extrínseco
Cómo ver tus proxies #
Para ver tu proxy, dirígete a la página del Chain State (Estado de la Cadena -debajo de “Desarrollador”) en Polkadot-JS Apps. Si creaste tu proxy en una cuenta de Kusama, es necesario cambiar tu red utilizando el botón de navegación superior izquierdo. En esta página, se debe seleccionar la paleta de proxies, devolviendo las funciones de anuncios y proxies. La función de proxies te permitirá ver tus proxies creados, ya sea para una cuenta o para todas las cuentas (usando el conmutador se activará esto). Los anuncios de proxies son lo que hacen los proxies de bloqueo de tiempo para anunciar que van a realizar una acción.
Poniendo Todo Junto #
Si la idea de los tipos de proxy y su aplicación parece abstracta, lo es. Aquí hay un ejemplo de cómo podrías utilizar estas cuentas. Imagina que tienes una cuenta como tu cuenta principal de tenencia de tokens, y que no quieres acceder a ella muy a menudo, pero sí quieres participar en la gobernanza y el staking. Podrías establecer proxies de Gobernanza y de Staking.
En este ejemplo, la cuenta principal A sólo haría dos transacciones para establecer la cuenta B como su proxy de gobernanza y la cuenta C como su proxy de staking. Ahora, la cuenta B podría participar en la actividad de gobernanza en nombre de A.
Del mismo modo, la cuenta C podría llevar a cabo las acciones típicamente asociadas con una cuenta de almacenamiento, como la vinculación de fondos y el establecimiento de un Controller, en este caso la cuenta D. Las acciones que normalmente requieren el Stash, como la vinculación de tokens adicionales o el establecimiento de un nuevo Controller, pueden ser manejadas por su cuenta proxy C. En el caso de que la cuenta C se vea comprometida, no tiene acceso a las transacciones relacionadas con la transferencia, por lo que la cuenta principal podría simplemente establecer un nuevo proxy para reemplazarlo.
La creación de varias cuentas que actúen en nombre de una única cuenta, te permite establecer prácticas de seguridad más granulares sobre cómo proteger las claves privadas sin dejar de participar activamente en una red.
Depósitos de Proxy #
Los proxies requieren depósitos en la moneda nativa (es decir, DOT o KSM) para ser creados. El depósito es necesario porque agregar un proxy requiere algo de espacio de almacenamiento en la cadena, que debe ser replicado en todos los pares de la red. Debido a su elevado costo, estas funciones podrían abrir la red a un ataque de denegación de servicio. Para defenderse de este ataque, los proxies requieren que se reserve un depósito mientras se consume el espacio de almacenamiento durante el tiempo de vida del proxy. Cuando se retira el proxy, también lo hace el espacio de almacenamiento y, por tanto, se devuelve el depósito.
Los depósitos se calculan en el tiempo de ejecución, y la función puede encontrarse en el código del tiempo de ejecución. Por ejemplo, los depósitos se calculan en Polkadot con las siguientes funciones:
El ProxyDepositBase
es la cantidad necesaria que debe reservarse para que una cuenta tenga una lista de proxys (crea un nuevo elemento de almacenamiento). Por cada proxy que tenga la cuenta, se reserva también una cantidad adicional definida por el ProxyDepositFactor
(añade 33 bytes al almacén).
En Polkadot el ProxyDepositBase
es 20.008 y el ProxyDepositFactor
es 0.033.
Así que esto se reduce a que la cantidad de depósito requerida para un proxy en Polkadot es igual a (en DOT):