Skip to main content
Every fixture directory has a manifest.json that describes the fixture and points to its XDR files. Manifests are validated against corpus/manifest.schema.json (JSON Schema 2020-12) on every run of the verifier. Here’s a real one, for the muxed-payment fixture:
manifest.json

Fields

string
required
cap<NN>-<pattern>-<network>-<NNNN>. Stable forever: results, docs and the API refer to it.
string[]
required
The CAPs whose XDR the fixture exercises, as CAP-NNNN. The first one is the fixture’s primary CAP.
integer
required
The ledger’s protocol version. The verifier checks it against the ledger header.
string
required
pubnet, testnet, or local (a standalone network built by the generator).
string
required
The XDR type of the primary file.
string
required
Where in that value the interesting part lives, e.g. the muxed destination inside a fee-bump. For humans; tools don’t parse it.
string
required
sha256 of the primary file’s decoded bytes.
object
required
Where the fixture came from: kind (captured or generated), network_endpoint, ledger, tx_hash, closed_at. Generated fixtures add generator: the stellar-core version, binary sha256, build and Soroban limits factor that produced them.
boolean
required
true only for hand-built XDR that never appeared on any network. Every fixture today is false.
object
What an SDK must extract from the bytes. Values come from an independent source (Horizon, or the transaction as built), never from an SDK under test.
object
What an indexer must store. Used by replay and the pilots.
object[]
required
One entry per XDR value: name, xdr_type, path (base64 file in the fixture directory), sha256 and bytes of the decoded value.

Conventions

  • Every 64-bit integer is a JSON string. IDs, amounts, fees and limits are strings so that no consumer’s JSON.parse can round them. This isn’t style: the kit’s own pilot driver hit that exact bug before it was fixed.
  • Files are base64 of raw XDR, one value per file, with a trailing newline. Decode them with any SDK’s fromXDR(..., 'base64').
  • Amounts in expected_decoded use the human decimal form Horizon uses (59.5110803); amounts in expected_indexed use stroops when the indexer stores stroops.