Wiki ZooBC
Transactions

Groupes de comptes

Un groupe de comptes est un compte unique joignable à plusieurs adresses. Un portefeuille sur téléphone, un portefeuille matériel et un portefeuille Ethereum de navigateur peuvent tous en être membres, et un paiement vers n’importe lequel d’entre eux arrive sur un même solde commun. Un membre, le contrôleur, gère le groupe et décide de ce que chacun des autres membres peut dépenser. Cela rend possibles les comptes familiaux ou d’entreprise, avec une allocation de dépenses pour chaque personne ou chaque appareil.

Un compte, plusieurs adresses

Le solde du groupe, ses jetons et tout ce qu’il possède résident sur une adresse de groupe sans clé, dérivée de la transaction qui a fondé le groupe :

group address = 00000000 ‖ SHA3-256( "ZBC-GROUP" ‖ founding transaction hash )

Personne ne détient de clé pour cette adresse. Chaque adresse membre y renvoie : un paiement vers n’importe quel membre est crédité au groupe, et demander le solde de n’importe quel membre renvoie celui du groupe. Chaque adresse conserve son propre nonce.

Une adresse de groupe sans clé détenant un solde unique, entourée d’un contrôleur, d’un membre qui peut dépenser et d’un membre en réception seule ; une nouvelle adresse rejoint le groupe et tout ce qu’elle possède y entre, une ancienne part comme une adresse neuve et vide
Une adresse de groupe sans clé détenant un solde unique, entourée d’un contrôleur, d’un membre qui peut dépenser et d’un membre en réception seule ; une nouvelle adresse rejoint le groupe et tout ce qu’elle possède y entre, une ancienne part comme une adresse neuve et vide

Un groupe contient jusqu’à 100 adresses, contrôleur compris. Les membres peuvent être de n’importe quel type de clé capable de signer (ZooBC, Bitcoin, Ethereum, Solana et les autres ; voir les clés et types de comptes), et un compte multisignature peut aussi être membre.

Rejoindre un groupe

Seul le contrôleur rattache une nouvelle adresse, avec LinkAccount, et seulement avec le consentement de cette adresse : une signature sur un condensé lié à la chaîne portant l’étiquette «  ZBC-GROUP-LINK  », valable au plus 5 760 blocs (un jour) à l’avance et utilisable une seule fois. Ce consentement peut être la propre signature de l’adresse, le seuil de signatures d’un compte multisignature, ou un personal_sign Ethereum.

Rejoindre le groupe y fait passer tout ce que l’adresse possède, jusqu’à 1 000 éléments : son solde, ses jetons, les jetons qu’elle a émis, ses jeux de données, ses fichiers, ses déclencheurs, ses programmes de transferts, ses offres, ses ordres, ses parrainages, ainsi que ses enregistrements de nœuds et de services.

Parmi les adresses qui ne peuvent pas rejoindre un groupe figurent :

  • une adresse de groupe ;
  • une adresse qui appartient déjà à un groupe, car chaque adresse ne peut faire partie que d’un seul ;
  • une adresse dotée d’une politique de répartition ;
  • une clé active de nœud, de passerelle, de relais ou d’archivage ;
  • l’autorité de publication.

Quitter le groupe et céder le contrôle

Un membre quitte le groupe avec UnlinkAccount et n’emporte rien : l’adresse repart comme un compte neuf et vide. Tout ce qu’elle a apporté reste au groupe.

Le contrôleur ne peut pas partir avant d’avoir cédé le contrôle. TransferGroupControl confie le contrôle à un autre membre, qui doit consentir avec une signature portant l’étiquette «  ZBC-GROUP-CONTROL  » ; l’ancien contrôleur passe alors en réception seule.

Les permissions

Un nouveau membre est en réception seule : il peut recevoir des paiements pour le groupe et il peut partir, mais il ne peut pas dépenser. Le contrôleur change cela avec SetMemberPermissions :

  • bit 0 : le membre peut dépenser des ZBC ;
  • bit 1 : le membre peut déplacer les jetons du groupe (cela exige aussi le bit 0) ;
  • une limite en ZBC par période, la période allant de 1 à 2 102 400 blocs (un an) ; une limite de 0 signifie aucune limite.

Une limite de 5 ZBC par 5 760 blocs, par exemple, correspond à une allocation quotidienne de 5 ZBC.

Certaines actions sont réservées au seul contrôleur : LinkAccount, SetMemberPermissions, TransferGroupControl, SetSplitPolicy et SetTransactPolicy. La politique de répartition d’un groupe s’applique à l’argent envoyé à n’importe quel membre (voir les politiques de répartition et de transaction).

La réserve du groupe avec le contrôleur qui détient tous les droits, un cadenas sur le rattachement, la définition des permissions et la cession du contrôle, et des membres étiquetés en réception seule, peut dépenser sans limite, peut dépenser 5 ZBC par 5 760 blocs, et peut déplacer les jetons
La réserve du groupe avec le contrôleur qui détient tous les droits, un cadenas sur le rattachement, la définition des permissions et la cession du contrôle, et des membres étiquetés en réception seule, peut dépenser sans limite, peut dépenser 5 ZBC par 5 760 blocs, et peut déplacer les jetons

Comment les limites sont appliquées

La limite d’un membre est une règle de consensus, et non un réglage du portefeuille :

  • à l’admission, un nœud calcule le maximum de ZBC que la transaction pourrait prélever sur le groupe (le montant, les frais, tout dépôt de survie, ainsi que la commission et le loyer d’un séquestre) et la refuse si ce maximum dépasse ce qui reste de la fenêtre du membre, en comptant les autres transactions en attente du membre ;
  • quand la transaction d’un membre limité s’exécute, elle s’exécute dans un point de sauvegarde : la chaîne mesure ce que le solde du groupe a réellement perdu, et si cela dépasse la limite, la transaction est annulée ;
  • un bloc qui porte une transaction de membre refusée est invalide sur tous les nœuds.

Chaque membre a son propre créneau selon la règle d’une transaction par compte et par bloc, car chacun signe avec sa propre adresse.

Jetons et loyer

Un jeton émis par un membre appartient au groupe, et tout membre autorisé à envoyer pour le groupe peut ensuite le frapper (voir la frappe et le brûlage de jetons).

Le groupe paie le loyer de compte comme n’importe quel compte, plus un loyer de stockage sur son enregistrement : 96 octets et l’adresse du contrôleur, plus 40 octets et l’adresse de chaque membre. Les membres ne paient aucun loyer propre. Un groupe qui ne peut pas payer est dissous, et la poussière qui lui reste va au fonds de longévité (voir pourquoi le ZBC n’est jamais brûlé).

Voir aussi