<p>For ease of use, there has to be one or more automatic peer discovery mechanisms. You have listed some of them.</p>

<p>There is also the <code>-addnode</code> command line option to bitcoind that allows the user to connect to specific node(s).</p>

<p>These mechanisms are specific to the current <em>implementation</em> of Bitcoin. The Bitcoin <em>protocol</em> does not specify any particular peer discovery mechanism. This allows the discovery mechanism to evolve over time, and for the truly paranoid, also allows manual peer specification.</p>

CC BY-SA 3.0
2017-02-10T14:08:17.027Z
So your last paragraph is what I believe is the correct answer and what I was eluding to in my final sentences. Thank you for your input!
Greg Hilston
CC BY-SA 3.0
2017-02-09T22:44:15.390Z
2017-02-09T22:44:15.390Z
Greg Hewgill
<p>I'm going to disagree with the two other answers here, and state that node finding simply is not decentralized. Much of its design aims for decentralization and reduction of trusted parties, but nothing is absolute.</p>

<p>Yes, people are able to disable DNS seeds, and disable hardcoded seed IPs, and configure their own connections. But that's not what happens, and it likely wouldn't work at any large scale. Some people would set up websites with configuration guidelines, or updated lists of good nodes, and people would end up relying on those. But a reputation based system that relies on human trust is not what I would call decentralized in a meaningful way - it's just moving the problem elsewhere.</p>

<p><strong>However</strong>, at least for connections between full nodes, there is relatively little harm that DNS seeds can cause. The only thing needed is one connection to an honest node.</p>

CC BY-SA 4.0
2023-11-29T12:13:57.803Z
Would it be possible / helpful to decentralization to make some automated verification based reputation system that node operators can network to each-other to help identify honest nodes when bootstrapping?
Poseidon
CC BY-SA 3.0
2017-02-10T00:34:53.230Z
2017-02-10T00:34:53.230Z
Pieter Wuille
<p>They're decentralized because every participant chooses whether to use those methods or other methods at their whim. You can exchange addresses with friends. You can hard code them into your software. You can use any DNS name you want, maintained by whoever you want. The system will still work and will still work fine. No authority decides how this will work. Nothing breaks if you do it some other way.</p>

<p>If you think these methods don't meet some requirements or preferences that you have, come up with your own methods and release them in code. Those who agree with you will run your code. And nobody will force them to do otherwise. Everything will work whether people do it your way or some other way.</p>

CC BY-SA 3.0
2017-02-10T14:09:35.417Z
Hey David, thanks for your input. I think I disagree with your main point. Mainly "They're decentralized because every participant chooses whether to use those methods or other methods at their whim". In my opinion, just because there are alternative choices available does not make them all decentralized. Thanks for the input though
Greg Hilston
CC BY-SA 3.0
2017-02-10T18:54:00.953Z
@GregHilston It's not that there are alternative choices available, it's that anyone who wants to is entirely free to create their own choice and use it. The reason eBay, for example, is not decentralized is because eBay holds a "secret sauce" (software, regulatory approvals, and so on) that prevents others from setting up their own variants and interoperating.
David Schwartz
CC BY-SA 3.0
2017-02-10T19:27:30.857Z
So to reword this, while the current implementations may not be decentralized the possibility to implement your own decentralized implementation is available and free?
Greg Hilston
CC BY-SA 3.0
2017-02-10T19:32:26.860Z
That's close. Every individual bitcoin node or bitcoin miner is centralized. The system is decentralized because anyone can easily add a bitcoin node or bitcoin miner. That there aren't individual decentralized nodes or individual decentralized miners doesn't make the system centralized. The lack of "secret sauce" and the freedom to do things however you want, coupled with no central authority to force rules on the majority is what makes a system decentralized.
David Schwartz
CC BY-SA 3.0
2017-02-10T19:35:56.923Z
My pleasure. That people follow a central authority (or use some centralized component or service) by choice doesn't make a system centralized so long as people are free to abandon that centralized component the moment they think it's abusing its authority or a better one comes along. That's just an efficient convenience.
David Schwartz
CC BY-SA 3.0
2017-02-11T18:42:02.457Z
But the choices people actually make matter. What does it matter that you can avoid node finding and manually select your own peers if nobody does? Convenience, in practice, is a centralizing force. And that's fine. We minimize the influence that DNS seeds can have over the system. That doesn't mean we should deny that, in practice, they are centralized and possibly introduce systemic risks to the system.
Pieter Wuille
CC BY-SA 3.0
2017-02-11T18:45:26.243Z
@PieterWuille Unless you really care about availability, it's much simpler, cheaper, and more efficient to just wait until they fail and then replace them. (Of course, you should know how to replace them before they fail.) And if you really care about availability, just have more than one system so they won't all fail at the same time. Trying to make a single system super reliable can be a fool's errand because the complexity necessary to make it reliable introduces its own complex failure modes.
David Schwartz
CC BY-SA 3.0
2017-02-11T18:50:53.080Z
You assume that the only possible failure is lack of availability. DNS seed operators can assist in a partitioning attack. Or looking further: while everyone has the option to use something else than gmail, I would hesitate to call the email landscape today decentralized.
Pieter Wuille
CC BY-SA 3.0
2017-02-11T18:59:02.770Z
David Schwartz: I don't disagree that there are good reasons to use centralized systems (I operate a DNS seed for Bitcoin myself!) for certain parts of the ecosystem. I'm just objecting to the use of the "but people don't have to use them!" argument to say it isn't centralization. It is, and it's fine, but we should be aware of it.
Pieter Wuille
CC BY-SA 3.0
2017-02-11T20:47:47.590Z
@PieterWuille It's trivial to fix those risks and, frankly, I don't know why people don't fix them. Detecting partitioning attacks is easy. Ripple does it, Bitcoin just chose not to. I agree that not detecting those kinds of attacks reduces decentralization.
David Schwartz
CC BY-SA 3.0
2017-02-11T21:25:17.247Z
Bitcoin has various means of detecting and avoiding partitioning attacks; I'm just giving an example of the influence that DNS seeds have. My point is that if they have _any_ effect at all, it's one in practice only a centralized service can provide. I don't think it's bad - we have enough checks in place - but that doesn't change anything about the fact that there are pieces of centralized infrastructure, and we should admit that.
Pieter Wuille
CC BY-SA 3.0
2017-02-09T23:39:41.127Z
2017-02-09T23:39:41.127Z
David Schwartz
<p>Whenever Bitcoins are discussed, one generally reads how "Bitcoins are decentralized. No company nor state controls them". My question is, how is this statement true when you read about how Bitcoin Clients find each other.</p>

<p>Reading from here <a href="https://bitcoin.stackexchange.com/questions/3536/how-do-bitcoin-clients-find-each-other">How do Bitcoin clients find each other?</a> we find out that Bitcoin clients use a number of ways to find other Bitcoin clients. To summarize those methods can be:</p>

<ol>
<li>List of previous connections</li>
<li>DNS seeds which points to host names</li>
<li>(Abandoned) IRC server</li>
</ol>

<p>So with that in mind, how are these methods decentralized? I understand how method one is, but method one can not act always act as the default method per new connections.</p>

<p>When you look at method 2 and 3, I question primarily the decentralized nature of a host name, as someone has to pay for the registration of said domain name and the ICANN organization is responsible for such registration. While method 3, someone has to host a server. Someone is paying for or owns the hardware and is therefore not decentralized.</p>

<p>The only methods I can think of that are truly decentralized is</p>

<ol>
<li>List of previous connections (As currently implemented)</li>
<li>IP/Port scan for other Bitcoin clients. (Attempt to initiate a handshake to identify other clients. I understand this would be incredibly slow but seems purely decentralized to me)</li>
</ol>

<p>Can anyone shed light how the actual methods do ensure Bitcoin is decentralized? My only other thought is the "spec" of Bitcoin is decentralized and the implementation of the clients themselves happen to not be.</p>

<decentralization>
How is Bitcoin truly decentralized?
Greg Hilston
# How is Bitcoin truly decentralized?

(Asked by: username_0 on 2017-02-09)

Whenever Bitcoins are discussed, one generally reads how "Bitcoins are decentralized. No company nor state controls them". My question is, how is this statement true when you read about how Bitcoin Clients find each other.

Reading from here [How do Bitcoin clients find each other?](https://bitcoin.stackexchange.com/questions/3536/how-do-bitcoin-clients-find-each-other) we find out that Bitcoin clients use a number of ways to find other Bitcoin clients. To summarize those methods can be:

1. List of previous connections
2. DNS seeds which points to host names
3. (Abandoned) IRC server

So with that in mind, how are these methods decentralized? I understand how method one is, but method one can not act always act as the default method per new connections.

When you look at method 2 and 3, I question primarily the decentralized nature of a host name, as someone has to pay for the registration of said domain name and the ICANN organization is responsible for such registration. While method 3, someone has to host a server. Someone is paying for or owns the hardware and is therefore not decentralized.

The only methods I can think of that are truly decentralized is

1. List of previous connections (As currently implemented)
2. IP/Port scan for other Bitcoin clients. (Attempt to initiate a handshake to identify other clients. I understand this would be incredibly slow but seems purely decentralized to me)

Can anyone shed light how the actual methods do ensure Bitcoin is decentralized? My only other thought is the "spec" of Bitcoin is decentralized and the implementation of the clients themselves happen to not be.

**Tags:** decentralization


---

## 3 answers

### Answer by username_1 on 2017-02-09. Score: 1 | Accepted answer

For ease of use, there has to be one or more automatic peer discovery mechanisms. You have listed some of them.

There is also the `-addnode` command line option to bitcoind that allows the user to connect to specific node(s).

These mechanisms are specific to the current *implementation* of Bitcoin. The Bitcoin *protocol* does not specify any particular peer discovery mechanism. This allows the discovery mechanism to evolve over time, and for the truly paranoid, also allows manual peer specification.

> **Comments:**
> **username_0**: So your last paragraph is what I believe is the correct answer and what I was eluding to in my final sentences. Thank you for your input!  

---

### Answer by username_2 on 2017-02-10. Score: 2

I'm going to disagree with the two other answers here, and state that node finding simply is not decentralized. Much of its design aims for decentralization and reduction of trusted parties, but nothing is absolute.

Yes, people are able to disable DNS seeds, and disable hardcoded seed IPs, and configure their own connections. But that's not what happens, and it likely wouldn't work at any large scale. Some people would set up websites with configuration guidelines, or updated lists of good nodes, and people would end up relying on those. But a reputation based system that relies on human trust is not what I would call decentralized in a meaningful way - it's just moving the problem elsewhere.

**However**, at least for connections between full nodes, there is relatively little harm that DNS seeds can cause. The only thing needed is one connection to an honest node.

> **Comments:**
> **username_3**: Would it be possible / helpful to decentralization to make some automated verification based reputation system that node operators can network to each-other to help identify honest nodes when bootstrapping?  

---

### Answer by username_4 on 2017-02-09. Score: 1

They're decentralized because every participant chooses whether to use those methods or other methods at their whim. You can exchange addresses with friends. You can hard code them into your software. You can use any DNS name you want, maintained by whoever you want. The system will still work and will still work fine. No authority decides how this will work. Nothing breaks if you do it some other way.

If you think these methods don't meet some requirements or preferences that you have, come up with your own methods and release them in code. Those who agree with you will run your code. And nobody will force them to do otherwise. Everything will work whether people do it your way or some other way.

> **Comments:**
> **username_0**: Hey username_4, thanks for your input. I think I disagree with your main point. Mainly "They're decentralized because every participant chooses whether to use those methods or other methods at their whim". In my opinion, just because there are alternative choices available does not make them all decentralized. Thanks for the input though  
> **username_4**: @username_0 It's not that there are alternative choices available, it's that anyone who wants to is entirely free to create their own choice and use it. The reason eBay, for example, is not decentralized is because eBay holds a "secret sauce" (software, regulatory approvals, and so on) that prevents others from setting up their own variants and interoperating.  
> **username_0**: So to reword this, while the current implementations may not be decentralized the possibility to implement your own decentralized implementation is available and free?  
> **username_4**: That's close. Every individual bitcoin node or bitcoin miner is centralized. The system is decentralized because anyone can easily add a bitcoin node or bitcoin miner. That there aren't individual decentralized nodes or individual decentralized miners doesn't make the system centralized. The lack of "secret sauce" and the freedom to do things however you want, coupled with no central authority to force rules on the majority is what makes a system decentralized.  
> **username_4**: My pleasure. That people follow a central authority (or use some centralized component or service) by choice doesn't make a system centralized so long as people are free to abandon that centralized component the moment they think it's abusing its authority or a better one comes along. That's just an efficient convenience.  
> **username_2**: But the choices people actually make matter. What does it matter that you can avoid node finding and manually select your own peers if nobody does? Convenience, in practice, is a centralizing force. And that's fine. We minimize the influence that DNS seeds can have over the system. That doesn't mean we should deny that, in practice, they are centralized and possibly introduce systemic risks to the system.  
> **username_4**: @username_2 Unless you really care about availability, it's much simpler, cheaper, and more efficient to just wait until they fail and then replace them. (Of course, you should know how to replace them before they fail.) And if you really care about availability, just have more than one system so they won't all fail at the same time. Trying to make a single system super reliable can be a fool's errand because the complexity necessary to make it reliable introduces its own complex failure modes.  
> **username_2**: You assume that the only possible failure is lack of availability. DNS seed operators can assist in a partitioning attack. Or looking further: while everyone has the option to use something else than gmail, I would hesitate to call the email landscape today decentralized.  
> **username_2**: username_4 username_4: I don't disagree that there are good reasons to use centralized systems (I operate a DNS seed for Bitcoin myself!) for certain parts of the ecosystem. I'm just objecting to the use of the "but people don't have to use them!" argument to say it isn't centralization. It is, and it's fine, but we should be aware of it.  
> **username_4**: @username_2 It's trivial to fix those risks and, frankly, I don't know why people don't fix them. Detecting partitioning attacks is easy. Ripple does it, Bitcoin just chose not to. I agree that not detecting those kinds of attacks reduces decentralization.  
> **username_2**: Bitcoin has various means of detecting and avoiding partitioning attacks; I'm just giving an example of the influence that DNS seeds have. My point is that if they have _any_ effect at all, it's one in practice only a centralized service can provide. I don't think it's bad - we have enough checks in place - but that doesn't change anything about the fact that there are pieces of centralized infrastructure, and we should admit that.  

---

