I have been working hard in the last days.
Goal:The goal was to create the world's first mini-blockchain proof-of-stake coin so we can use this as a basis for future development.
As no such thing has been done before, it was required to actually build it.
Note: This does not include any of the computational resources market engine yet: right now (in this early stage) it is just a mini-blockchain based proof-of-stake coin.
Implementation:I have used Cryptonite's mini-blockchain implementation as the basis.
I have removed the "nonce" from the block header and instead added a "PoS generation signature" which works according to the basic scheme that we have discussed here earlier. Note, this scheme is still open for discussion and may change anytime.
The PoS verification scheme itself has been created from scratch and basically adjusts the "difficulty" after every block based upon the moving average (last 3 block generation times). I have furthermore created one genesis-block that distributes all coins in circulation (in my current demonstrator, it just distributes 2000 ELC to a single address of which the private key can be found in chainparams.cpp/.h. That is enough to play around with so far. All network communication routines have been altered to work with the new, changed block headers.
A dozen minor and major fixes and tweaks to Cryptonite's implementation has been applied as well.
GUI:Standard Bitcoin GUI is used now, but this will change quickly. I just do not want to spend too much time on the cosmetics
right now and do the really interesting stuff first. Of course, at some point we will have a nice GUI that will help to manage the entire computational resource market in a nice and understandable way. One that looks entirely different and novel compared to what we have now.
Missing Parts:Before I can officially announce a test version there are still a few
very important things that I have to do.
- The PoS hash right now it a int64_t value. Currently its just a fixed low value, so that PoS blocks can be generated ALWAYS. This is required because if just two test clients are online, it might happen that both are unlucky (their PoS hash is so high) so that they both cannot "mine the PoS block" for the next hours/weeks/months. (see point below).
- The "miner" (which you activate by setgenerate=true) is not finished. It just wins the block (see fixed PoS hash) trivially and nothing more. Here we will have to monitor all addresses in the wallet, and check for all of them when each of them will be possible to generate a block. Maybe we can display the information somewhere in the client, like "If nobody else finds a block by 11:53:33 GMT, you will find it". Due to the PoS scheme that I have used, everyone can predict the exact point of time that he will be able to mine the current block.
Question, enforce easy mining?:Question to the community:When we have only a few people in the network, it may accidently happen that the PoS hashes, which are pseudo-random but constant for each block and account, are so bad that it would take months for anyone to solve a PoS block. (This is a reason why for now I sticked to a low fixed PoS hash for testing only).
How should be solve this problem? Should we allow that anyone can solve a block after some grace period has passed and noone else has mined that block (maybe 5 minutes)? Or should we rather switch from the linear target value increase per time unit (Personal Target = Basetarget * Balance * Time since last block) to something exponential? I would need some input on that.
When can we test:Once I am finished with the missing parts. I will write a detailed developers guide and instructions how to test the software.
You can check the status at
https://github.com/OrdinaryDude/elastic-mini-blockchain and of course test yourself, but please understand that things change there fast and I cannot give any support for the unfinished version.
Please wait a few days for the entirely working test setup. i will try to finish it as soon as possible.
Can I see something?Please do not get fooled by the visual proximity to other alt coins. This look and feel is just temporary.
The real magic happens under the hood and indeed is a lot of work.