Metadati
Le iscrizioni possono contenere metadati CBOR, memorizzati come push di dati in campi con tag 5
. Poiché i data push sono limitati a 520 byte, i metadati più lunghi di 520 byte devono essere suddivisi in più campi con tag 5
, che saranno poi concatenati prima della decodifica.
I metadata sono facili da leggere per l'uomo e tutti i metadata saranno visualizzati dall'utente con la loro iscrizione. Coloro che iscrivono sono incoraggiati a considerare il modo in cui i metadati saranno visualizzati e a renderli concisi e attraenti.
I metadati sono renderizzati in HTML per la visualizzazione come segue:
null
,true
,false
, numbers, floats, e strings vengono renderizzate come testo normale.- Le stringhe di byte vengono rese come esadecimali maiuscole.
- Gli array sono resi come tag
<ul>
, con ogni elemento avvolto dai tag<li>
. - Le mappe sono rese come
<dl>
tags, con ogni chiave racchiusa in tag<dt>
e ogni valore racchiuso in tag<dd>
. - I tag sono resi come il tag , racchiuso in un tag
<sup>
, seguito dal valore.
CBOR è una specifica complessa con molti tipi di dati diversi e molteplici modi di rappresentare gli stessi dati. I tipi di dati esotici, come i tag, floats e bignums, e le codifiche come i valori indefiniti, potrebbero non essere visualizzati correttamente o affatto. Sono benvenuti i contributi ad ord
per porre rimedio a questo problema.
Esempio
Poiché il CBOR non è leggibile dall'uomo, in questi esempi è rappresentato come JSON. Si tenga presente che questo è solo per questi esempi e che i metadati JSON non saranno visualizzati correttamente.
I metadati {"foo":"bar","baz":[null,true,false,0]}
verrebbero inclusi in un'iscrizione come:
OP_FALSE
OP_IF
...
OP_PUSH 0x05 OP_PUSH '{"foo":"bar","baz":[null,true,false,0]}'
...
OP_ENDIF
E renderizzati come:
<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>
I metadati di lunghezza superiore a 520 byte devono essere suddivisi in più campi:
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.