Paquets
tilttek/collectionsChances publiées
Packs::odds(pack) renvoie les Odds que publie un paquet : la chance de chaque rareté et de chaque objet, avant tout
tirage. Un site qui fait tirer ses membres au hasard dit à quelles chances.
Ouvrir un paquet
Un paquet s'ouvre en deux temps, pour que ni le site ni le membre ne puisse choisir le tirage :
- Engager.
commit(member, pack, key)tire un germe secret de 16 à 64 octets duSeedSourceinjecté —SecureSeedsen production, un germe fixe dans les tests — et renvoie unePendingOpening: la clé, le membre, le paquet et le germe en hexadécimal. Le site la garde et montre au membre soncommitment(), le SHA-256 du germe. Rien n'est encore remis. UnePendingOpeningse reconstruit par son constructeur à partir de ce qui a été gardé. - Ouvrir. Le membre, après avoir vu l'engagement, donne un germe du client de 1 à 256 octets de texte UTF-8 : des
mots qu'il tape, ou des octets que son propre appareil tire.
open(pending, clientSeed, moment)tire les objets du paquet — chacun séparément : une rareté selon son poids, puis un objet de cette rareté — et remet un exemplaire de chacun, sous la clé suivie de#et de la place de l'objet.
La même ouverture en attente, ouverte de nouveau avec le même germe du client, renvoie l'ouverture qu'elle a faite ; une clé qui a ouvert un autre paquet, ou pour un autre membre, ou à partir d'un autre germe ou d'un autre germe du client, est refusée.
Le tirage est celui que donnent les deux germes et la clé : Xoshiro256StarStar dont le germe est le HMAC-SHA256, sous
le germe du site, du germe du client, d'un saut de ligne et de la clé. Le germe du site est fixé avant que le germe du
client soit connu, et le membre choisit le sien sans connaître celui du site : le site ne peut pas garder seulement les
germes dont le tirage lui convient, et le membre ne peut pas essayer des germes jusqu'à ce que l'un donne un objet
légendaire. Un germe du client que le site choisit à la place du membre n'offre pas cette garantie.
Vérifier un tirage
La PackOpening garde le germe en hexadécimal, son engagement et le germe du client. Le membre vérifie ensuite que le
germe correspond à l'engagement affiché et que verify(opening) rejoue les mêmes objets. La vérification tire avec le
paquet tel que le catalogue le contient maintenant : un paquet dont les ensembles ou les poids ont changé depuis ne
vérifie plus ses anciennes ouvertures.