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.