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?

Sure, but 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. 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": "0x0aff6865635ae11013a83835c019d44ec3f865145943f487ae82a8e7bed3a66b",
  "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,
  "id": "0aff6865bed3a66b-DLEP-DL15-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. 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 JSON)
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 JSON)
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 JSON)

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 JSON)

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

Transaction Standards

Transactions 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.

Send NFT (click for live example)
The format of a Send NFT transaction is 0x{bytes(rmrk::{version}::{id}::{recipient})}. For example:
rmrk::rmrk0.1::0aff6865bed3a66b-DLEP-DL15-0000000000000001::H9eSvWe34vQDJAWckeTHWSqSChRat8bgKHG39GC1fjvEm7y
would become
0x726d726b3a3a726d726b302e313a3a306166663638363562656433613636622d444c45502d444c31352d303030303030303030303030303030313a3a4839655376576533347651444a4157636b6554485753715343685261743862674b48473339474331666a76456d3779
Mint Collection (click for live example)
The format of a Mint Collection transaction is 0x{bytes(rmrk::{html_encoded_json})}. In other words, HTML encode the minified JSON, then convert the entire remark into bytes and send with a 0x prefix. For example:
rmrk::%7B%22version%22%3A%22RMRK0.1%22%2C%22name%22%3A%22Dot+Leap+Early+Promoters%22%2C%22max%22%3A100%2C%22issuer%22%3A%220x0aff6865635ae11013a83835c019d44ec3f865145943f487ae82a8e7bed3a66b%22%2C%22symbol%22%3A%22DLEP%22%2C%22id%22%3A%220aff6865bed3a66b-DLEP%22%2C%22metadata%22%3A%22ipfs%3A%2F%2Fipfs%2FQmVgs8P4awhZpFXhkkgnCwBp4AdKRj3F9K58mCZ6fxvn3j%22%7D
would become
0x726d726b3a3a25374225323276657273696f6e253232253341253232524d524b302e312532322532432532326e616d65253232253341253232446f742b4c6561702b4561726c792b50726f6d6f746572732532322532432532326d617825323225334131303025324325323269737375657225323225334125323230783061666636383635363335616531313031336138333833356330313964343465633366383635313435393433663438376165383261386537626564336136366225323225324325323273796d626f6c253232253341253232444c45502532322532432532326964253232253341253232306166663638363562656433613636622d444c45502532322532432532326d657461646174612532322533412532326970667325334125324625324669706673253246516d5667733850346177685a704658686b6b676e437742703441644b526a3346394b35386d435a366678766e336a253232253744
Mint NFT (click for live example)
The format of a Mint NFT transaction is the same as for Collections: 0x{bytes(rmrk::{html_encoded_json})}. For example:
rmrk::%7B%22collection%22%3A%220aff6865bed3a66b-DLEP%22%2C%22name%22%3A%22DL15%22%2C%22transferable%22%3A1%2C%22id%22%3A%220aff6865bed3a66b-DLEP-DL15-0000000000000001%22%2C%22metadata%22%3A%22ipfs%3A%2F%2Fipfs%2FQmavoTVbVHnGEUztnBT2p3rif3qBPeCfyyUE5v4Z7oFvs4%22%7D
would become
0x726d726b3a3a253742253232636f6c6c656374696f6e253232253341253232306166663638363562656433613636622d444c45502532322532432532326e616d65253232253341253232444c31352532322532432532327472616e7366657261626c65253232253341312532432532326964253232253341253232306166663638363562656433613636622d444c45502d444c31352d303030303030303030303030303030312532322532432532326d657461646174612532322533412532326970667325334125324625324669706673253246516d61766f54566256486e4745557a746e425432703372696633714250654366797955453576345a376f46767334253232253744

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: App goes live so everyone can use RMRK easily.
  • October 2020: Tool suite goes live, for easy querying, indexing, minting, and sending NFTs.
  • 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.