There is a long tail of users that are currently “priced out” of Ethereum because of gas costs. Small purchases of mainnet tokenized artwork aren’t economically viable right now.
We smashed together a bunch of magic like meta transactions, burner wallets, side chains, and bridges to create a web2 like experience that “upgrades” to the Ethereum mainnet.
Based on the current gas prices, it costs between $15.00 and $50.00 to mint a single piece of NFT artwork on Ethereum and $3.00 or more to send it to another account.
We grabbed a some quick react components for drawing and instantly we were creating “art” on IPFS! Okay, let’s tokenize this… The first working version was just designed for mainnet but that was unusable at the current gas prices. The second version had two chains but we found you could front-run artists. We finally landed on this “xDAI bridges to Ethereum” model that feels really smooth with the extra meta transactions for ether-less accounts.
🙂 User Experience
Try opening up 🎨 nifty.ink in an incognito window (without MetaMask!) and draw something. Here is “rose” currently selling for $1 xDAI. The artist created it on an iPad in Safari (with a kid crawling on his back) without needing any blockchain knowledge or paying any gas fees.
If someone comes along and enjoys this work enough to pay a dollar for it, the artist will be onboarded into crypto without ever visiting an exchange, waiting for a block to be mined, or having to download a chrome extension.
instantly onboarding artists
no downloads, no onramps
This allows for a lot more exploration, as an artist, to create and see what resonates with your community. If this “rose” was interesting enough to sell for more than just a couple dollars, it could be upgraded by the artist to Ethereum with a button click. The owner of the NFT will have to pay mainnet gas fees, but the art can now be moved on secondary markets like OpenSea:
🔥 Burner Wallet + Meta Transactions -> IPFS
When a user lands on nifty.ink, they get an instant wallet generated for them automatically. They can use this “burner” to sign meta transactions and we pay the gas using GSN to create and sell their artwork. Each brush stroke is recorded and the work is signed by the artist then stored in IPFS. (So it is distributed peer-to-peer and cryptographically backed!)
On xDAI we created a “minimum viable market” that allows users to buy and sell artwork for as little as a penny. We tried to limit how much a user needs to know about xDAI and you are only prompted to switch your network if _have_ xDAI. Most things are simply signature based. Also, yes, it lower-value chain that has a weaker security model than Ethereum (DPOS vs POW), but it is EVM compatible so it’s great for learning, tinkering, and exploring with smaller amounts of money.
Users can lock mainnet DAI to mint xDAI, the stable native token of the xDAI chain. (learn more)
The arbitrary message bridge between xDAI and Ethereum allows artwork to “upgrade” to mainnet:
Then, it can be sold and traded on third party markets like OpenSea:
Along the way, some pieces of art will rise to the top and attract larger sale prices. At this point, the owner of the NFT can upgrade it to Ethereum, essentially “graduating” to the mainnet through a multi-sig bridge.
meta transactions, side chains, then mainnet? oh my.
You can use your ENS name to sign the artwork for true authenticity:
📦 Out of the box
This project is about exploring NFT scalability and building an example “product” on Ethereum. With that in mind, the actual drawing component is just an off-the-shelf React component called react-canvas-draw.
For our color-picker, we used react-color. We don’t want to reinvent the wheel for a tutorial. If you are building a real NFT platform these are the areas where you will want to innovate. For us, we are just interested in making an example of approachable blockchain products!
⚙️ Scripting Batches
With the gas prices of xDAI much lower than mainnet you can now mint a bunch of NFTs using a script and if any of your holders want, they can upgrade their version to have it in OpenSea to sell on mainnet. Protip: You will need to call the “mint(address to, string _inkUrl)” function just like this transaction.
The code is fully open source and there will be tutorials coming soon(tm)! Fork this and build a product on Ethereum today!
💬 Join the Nifty.ink telegram too!