Skip to content

Commit

Permalink
add schemas and a start working on factory
Browse files Browse the repository at this point in the history
  • Loading branch information
alessandromazza98 committed Jul 16, 2023
1 parent dba3d4b commit 755a04f
Show file tree
Hide file tree
Showing 6 changed files with 1,513 additions and 0 deletions.
18 changes: 18 additions & 0 deletions scripts/build_schema.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
START_DIR=$(pwd)

echo "🖊 Generating schema...!"
for c in ./contracts/*
do
cd "$c"
CMD="cargo run --example schema"

# discard output

eval $CMD > /dev/null

# remove redundant schemas

rm -rf ./schema/raw
cd "$START_DIR"
done
echo "✅ Schemas generated."
252 changes: 252 additions & 0 deletions scripts/schema/all_nft_info_response_for__metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,252 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "AllNftInfoResponse_for_Metadata",
"type": "object",
"required": [
"access",
"info"
],
"properties": {
"access": {
"description": "Who can transfer the token",
"allOf": [
{
"$ref": "#/definitions/OwnerOfResponse"
}
]
},
"info": {
"description": "Data on the token itself,",
"allOf": [
{
"$ref": "#/definitions/NftInfoResponse_for_Metadata"
}
]
}
},
"additionalProperties": false,
"definitions": {
"Approval": {
"type": "object",
"required": [
"expires",
"spender"
],
"properties": {
"expires": {
"description": "When the Approval expires (maybe Expiration::never)",
"allOf": [
{
"$ref": "#/definitions/Expiration"
}
]
},
"spender": {
"description": "Account that can transfer/send the token",
"type": "string"
}
},
"additionalProperties": false
},
"Expiration": {
"description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)",
"oneOf": [
{
"description": "AtHeight will expire when `env.block.height` >= height",
"type": "object",
"required": [
"at_height"
],
"properties": {
"at_height": {
"type": "integer",
"format": "uint64",
"minimum": 0.0
}
},
"additionalProperties": false
},
{
"description": "AtTime will expire when `env.block.time` >= time",
"type": "object",
"required": [
"at_time"
],
"properties": {
"at_time": {
"$ref": "#/definitions/Timestamp"
}
},
"additionalProperties": false
},
{
"description": "Never will never expire. Used to express the empty variant",
"type": "object",
"required": [
"never"
],
"properties": {
"never": {
"type": "object",
"additionalProperties": false
}
},
"additionalProperties": false
}
]
},
"Metadata": {
"description": "OpenSea metadata standard, used by Stargaze marketplace. See [this link](https://docs.opensea.io/docs/metadata-standards) for details.",
"type": "object",
"properties": {
"animation_url": {
"description": "A URL to a multi-media attachment for the item. The file extensions GLTF, GLB, WEBM, MP4, M4V, OGV, and OGG are supported, along with the audio-only extensions MP3, WAV, and OGA.\n\nAnimation_url also supports HTML pages, allowing you to build rich experiences and interactive NFTs using JavaScript canvas, WebGL, and more. Scripts and relative paths within the HTML page are now supported. However, access to browser extensions is not supported.",
"type": [
"string",
"null"
]
},
"attributes": {
"description": "These are the attributes for the item, which will show up on the OpenSea page for the item.",
"type": [
"array",
"null"
],
"items": {
"$ref": "#/definitions/Trait"
}
},
"background_color": {
"description": "Background color of the item on OpenSea. Must be a six-character hexadecimal without a pre-pended #.",
"type": [
"string",
"null"
]
},
"description": {
"description": "A human readable description of the item. Markdown is supported.",
"type": [
"string",
"null"
]
},
"external_url": {
"description": "This is the URL that will appear below the asset's image on OpenSea and will allow users to leave OpenSea and view the item on your site.",
"type": [
"string",
"null"
]
},
"image": {
"description": "This is the URL to the image of the item. Can be just about any type of image (including SVGs, which will be cached into PNGs by OpenSea), and can be [IPFS](https://github.com/ipfs/is-ipfs) URLs or paths. We recommend using a 350 x 350 image.",
"type": [
"string",
"null"
]
},
"image_data": {
"description": "Raw SVG image data, if you want to generate images on the fly (not recommended). Only use this if you're not including the `image` parameter.",
"type": [
"string",
"null"
]
},
"name": {
"description": "Name of the item.",
"type": [
"string",
"null"
]
},
"youtube_url": {
"description": "A URL to a YouTube video.",
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"NftInfoResponse_for_Metadata": {
"type": "object",
"required": [
"extension"
],
"properties": {
"extension": {
"description": "You can add any custom metadata here when you extend cw721-base",
"allOf": [
{
"$ref": "#/definitions/Metadata"
}
]
},
"token_uri": {
"description": "Universal resource identifier for this NFT Should point to a JSON file that conforms to the ERC721 Metadata JSON Schema",
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"OwnerOfResponse": {
"type": "object",
"required": [
"approvals",
"owner"
],
"properties": {
"approvals": {
"description": "If set this address is approved to transfer/send the token as well",
"type": "array",
"items": {
"$ref": "#/definitions/Approval"
}
},
"owner": {
"description": "Owner of the token",
"type": "string"
}
},
"additionalProperties": false
},
"Timestamp": {
"description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```",
"allOf": [
{
"$ref": "#/definitions/Uint64"
}
]
},
"Trait": {
"description": "An attribute of the token as defined by the [OpenSea metadata standard](https://docs.opensea.io/docs/metadata-standards#attributes).",
"type": "object",
"required": [
"trait_type",
"value"
],
"properties": {
"display_type": {
"type": [
"string",
"null"
]
},
"trait_type": {
"type": "string"
},
"value": {
"type": "string"
}
},
"additionalProperties": false
},
"Uint64": {
"description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```",
"type": "string"
}
}
}
Loading

0 comments on commit 755a04f

Please sign in to comment.