Les + populaires

BTC ETH SOL XRP BNB USDC USDT

Suivez-nous

Affichage des TxID IPFS et Arweave avec des octets stockés | de Kévin | Coinmons | février 2022

IAavec

Dans notre article précédent, j’ai couvert les fonctions d’affichage de contrat 21MMpixels qui encodent les identifiants de contenu IPFS Base32 (IPFS cidV1) et les ID de transaction Arweave Base64URL dans la structure que nous utilisons pour stocker les liens d’image pour les tuiles NFT en 21 millions de pixels. Ensuite, j’expliquerai brièvement les fonctions d’affichage des contrats qui traduisent les informations stockées dans un format lisible par l’homme.

Le contrat 21MMpixels tokenImg est le point d’entrée pour afficher l’ensemble d’images pour l’un des NFT composant l’image de 21 MMpixels. Cette fonction commence par lire le Structure rachetée pour une tuile donnée. Les octets1 multibase domaine de la Structure rachetée détermine la fonction que nous utilisons pour décoder le lien de l’image. Aujourd’hui, nous allons nous concentrer sur deux des contrats définis multibase possibilités, IPFS qui est encodé en 0x62 (Base32 Majuscule) ou 0x42 (Base32 Minuscule), et les identifiants de transaction Arweave, encodés en 0x01.

Dans le cas d’un lien image IPFS, nous appelons d’abord notre byteArraysToBase32String fonction avec les deux condensés bytes30, le multibaseet le stocké longueur. Si la longueur utilisé dépasse 240 bits (30 octets * 8 bits / octet), nous appellerons _bytes30ToString deux fois, d’abord avec le premier condensé, d’une longueur de 48 (240 bits divisés par 5 bits/caractère) et le multibaseet ensuite avec le deuxième résumé, une longueur de (longueur stockée moins 240) divisée par 5, et le multibase. Si la longueur utilisée est inférieure à 241 bits on utilisera simplement le résultat de _bytes30ToString avec le premier résumé, une taille de longueur divisé par 5, et le multibase.

le _bytes30ToString fonction appelée avec 3 variables renvoie un tableau d’octets représentant une chaîne en codage UTF8. La fonction crée une nouvelle variable d’octets (bytesArray) avec une longueur égale à l’appelé longueur, qui représente le nombre de caractères. Pour Base32, nous définissons un uint8 ajouter et basé sur multibase, égal à 65 pour Base32Lower et 97 pour Base32Upper. Nous entrons ensuite dans une boucle for qui utilise deux fonctions pour un je de 0 à longueur. Dans chaque boucle, on appelle d’abord la fonction _get5BitsAsUint avec les octets30 saisiret je.

le _get5BitsAsUint La fonction crée une variable temporaire à partir de l’entrée bytes30 (temp), décalages à gauche (<<) la variable temp par le je de la fonction appelante, nommée comme position dans cette fonction, multiplié par 5. Nous créons ensuite un masque bytes30 de 0xf8 suivi de vingt-huit zéros, ce qui en binaire serait cinq uns suivis de 235 zéros. Nous utilisons l’opérateur « et » au niveau du bit (&) pour combiner le masque et le temp variable. Enfin, on décale vers la droite (>>) temp par 235, et retourne un uint8 avec uint8(uint240((temp))).

Le résultat de la _get5BitsAsUint fonction est utilisée pour appeler _uintToChar avec le résultat et le ajouter et. Cette _uintToChar renvoie un bytes1 représentant le code de caractère UTF8. Si le uint8 converti est inférieur à 26 (représentant une lettre), il renvoie le uint8 plus le ajouter et. Si le uint8 converti est supérieur à 25 (représentant un chiffre), il renvoie le uint8 plus 24. Le résultat renvoyé par _uintToChar est ajouté à la bytesArray variable à une position d’octet de je.

Les octets renvoyés par _bytes30ToString sont convertis en chaînes UTF8 avec la fonction chaîne (octets. concat (résultat _bytes30ToString)).

La conversion des identifiants de transaction Arweave stockés fonctionne de manière très similaire à la conversion IPFS. Je vais brièvement couvrir les différences.

le byteArrayToBase64String fonction utilise un autre _bytes30ToString fonction, celle-ci appelée avec le résumé bytes30 et un longueur. Cette fonction appelle deux fonctions, _get6BitsAsUintet _uintToChar avec une seule variable.

le _get6BitsAsUint fonction diffère de la _get5BitsAsUint fonction en ce qu’il se décale d’abord à gauche de la position multiplié par 6 (Base64 utilise 6 bits par caractère), le masque bytes30 commence par 0xfc, représentant six uns suivis de 234 zéros, et le décalage final à droite est de 234.

le _uintToChar fonction utilisée pour la conversion Arweave Base64 est appelée avec le résultat uint8 (_conv) de _get6BitsAsUint et n’a pas de ajouter et. Cette fonction renvoie les octets1 du _conv + 65 pour _conv < 26 (caractères alphabétiques "a" — "z"), _conv + 71 pour _conv < 52 (caractères alphabétiques "A" — "Z"), _conv — 4 (chiffres « 0 » — « 9 »), _conv — 17 pour _conv == 62 (« -« ), et _conv + 32 pour _conv == 63 (« _ »).

Étant donné que toutes les fonctions utilisées dans le contrat 21MMpixels pour les opérations Base32 et Base64 sont des fonctions d’affichage, nous n’avons pas nécessairement optimisé les fonctions. Nous sommes heureux de répondre à toutes vos questions et de recevoir vos commentaires.

A lire aussi

Source medium.com

Investissez en bourse
Trade Republic
10€ offerts en actions

Donnez votre avis

Soyez le 1er à noter cet article


Partagez cet article maintenant !

Envoyez simplement nos contenus crypto et finance à vos proches.