New Karbo improvement proposal published
https://github.com/Karbovanets/papers/blob/master/KIP-001.mdReviews and opinions are welcomed. Public testnet will be launched these days, stay tuned.
KIP-001: ArgoNight — Non-Outsourceable Blockchain Based Proof-of-Work Hashv. 1.1
nuclEar_chaos, Aiwe, Luke
Herein the new POW algorithm proposal for Karbo is explained.
Basic overviewIn order to achieve our goals we decided to use blockchain data in hashing to create non-outsourceable algorithm which will be able to prevent pooled mining and botnets.
Now hashing is a closed algorithm, that is, we have nonce which is changed and an incoming static data. The idea is to include in the calculation of the final hash a factor which destroys such a closed system.
Specific implementation is to include in algorithm the data from a blocks, the heights of which are defined as an intermediate result of a preparatory hash. That is, for the next hash with another nonce these intermediate blocks will be completely different. Thus, without an access to the blockchain hashing is not possible.
Detailed overviewThe hashing in proposed algorithm works as follows:
1) A block is hashed by fast Keccak hashing function to get the preliminary hash_1.
2) The resulting hash_1 is used to retrieve 32 blocks at corresponding heights from the blockchain.
3) A block is then hashed together with 32 retrieved blocks by the Argon2 hashing algorithm using hash_1 as salt.
The block here stands for block hashing blob binary array which consists of block header, which in turn contains, among others, so called nonce.
The mining process in Proof-of-Work uses nonce (a 32 bit arbitrary random number) that is used together with the block data as input for hashing function. Essentially miner is brute forcing all possible nonces in order to find a hash than satisfies the target difficulty.
Because changing the nonce also changes the preparatory hash_1, a different set of 32 blocks is required for every nonce to be retrieved from the blockchain. Thanks to this:
- the performance is limited to the speed of I/O operations
- every miner needs access to the blockchain (i.e. only full nodes will be mining)
- sending from the pool server or requesting block data from open nodes is impractical overhead due to network latency and transfer speed/bandwidth limitations.
I don't like it, because:
- The blockchain is big enough.
Last time when I tried syncing from scratch it took 2-3 days
- One has to use SSD... and the faster the better. Arm's race it will be. Are there any preliminary calculations of required hardware to achieve "saturation" of 6-card rig? Like, CPU/memory
A "lightweight" blockchain will be developed - by those with resources, eg big miners
- Power, power, power ... it will be even more power-demanding
Wish I had solutions instead of pointing the obvious :/, its a tough choice
PS: Great job, btw