This repository contains my research into the technologies surrounding blockchain technology and cryptocurrencies such as Ethereum and Bitcoin that is published in the paper Image-based Proof of Work Algorithm for the Incentivization of Blockchain Archival of Interesting Images.
Blockchain like Bitcoin
test_mining_like_btc.py test a blockchain that was built with a simplified version of the algorithm used by Bitcoin.
To mine a block, a nonce must be found that satisfies the condition that a hash of block data, the previous block's hash, and the nonce must have a given number of leading 0's.
The difficulty of the block is determined by how many leading figure must be 0s.
A difficulty order of 2 corresponds to hashes of blocks needing two leading 0s to be considered valid.
0x40_000JB1Qn1gzNckyp1XU5UFhUAidhZB... is valid for a difficulty of
3 or less.
0x40_00AJB1Qn1gzNckyp1XU5UFhUAidhZB... is valid for a difficulty of
2 or less. Test mining builds a dummy blockchain using dummy data.
Blockchain that Spells Words
blockchain_spells_words.py was created as an experiment. It uses a modified mining algorithm to spell words in the hash of every block instead of padding it with 0's.
This has no practical application. It was just a fun experiment.
In blockchain that spells words, the first
DIFFICULTY_ORDER letters of the difficulty phrase will be spelled out in every single block
This does not change the difficulty of mining blocks. It just tells the mining algorithm to search for specific
words instead of 0s.
0x40_timJB1Qn1gzNckyp1XU5UFhUAidhZB... might be found with a difficulty of
0x40_timthebeaverckyp1XU5UFhUAidhZB... might be found with a difficulty of
0x40_timthebeaver000p1XU5UFhUAidhZB... might be found with a difficulty of
The difficulty phrase for will always be the length of the encoded hash output. Shorter phrases will be padded with 0s