Wiki di ZooBC
Transazioni

Gruppi di account

Un gruppo di account è un unico account raggiungibile a molti indirizzi. Un wallet su telefono, un hardware wallet e un wallet Ethereum da browser possono esserne tutti membri, e un pagamento a uno qualsiasi di loro finisce in un unico saldo condiviso. Un membro, il controller, gestisce il gruppo e decide che cosa può spendere ciascuno degli altri membri. Questo rende possibili account di famiglia e aziendali, con un limite di spesa per ogni persona o dispositivo.

Un account, molti indirizzi

Il saldo del gruppo, i suoi token e tutto ciò che possiede risiedono su un indirizzo di gruppo senza chiave, derivato dalla transazione che ha fondato il gruppo:

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

Nessuno ne detiene una chiave. Ogni indirizzo membro rimanda a esso: un pagamento a un membro qualsiasi viene accreditato al gruppo, e chiedere il saldo di un membro qualsiasi restituisce quello del gruppo. Ogni indirizzo mantiene il proprio nonce.

Un indirizzo di gruppo senza chiave che detiene un unico saldo, circondato da un controller, un membro che può spendere e un membro di sola ricezione; un nuovo indirizzo entra e tutto ciò che ha viene trasferito, uno vecchio esce come account nuovo e vuoto
Un indirizzo di gruppo senza chiave che detiene un unico saldo, circondato da un controller, un membro che può spendere e un membro di sola ricezione; un nuovo indirizzo entra e tutto ciò che ha viene trasferito, uno vecchio esce come account nuovo e vuoto

Un gruppo contiene fino a 100 indirizzi, controller compreso. I membri possono essere di qualsiasi tipo di chiave in grado di firmare (ZooBC, Bitcoin, Ethereum, Solana e gli altri; vedi chiavi e tipi di account), e anche un account multifirma può essere un membro.

Entrare

Solo il controller collega un nuovo indirizzo, con LinkAccount, e solo con il consenso di quell'indirizzo: una firma su un digest legato alla catena con il tag «ZBC-GROUP-LINK», valida al massimo per 5.760 blocchi (un giorno) in avanti e utilizzabile una sola volta. Il consenso può essere la firma dell'indirizzo stesso, la soglia di firme di un account multifirma o un personal_sign di Ethereum.

Entrare trasferisce nel gruppo tutto ciò che l'indirizzo possiede, fino a 1.000 elementi: il suo saldo, i token, i token emessi, i dataset, i file, i trigger, le pianificazioni, le offerte, gli ordini, le sponsorizzazioni e le registrazioni di nodi e servizi.

Tra gli indirizzi che non possono entrare ci sono:

  • un indirizzo di gruppo;
  • un indirizzo che appartiene già a un gruppo, perché ogni indirizzo può far parte di un solo gruppo;
  • un indirizzo con una politica di ripartizione;
  • una chiave attiva di nodo, gateway, relay o nodo di archivio;
  • l'autorità di release.

Uscire e cedere il controllo

Un membro esce con UnlinkAccount e non porta via nulla: l'indirizzo riparte come account nuovo e vuoto. Tutto ciò che ha portato resta al gruppo.

Il controller non può uscire prima di aver ceduto il controllo. TransferGroupControl passa il controllo a un altro membro, che deve acconsentire con una firma con il tag «ZBC-GROUP-CONTROL»; il vecchio controller diventa allora di sola ricezione.

Permessi

Un nuovo membro è di sola ricezione: può ricevere pagamenti per il gruppo e può uscire, ma non può spendere. Il controller cambia questa situazione con SetMemberPermissions:

  • bit 0: il membro può spendere ZBC;
  • bit 1: il membro può spostare i token del gruppo (richiede anche il bit 0);
  • un limite in ZBC per periodo, con un periodo da 1 a 2.102.400 blocchi (un anno); un limite pari a 0 significa nessun limite.

Un limite di 5 ZBC ogni 5.760 blocchi, per esempio, è un tetto di spesa giornaliero di 5 ZBC.

Alcune azioni spettano solo al controller: LinkAccount, SetMemberPermissions, TransferGroupControl, SetSplitPolicy e SetTransactPolicy. La politica di ripartizione di un gruppo si applica al denaro inviato a qualsiasi membro (vedi politiche di ripartizione e di transazione).

Il pool del gruppo con il controller che ha tutti i diritti, un lucchetto su collegare, impostare i permessi e cedere il controllo, e membri etichettati come di sola ricezione, autorizzato a spendere senza limiti, autorizzato a spendere 5 ZBC ogni 5.760 blocchi e autorizzato a spostare token
Il pool del gruppo con il controller che ha tutti i diritti, un lucchetto su collegare, impostare i permessi e cedere il controllo, e membri etichettati come di sola ricezione, autorizzato a spendere senza limiti, autorizzato a spendere 5 ZBC ogni 5.760 blocchi e autorizzato a spostare token

Come vengono fatti rispettare i limiti

Il limite di un membro è una regola di consenso, non un'impostazione del wallet:

  • all'ammissione, un nodo calcola il massimo di ZBC che la transazione potrebbe prelevare dal gruppo (l'importo, la commissione, un eventuale deposito di sopravvivenza, e la commissione e il canone di un escrow) e la rifiuta se supera ciò che resta nella finestra del membro, tenendo conto delle altre transazioni in sospeso del membro;
  • quando viene eseguita la transazione di un membro con limite, viene eseguita all'interno di un savepoint: la catena misura quanto ha davvero perso il saldo del gruppo e, se supera il limite, la transazione viene annullata;
  • un blocco che contiene una transazione di un membro non consentita non è valido su nessun nodo.

Ogni membro ha il proprio posto secondo la regola di una transazione per account per blocco, perché ciascuno firma con il proprio indirizzo.

Token e canone

Un token emesso da un membro appartiene al gruppo, e qualsiasi membro abilitato a inviare per il gruppo può in seguito coniarlo (vedi coniare e bruciare token).

Il gruppo paga il canone degli account come qualsiasi account, più un canone di archiviazione sul suo record: 96 byte e l'indirizzo del controller, più 40 byte e l'indirizzo di ogni membro. I membri non pagano alcun canone proprio. Un gruppo che non riesce a pagare viene sciolto, e i suoi spiccioli rimasti vanno al pool di longevità (vedi ZBC non viene mai bruciato).

Vedi anche