Métadonnées
Les inscriptions peuvent inclure des métadonnées CBOR, stockées sous forme de pushs de données dans des champs avec étiquette 5
. Vu que les pushs de données sont limités à 520 octets, les métadonnées de plus de 520 octets doivent être divisées en plusieurs champs avec étiquette 5
, qui seront ensuite concaténés avant le décodage.
Les métadonnées sont lisibles par l’humain, et toutes les métadonnées seront affichées à l’utilisateur avec son inscription. Les inscripteurs sont encouragés à réfléchir à la manière dont les métadonnées seront affichées et à les rendre concises et attrayantes.
Les métadonnées sont converties en HTML pour être affichées de la manière suivante :
null
(nul),true
(vrai),false
(faux), les nombres, les éléments flottants (floats) et les chaînes de caractères (strings) sont rendus en texte brut.- Les chaînes d’octets sont rendues sous forme hexadécimale majuscule.
- Les tableaux (arrays) sont rendus en étiquettes
<ul>
, chaque élément étant encadré par des étiquettes<li>
. - Les tableaux associatifs (maps) sont rendus sous forme d’étiquettes
<dl>
, chaque clé étant encadrée par des étiquettes<dt>
et chaque valeur étant encadrée par des étiquettes<dd>
. - Les étiquettes sont rendues sous forme de l'étiquette, encadrées par une étiquette
<sup>
, suivie de la valeur.
CBOR est une spécification complexe qui comporte de nombreux types de données différents et de multiples façons de représenter les mêmes données. Les types de données exotiques, tels que les étiquettes, les éléments flottants et les bignums, ainsi que les encodages tels que les valeurs indéfinies, peuvent ne pas s’afficher correctement, voire pas du tout. Les contributions à ord
visant à remédier à ce problème sont les bienvenues.
Exemple
Le CBOR n’étant pas lisible par l’humain, il est représenté sous forme de JSON dans les exemples suivants. Gardez à l’esprit que cela est uniquement pour ces exemples, et que les métadonnées JSON ne seront pas affichées correctement.
Les métadonnées {"foo":"bar","baz":[null,true,false,0]}
seraient incluses dans une inscription sous la forme suivante :
OP_FALSE
OP_IF
...
OP_PUSH 0x05 OP_PUSH '{"foo":"bar","baz":[null,true,false,0]}'
...
OP_ENDIF
Et rendues comme suit :
<dl>
...
<dt>metadata</dt>
<dd>
<dl>
<dt>foo</dt>
<dd>bar</dd>
<dt>baz</dt>
<dd>
<ul>
<li>null</li>
<li>true</li>
<li>false</li>
<li>0</li>
</ul>
</dd>
</dl>
</dd>
...
</dl>
Les métadonnées de plus de 520 octets doivent être divisées en plusieurs champs :
OP_FALSE
OP_IF
...
OP_PUSH 0x05 OP_PUSH '{"very":"long","metadata":'
OP_PUSH 0x05 OP_PUSH '"is","finally":"done"}'
...
OP_ENDIF
Which would then be concatenated into {"very":"long","metadata":"is","finally":"done"}
.
See examples for on-chain examples of inscriptions that feature this functionality.