Bitcoin Forum
May 25, 2024, 08:49:52 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Poll
Question: Is diversity in bitcoin client implementations a good or a bad thing?
A bad thing.  It is critical that everyone run the same code to avoid accidental forks.. - 6 (30%)
A good thing. Client diversity gives node operators choice and adds robustness to the network. - 14 (70%)
Total Voters: 20

Pages: « 1 [2]  All
  Print  
Author Topic: Is diversity in bitcoin client implementations a good or a bad thing?  (Read 902 times)
davis196
Hero Member
*****
Offline Offline

Activity: 2982
Merit: 914



View Profile
May 04, 2017, 11:44:08 AM
 #21

Some people argue that there should be one dominant "reference" client (e.g., Core) and everyone should run that.  Others argue that there should be multiple competing implementation (e.g., Core, Classic, BTCd, Bcoin, Unlimited, XT).  What do you think?

I`m not very familar with Core and all this stuff,but different implementations are good because of the
decentralization.Competition always brings better results than a monopoly.
Bitcoin Unlimited doesn`t stop btc growth.

achow101
Staff
Legendary
*
Offline Offline

Activity: 3402
Merit: 6653


Just writing some code


View Profile WWW
May 04, 2017, 02:12:37 PM
 #22

I thought that Satoshi gave the github keys to Gavin ?
No. Satoshi did not even have the project on Github originally. Gavin took over the project after Satoshi disappeared since he was the most experienced and active contributor at the time. I have found no evidence for Satoshi handing anything over except for Gavin's own statements. There is no indication from Satoshi that there was any plan for a "line of succession".

It is true that an implementation is a precise definition, but is such a precise definition necessary? You write as if Bitcoin does not have a mechanism for resolving disputes between nodes, but it does of course.
A precise definition of the consensus rules are necessary. Everyone must be following the exact same consensus rules, with its bugs, intricacies, and undefined behavior, in order to not have any accidental hard forks. The 2013 accidental hard fork is an example of such failure of different consensus implementations. On paper, all nodes were following the same rules. But in implementation, one version of the implementation had a bug which in turn caused an accidental chain fork. If everyone follows precisely the same rules, then this cannot happen. The only way for everyone to follow precisely the same rules is for every node to be share the same consensus implementation.

dinofelis
Hero Member
*****
Offline Offline

Activity: 770
Merit: 629


View Profile
May 04, 2017, 02:19:28 PM
 #23

I thought that Satoshi gave the github keys to Gavin ?
No. Satoshi did not even have the project on Github originally. Gavin took over the project after Satoshi disappeared since he was the most experienced and active contributor at the time. I have found no evidence for Satoshi handing anything over except for Gavin's own statements. There is no indication from Satoshi that there was any plan for a "line of succession".

Ah, nice to know !

Quote
A precise definition of the consensus rules are necessary. Everyone must be following the exact same consensus rules, with its bugs, intricacies, and undefined behavior, in order to not have any accidental hard forks. The 2013 accidental hard fork is an example of such failure of different consensus implementations. On paper, all nodes were following the same rules. But in implementation, one version of the implementation had a bug which in turn caused an accidental chain fork. If everyone follows precisely the same rules, then this cannot happen. The only way for everyone to follow precisely the same rules is for every node to be share the same consensus implementation.

This is actually only true for mining pool node software, as they are the only ones producing the block chain.  All the others can only download what the miner nodes produce or stop and not download it.  So the de facto protocol is the protocol that is compatible with the consensus chain that is produced by the miners ; whether that corresponds to any written document or not and whether that corresponds to any non-mining node or not.  If all miner pool nodes follow the same protocol, then only one chain is produced, which you can read with a "compatible browser" or which stops when that "browser cannot understand the only chain around".  Here, browser is any full node, or light wallet.

achow101
Staff
Legendary
*
Offline Offline

Activity: 3402
Merit: 6653


Just writing some code


View Profile WWW
May 04, 2017, 02:30:44 PM
 #24

This is actually only true for mining pool node software, as they are the only ones producing the block chain.  All the others can only download what the miner nodes produce or stop and not download it.  So the de facto protocol is the protocol that is compatible with the consensus chain that is produced by the miners ; whether that corresponds to any written document or not and whether that corresponds to any non-mining node or not.  If all miner pool nodes follow the same protocol, then only one chain is produced, which you can read with a "compatible browser" or which stops when that "browser cannot understand the only chain around".  Here, browser is any full node, or light wallet.
No, all full nodes matter and all full nodes are what define the consensus rules. You cannot have just the miners define what consensus is since they then have the ability to change it at will to fit their own agenda. Full nodes enforce that miners are following the same consensus rules by rejecting invalid blocks. Full nodes matter just as much as mining nodes as they determine what everyone else accepts as valid.

You can't just be compatible with the consensus rules, you must use the exact same rules with its bugs, intricacies, and undefined behavior. If you are just compatible, that means that the implementation is different and should that have a bug or do just one thing slightly differently, can cause a chain fork. The entire goal of consensus is to avoid chain forks.

Having multiple implementations of non-mining nodes is still problematic since a bug in one implementation means that people using that implementation can be forked off of the network either by a malicious entity or just accidentally.

franky1
Legendary
*
Offline Offline

Activity: 4228
Merit: 4500



View Profile
May 04, 2017, 02:33:39 PM
 #25

I thought that Satoshi gave the github keys to Gavin ?

nope

satoshi was working on sourceforge right up to when he left december 2010

gavin however had his own repo on github thats started something like june 2010.

when satoshi left, gavin was deemed the main go to guy so people started using his github repo, which he opened up to other people to use aswell. he actually said in 2012-13ish that in a couple years he may move onto other projects
which he eventually did by giving the main maintainer keys to laanwj

gavin continued as just a contributor until core guys decided to cut gavin off due to the craig wright drama with a pretence that gavin "must have got hacked"

I DO NOT TRADE OR ACT AS ESCROW ON THIS FORUM EVER.
Please do your own research & respect what is written here as both opinion & information gleaned from experience. many people replying with insults but no on-topic content substance, automatically are 'facepalmed' and yawned at
franky1
Legendary
*
Offline Offline

Activity: 4228
Merit: 4500



View Profile
May 04, 2017, 02:40:49 PM
Last edit: May 04, 2017, 02:56:17 PM by franky1
 #26

The only way for everyone to follow precisely the same rules is for every node to be share the same consensus implementation.

but if everyone was following the exact same code.. EVERYONE gets affected if there was a bug
EG the 2013 event happened because everyone was virtually core managed..


however imagine if there were some 0.8 (leveldb) nodes and btcd(wrote in GO and leveldb storage) the network would continue and make blocks and only the 0.7(which would have been less majority, if more diversity existed)) would have been left unsynced. and it would have been far far easier to just say "hey 0.7 time to upgrade"

by having diversity, only the non rule following nodes get kicked off the network or cant sync.
EG assert bug was not a network wide bug because of diversity

thus bitcoin continues due to diversity and only the problem code implementation would stop.

diverse decentralised peer network has its reasons to be diverse and decentralised.


the only advantage of everyone centralizing the exact same code line for line. is to make changes easily without veto because everyone would be forced to change without choice.. which also has its own risks and exploitability by doing this.

I DO NOT TRADE OR ACT AS ESCROW ON THIS FORUM EVER.
Please do your own research & respect what is written here as both opinion & information gleaned from experience. many people replying with insults but no on-topic content substance, automatically are 'facepalmed' and yawned at
dinofelis
Hero Member
*****
Offline Offline

Activity: 770
Merit: 629


View Profile
May 04, 2017, 03:29:17 PM
Last edit: May 04, 2017, 05:16:54 PM by dinofelis
 #27

This is actually only true for mining pool node software, as they are the only ones producing the block chain.  All the others can only download what the miner nodes produce or stop and not download it.  So the de facto protocol is the protocol that is compatible with the consensus chain that is produced by the miners ; whether that corresponds to any written document or not and whether that corresponds to any non-mining node or not.  If all miner pool nodes follow the same protocol, then only one chain is produced, which you can read with a "compatible browser" or which stops when that "browser cannot understand the only chain around".  Here, browser is any full node, or light wallet.
No, all full nodes matter and all full nodes are what define the consensus rules. You cannot have just the miners define what consensus is since they then have the ability to change it at will to fit their own agenda. Full nodes enforce that miners are following the same consensus rules by rejecting invalid blocks. Full nodes matter just as much as mining nodes as they determine what everyone else accepts as valid.

Yes, yes, I know that that is being said, but the logical error in this reasoning is that what you put forward as a desired goal of a system is taken as a logical technical consequence of said system.  This leaves the logical possibility that the system is not doing what was the desired goal, aside.
The technical fact is that if there is only one block chain out there, made by miners who agree mutually on a given protocol, and hence, don't produce a competing chain, but only build upon each-other's blocks, then other nodes can only decide to download, or not download that chain, but that's all there is around.  

This is like as if there was a single web server, making HTML pages with a certain protocol, and you deciding that your browser is going to read pages that satisfy another protocol.  Ok, you can point your browser to that server, and your browser will refuse to load the page.  And you get a blanc page.  Because there's nothing else your browser can download that could satisfy him.

A non-mining node can download a chain, and verify whether it agrees to the protocol rules on which it is built ; and if it is not satisfied, it stops loading that chain.  But there's no other chain around.  So it just gives the user a "blank page" as wallet.

The kind of reasoning is like "as our technology has as an aim that this rocket flies to the moon, and as our rocket is using propellers, propellers can fly rockets to the moon".  We've left out the logical possibility that our rocket will not fly as designed.  This is the logical equivalent of "as we want full nodes to be in control of the protocol, they are in control of the protocol".   However, as gmaxwell pointed out, the protocol is not what we write on paper, but what *actually happens in nature*.  And what *actually happens in nature* is about 20 mining pools making a unique chain, and nobody else does.  So that chain is what defines the protocol, and hence, whatever software those 20 pools use, is what defines the protocol, because that's the only one really out there in nature.

Quote
can cause a chain fork. The entire goal of consensus is to avoid chain forks.

Only miners can cause a fork.   A non-mining full node can accept the only chain in town, or not accept it and stop.

Pages: « 1 [2]  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!