Bitcoin Whitepaper, Beautified

Lex Sheehan
Aug 29, 2018 · 12 min read

My Observations

I. Satoshi Nakamoto is a:

1. Human

2. Genius

3. Whitepaper Expert

4. Sexist Male

5. Helpful Realist

6. Cypherpunk

7. Cryptoeconomics & Mechanism Design Expert

8. Investor, Trader, and Entrepreneur

9. Insatiable Learner

10. C Programmer

/***************************************************************           
* bwp-calc -- Calculations for the Bitcoin white paper *
* *
* Author: Lex Sheehan *
* *
* Purpose: Demonstration of Bitcoin white paper calculations *
* *
* Usage: Click the <Execute> button and see Results below. *
* *
* Notes: https://en.bitcoin.it/wiki/Bitcoin_whitepaper *
* *
* For a deep understanding of cryptocurrencies and *
* blockchain technology (including Ethereum) ... *
* Register at cryptocurrencies.developersclass.com *
***************************************************************/
#include <stdio.h>
#include <math.h>
double AttackerSuccessProbability(double q, int z) {
double p = 1.0 - q;
double lambda = z * (q / p);
double sum = 1.0;
int i, k;
for (k = 0; k <= z; k++) {
double poisson = exp(-lambda);
for (i = 1; i <= k; i++)
poisson *= lambda / i;
sum -= poisson * (1 - pow(q / p, z - k));
}
return sum;
}
int main() {
int num = 10;
int z;
double p;

double q = 0.1;
printf("q=%f\n", q);
for (z=0; z <= num; z++) {
p = AttackerSuccessProbability(q, z);
printf("z=%i P=%f\n", z, p);
}

int zTimes5;
q = 0.3;
printf("\nq=%f\n", q);
for (z=0; z <= num; z++) {
zTimes5=z*5;
p = AttackerSuccessProbability(q, zTimes5);
printf("z=%i P=%f\n", zTimes5, p);
}

puts("\nSolving for P less than 0.1%...\n");
q = 0.1;
puts("P < 0.001");
for (q=0.10; q <= 0.45; q+=0.05) {
p = 1;
for (z=0; p >= 0.001; z++) {
p = AttackerSuccessProbability(q, z);
//printf(">> q=%f z=%i p=%f\n", q, z, p);
}
// P is now >= 0.001, so take previous value of z
printf("q=%f z=%i\n", q, z-1);
}
}
// share URL: jdoodle.com/a/CNb
// embed URL: https://www.jdoodle.com/embed/v0/CNb

II. Error Discovered in Bitcoin Whitepaper

blockHash = SHA256Hash(Version, 
hashPrevBlock,
hashMerkleRoot,
Time,
Bits,
Nonce)
00000000000000001588d80f3cb1d593cb198f485aef33ca926b58a62bcceda8

Other Bitcoin Whitepaper Mistakes

Implementation Inconsistencies

Mathematics Notation Mistake

The Reference Client Mistake

III. Unanswered Questions

IV. Gaining Understanding and Confidence

The Solution



Lex Sheehan

Written by

B.S. in Computer Science (minor: Business) from Auburn University

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade