Metadatos

Las inscripciones pueden incluir metadatos de tipo CBOR, almacenados como envío de datos en campos con la etiqueta 5. Dado que los envíos de datos están limitados a 520 bytes, los metadatos que excedan los 520 bytes deben dividirse en varios campos que contengan la etiqueta 5, los cuales se concatenarán antes de la decodificación.

Los metadatos son legibles por humanos, y todos los metadatos se mostrarán al usuario junto con su inscripción. Se incentiva a los inscriptores que consideren cómo se verán los metadatos y a crear metadatos sean concisos y atractivos.

Los metadatos se renderizan en HTML para su visualización de la siguiente manera:

  • null, true, false, números, floats y strings se renderizan como texto sin formato.
  • Los strings de bytes se renderizan como hexadecimal en mayúsculas.
  • Las matrices se renderizan como etiquetas <ul>, con cada elemento envuelto en etiquetas <li>.
  • Los mapas se renderizan como etiquetas <dl>, con cada llave envuelta en etiquetas <dt> y cada valor envuelto en etiquetas <dd>.
  • Las etiquetas se renderizan como la etiqueta, dentro de una etiqueta <sup>, seguida del valor.

CBOR es una especificación compleja con muchos tipos de datos y múltiples formas de representar los mismos datos. Puede que los tipos de datos exóticos, tales como etiquetas, floats y bignums, y codificaciones como valores indefinidos, no se muestren correctamente o tal vez ni aparezcan. Las contribuciones a ord para remediar esto son bienvenidas.

Ejemplo

Dado que CBOR no es legible por humanos, en estos ejemplos se representa como JSON. Tenga en cuenta que esto es solo para estos ejemplos, y los metadatos JSON no se mostrarán correctamente.

Los metadatos {"foo":"bar","baz":[null,true,false,0]} se incluirían en una inscripción de esta manera:

OP_FALSE
OP_IF
    ...
    OP_PUSH 0x05 OP_PUSH '{"foo":"bar","baz":[null,true,false,0]}'
    ...
OP_ENDIF

Y renderizados de esta forma:

<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>

Metadatos mayores a 520 bytes deben dividirse en varios campos:

OP_FALSE
OP_IF
    ...
    OP_PUSH 0x05 OP_PUSH '{"metadatos":"muy","largos":'
    OP_PUSH 0x05 OP_PUSH '"porfin","se":"terminan"}'
    ...
OP_ENDIF

Que luego se concatenaría en {"metadatos":"muy","largos":"porfin","se":"terminan"}.

See examples for on-chain examples of inscriptions that feature this functionality.