By Shaun Neal
I have previously written about methods to store NFT data on chain so that assets can be manipulated by smart contracts in novel ways which will allow for content creators to monetize their original creations.
My naïve implementation suggested storing asset data directly on the blockchain, mostly due to ease of integration. This implementation suffers from a fatal flaw — automatic replication of objectionable or illegal content with no possibility for deletion. Full node operators need fined grained control over what they host on their own servers. The community at large needs the ability to censor objectionable or illegal content so that it does not propagate into the ecosystem and harm the project. The system needs to be designed to honor valid takedown requests.
With those goals in mind, I believe that off chain NFT asset data is most appropriate. However, this requires full node operators to agree to store a complete copy of the NFT database, and an appropriate incentive structure needs to be be supported. To that end, I will propose a “storage miner” which will apply for a shared reward at most once per day.
I propose that the following on chain commands be implemented to support NFT storage and management. Each command will be embedded into an OP_RETURN signature, accompanied by any relevant fee.
1 — CREATE ASSET CLASS: this will create the asset class meta data to store assets. An asset class hash will be generated on chain once the transaction is mined. The asset class data will be stored in the local full node database where the transaction is created.
2 — CREATE ASSET: this will create an individual asset within an asset class. The asset may have an accompanying data file. An asset hash will be generated on chain once the transaction is mined. The asset data will be stored in the local full node database where the transaction is created.
3 — ASSET CLASS TAKEDOWN: this will signal to all full nodes that an asset class, and all its associated assets, should be marked for takedown/deletion. Implementation of this command is optional.
4 — ASSET TAKEDOWN: this will signal to all full nodes that an individual asset should be marked for takedown/deletion. Implementation of this command is optional.
Asset class data and asset file data will be replicated with the blocks that create them as part of the normal peer to peer communications in the Dynamo network. Full node operators can optionally choose to implement the NFT storage database. If they do not, asset file data will not be replicated to their node. Full node operators must make the choice at genesis — the option cannot be later enabled, because the full NFT chain must be built from the start.
Each full node which replicates the NFT database will assign a unique hash that encrypts their local copy.
Full node operators which choose to store the NFT database will be able to apply once per day for a storage miner reward as follows:
1 — The coinbase transaction of every block mined will include an additional output for storage miners to claim. The output will be sent to a contract for storage.
2 — Storage miners will call the contract to register their node by passing their database encryption hash and wallet address. Each encryption hash must be unique — duplicate hash registrations will be denied.
3 — The contract will mine an output specific for that registration which will indicate a byte position in a specific file that must be retrieved.
4 — The storage miner will read the contract and retrieve 4 sequential bytes from the indicated file and byte position and post that data to the contract.
5 — If the retrieved bytes are correct, the contract will award a portion of the pooled storage rewards to the storage miner.
Full Node Control of Stored Content
Using this mechanism, objectionable or illegal assets can be removed from the blockchain ecosystem in an automated manner and full node operators are free to honor the takedown requests, or not, depending on their personal preference, jurisdiction, etc.
Any takedown command must be signed by a private key. It therefore becomes trivial to create a list of trusted public keys and ignore (or at least review) all others. Community based sourcing of trusted public addresses can occur which would allow major IP holders or law enforcement to identify themselves and be placed on the trusted list.
Note that full node operators are not “distributing” content in any real sense of the word — the blockchain simply contains the data. Real harm occurs to individuals or entities when the content is actually sent, viewed, etc. It is expected that consumer based service providers will run full nodes to make the blockchain data easily accessible to non-wallet users (e.g. hook up a web server and database to the blockchain, index the data and make it searchable, viewable, etc). These service providers will likely create automatic content filters and mechanisms to honor takedown requests.
Some full node operators may be concerned about storing illegal information for any time at all, for example, during initial block download. Mechanisms can easily be built to cache and download current takedown lists and then simply suppress those UTXO as they are received.
Controlling entry of illegal content into the mempool can also be implemented. Full node operators who offer upload services may choose to implement content filters or review processes before accepting any transaction. Full node operators can blacklist specific public keys or IPs and simply not accept or relay those transactions. A mechanism can be developed to pass blacklist information on chain for known bad actors. Miners can make use of the same information and simply never mine transactions which contain illegal material or material submitted by blacklisted addresses.
I have presented a novel solution which allows for NFT asset storage fully contained within a crypto ecosystem that provides a mechanism to honor takedown requests on a per-node basis and rewards full node operators who chose to store NFT asset data.
The implementation of this technology will be posted on the Dynamo Coin github.