https://github.com/barrettotte/btc-hash
Learning about the bitcoin hashing and SHA-256 algorithms.
https://github.com/barrettotte/btc-hash
bitcoin btc c sha-256
Last synced: 6 months ago
JSON representation
Learning about the bitcoin hashing and SHA-256 algorithms.
- Host: GitHub
- URL: https://github.com/barrettotte/btc-hash
- Owner: barrettotte
- License: mit
- Created: 2019-08-17T21:33:31.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2020-08-31T17:41:45.000Z (about 5 years ago)
- Last Synced: 2025-04-16T00:56:57.084Z (6 months ago)
- Topics: bitcoin, btc, c, sha-256
- Language: C
- Homepage:
- Size: 88.9 KB
- Stars: 4
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# BTC-Hash
Learning about the bitcoin hashing and SHA-256 algorithms.
## SHA-256
Followed the SHA-256 specification - http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdfI saw a lot of implementations had multiple functions (init,process,final) and a sha256_context struct.
For my purposes I thought it was kind of overkill to go that route, so I made a function
to produce the SHA-256 digest in one call rather than 3.## Bitcoin Hashing Algorithm
I followed the logic laid out on the [bitcoin wiki](https://en.bitcoin.it/wiki/Block_hashing_algorithm) for the
hashing algorithm. The hardest part was getting my double SHA-256 hash working correctly
(it took me 2 hours to realize I was using the wrong endianness)## Sample
Calculating/outputting hash rate every 100,000 iterations.```
Nonce 1500000 : 41b76de4a780eda162e312ef989501326a115ea879a1fa615a326d5cc88e10df Hash Rate: 196.840578 kH/s
Nonce 1600000 : fd550eac652dde1d6d6b9525dacce686cf4f59aa237f98c93d508b485578a6d9 Hash Rate: 196.841893 kH/s
Nonce 1700000 : 659e8fc9b7c915d1591218036f569c09895703b91051591dd9ae1afe40a16833 Hash Rate: 197.170350 kH/s
Nonce 1800000 : bf243bd487a79ac57ad2eabcd1619d6b665cc9c11a75e1c5446a7bd165246409 Hash Rate: 197.335943 kH/s
Nonce 1900000 : e58bc951d6db6c19b03a191a6f57184ef0a66c77793ee2cbe0e5d85622e8ce1e Hash Rate: 196.960608 kH/s
Nonce 2000000 : 33bd6d0f054d21a860044af4107480150546f80fd80f4247ec19e4bbb72c969e Hash Rate: 197.241110 kH/s
```## References
* Inspiration for the project [Mining BTC on the Apollo Guidance Computer](http://www.righto.com/2019/07/bitcoin-mining-on-apollo-guidance.html)
* BTC
* Mined block used in implementation https://www.blockchain.com/btc/block-height/250000
* BTC hashing algorithm https://en.bitcoin.it/wiki/Block_hashing_algorithm
* BTC Protocol https://en.bitcoin.it/wiki/Protocol_documentation
* BTC mining the hard way http://www.righto.com/2014/02/bitcoin-mining-hard-way-algorithms.html
* SHA-256 calculator
* https://emn178.github.io/online-tools/sha256.html
* https://www.fileformat.info/tool/hash.htm
* SHA-256
* Test vectors for SHA https://www.di-mgt.com.au/sha_testvectors.html
* SHA-256 pseudocode https://en.wikipedia.org/wiki/SHA-2#pseudocode
* SHA-256 spec http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf