pub enum PlutusDatumSchema {
    BasicConversions,
    DetailedSchema,
}
Expand description

JSON <-> PlutusData conversion schemas. Follows ScriptDataJsonSchema in cardano-cli defined at: https://github.com/input-output-hk/cardano-node/blob/master/cardano-api/src/Cardano/Api/ScriptData.hs#L254

All methods here have the following restrictions due to limitations on dependencies:

  • JSON numbers above u64::MAX (positive) or below i64::MIN (negative) will throw errors
  • Hex strings for bytes don’t accept odd-length (half-byte) strings. cardano-cli seems to support these however but it seems to be different than just 0-padding on either side when tested so proceed with caution

Variants§

§

BasicConversions

ScriptDataJsonNoSchema in cardano-node.

This is the format used by –script-data-value in cardano-cli This tries to accept most JSON but does not support the full spectrum of Plutus datums. From JSON:

  • null/true/false/floats NOT supported
  • strings starting with 0x are treated as hex bytes. All other strings are encoded as their utf8 bytes. To JSON:
  • ConstrPlutusData not supported in ANY FORM (neither keys nor values)
  • Lists not supported in keys
  • Maps not supported in keys
§

DetailedSchema

ScriptDataJsonDetailedSchema in cardano-node.

This is the format used by –script-data-file in cardano-cli This covers almost all (only minor exceptions) Plutus datums, but the JSON must conform to a strict schema. The schema specifies that ALL keys and ALL values must be contained in a JSON map with 2 cases:

  1. For ConstrPlutusData there must be two fields “constructor” contianing a number and “fields” containing its fields e.g. { “constructor”: 2, “fields”: [{“int”: 2}, {“list”: [{“bytes”: “CAFEF00D”}]}]}
  2. For all other cases there must be only one field named “int”, “bytes”, “list” or “map” Integer’s value is a JSON number e.g. {“int”: 100} Bytes’ value is a hex string representing the bytes WITHOUT any prefix e.g. {“bytes”: “CAFEF00D”} Lists’ value is a JSON list of its elements encoded via the same schema e.g. {“list”: [{“bytes”: “CAFEF00D”}]} Maps’ value is a JSON list of objects, one for each key-value pair in the map, with keys “k” and “v” respectively with their values being the plutus datum encoded via this same schema e.g. {“map”: [ {“k”: {“int”: 2}, “v”: {“int”: 5}}, {“k”: {“map”: [{“k”: {“list”: [{“int”: 1}]}, “v”: {“bytes”: “FF03”}}]}, “v”: {“list”: []}} ]} From JSON:
  • null/true/false/floats NOT supported
  • the JSON must conform to a very specific schema To JSON:
  • all Plutus datums should be fully supported outside of the integer range limitations outlined above.

Trait Implementations§

Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
This method tests for self and other values to be equal, and is used by ==.
This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Should always be Self
The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
Uses borrowed data to replace owned data, usually by cloning. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.