it's important for the network to have a Global Storage space, where CN can write important information that can be publicly read, or even, for them to reuse in the future.
One example: store GAS prices of opcodes, that may be variable in the future.
Another example: store exceeding non-fractional GAS, to allow us to easily implement fractional System Fees (https://github.com/neo-project/neo/issues/319).
One possibility is to use contract 0x0000...000000 as the storage (the fastest way to do it). Another possibilty is to convert consensus shared script (multisig) into a deployed one, so we can read and write there... one difference is that, after voting, the contract would change. Another problem is that if it's a real script contract, it should behave as one, with specific commands to read and write storage, which is complex to do now, but very possible if we implement this: https://github.com/neo-project/neo/issues/685
These updates could be part of MinerTx or another InvocationTx included after MinerTx, including Witness of the CN group, with the necessary updates on global storage.
What do you think @erikzhang , any better ideas to do it? It's a very important feature in my opinion.
We don't need global storage space. We can create a contract and only allow CN to write data.
SYSCALL Neo.Blockchain.GetValidators
CAT
CAT
...
CAT
HASH160
SYSCALL System.Runtime.CheckWitness
Very good Erik, we can do this.
Now we need to find a place for CN to execute invocations. We could allow invocation on MinerTx, to not lose space, or we could add another invocation on every block. What is better?
They can just send a normal InvocationTransaction.
Ok then, this is easier. I'll prototype the idea.
Is there any data for CN to store? If no, I don't think we should do it immediately.
This will go together with a proposal to make system fee gas fractional. This is important to do soon enough, even on Neo 2.X.
The idea already works (in my mind), and depends on this. Good thing is that it will be backwards compatible, and easy to put on production on the fly without any chain/tx versioning.
I will explain the idea on another issue, when actually proposing the feature.
The beneficiaries of the system fee are the neo holders and are part of the neo protocol and cannot be simply determined by the consensus nodes.
Ok Erik, I drafted the proposal here: https://github.com/neo-project/neo/issues/692
Consensus Nodes won't need to interfere in blockchain gas distribution, they will only store the missing system fee on a contract and re-count these on future blocks as long as the missing values become integer.