Last Edit: November 07, 2016, 12:10:56 AM by verymuchso
We have concluded all important parts that relate to the core. This includes the removal of the embedded database and replacing it with our own custom transactional and crash proof storage mechanism based on memory mapped files.
This storage layer in itself and especially the crash-recovery, transactional rollbacks and ability to rollback all storage to a version N blocks in the past was no small feat. It was further optimized to use as little memory allocations as needed, we achieved this by re-using many of the application objects (accounts, transactions, blocks etc but also many of the raw byte arrays) and instead of recreating new objects while the app is running we try and re-use existing objects by repopulating their fields and data.
To fully ensure its correct workings we've opted for a testing scheme where we have the heat core test itself. Its much like doing a self diagnostics but we'd like to view as it 'extreme self diagnostics'.
The architecture of a blockchain application is perfectly suited for such a mechanism, add to that the lightweight operations of the heat system as a whole and combined we'll have the perfect through and through self-testing.
The self diagnostics works by generating an endless stream of transactions, blocks, but also causing exceptions in places where exceptions can occur and forcing the blockchain to be rolled back at pseudo random intervals. In short we replicate months of normal operations in a matter of minutes.
To ensure all is working correctly we have various verify'ers listening in on the events that come from the heat application and use those events to built a secondary derived blockchain model which holds all account balances, unconfirmed balances, blocks, transactions etc etc either in memory if the data permits this (simple accounts balances for instance) or we'll store smaller checksums that proof larger constructs like blocks and transactions actually match on disk what we have calculated in the secondary model.
We plan to use this same test in our continuous integrations systems which are in the process of being setup (we'll be using Jenkins and host the code on github, upon each commit Jenkins will run the full test suite).
Heat will not only be the fastest and most scalable crypto currency. It will also be a POS cryptocurrency that allows anyone to create a sidechain or private blockchain without writing any code at all, free of charge. At heat we believe that instead of making it a pain for anyone interested and willing to invest in our technology, we actually welcome and enable these users to get their private chain up and running as quick as possible.
Eventually, You not only dont need to write any code, you also can use the standard heat server and client software to operate your private chain. Users can opt to run just heat, just any other private chain or a combination thereof.
To achieve this instead of encoding the genesis block as an encrypted set of transaction and block signatures as is standard with previous POS crypto currencies, later this year we aim to include the code to actually create the genesis block into the heat core. This allows anyone to create a json file with a list of recipient public keys and genesis amounts. Et voila start heat and you'll have your fully functional private chain.
As soon as the decentralized services will be coming online those will work on heat and all private heat chains derived from that.
We are planning to release the heat genesis block in the coming days, and HEAT core software on github shortly after that, as well as setup the continuous integration and prepare all further dev-ops aspects to at least guarantee enough uptime. To ensure fast updates to the network we will be using the same auto-updating feature that we introduced in FIMK which allowed us to remotely disable and even shutdown servers that run versions that are not compatible with the master branch. This mechanism will be active during the start of heat but always will be an optional feature, if users wish so they can disable this feature in the light of decentralization.
For the health of the early network and to allow us to push new features at this early stage we of course discourage users to do this.