8 ms·
Building a tiny blockchain
- Uptrenda 9y agoSo ah... where's the part where you implement a working blockchain, again? There's no proof-of-work, consensus logic, currency logic, accounting logic, peer-to-peer networking code, etc. Instead this is just a list of hashed-linked documents... Not that much different from a Git repo or a basic file system with integrity checks. Hashing != blockchains.
- KenanSulayman 9y agoWhat? A blockchain isn’t a distributed ledger. A blockchain IS a chain of linked documents - whereas these documents are usually hash trees including the “transactions” per block. They ensure integrity by hashing the previous blocks. The proof of work is just a way to ensure a self regulating growth of virtual currencies and to prevent double spending.
- 1ba9115454 9y agoIt's also missing the logic to choose the best tip, i.e. the logic that decides which fork is the one to follow.
- KenanSulayman 9y agoAgain, it’s not a distributed ledger. There’s no “fork” unless you want your data structure to do so.
- jasode 9y ago>A blockchain isn’t a distributed ledger. A blockchain IS a chain of linked documents You are interpreting "blockchain" to be constrained to a "chain of hashes". That is a valid interpretation. The parent (Uptrenda) is interpreting "blockchain" as a umbrella label for "distributed ledger". This wider definition is also a valid interpretation and this language phenomenon is called "synecdoche"[1]. To point back to the actual article, the author (Gerald Nash) is using "blockchain" in both meanings. On the one hand, he talks about the wider scope of distributed currency... but on the other hand, his Python example is constrained to a "chain of hashes". Since Mr Nash is mentioning the Satoshi bitcoin whitepaper when talking about "blockchain" (the wider meaning), Uptrenda's criticism is reasonable because the most interesting part of distributed-blockchain is the invention of incentives (mining rewards) and social agreement on acceptable hashes (e.g. how many 0000s are counted, which chain is chosen, etc). As other distributed projects such as IPFS/Diaspora/Sandstorm/etc show, finding the right combination of incentives to create social buy-in and sustainability is the hard part. The hashes is the easy part. https://en.wikipedia.org/wiki/Synecdoche https://en.wikipedia.org/wiki/Synecdoche
- KenanSulayman 9y agoThat argument is not exactly valid, because the concept of a block chain has been described a long time before it was used in "virtual currencies." [1] "Block chains" in modern times are very helpful in handling transactions in databases by replacing things like CAS-Numbers [2] with hashes. The hash of the previous block effectively becomes the CAS-Number, with the feature of staying persistent and verifiable. CAS example: IF X_version IS 200 SET X=2 BC example: IF hash(X) IS 200 ADD document Y WITH Y_parent = hash(X) That is, while the article does in fact also mentions Bitcoin, I don't see a point in discrediting the article, the code or the author in any way. Personally, I find it far more valuable for engineers to understand the underlying, fundamental concepts of things before going all-in. Sure, he could have discussed all these things, but for people who are new to the topic, that would not have been very helpful in understanding the concept of a block chain. [1] https://link.springer.com/article/10.1007/BF00196791 https://link.springer.com/article/10.1007/BF00196791 [2] https://en.wikipedia.org/wiki/Compare-and-swap https://en.wikipedia.org/wiki/Compare-and-swap
- jasode 9y ago>, because the concept of a block chain has been described a long time before Citing historical usage and original meanings is not relevant as to why people use synecdoche. The point is that in today's discourse, the term "blockchain" has already expanded beyond the original literal technically constrained meaning of "chain of hashes". Even if _you_ want to keep the original meaning of "blockchain", you still have to recognize when _others_ are using synecdoche. Examples in media: + https://www.google.com/search?q=bloomberg+blockchain https://www.google.com/search?q=bloomberg+blockchain + https://www.google.com/search?q=wsj+blockchain https://www.google.com/search?q=wsj+blockchain + https://www.igvita.com/2014/05/05/minimum-viable-block-chain/ https://www.igvita.com/2014/05/05/minimum-viable-block-chain... To interpret those articles correctly, you have to mentally substitute "blockchain" with "distributed ledger". If you substitute with "chain of hashes", the articles make no sense. Synecdoche throws original historical usage out the window. >, but for people who are new to the topic, that would not have been very helpful in understanding the concept of a block chain. There are many web articles that create a "toy" blockchain by showing _hashes_. The problem is that the abundance of such articles actually hides the real ingenuity of the Satoshi/bitcoin. Again, the hard part is combining multiple technologies in clever ways that can synchronize the psychology of anonymous people -- aka "decentralized trust". The hashing is the least interesting component of all that. However, since the "hashes" are the most "accessible" part of it (especially to programmers), that's what everybody ends up writing about! This has the unintended side effect if hiding the more groundbreaking ideas (the psychology) of distributed ledgers.
- Uptrenda 9y agoThis is a really twisted take on blockchains. The whole point behind a blockchain is that cryptoeconomic incentives serve as an additional security function which is better than relying on generosity alone to contribute hashing power. So while it is true that a blockchain can exist without any kind of currency - the real genius behind blockchains is how they are designed as a new kind of corporation - one which requires no trust to pay users to create a single, shared view of an ordered list of events. It's kind of like how in modern cryptography most of our algorithms aren't bullet proof. Cryptographers aren't saying that an algorithm can't be broken, but that it requires so much computational resources to do so that its simply improbable. We can say that blockchains also include this idea but they add the economic aspect; Now it isn't just improbable to break an algorithm (with universe sized computers) -- its also improbably (and irrationally) expensive. Your other point is that a blockchain is simply a linked chain of documents. This is incorrect. The whole point behind a blockchain is that it serves as a way to get people to agree on an ordered list of events. The problem was never being able to form that list (anyone can hash a list of documents, its basic applied crypto.) It was getting a group of strangers to agree on a single result under highly adversarial conditions. See also: http://unenumerated.blogspot.com.au/2017/02/money-blockchains-and-social-scalability.html http://unenumerated.blogspot.com.au/2017/02/money-blockchain...
- ivanbakel 9y ago> The whole point behind a blockchain is that cryptoeconomic incentives serve as an additional security function which is better than relying on generosity alone to contribute hashing power. This has nothing to do with blockchains. What you're describing is proof of work with a payout system, and you could implement that without a blockchain at all. >So while it is true that a blockchain can exist without any kind of currency It has always been true. This was, in fact, exclusively the case before the first cryptocurrencies - blockchains are data structures, not a concept exclusive to currency. >Your other point is that a blockchain is simply a linked chain of documents. This is incorrect. It is exactly correct. The use of blockchains in cryptocurrencies is irrelevant to what they are. If I build the next great money machine tomorrow using a doubly-linked list, it doesn't change what a doubly-linked list fundamentally is. The fact that many people have been introduced to the idea of a blockchain through cryptocurrencies doesn't alter the basic facts. >The whole point behind a blockchain is that it serves as a way to get people to agree on an ordered list of events. This is not what the blockchain does. The blockchain helps to ensure that Proof of Work is effective for maintaining consensus after blocks are made - it's the role of PoW to produce the agreement. A blockchain without PoW would allow members to produce new combinations of blocks at will to edit the history.
- CiPHPerCoder 9y agoThe only real blockchain is CBC mode. (Cipher Block Chaining) What you're describing is a cryptocurrency, or some other form of cryptographically assured distributed ledger with a proof of work. If you think I'm wrong, look in the original Bitcoin paper and search for "blockchain".
- kbody 9y agoClearly there's an association to Bitcoin and there are certain expectations by people when mentioning blockchain. It's justified since blockchain on its own is a relatively simple data structure which on itself is not that significant. It's the composition of all the elements that have given the value and recognition to this technology.
- joepie91_ 9y agoSame answer here: the term "blockchain" didn't exist before Bitcoin. It has a very specific meaning involving a particular kind of distributed ledger.
- wildbunny 9y agoThis worries me. Bitcoin solved the double spend problem by using the LCR with PoW. That is the novel aspect which allowed cryptocurrencies to come into existence. If you remove the LCR and PoW, all you are left with is a toy example which cannot work in practice. What is needed is education about censensus design and bitcoin's implementation of the solution, rather than a 'how to guide' for building a basic linked list under the guise of 'blockchain'. Cheers, Paul.
- ionwake 9y agoWhat does LCR stand for? Thank you
- StavrosK 9y agoLooks like "longest chain rule".
- jmcmichael 9y agoLongest Chain Rule, that the network honors the longest chain as the correct chain.
- tinkerrr 9y agoBitcoin has moved away from the Longest Chain Rule to the blockchain with the most cumulative Proof of Work as what the nodes recognize as valid blockchain.
- test6554 9y agoI hear a lot about hash rates. How are aggregate hash rates confirmed/reported? Does a miner submit every single attempted hash to the network as a potential solution or do miners self-report their total hash rates?
- nicky0 9y agoIt is not necessary for miners to report any stats. Hash rate is simply inferred from the average time taken to find a block, multiplied by the current difficulty.
- chrisallick 9y agoI wanted to try re-writing in Ruby to warm up today. Can someone confirm this is correct? https://gist.github.com/chrisallick/cb196b13555c86f9193f3ec4f7f15ecc https://gist.github.com/chrisallick/cb196b13555c86f9193f3ec4...
- KenanSulayman 9y agoLooks good to me. You might want to keep track of the blocks as you create them, or you will find it hard to verify the integrity of a block. (Do I know the hash of the previous block? Do I know about the next block, if it is not the last block?)
- chrisallick 9y agoyeah im not sure how deep i want to go. i already have a side self-education project but i keep getting sucked into blockchain stuff and find myself reading white papers. i don't know... seems like it could become an obsession. the thing i really want to try making is take a sinatra/redis/crud app and rebuild the database as a distributed database on a blockchain. or at least i think thats what i want to do.
- cableshaft 9y agoRegardless of the semantic discussion on what exactly a 'blockchain' is and whether or not this qualifies, I found the article interesting by taking a tiny piece of the whole monster and demystifying it a bit. I don't see this any differently than a tutorial that makes a static image move around the screen with key presses. Is it a full game? Not at all. But can it teach you how to build a tiny piece of it, and you can look at other tutorials to figure out how to build other tiny pieces of it, and eventually synthesize that knowledge and make a full game? Yes.
- todd_wanna_code 9y agoHey you got some link for other tutorials to go from here?
- cableshaft 9y agoI haven't encountered any myself, no. But I haven't really been looking either.
- simias 9y agoThe clever part about bitcoin is reusing existing technologies in a novel way. It uses: - Hashcash-style proof of work: http://www.hashcash.org/ http://www.hashcash.org/ (originally designed to make spamming harder, although I don't think it ever really became widely adopted). - Merkle trees to reference transactions in the blocks (same technology used for bittorent chunks): https://en.wikipedia.org/wiki/Merkle_tree https://en.wikipedia.org/wiki/Merkle_tree - Elliptic curve cryptography for signing transactions: https://en.wikipedia.org/wiki/Elliptic_curve_cryptography https://en.wikipedia.org/wiki/Elliptic_curve_cryptography (asymmetric cryptography, used in TLS, SSH etc...) - When a new "node" connects to the network it uses hardcoded addresses and DNS seeds to find other nodes to connect to: https://bitcoin.org/en/glossary/dns-seed https://bitcoin.org/en/glossary/dns-seed (before that it used IRC) And there are probably a few other things but basically if you know how to work with those technologies then you have all the tools you need to implement a bitcoin clone. It's nothing groundbreaking, it's "just" a clever novel use of existing technology. All the actual "rules" of the network (the block reward etc...) are simply validated in the nodes, they'll reject any block that's not properly crafted (i.e. bad reward, invalid proof of work etc...). Therefore the node consensus dictates what bitcoin is. If you implement a non-compatible change in the client and you don't convince all the other users to switch you create a fork since you won't have the same definition of what constitutes a valid block.
- wildbunny 9y agoWhen you're talking about people's money, just following tutorials and piecing something together does not cut it.
- dguaraglia 9y agoI don't think anyone is suggesting taking this and publishing as the latest niche 'WhateverCoin'.
- wildbunny 9y agoIndeed. But there is a lot of talk about bitcoin and blockchain in general lately, and a lot of existing cryptocurrencies which are unworkable, created by people who want to get rich quick.
- cableshaft 9y agoFor sure. But those people probably don't bother trying to make their own implementation of the protocol. The code is out there for them to just go 'copy+paste, change a few config settings, done'. They're essentially the script kiddies of the cryptocurrency world. But me, I'm not planning on starting a coin, although I'm pretty interested in the tech behind it, albeit not enough to deep dive into the white papers and code, at least not yet. So I thought this was a nice byte-size chunk and was informative.
- wildbunny 9y agoThat's fair enough.
- todd_wanna_code 9y agoI don't think BlockChain is about creating a newer coin, it's just interesting as a topic.
- deleted 9y ago[deleted]
- e12e 9y agoRegardless of the quality of the article, it's refreshing to see so many good questions and concise answers in this thread (mostly about blockchains-as-distributed-ledgers). It's been a while since I saw such nice, civil and interesting technical discussion on hn.
- jchrisa 9y agoI've got a JS block-tree here. The root block is hashed from user content. https://github.com/jchris/document-coin https://github.com/jchris/document-coin