Overview
All NFT items in Asylum ecosystem extends pallet_uniques
and RMRK
standards and inherits tranferability and extensibility. But we want also to bring gaming semantics and interoperability to items, that's why we introduced such abstractions as Blueprint and Interpretation.
Metaverse objects entities flow diagram
- Blueprint: The extension of the classic NFT Collection. The
Blueprint
has a set of supportedInterpretations
, and all items minted from thisBlueprint
support theseInterpretations
as well. - Interpretation: The description of the media resource, which is used to interpret the
Blueprint
in different contexts. To describe such context,Interpretation
must be associated with the unique set ofTags
. This set ofTags
defines the format ofInterpretation
's metadata. - Tag: The
Tag
is used to give anInterpretation
a special semantic, allowingClient
to query specificInterpretation
according to the context of usage.Tag
can describe a list of fields, which formsInterpretaion
's metadata. - Item: The NFT minted from a particular
Blueprint
.Item
has the sameInterpretation
list, specified byBlueprint
at the time of its minting, but can differ in the future with upgrading theBlueprint
. The owner ofItem
might reject upgrading thisItem
according to the latest updates ofBlueprint
.
Blueprint metadata standard
Blueprint metadata currently contains only the description
field and has the following structure:
{
"name": {
"type": "string",
"description": "The name of the interpretation"
},
"description": {
"type": "string",
"description": "Description of the blueprint as a whole. Markdown is supported."
}
}
You can find an example of configuring the metadata in the Asylum Node testing guide in the Blueprint section.
Blueprint metadata does not have any additional fields as all the info is stored in the Interpretations and its metadata.
Tag metadata standard
Every Interpretation in the IMP ecosystem is associated with a specific set of Tags. Consider Tags as a verbal description of Interpretation. Tags can carry interpretation metadata fields with predefined or configurable values, or even without any metadata, bringing specific semantics to the Interpretation (like the pixeled
tag).
Besides the common Tag fields like id
and description
that are used to provide the understanding of the Tag semantics, Tag metadata also has a complex field - metadataExtensions
.
metadataExtensions
is the object that describes the way how the concrete Tag affects the metadata of Interpretation.
For example png
tag can bring the required format
field to the metadata with the default value png
.
The whole structure of tag metadata:
{
"id": "string",
"description": "string",
"metadataExtensions": {
"fields": [
{
"name": "string",
"type": "string",
"default": "any",
"description": "string"
}
]
}
}
You can find an example of configuring the metadata in the Asylum Node testing guide in the Tags section.
Interpretation metadata standard
Interpretation metadata contains only the description
field but can be extended by Tags (see examples in the next section).
The structure of interpretation metadata:
{
"description": "string",
"tag-metadata-field-name": "tag-metadata-field-name"
}
Examples of metadataExtensions
usage
Let's consider a few examples of metadataExtensions
usage.
- Fist one is the
pixeled
tag, which is used to define pictures in pixeled style and can bring fields likepixel-size
orsmoothed
.
Metadata of the pixeled
tag:
{
"id": "pixeled",
"description": "in pixeled style",
"metadataExtensions": {
"fileds": [
{
"name": "pixel-size",
"type": "number",
"default": "",
"description": "Size of pixeles"
},
{
"name": "smoothed",
"type": "boolean",
"default": false,
"description": "Is image smoothed"
}
]
}
}
Metadata of interpretations with pixeled
tag:
{
"description": "interpretation description",
"pixel-size": 128,
"smoothed": false,
}
- Another example is the
animation-sprite-atlas
tag, which is used to define an atlas for 2d animation and will bring required fields liketile-size-h
,tile-size-w
,tiles-count
, andpadding
.
Metadata of the animation-sprite-atlas
tag:
{
"id": "animation-sprite-atlas",
"description": "sprite atlas used for the 2d animation",
"metadataExtensions": {
"fileds": [
{
"name": "tile-size-h",
"type": "number",
"default": "",
"description": "Height of every tile in pixels"
},
{
"name": "tile-size-w",
"type": "number",
"default": "",
"description": "Width of every tile in pixels"
},,
{
"name": "padding",
"type": "number",
"default": "",
"description": "Padding between tiles in pixels"
}
{
"name": "tiles-count",
"type": "number",
"default": "",
"description": "Count of all tiles in the atlas"
}
]
}
}
Metadata of interpretations with animation-sprite-atlas
tag:
{
"description": "interpretation description",
"tile-size-h": 64,
"tile-size-w": 64,
"tiles-count": 21,
"padding": 2,
}