15 points
      
With the Bitcoin thing going strong, I figured it would be interesting to do some simplified mining.
Connect to the problem endpoint. You'll receive a JSON with two attributes. One is block, which is in essence an object with a nonce value (initially empty) and a data key which contains some arbitrary data. The other attribute is difficulty - we'll get back to it in a moment.
Your goal is find a nonce value that will cause the SHA256 hash of the block object to begin with difficulty zero bits. E.g. a difficulty of 14 means that the SHA256 digest needs to start with at least 14 zero bits.
The hash should be calculated from a JSON-serialized block value without any whitespace. The keys needs to be in alphabetical order.
Let's illustrate this on a really simple case. For a block with an empty data array and a given difficulty of 8 (so the first 8 bits of the SHA256 hash need to be all 0), a nonce value of 45 is one perfectly valid solution:
SHA256('{"data":[],"nonce":45}') -> 00d696db4...cfb19ec2e0141
Keep in mind, difficulty is the number of 0 bits, not bytes.
      GET /challenges/mini_miner/problem?access_token=...
      
Problem JSON will be in the following format:
difficulty: how many bits (high order) need to be 0 in the SHA256 hashblock:
nonce: the nonce you will need to find so that the hash meets the criteria, Nonedata: some dummy data that makes up the block
      POST /challenges/mini_miner/solve?access_token=...
      
You'll only need to submit the nonce that causes the JSON-serialized block to yield the proper hash.
Solution JSON structure:
nonce: the nonce you foundBecause hashcash is an interesting read. Check out the anti-spam usage.
h^ by buying me a coffee. Cheers!h^ profile is here.