Wiki ZooBC
Transactions

Une transaction par compte et par bloc, et les lots

À partir de la version 0.5.8, une règle de validité simple s’applique à chaque bloc : il peut porter au plus une transaction de chaque compte. Pour faire plusieurs choses à la fois, un compte utilise un lot, c’est-à-dire une seule transaction qui porte plusieurs actions d’un même type. Ensemble, ces deux règles gardent exactes les vérifications que les nœuds font avant un bloc, tout en permettant à un compte très actif de payer de nombreuses personnes dans un seul bloc.

La règle

Le compte dont il s’agit ici est l’adresse signataire. Un bloc qui porte deux transactions de la même adresse est invalide sur tous les nœuds, si bien qu’un producteur honnête n’en construit jamais. Les producteurs prennent d’abord la transaction éligible la plus ancienne de chaque compte et laissent la suivante pour un bloc ultérieur, 15 secondes plus tard.

Une file de transactions de l’expéditeur A qui entrent dans les blocs N, N+1 et N+2, une par bloc, la plus ancienne d’abord, pendant que des transactions des expéditeurs B et C remplissent les mêmes blocs
Une file de transactions de l’expéditeur A qui entrent dans les blocs N, N+1 et N+2, une par bloc, la plus ancienne d’abord, pendant que des transactions des expéditeurs B et C remplissent les mêmes blocs

Un compte peut quand même soumettre plusieurs transactions à la suite. Le pool d’un nœud conserve jusqu’à 50 transactions en attente par expéditeur (une politique locale de chaque nœud), et les producteurs les incluent une par bloc, la plus ancienne d’abord.

Deux détails découlent de la définition :

  • chaque membre d’un groupe de comptes a son propre créneau, car chaque membre signe avec sa propre adresse, même si les membres partagent un seul solde ;
  • lorsque la transaction interne d’un compte multisignature s’exécute, elle compte pour le compte multisignature.

Pourquoi c’est utile

Un nœud vérifie une transaction par rapport à l’état confirmé à deux reprises : lorsqu’il l’admet dans son pool, et lorsqu’il assemble un bloc. Avec une transaction par compte, aucune autre transaction du même compte ne peut modifier cet état à l’intérieur du bloc. La vérification reste donc exacte pour tout ce que seul l’expéditeur contrôle, comme son propre solde et ses propres objets.

Entre des comptes différents, la première transaction appliquée l’emporte. Si deux comptes tentent de prendre la même offre d’échange, le premier l’obtient, et la seconde transaction n’a plus d’objet : c’est une opération nulle payante, qui paie ses frais et ne fait rien d’autre (voir la présentation des transactions). Les producteurs honnêtes laissent ces transactions de côté. Il n’existe pas de règle distincte par objet.

Les lots

Un lot est une seule transaction qui porte plusieurs actions d’un même type. Il en existe trois sortes :

  • les paiements en ZBC, jusqu’à 25 par lot ;
  • les transferts de jetons, jusqu’à 32, quels que soient les jetons, avec des frais payés en ZBC ;
  • les preuves de stockage, jusqu’à 1 000, à raison d’un lot par nœud et par époque de stockage (voir le fonds de stockage).

Un lot est tout ou rien. Chaque action est vérifiée d’avance, de sorte que soit tous les paiements qu’il contient ont lieu, soit aucun, et le lot entier est signé une seule fois.

Ce que coûte un lot

Plusieurs actions paient comme plusieurs transactions. Les frais minimaux d’un lot sont la somme des frais minimaux que ses actions paieraient en transactions séparées : des frais d’action de base pour chaque action, plus la charge d’octets de chaque action (voir les frais), le message du lot n’étant facturé qu’une fois. Trois paiements sans message coûtent autant dans un lot qu’en trois transactions isolées. Un lot de preuves de stockage ne paie rien : chaque preuve de stockage est un devoir sans frais, si bien que la somme est nulle.

Trois paiements séparés, chacun avec ses frais, valent un lot de trois paiements portant les trois mêmes frais, marqué tout ou rien et signé une seule fois
Trois paiements séparés, chacun avec ses frais, valent un lot de trois paiements portant les trois mêmes frais, marqué tout ou rien et signé une seule fois

Ce qu’un lot économise, c’est surtout du travail pour le réseau, pas des frais : une seule signature à vérifier et une seule place dans le bloc au lieu de trois. C’est aussi le moyen pour un compte de payer de nombreux destinataires dans le même bloc.

Voir aussi