This is an idea that I just thought of moments ago and thought I would post it here for others to discuss. I don’t know how viable the idea is, or how difficult it would be to implement (I suspect it would be a bit complex, possibly to the point of not being worth working on).
The general idea is to create a new block-chain system (borrowing the name BitX) that has a few built-in transaction types for the creation of transaction schemas, verification rules, and a way to associate a schema with a set of rules under an application name and version, which can then be referenced by any application specific transaction. Nodes would then be able to understand any valid transaction (as well as ignore any transaction they don’t care about) for any new application of the BitX block chain.
A built-in transaction type for specifying BitX transaction schemas, described in a special language. Anyone can create a new schema and register it in BitX via a built-in BitSchema transaction, allowing any BitX application-specific transaction to make use of this schema. BitSchemas can be comprised of schema primitives and other BitSchemas.
A built-in transaction type for specifying transaction verification rules, described in a special language. Anyone can create a new set of rules and register them in BitX via a built-in BitRules transaction, allowing any BitX application-specific transaction to make use of these rules. BitRules can be comprised of rule primitives and other BitRules.
A built-in transaction type for naming a BitSchema and BitRules pair, which can then be referenced in all other application-specific transactions, allowing the nodes to know how to interpret and verify them. There can be multiple BitApps using the same name if they have a different version number.
The block chain to contain all transactions for any decentralized application. Blocks are only considered valid if the block conforms to the BitX block format, meets difficulty requirements, etc, and all of the transactions in the block are verified according to the BitSchema and BitRules associated with the BitApp they reference. People will only generate BitX blocks for one or more applications either because they just want to support that application or because the BitRules for that application provides and incentive to generate such a block (such as an application that uses BitRules to reward block-generators with money in the same way as Bitcoin).
If this system is possible, then anyone could create a BitSchema and BitRules for a new currency, that we'll call here, BitMoney. An app like BitMoney could have in it’s BitRules to allow for a transaction in the BitX block to send a certain number of new BitMoney coins to a BitMoney address, just like how Bitcoin works. Someone else could copy the BitRules for BitMoney and modify them for the creation of BitMoney2 that gives out a different number of coins per block generation, or provides perpetual monetary inflation/deflation, a different number of coins, mandates/eliminates minimum transaction fees, etc.
Other BitX applications, such as BitDNS can (along with it's own schema and rules) also use the BitSchema and BitRules of BitMoney to pay transaction fees in BitDNS without needing to make any changes to BitMoney’s BitRules or BitSchema.
These and other new applications could be created without needing to change/update the node software. A node can tell it's peers what applications it's interested in and if it's willing to relay transactions that it's not interested in, etc. Nodes can ignore any transactions it receives but are not related to the applications the user is interested in. Block generators can ignore any transactions that they are not interested and/or don't provide incentive to place them into a block. Using a new application is just a matter of the user entering the BitApp name into their client/configuration, and then the client can lookup the BitSchema and BitRules it needs to work with that application, and tells it's peers that it uses that application now so they are free to send related transactions, share addresses of nodes using the same applications, etc.
I’ve barely put any thought into this at this point, so I’m sure there are lots of problems, oversights, etc, but I thought it had some potential. Creating such a system is beyond my current abilities, so I figured I’d share it here to see what others had to say and how the idea might develop.
What do you think?