Recursie

Een belangrijke uitzondering op sandboxing is recursie. Recursieve eindpunten zijn op een whitelist geplaatste eindpunten die toegang geven tot on-chain gegevens, inclusief de inhoud van andere inscripties.

Aangezien wijzigingen aan recursieve eindpunten inscripties die van deze eindpunten afhankelijk zijn, kunnen breken, hebben recursieve eindpunten garanties voor achterwaartse compatibiliteit die niet gedeeld worden door de andere eindpunten van ord server. In het bijzonder:

  • Recursieve eindpunten zullen niet worden verwijderd
  • Objectvelden die door recursieve eindpunten worden geretourneerd, zullen niet worden hernoemd of van type veranderen

Echter, extra objectvelden kunnen worden toegevoegd of herordend, dus inscripties moeten extra, onverwachte velden kunnen verwerken en mogen niet verwachten dat velden in een specifieke volgorde worden geretourneerd.

Recursie heeft een aantal interessante toepassingen:

  • Het remixen van de inhoud van bestaande inscripties.

  • Het publiceren van stukjes code, afbeeldingen, audio of stylesheets als gedeelde openbare bronnen.

  • Generatieve kunstcollecties waarbij een algoritme wordt ingeschreven als JavaScript en wordt geïnstalleerd vanuit meerdere inscripties met unieke seeds.

  • Generatieve profielafbeeldingcollecties waarbij accessoires en attributen worden ingeschreven als afzonderlijke afbeeldingen, of in een gedeelde texture atlas, en vervolgens op unieke manieren worden gecombineerd, collage-stijl, in meerdere inscripties.

De recursieve eindpunten zijn:

  • /content/<INSCRIPTION_ID>: de inhoud van de inscriptie met <INSCRIPTION_ID>
  • /r/blockhash/<HEIGHT>: de block hash op de gegeven blockhoogte.
  • /r/blockhash: laatste block hash.
  • /r/blockheight: laatste blockhoogte.
  • /r/blockinfo/<QUERY>: blokinformatie. <QUERY> kan een blockhoogte of block hash zijn.
  • /r/blocktime: UNIX-tijdstempel van het laatste block.
  • /r/children/<INSCRIPTION_ID>: de eerste 100 kindinscriptie-ID's.
  • /r/children/<INSCRIPTION_ID>/<PAGE>: de set van 100 kindinscriptie-ID's op <PAGE>.
  • /r/children/<INSCRIPTION_ID>/inscriptions: details van de eerste 100 kindinscripties.
  • /r/children/<INSCRIPTION_ID>/inscriptions/<PAGE>: details van de set van 100 kindinscripties op <PAGE>.
  • /r/inscription/<INSCRIPTION_ID>: informatie over een inscriptie
  • /r/metadata/<INSCRIPTION_ID>: JSON-string met de hex-gecodeerde CBOR-metadata.
  • /r/parents/<INSCRIPTION_ID>: de eerste 100 ouderinscriptie-ID's.
  • /r/parents/<INSCRIPTION_ID>/<PAGE>: de set van 100 ouderinscriptie-ID's op <PAGE>.
  • /r/sat/<SAT_NUMBER>: de eerste 100 inscriptie-ID's op een satoshi.
  • /r/sat/<SAT_NUMBER>/<PAGE>: de set van 100 inscriptie-ID's op <PAGE>.
  • /r/sat/<SAT_NUMBER>/at/<INDEX>: de inscriptie-ID op <INDEX> van alle inscripties op een satoshi. <INDEX> kan een negatief getal zijn om van achteren te indexeren. Bijvoorbeeld, 0 is de eerste en -1 is de meest recente.

Opmerking: <SAT_NUMBER> staat alleen het daadwerkelijke nummer van een satoshi toe, en geen andere sat-notaties zoals graad, percentiel of decimaal. We kunnen in de toekomst uitbreiden om die toe te staan.

Antwoorden van de bovenstaande recursieve eindpunten zijn JSON. Voor achterwaartse compatibiliteit worden extra eindpunten ondersteund, waarvan sommige platte-tekst-antwoorden retourneren.

  • /blockheight: de laatste blockhoogte.
  • /blockhash: de laatste block hash.
  • /blockhash/<HEIGHT>: block hash op de opgegeven blockhoogte.
  • /blocktime: UNIX-tijdstempel van het laatste blok.

Voorbeelden

  • /r/blockhash/0:
"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"
  • /r/blockheight:
777000
  • /r/blockinfo/0:

Opmerking: feerate_percentiles zijn feerates op het 10e, 25e, 50e, 75e en 90e percentiel in sats/vB.

{ "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, "versie": 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.