Grocery shopping for NFTs?
Why NFT Vending Sucks
In the last 30 days, roughly 145000 NFTs have been sold on Cardano. In the same time, Cardano also surpassed Ethereum in transaction volume. Chances are good as well, that most of those NFTs were sold via the vending machine model. That sucks, but in a much more complex way than you would think.
In this article, I want to give a breakdown of why the vending machine model is not the best. Big asterisk though, there is also a reasonable counterargument for why it works which I will also endeavor to highlight.
Please keep in mind that the intention of this article is NOT to portray anybody in a bad light, nor is it intended to bash anybody. This article is an explanation from an engineering perspective, and I write it intending to share my thoughts with others within this ecosystem we are all a part of.
What is the Vending Machine Model?
As the name suggests this model works exactly like a vending machine. You put money into a receptacle/slot/machine, make your selection and wait for your item to be dispensed. In the context of NFTs, this works via wallet addresses.
The way most NFT projects work is as follows:
- They list an NFT wallet address somewhere that you need to send payment to
- You have to then send a specific monetary amount to that address relevant to your purchase selection
- The entity that you send a payment to will then usually respond with an NFT sent to the same wallet that made the payment
Why does it suck?
There are two big reasons; trust and engineering overhead.
Much like with a vending machine, once your money is paid, you have little to no control as to what happens next. The transaction is therefore highly dependent on your trust in the project and in their ability to deliver.
The burden for validity in this transaction rests almost entirely on you as the client. You have to ensure that the project you are purchasing from is capable of delivering, and this is very difficult to validate, especially for the non-technical buyer.
The solution to this trust problem is grocery stores. Are you ready for Walmart NFTs? No, I’m kidding; let me explain: When you go to a grocery store, you have very little to no ability to validate any of the claims on any of the products inside. That is why we tend to use chain stores, like Walmart or Target; we put our trust in the store name, and then buy the products without thinking about it.
In the Cardano space, entities such as NFT-Maker represent a grocery store. They have established themselves as a reputable system and people trust them. This trust is also extended to projects hosted by them.
Irrespective of how good the systems are in the grocery store, the lynchpin of the entire transaction is still the trust the person places in the entity they are transacting with.
The second issue with the vending model is the engineering that goes into making it work. Specifically the cost-to-scale.
Suppose you are an NFT project and you want to build your vending machine. The following is probably what you need to have at a minimum:
- A dedicated wallet that is constantly monitored for incoming payments
- A system that validates incoming payments, accepts valid transactions, and refunds the edge cases
- A storage system to store unminted NFTs
- A minting system that retrieves an unminted asset and mints it into the wallet grabbed from the incoming transaction
- A transaction validator to ensure transactions take place
Now imagine your NFT project is quite popular and your system is hit with a couple thousand requests per second. You now have to ensure that your infrastructure is capable of handling the loads, and you have to ensure that it is robust against any myriad of cybersecurity events related to bot and DDOS attacks.
So what about alternatives?
The odds are good that by now you have said the following to yourself; “Well then just use smart contracts”. Well, the not-so-nice answer is, this isn’t as simple as that.
The quick and dirty rebuttal is that best practice for how to go about this is not yet established. There is no one quick fit chunk of code you can just pull in from Github, containerize, deploy and then wait for the money to come flying in. You will most probably need to go through an engineering design process to create a solution specific to your project.
The other issue also comes in with NFTs that you want to sell to clients blindly. Meaning, you want them to pay you and receive back a subset of random NFT/s from your collection, only knowing which they will be receiving after purchase. With smart contracts on Cardano, this is difficult. The more technically adept user will be able to go on-chain, read through the UTXOs linked to your NFTs, find the one that contains the super special NFT they want, and then buy that one. Thereby taking away the randomness aspect.
Big Asterisk; I am not saying it is impossible, I am saying that it is not as easy as “Just put it into a smart contract”. You will most probably need to investigate how to go about this using an engineering design process. The drawback is that this process is time-intensive and hence expensive.
The good news is that this is a very active research area and that even at the time of writing, possible solutions have been developed and are being implemented. Some links to look into:
- The Plutus use cases repository contains some example code for NFT minting via smart contracts
- CardaHub has developed a smart contract minting system
- A three script minting approach by Berry Pool
- This stack post provides a workaround for random NFT sales
The above is by no means an exhaustive list.
So the vending model it is then?
The answer here is also yes and no. The grocery store model for trust management does work and has its uses. Additionally, there are several ways that this mechanism can be made even more transparent.
A quick search on Google Scholar for “supply chain”, “transparency” and “blockchain” will yield thousands of published academic papers with many even directly discussing what is called the “perceived trust problem”. Many have come up with different solutions to this problem ranging from machine learning and data analytics approaches to transparent provenance mechanisms and certifications schemas.
Some of these solutions could have application within the NFT minting space and could be used to help manage the “perceived trust problem”. There is also an argument to be made that this process can be improved through smart contracts that transparently define the “centralized” aspect of the grocery store model.
This is a very active research area both within Cardano and in engineering in general. The perceived trust problem is by no means trivial, even though it may appear to be at face value. The grocery store model of vending NFTs under a centralized authority can still prove a valuable mechanism but care should be taken to prevent monopolies from forming. If one central authority is running all the minting in a closed manner, is this not harmful to the objective of decentralization?
Smart contracts are also a very viable approach to solving the perceived trust problem but many of the solutions are still highly experimental.
About the author
Benjamin is by qualification a Computer & Electronic engineer. He has a passion for engineering, video games, and blockchain technology. He currently serves as the Blockchain Engineer for both Revelar & Duo.
Benjamin is still actively involved in research in Industrial Engineering with his key focus areas being blockchain technology, trust & integrity management, and supply chain engineering. His prior expertise is in the creation of near real-time decision support systems, having worked with a racing team to design and create a race strategy optimization system.