Recursión
Una excepción importante al [sandboxing](../inscripciones.md#sandboxing o aislamiento) es la recursión. Los endpoints recursivos son endpoints que permiten el acceso a los datos que hay en cadena, incluyendo el contenido de otras inscripciones.
Dado que los cambios en los endpoints recursivos podrían romper inscripciones que dependen de ellos, los endpoints recursivos tienen compatibilidad retroactiva que no comparten los otros endpoints en el server de ord
. En particular:
- Los endpoints recursivos no serán eliminados
- Los campos de objeto que devuelven los endpoints recursivos no serán renombrados ni cambiarán de tipo
Sin embargo, se pueden añadir o reordenar campos de objeto adicionales, por lo que las inscripciones deben manejar campos adicionales e inesperados, y no deben esperar que los campos estén en un orden específico.
La recursión tiene varios casos de uso interesantes:
-
Reutilización del contenido de inscripciones existentes.
-
Publicar fragmentos de código, imágenes, audio y hojas de cálculo como recursos públicos.
-
Colecciones de arte generativo en donde un algoritmo está inscrito en JavaScript, y se instancia desde múltiples inscripciones con semillas únicas.
-
Colecciones generativas de imágenes de perfil donde los accesorios y atributos se inscriben como imágenes individuales, o en un atlas de texturas compartido, y luego se combinan, estilo collage, en combinaciones únicas creando múltiples inscripciones.
Los endpoints recursivos son:
/content/<INSCRIPTION_ID>
: el contenido de la inscripción con<INSCRIPTION_ID>
/r/blockhash/<HEIGHT>
: hash del bloque a la altura del bloque./r/blockhash
: hash del bloque mas reciente./r/blockheight
: altura de bloque más reciente./r/blockinfo/<QUERY>
: información del bloque.<QUERY>
puede ser altura de bloque o hash de un bloque./r/blocktime
: marca de tiempo UNIX del bloque más reciente./r/children/<INSCRIPTION_ID>
: los primeros 100 ids de inscripciones hijos./r/children/<INSCRIPTION_ID>/<PAGE>
: el conjunto de 100 ids de inscripciones hijos en<PAGE>
./r/children/<INSCRIPTION_ID>/inscriptions
: detalles de las primeras 100 inscripciones hijos./r/children/<INSCRIPTION_ID>/inscriptions/<PAGE>
: detalles del conjunto de 100 inscripciones hijas en<PAGE>
./r/inscription/<INSCRIPTION_ID>
: información de una inscripción/r/metadata/<INSCRIPTION_ID>
: string JSON conteniendo los metadatos CBOR codificados en hexadecimal./r/parents/<INSCRIPTION_ID>
: los primeros 100 ids de inscripciones padres./r/parents/<INSCRIPTION_ID>/<PAGE>
: conjunto de 100 ids de inscripciones padres en<PAGE>
./r/sat/<SAT_NUMBER>
: las primeras 100 ids de inscripciones en un sat./r/sat/<SAT_NUMBER>/<PAGE>
: el conjunto de 100 ids de inscripciones en<PAGE>
./r/sat/<SAT_NUMBER>/at/<INDEX>
: el id de inscripcion en<INDEX>
de todas las inscripciones en un sat.<INDEX>
puede ser un número negativo para indexar desde el final.0
siendo el primero y-1
siendo el más reciente.
Nota: <SAT_NUMBER>
solo permite el número real de un sat, no otras notaciones de sat como sexagesimal, porcentual o decimal. En el futuro, podemos expandir para permitir esas notaciones.
Las respuestas de los endpoints recursivos anteriores son en JSON. Para compatibilidad retroactiva, se admiten endpoints adicionales, algunos de los cuales devuelven respuestas en texto plano.
/blockheight
: altura del bloque más reciente./blockhash
: hash del bloque más reciente./blockhash/<ALTURA>
: hash del bloque en la altura de bloque dada./blocktime
: marca de tiempo UNIX del bloque más reciente.
Ejemplos
/r/blockhash/0
:
"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"
/r/blockheight
:
777000
/r/blockinfo/0
:
Nota: feerate_percentiles
son las tarifas en los percentiles 10, 25, 50, 75, y 90.
{
"average_fee": 0,
"average_fee_rate": 0,
"bits": 486604799,
"chainwork": "0000000000000000000000000000000000000000000000000000000100010001",
"confirmations": 0,
"difficulty": 0.0,
"hash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",
"feerate_percentiles": [0, 0, 0, 0, 0],
"height": 0,
"max_fee": 0,
"max_fee_rate": 0,
"max_tx_size": 0,
"median_fee": 0,
"median_time": 1231006505,
"merkle_root": "0000000000000000000000000000000000000000000000000000000000000000",
"min_fee": 0,
"min_fee_rate": 0,
"next_block": null,
"nonce": 0,
"previous_block": null,
"subsidy": 5000000000,
"target": "00000000ffff0000000000000000000000000000000000000000000000000000",
"timestamp": 1231006505,
"total_fee": 0,
"total_size": 0,
"total_weight": 0,
"transaction_count": 1,
"versión": 1
}
/r/blocktime
:
1700770905
/r/children/60bcf821240064a9c55225c4f01711b0ebbcab39aa3fafeefe4299ab158536fai0/49
:
{
"ids":[
"7cd66b8e3a63dcd2fada917119830286bca0637267709d6df1ca78d98a1b4487i4900",
"7cd66b8e3a63dcd2fada917119830286bca0637267709d6df1ca78d98a1b4487i4901",
...
"7cd66b8e3a63dcd2fada917119830286bca0637267709d6df1ca78d98a1b4487i4935",
"7cd66b8e3a63dcd2fada917119830286bca0637267709d6df1ca78d98a1b4487i4936"
],
"more":false,
"page":49
}
/r/children/60bcf821240064a9c55225c4f01711b0ebbcab39aa3fafeefe4299ab158536fai0/inscriptions/49
:
{
"children": [
{
"charms": [
"cursed"
],
"fee": 44,
"height": 813929,
"id": "7cd66b8e3a63dcd2fada917119830286bca0637267709d6df1ca78d98a1b4487i4900",
"number": -223695,
"output": "dcaaeacf58faea0927468ea5a93f33b7d7447841e66f75db5a655d735510c518:0",
"sat": 1897135510683785,
"satpoint": "dcaaeacf58faea0927468ea5a93f33b7d7447841e66f75db5a655d735510c518:0:74188588",
"timestamp": 1698326262
},
...
{
"charms": [
"cursed"
],
"fee": 44,
"height": 813929,
"id": "7cd66b8e3a63dcd2fada917119830286bca0637267709d6df1ca78d98a1b4487i4936",
"number": -223731,
"output": "dcaaeacf58faea0927468ea5a93f33b7d7447841e66f75db5a655d735510c518:0",
"sat": 1897135510683821,
"satpoint": "dcaaeacf58faea0927468ea5a93f33b7d7447841e66f75db5a655d735510c518:0:74188624",
"timestamp": 1698326262
}
],
"more": false,
"page": 49
}
/r/inscription/3bd72a7ef68776c9429961e43043ff65efa7fb2d8bb407386a9e3b19f149bc36i0
{
"charms": [],
"content_type": "image/png",
"content_length": 144037,
"delegate": null,
"fee": 36352,
"height": 209,
"id": "3bd72a7ef68776c9429961e43043ff65efa7fb2d8bb407386a9e3b19f149bc36i0",
"number": 2,
"output": "3bd72a7ef68776c9429961e43043ff65efa7fb2d8bb407386a9e3b19f149bc36:0",
"sat": null,
"satpoint": "3bd72a7ef68776c9429961e43043ff65efa7fb2d8bb407386a9e3b19f149bc36:0:0",
"timestamp": 1708312562,
"value": 10000,
"address": "bc1pz4kvfpurqc2hwgrq0nwtfve2lfxvdpfcdpzc6ujchyr3ztj6gd9sfr6ayf"
}
/r/metadata/35b66389b44535861c44b2b18ed602997ee11db9a30d384ae89630c9fc6f011fi3
:
"a2657469746c65664d656d6f727966617574686f726e79656c6c6f775f6f72645f626f74"
/r/sat/1023795949035695
:
{
"ids":[
"17541f6adf6eb160d52bc6eb0a3546c7c1d2adfe607b1a3cddc72cc0619526adi0"
],
"more":false,
"page":0
}
/r/sat/1023795949035695/at/-1
:
{
"id":"17541f6adf6eb160d52bc6eb0a3546c7c1d2adfe607b1a3cddc72cc0619526adi0"
}
See examples for on-chain examples of inscriptions that feature this functionality.