Proof of Work has been replaced with Proof Of Bible Hash (POBH) – a cpu-only algorithm that allows the program to run on common commodity PCs and compensates full nodes participation. This means BiblePay subsidizes full nodes that stay online. At the same time, it requires full blockchain transaction referencing in the hashing function, along with chained bible verses that make it resistant to porting to GPU video cards and ASICs.
In addition to the low energy requirements and high efficiency of POBH, the reward per block is set to be relative to the length of time the block took to solve. This means that abusive hash attacks result in subsidy decreases.
The wallet uses the X11 blockhash to maintain the reference pointers for the blockindex map. However, it uses the Bible Hash to regulate difficulty and prove that a full node generated the Bible Hash (by requiring a txindex lookup, a block hash, or a receiving address to be present in the suffix of the hash). In greater detail, see the below points on POBH:
- The BibleHash function is fed an input X11 hash of the current block template at a point in time. This starts as a uint256. It is also fed the reference to the last block index (and previous height and previous block time).
- The BibleHash function encrypts the x11 hash uint256 using AES512 into a ciphertext vector. This ciphertext vector is then converted to base64. (These functions were chosen to raise the bar to reduce the likelihood of porting the hasher to a GPU as AES512 requires the OpenSSL library).
- The resulting base64 is then md5 hashed.
- The md5 hash is 32 bytes long. The BibleHash function breaks the md5 hash into 8 octets of 4 bytes each. For each 4-byte octet, the hex is multiplied * the IVerseFactor (.4745708). This IVerse factor points to the corresponding KJV Bible verse between 031101. This resulting verse is chained to the output and this process repeats for octets #2-8, while appending the verses to the chained verse output.
- When the BibleHash function reaches verse #8, it breaks up the source four byte octet into four elements: a Hex 2 byte source resulting in a lookback block offset from 0-255, a hex one byte source resulting in a transaction offset of 0-15, a hex one byte source resulting in a transaction output offset of 0-15, and a one byte source resulting in a datatype pointer of 1-3 (by multiplying 0-15*.1875) (used to determine if this bible verse will need to reference a blockhash, transaction ID or a receiving address). Then the BibleHash calls out to the full node for the resulting DataType from the chain by reading the disk, retrieving the result, and appending the result to the final chained bible verse (verse #8).
- Then the resulting chained verses text contents are MD5 hashed to provide a concise input to the X11 hasher.
- The MD5 hash is X11 hashed.
- The X11 hash is sent through a business logic filter requiring the full node business logic of the latest Mandatory version of BiblePay (IE some business logic from the wallet adjusts the resulting hash depending on block number).
- Next, if the block is older than the late block threshold, the X11 hash is modified to be easier to solve.
- If the block is a TITHE_MODULUS block, the block is easier to solve.
- The resulting X11 hash is sent out of the function as the hash result.
For more information, please see our whitepaper.