A while ago, I was asked to create the framework that would allow someone to hide a document on a server and then only allow access to someone that proved they owned a particular NFT. Likewise, provide functionality that downloads a file to the user machine after it passes the signature and if it holds an NFT of the given project.
Well, I have a demo and it is called the DRM Anything NFT.
I’ve updated this code again, so now not only does it present a link and download a file, but it also allows the ‘unlocking’ of a unlisted video on YouTube.
And yes, we both know that the content that is being delivered can be copied and shared. Most content online can be. What this demonstrates is that the server will only share this content with website visitors that demonstrate that they own an NFT in the project and that they are the owners of the wallet that holds the NFT.
More Info
Not only does this NFT support the basic Selene distributed sales Network (dsn) functionality (which offers sales commissions to sales agents and allows for common minting) but it uses the new infrastructure that I added which can be used to validate signatures.
The new functionality is the Instant Access button. If the visitor does not own the project NFT, the Instant Access button will be disabled. Once minted, the button is enabled. When it’s clicked, MetaMask is launched so as to sign a message that can be decoded on the server. The message is the timestamp and smart contract address.
When MetaMask returns the signature, the client browser sends that information to the server so it can be decoded and validated. When the info is found to be valid, the server validates that the signing address actually holds a non-zero balance in the project.
After all this checks out, the server returns the hidden information and it’s displayed to the visitor next to the Instant Access button.
What are the dependencies?
The good news is that the code that performs this work is all in the dsn core files. This means that the entire system (dsn) can be easily installed on just about any server.
The bad news is that there is no built-in database functionality with this NFT. This means that the file that provides the secret will need to be edited to change the prize.
What’s next?
Well, I’d kinda like to see this code evolve so that it could be modified using WordPress on the backend. Ultimately, the artist should be able to make simple modifications to their database and the signing process unlocks a database searchable list of secrets.
The classic example would be to sell an NFT that works as a membership ticket. The NFT has a lifespan and the owner uses it to unlock private content.
Let me know what you think.