Grupos de cuentas
Un grupo de cuentas es una sola cuenta a la que se puede llegar desde muchas direcciones. Una billetera de teléfono, una billetera de hardware y una billetera de Ethereum en el navegador pueden ser miembros, y un pago a cualquiera de ellas llega a un único saldo compartido. Un miembro, el controlador, gestiona el grupo y decide lo que puede gastar cada uno de los demás miembros. Esto hace posibles las cuentas familiares y de empresa, con un límite de gasto para cada persona o dispositivo.
Una cuenta, muchas direcciones
El saldo del grupo, sus tokens y todo lo demás que posee viven en una dirección de grupo sin clave, derivada de la transacción que fundó el grupo:
group address = 00000000 ‖ SHA3-256( "ZBC-GROUP" ‖ founding transaction hash )
Nadie tiene una clave de ella. Todas las direcciones de los miembros se resuelven en ella: un pago a cualquier miembro se abona al grupo, y consultar el saldo de cualquier miembro devuelve el del grupo. Cada dirección conserva su propio nonce.
Un grupo admite hasta 100 direcciones, incluido el controlador. Los miembros pueden ser de cualquier tipo de clave que pueda firmar (ZooBC, Bitcoin, Ethereum, Solana y los demás; véase claves y tipos de cuenta), y una cuenta multifirma también puede ser miembro.
Entrar
Solo el controlador vincula una dirección nueva, con LinkAccount, y solo con el consentimiento de esa dirección: una firma sobre un resumen vinculado a la cadena con la etiqueta "ZBC-GROUP-LINK", válida como máximo 5760 bloques (un día) hacia delante y utilizable una sola vez. El consentimiento puede ser la propia firma de la dirección, el umbral de firmas de una cuenta multifirma o un personal_sign de Ethereum.
Entrar mueve al grupo todo lo que posee la dirección, hasta 1000 elementos: su saldo, sus tokens, los tokens que ha emitido, sus datasets, archivos, disparadores, programaciones, ofertas, órdenes, patrocinios y registros de nodos y de servicios.
Entre las direcciones que no pueden entrar están:
- una dirección de grupo;
- una dirección que ya pertenece a un grupo, puesto que cada dirección solo puede estar en uno;
- una dirección con una política de reparto;
- una clave activa de nodo, pasarela, relay o nodo de archivo;
- la autoridad de versiones.
Salir y ceder el control
Un miembro sale con UnlinkAccount y no se lleva nada: la dirección vuelve a empezar como una cuenta nueva y vacía. Lo que aportó se queda con el grupo.
El controlador no puede salir antes de ceder el control. TransferGroupControl pasa el control a otro miembro, que debe consentirlo con una firma con la etiqueta "ZBC-GROUP-CONTROL"; el antiguo controlador pasa entonces a solo recibir.
Permisos
Un miembro nuevo solo recibe: puede recibir pagos para el grupo y puede salir, pero no puede gastar. El controlador lo cambia con SetMemberPermissions:
- bit 0: el miembro puede gastar ZBC;
- bit 1: el miembro puede mover los tokens del grupo (esto también requiere el bit 0);
- un límite de ZBC por periodo, siendo el periodo de 1 a 2 102 400 bloques (un año); un límite de 0 significa sin límite.
Un límite de 5 ZBC por 5760 bloques, por ejemplo, es una asignación diaria de 5 ZBC.
Algunas acciones corresponden solo al controlador: LinkAccount, SetMemberPermissions, TransferGroupControl, SetSplitPolicy y SetTransactPolicy. La política de reparto de un grupo se aplica al dinero enviado a cualquier miembro (véase políticas de reparto y de transacciones).
Cómo se aplican los límites
El límite de un miembro es una regla de consenso, no un ajuste de la billetera:
- en la admisión, un nodo calcula el máximo de ZBC que la transacción podría quitar al grupo (el importe, la comisión, cualquier depósito de supervivencia y la comisión y el alquiler de un escrow) y la rechaza si eso supera lo que queda en la ventana del miembro, contando las demás transacciones pendientes del miembro;
- cuando se ejecuta la transacción de un miembro con límite, se ejecuta dentro de un punto de guardado: la cadena mide lo que realmente perdió el saldo del grupo y, si eso supera el límite, la transacción se deshace;
- un bloque que lleva una transacción de un miembro denegada es inválido en todos los nodos.
Cada miembro tiene su propio hueco según la regla de una transacción por cuenta y bloque, porque cada uno firma con su propia dirección.
Tokens y alquiler
Un token emitido por un miembro pertenece al grupo, y cualquier miembro habilitado para enviar en nombre del grupo puede acuñarlo más adelante (véase acuñar y quemar tokens).
El grupo paga el alquiler de cuenta como cualquier cuenta, más un alquiler de almacenamiento por su registro: 96 bytes y la dirección del controlador, más 40 bytes y la dirección de cada miembro. Los miembros no pagan alquiler propio. Un grupo que no puede pagar se disuelve, y su polvo sobrante va al fondo de longevidad (véase ZBC nunca se quema).