4 ms·
Very good writeup that shows all the steps. Note it uses MD5 hash instead of SHA256 so not exactly bitcoin. I wonder how much more work would be to make the co
by ivan_ah 9y ago
Very good writeup that shows all the steps.
Note it uses MD5 hash instead of SHA256 so not exactly bitcoin. I wonder how much more work would be to make the code fully implement bitcoin. Will it still be readable? Or Etherium? Would be great value for understanding even if Python would be inefficient to run in prod.
- h4l0 9y agoFully implementing Bitcoin white paper would require moderate amount of work if you do not consider every little detail related to security of your client code. However, current Bitcoin protocol added many features such as scripting. I think one can maintain code readability in a python implementation but documentation is the key here. Developer needs to clearly state the objective of each function. For ethereum, you need one external element called: Ethereum Virtual Machine. Smart Contracts are basically byte code that runs on EVM. Without it, blockchain cannot function. So, ethereum development may require extra knowledge on top of blockchain technology.
- Gargoyle 9y agoI've been ignoring bitcoin for a while. Do the devs still maintain the official implementation is the only implementation possible since it contains quirks the spec doesn't specify?
- pmorici 9y agoYup, though a group got fed up with that and forked to create Bitcoin Cash which has a spec and multiple teams and implementations. Much healthier situation.
- krisives 9y agoBitcoin has had scripting since that first release TX signatures themselves are OP_SIGHASH
- jre 9y agoOP here. Swapping MD5 for SHA256 is very easy. I'll actually do it - see my other answer above for why MD5. For the other differences to bitcoin and from the top of my head : - In my implementation, wallet addresses are the public key of the owner. Bitcoin addresses are slightly more complicated [1] and a wallet can (and should) generate a new address for each transaction. - Bitcoin uses ECDSA instead of RSA - Bitcoin transactions use a (simpler than ethereum but still) scripting language [2]. - The whole communication part was left out : you need a way to broadcast blocks. I haven't looked into that - Bitcoin uses a Merkle tree to store transactions (and prune spent ones). I think the scripting and communication would be the two biggest tasks. But it would also require unit testing and obviously wouldn't fit in a single notebook. [1] https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses https://en.bitcoin.it/wiki/Technical_background_of_version_1... [2] https://en.bitcoin.it/wiki/Script https://en.bitcoin.it/wiki/Script
- ecesena 9y agoBitcoin also hashes twice, i.e. it computes sha256(sha256(.)). Supposedly, this is to protect against extension attacks [1]. Was wondering, any specific reason to choose RSA vs ECDSA? Signatures would be smaller. [1] https://en.wikipedia.org/wiki/Length_extension_attack https://en.wikipedia.org/wiki/Length_extension_attack
- jre 9y agoNo good reason for RSA vs ECDSA. I was just more familiar with RSA, but apparently pycryptodome supports ECDSA as well, so I guess the change should be minimal.