Specs

Tools

App

Kusama canary facing left
Radical Design Logo
Mint NFTs like a pro.

No native NFTs on Kusama? No problem! With RMRK, we hacked around silly things like protocol limitations and common sense!

GO TO APP

What is RMRK.app?

RMRK.app is a way to abuse Kusama's system.remark extrinsic (?) to write custom notes onto the chain in a standardized and structured way.

Native NFTs are coming to Kusama through projects like Moonbeam and Unique. But we want NFTs NOW.

Each NFT is part of a collection. Each collection and each member NFT have some defined fields and metadata that can enrich their look, feel, and uniqueness.

Because the system.remark is being abused to make this possible, extra care needs to be taken to properly read chain state and process only valid RMRK NFTs. More info in the standards section below.

Is it live?

While it has been added to Kusama's broader NFT strategy you should still not use it for anything non-trivial and should absolutely consider it "alpha". Sign up to the newsletter below to be notified when we launch new NFTs, new standards, and new tools to interact with them.

Standards

Standards exist to formalize the shape and form of remark-based NFTs. They're simple JSON structures written according to some rules detailed in the Specs Repo. Here's an example collection and an example NFT in that collection.

NFT Collection

Collection Definition

{
  "version": "RMRK0.1",
  "name": "Dot Leap Early Promoters",
  "max": 100,
  "issuer": "CpjsLDC1JFyrhm3ftC9Gs4QoyrkHKhZKtK7YqGTRFtTafgp",
  "symbol": "DLEP",
  "id": "0aff6865bed3a66b-DLEP",
  "metadata": "ipfs://ipfs/QmVgs8P4awhZpFXhkkgnCwBp4AdKRj3F9K58mCZ6fxvn3j"
}
              

Collection Metadata

{
  "description": "Everyone who promoted [Dot Leap](https://dotleap.substack.com) via the in-email Tweet link is eligible.",
  "attributes": [],
  "external_url": "https://rmrk.app/registry/0aff6865bed3a66b-DLEP",
  "image": "ipfs://ipfs/QmYcWFQCY1bAZ7ffRggt367McMN5gyZjXtribj5hzzeCWQ"
}
              

NFT

NFT Edition 15 Definition

{
  "collection": "0aff6865bed3a66b-DLEP",
  "name": "DL15",
  "transferable": 1,
  "sn": "0000000000000001",
  "metadata": "ipfs://ipfs/QmavoTVbVHnGEUztnBT2p3rif3qBPeCfyyUE5v4Z7oFvs4"
}
              

NFT Edition 15 Metadata

{
    "external_url": "https://rmrk.app/registry/0aff6865bed3a66b-DLEP",
    "image": "ipfs://ipfs/QmSY3VzdNdAphEs51GW9QMAUotaX3Rf6WeGQkvPPVhEQ3B",
    "description": "Everyone who promoted Dot Leap via the in-email link in edition 15",
    "name": "DL15",
    "attributes": [],
    "background_color": "ffffff"
}
              

Collection and NFT Standards

The definitions above are based on the RMRK0.1 standard. You can see this version of the standard on Github, or below.

NFTs are part of collections. NFTs and Collections are broadly defined as "entities", while interactions between them and the off-chain world are predictably called "interactions". A game called "Zombie collector" can have different NFTs inside it, like "Blue Zombie", "Red Zombie", etc. The "Garmin" sports watch app can have different badges like "Midnight runner", "Long distance swimmer", etc. Collections can also be used to sub-group NFTs: "Garmin - Swimming", "Garmin - Running" and each collection can have its own issuer.

Collection standard (click for details)
To issue an NFT, an issuer first needs to declare a collection. A collection has basic attributes like the standard version used, so tools know how to process the NFTs, the issuer, ID, and maximum number of NFTs ever to be minted in that collection, total. Additionally, it can contain a link to its metadata which can contain an image, attributes, URL, and description. Think of a collection as a box of badges labeled "My Boy Scout badges".
NFT standard (click for details)
Once a collection has been issued, the issuer can mint NFTs inside that collection. Each NFT is unique. The NFT instance definition contains its own attributes like name, whether or not it's transferable, and a link to metadata. Think of an NFT like a badge in a box labeled "My Boy Scout badges".
Collection Metadata standard (click for details)

A collection can have metadata in an off-chain location, preferably on IPFS. The metadata contains a description, an image, an external URL on which to learn more, and possibly attributes - descriptors that add uniqueness and rarity to NFTs. Live example

NFT Metadata standard (click for details)

An NFT can (and should!) have metadata in an off-chain location, preferably on IPFS. The metadata contains a description, an image, an external URL on which to learn more, and possibly attributes - descriptors that add uniqueness and rarity to NFTs. It can also contain animation and YouTube video links for more meta info about the NFT. Live example

Interaction Standards

Interactions have their own extremely simple standard. Tools are expected to recognize this standard, and discard abuse attempts. For example, no one is stopping a random user from crafting a transaction that makes it seem like they sent someone an NFT they do not own. The TX standard is there to formalize transfers according to data in the NFTs and their Collections. We further document this in the Implementer's Guide

The following interactions currently exist:

MINT (click for standard)
Mints a collection of NFTs, priming your project for issuance. You will be issuing NFTs inside this collection.
MINTNFT (click for standard)
Mints an NFT into an existing collection. Must respect the limits put in place by the collection, like issuer and max number of NFTs to issue.
LIST (click for standard)
Lists an NFT for sale for a specific price. The NFT is immediately available on-chain and can be purchased with a BUY interaction (see below).
BUY (click for standard)
Buys an NFT listed for sale, provided enough funds were sent to complete the purchase. It is the buyer's responsibility to check for the exact price and not miss their mark, otherwise ownership will not be reassigned, but funds will still be sent. Piecemeal purchases aren't possible, so paying the difference would entail contacting the NFT owner and getting them to issue a SEND (see below).
CONSUME (click for standard)
Burns an NFT, causing an application-specific effect. Consume a potion in-game, use up a coupon or concert ticket, or spend reputation on voting in a DAO.
CHANGEISSUER (click for standard)
Changes or relinquishes ownership of an NFT collection. Useful when selling a project, or even when you want to decentralize completely and prevent anyone from ever minting any more NFTs in that collection, causing provable scarcity.
SEND (click for standard)
Sends an NFT to a recipient. See example below!

FAQ

Isn't this expensive?

A single send transaction costs around 0.005 KSM, with a mint transaction going up to 0.01 KSM maximum in our current experiments. There's room for optimizing these costs further in future iterations of the standards.

Is this serious?

It's as serious as people want to take it. It was built as an experiment and hobby project for DotLeap.com, but if it gets a life of its own, great!

Any roadmap?

Sure:

  • September 2020: Specs go live so anyone can implement tooling.
  • October 2020: Tools Suite goes live, for easy querying, indexing, minting, and sending NFTs, plus a basic integration of a wallet so people can easily use RMRK.
  • November 2020: We'll see.

Any token sale?

Lol, nope.

By

I like to experiment with dragging Web2 devs by force into Web3, and by building things for modern blockchains. See my sideprojects over at Github.

An experiment by Bruno Skvorc

Fathom is watching you browse.