Wiki de ZooBC
Transacciones

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.

Una dirección de grupo sin clave con un solo saldo, rodeada de un controlador, un miembro que puede gastar y un miembro que solo recibe; una dirección nueva entra y todo lo suyo pasa al grupo, una antigua sale como una dirección nueva y vacía
Una dirección de grupo sin clave con un solo saldo, rodeada de un controlador, un miembro que puede gastar y un miembro que solo recibe; una dirección nueva entra y todo lo suyo pasa al grupo, una antigua sale como una dirección nueva y vacía

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).

El fondo del grupo con el controlador con todos los derechos, un candado sobre vincular, fijar permisos y ceder el control, y miembros marcados como solo recibe, puede gastar sin límite, puede gastar 5 ZBC por 5760 bloques y puede mover tokens
El fondo del grupo con el controlador con todos los derechos, un candado sobre vincular, fijar permisos y ceder el control, y miembros marcados como solo recibe, puede gastar sin límite, puede gastar 5 ZBC por 5760 bloques y puede mover tokens

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).

Véase también