Multifirma
Un account multifirma è un account che nessuna singola chiave controlla. È definito da una lista di partecipanti e da una soglia, e spende solo quando almeno quel numero di partecipanti ha firmato la stessa transazione: due su tre, tre su cinque e così via. I partecipanti possono usare tipi di chiave diversi, quindi una chiave ZooBC, una chiave Ethereum e una chiave Bitcoin possono condividere un unico account.
L'account
Un account multifirma è definito dalla sua soglia (da 1 fino al numero di partecipanti), da un nonce e dagli indirizzi dei suoi partecipanti. Il suo indirizzo è un hash di questi dati:
address = SHA3-256( threshold ‖ nonce ‖ count ‖ sorted participant addresses )
Il risultato viene usato come un normale account di tipo 0, quindi può ricevere ZBC come qualsiasi indirizzo. Nessuno ne detiene una chiave privata, quindi l'unico modo per spendere da esso è raccogliere le firme dei partecipanti.
Spendere, passo per passo
- Qualcuno propone una transazione interna, come un pagamento, all'interno di una transazione MultiSignature. La transazione interna non è firmata, e il suo mittente è l'account multifirma.
- I partecipanti aggiungono le loro firme, tutte insieme o in transazioni MultiSignature successive, in qualsiasi ordine. Il corpo di una MultiSignature può contenere qualsiasi combinazione della definizione dell'account, della transazione interna e di firme, quindi più di questi involucri possono costruire un'unica transazione interna.
- Ogni partecipante firma il digest legato alla catena della transazione interna,
SHA3-256("ZBC-TX" ‖ genesis hash ‖ inner bytes), con lo schema del proprio tipo di chiave (vedi firmare una transazione). Le firme vengono memorizzate sotto l'hash della transazione interna. Una firma di chi non è partecipante, o una firma non valida, semplicemente non viene conteggiata. - Quando le firme valide raggiungono la soglia, la transazione interna viene eseguita una sola volta. L'account multifirma paga la sua commissione, almeno pari alla soglia minima della transazione interna, e la transazione interna viene segnata come eseguita per sempre, quindi non può mai essere riprodotta.
Il mittente di ogni involucro MultiSignature paga la commissione di quell'involucro.
Nessuna firma congiunta viene costruita off-chain e non viene imposto alcun ordine di firma: ogni chiave firma da sola, con il proprio schema.
Che cosa può fare
La transazione interna può essere di uno di questi tipi:
- Empty o SendZBC;
- uno dei quattro tipi di registrazione dei nodi (registrare, aggiornare, rimuovere e rivendicare una registrazione di nodo);
- SetSplitPolicy;
- uno dei quattro tipi dei gruppi di account (LinkAccount, UnlinkAccount, SetMemberPermissions e TransferGroupControl).
Un account multifirma può quindi pagare ZBC, detenere una registrazione di nodo, condividere il proprio reddito con una politica di ripartizione e far parte di un gruppo di account, ma non invia token direttamente. Può acconsentire a entrare in un gruppo con la propria soglia di firme, proprio come una singola chiave acconsente con la propria firma.
Secondo la regola di una transazione per account per blocco, una transazione interna conta per l'account multifirma quando viene eseguita.
Chi ha voce in capitolo
Contano solo le firme dei partecipanti. I nodi registrati non firmano per l'account; si limitano a verificare le firme dei partecipanti, come verificano qualsiasi altra firma. Nemmeno la ZooBC Foundation ha voce in capitolo, qualunque sia l'importo.