Les passerelles
Les nœuds parlent HTTP en clair sur leurs propres ports et sont occupés à maintenir la chaîne. Une passerelle se place devant eux pour le public. Elle détient le certificat d’un domaine, de sorte que les navigateurs se connectent en HTTPS, et elle sert les pages que les gens ouvrent : le portefeuille, l’explorateur, la page de vérification de fichiers, les manuels et les téléchargements. Les passerelles sont inscrites sur la chaîne, si bien que les portefeuilles peuvent en trouver une autre lorsque la leur tombe en panne.
Ce que fait une passerelle
Une passerelle est un rôle mis en place par l’installateur ZooBC, un programme distinct du nœud. Elle assure la terminaison TLS (le chiffrement sur lequel repose HTTPS) et transmet les requêtes API sous /api/v1/ à deux services situés derrière elle :
- d’abord à un service d’archivage, qui détient un historique profond et consultable (explorateur et les nœuds d’archivage) ;
- puis à un nœud, lorsque le service d’archivage répond par une erreur 404 vide, ce qui signifie qu’il n’a pas cette route.
Les nouvelles transactions aboutissent donc à un nœud complet, car seul un nœud possède un mempool de transactions en attente. Les réponses sont les données propres de la chaîne ; la passerelle ne fait que les transporter. Elle ajoute ses propres en-têtes cross-origin (CORS), qui autorisent GET, POST et OPTIONS ainsi qu’un en-tête X-API-Key, mis en cache pendant 600 secondes.
Une passerelle ne produit jamais de blocs, ce que seuls les nœuds enregistrés font, ne détient jamais la clé de personne et n’échange pas de devises.
Enregistrer une passerelle
Un propriétaire inscrit une passerelle avec RegisterGateway (type 36). Cette transaction enregistre :
- la clé propre de la passerelle, écrite
ZBG_…; - son domaine : de 1 à 256 caractères, uniquement des lettres, des chiffres, des points et des tirets ;
- son URL, qui doit commencer par
https://et faire au plus 1 024 octets.
Elle bloque une mise de 10 ZBC (1 000 000 000 unités atomiques) prélevée sur le compte du propriétaire. Le montant est le paramètre voté gateway_registration_cost, qui démarre à 10 ZBC sur chaque chaîne et ne change que par les votes de prix des sièges.
Rester inscrite
Une passerelle prouve qu’elle est en vie au moyen de transactions GatewayHeartbeat (type 37). Chaque signal de vie a un corps de 132 octets : la clé de la passerelle, la hauteur et le hachage d’un bloc récent, et une signature de la clé de la passerelle sur les 68 premiers octets. Le bloc désigné doit se trouver à 20 blocs au plus du sommet, si bien qu’un signal de vie ne peut pas être préparé à l’avance.
La chaîne accorde un intervalle de signal de vie de 240 blocs plus un délai de grâce de 480 : une passerelle silencieuse pendant 720 blocs (3 heures) est déclarée inactive, et son propriétaire récupère la mise. Un propriétaire peut aussi se retirer à tout moment avec UnregisterGateway (type 38), qui restitue également la mise. Rien n’est brûlé : la mise est une caution, pas un paiement, et il n’y a aucun abonnement.
N’importe qui peut lister les passerelles à GET /api/v1/registry/gateways. La forme de la réponse diffère selon que c’est le service d’archivage ou le nœud qui la donne. Lorsque sa passerelle tombe en panne, le portefeuille web relit cette liste, ainsi que celles des relais et des services d’archivage, et passe à une autre. Chaque passerelle peut aussi avoir des relais qui lui sont rattachés.
Le faucet du testnet
Sur le testnet, dont les pièces n’ont aucune valeur, la passerelle sert aussi le faucet à /faucet/. Donnez-lui une adresse et il envoie des ZBC de test. Le versement est divisé par deux à chaque retrait : jusqu’à 100 ZBC à la première demande, puis 50, 25, 12,5 et ainsi de suite, jusqu’à ce qu’une demande rapporte moins de 1 ZBC ; plus rien ne vient alors jusqu’à la réinitialisation hebdomadaire. Ce qui a été retiré est comptabilisé par adresse ou par adresse Internet (IP), si bien que plusieurs comptes derrière une même connexion partagent une seule allocation. Le faucet est le seul endroit qui accepte un montant en ZBC décimaux plutôt qu’en unités atomiques.
Il paie n’importe quelle adresse prise en charge, pas seulement les adresses ZBC_… : une adresse Bitcoin, Ethereum ou d’une autre chaîne étrangère fonctionne aussi, puisque ces clés peuvent contrôler des comptes ZooBC (clés et les types de comptes). Les pièces de test ne peuvent pas être échangées contre des ZBC du mainnet, et personne ne les vend (devnet, testnet et mainnet).