<blockquote>
<p>why does the network allow any node to broadcast a transaction or a block, only to one node?</p>
</blockquote>
<p>The Bitcoin network is a set of computers that communicate over the Internet using the Internet Protocol (IP) and the Transport Control Protocol (TCP). The Bitcoin network protocol is an application layer protocol that is a layer above the transport layer (TCP) and Internet layer (IP).</p>
<p>As such IP and TCP do not provide a mechanism that prevents one computer from communicating with one specific other. They don't prevent this because this is exactly what they were designed to do.</p>
<p>IP does include both broadcast and multicast capabilities however Bitcoin uses an approach generally described as a gossip protocol. Each node communicates on a direct one-to-one basis with each of a small number of other nodes. I'm not familiar with managing an IP multicast domain but I suspect it might be difficult in a purely peer-to-peer arrangement of nodes such as Bitcoin requires. You also have to allow for nodes that are offline at the time of the broadcast.</p>
<p>It is hard to imagine how one could enforce a broadcast-only policy since new Bitcoin nodes are continuously being created and older Bitcoin nodes disappearing and regular Bitcoin nodes are on computers that are only intermittently connected. We wouldn't want the whole network forced to a halt because someone with a Bitcoin wallet on their phone walked into a part of a building where phone reception was poor, or ran their battery down, suffered a power cut, broke their phone, etc. There will <em>never</em> be a time when <em>all</em> nodes are available.</p>
<p>I believe this would be especially difficult in a peer-to-peer network like Bitcoin, where there is no centralised control and anyone can write a Bitcoin application.</p>

CC BY-SA 4.0
2022-05-27T14:36:34.333Z
IP multicast/broadcast are not a solution. They too cannot guarantee that everyone will hear about everything (e.g. network connections can be flaky, packets can be lost). What OP is calling for is a theoretical concept called broadcast channel... and Bitcoin has one: it's called the blockchain. If the network layer itself already provided a broadcast channel, we wouldn't need the blockchain in the first place.
Pieter Wuille
CC BY-SA 4.0
2022-05-28T02:40:04.520Z
@PieterWuille could you please explain what is the broadcast channel you are referring to and how is the blockchain one?
David
CC BY-SA 4.0
2022-05-28T03:35:12.023Z
A broadcast channel is some kind of system where any participant can put a message on, and if successful, they know that every other participant will get that message. That is precisely what the blockchain provides: if someone sees their transaction included on chain, they know everyone else will see it. But the P2P network (or no real network) provides it in the way you're asking for.
Pieter Wuille
CC BY-SA 4.0
2022-05-28T15:59:07.210Z
Then the blockchain would be a broadcast channel only if the participants broadcast their transaction to everyone, otherwise, by assuming that a fraudster is able to create blocks faster than others, the victim will have a different blockchain than the rest on the network, contrasting the guarantee that "if someone sees their transaction included on the chain, they know everyone else will see it." Which is the case, that is the bitcoin blockchain provides no such guarantee (virtually does as the assumption is very extreme), because bitcoin is a / on a P2P network. Did I get that right?
David
CC BY-SA 4.0
2022-05-27T09:41:22.063Z
2022-05-27T10:37:11.453Z
2022-05-27T10:37:11.453Z
RedGrittyBrick
<blockquote>
<p>Given that, they would be able to achieve double spending by making a fraudulent transaction, broadcasting only to a single node (the victim), and by being able to find proofs of work and broadcast blocks to the victim (and only to him, otherwise no double spending will be achieved) faster than everyone else, the victim accepts that transaction as authentic and updates their wallet.</p>
</blockquote>
<p>Which version of the blockchain is accepted by the victim node is <em>not</em> determined by the speed at which blocks are added, but by the total combined hashrate which was used to make those blocks which can be cryptographically verified. A Bitcoin node always chooses the &quot;heaviest&quot; chain with the most combined hashrate, not the &quot;longest&quot; chain with the most blocks.</p>
<p>You'd need to pull off a 51% attack to do this unless you could also convince the victim node to somehow not talk to any other nodes on the network, in which case you could insure that your &quot;version&quot; of the chain is accepted by that node as it is the heaviest version out of 1 total versions. You could spend BTC in your &quot;version&quot; and when the victim node re-connected to the rest of the blockchain it would see that you didn't actually spend those coins since you spent them on a dead fork.</p>
<p>Note that even if you could isolate your victim node from all other nodes in the Bitcoin network, you would need enough hashpower to solve the cryptographic proof in the block previous to the start of your attack, which would require many resources and be a significant feat. Whatever you are &quot;buying&quot; with your double-spent BTC would have to be more expensive than the cost of the attack. Anybody accepting high-value payments is going to require a few block confirmations. So not only would you need to make one fraudulent block which matches the network's previous hashrate, you would need to make multiple.</p>
<p>Also, anybody who:</p>
<ul>
<li>Runs their own node</li>
<li>Accepts high-value payments for goods or services which you are trying to steal</li>
</ul>
<p>Is probably going to realize that their node is somehow disconnected from the rest of the Bitcoin network.</p>

CC BY-SA 4.0
2023-09-28T04:10:01.100Z
2023-09-28T04:10:01.100Z
Mr. T
<p>Let's assume for the sake of argument that a fraudster is able to create blocks faster than the rest of the network. Given that, they would be able to achieve double spending by making a fraudulent transaction, broadcasting only to a single node (the victim), and by being able to find proofs of work and broadcast blocks to the victim (and only to him, otherwise no double spending will be achieved) faster than everyone else, the victim accepts that transaction as authentic and updates their wallet.</p>
<p>That could've been prevented if a node can only broadcast its transactions and blocks to everyone else in the network.</p>
<p>In that case, why does the network allow any node to broadcast a transaction or a block, only to one node? Is it unable to prevent it, or is it a result of bad design?</p>

CC BY-SA 4.0
2022-06-26T13:05:17.673Z
In the real world, "the network" isn't a separate entity that we can magically cause to behave the way we want. It consists of individual nodes, which may or may not be malicious. We don't get to say how other nodes behave, only our own. Bitcoin is designed so that it economically incentivizes the behavior we want, but this has significant limitations. There are basically no restrictions on what nodes do with individual transactions before they get mined. So no, all we can do is say how/when/where to the transaction creator's own node sends it.
Pieter Wuille
CC BY-SA 4.0
2022-06-26T13:09:28.973Z
Furthermore, even **if** (and that's a very big if) we could decree how *every* node behaves, we still could not prevent double spends, simply due to the law of physics. Signals cannot travel faster than the speed of light. If two conflicting transactions spending the same coin were authored and broadcast nearly simultaneously, one in the US and one in Australia, then necessarily, some nodes will hear about one first, and others will hear about the other first. In a decentralized system, there is no *objective* concept of "first". Someone will have to choose: in Bitcoin, the miners.
Pieter Wuille
CC BY-SA 4.0
2022-05-27T04:55:18.650Z
How would you practically imagine that one can enforce that anything shared with anyone must be shared with everyone? What if you're only connected to one peer for example?
Pieter Wuille
CC BY-SA 4.0
2022-05-28T02:36:42.147Z
I am not familiar of how bitcoin is implemented (or how a P2P network is implemented in general), but I could imagine that as a client I get to make a transaction, rather than decide who I broadcast it to. In other words, if I make a transaction it's broadcasted to everyone which is how the DEX would've been implemented, and based on your comment I figure this is what I am unaware of, that it's impossible in a P2P network or against its fundamental feature.
David
<transactions><network><doublespend><fraud><broadcast>
Why does the network allow a fraudster (double spender) to broadcast a transaction to a single node (the victim)?
David
# Why does the network allow a fraudster (double spender) to broadcast a transaction to a single node (the victim)?

(Asked by: username_0 on 2022-05-27)

Let's assume for the sake of argument that a fraudster is able to create blocks faster than the rest of the network. Given that, they would be able to achieve double spending by making a fraudulent transaction, broadcasting only to a single node (the victim), and by being able to find proofs of work and broadcast blocks to the victim (and only to him, otherwise no double spending will be achieved) faster than everyone else, the victim accepts that transaction as authentic and updates their wallet.

That could've been prevented if a node can only broadcast its transactions and blocks to everyone else in the network.

In that case, why does the network allow any node to broadcast a transaction or a block, only to one node? Is it unable to prevent it, or is it a result of bad design?

**Tags:** transactions, network, doublespend, fraud, broadcast

> **Comments:**
> **username_1**: How would you practically imagine that one can enforce that anything shared with anyone must be shared with everyone? What if you're only connected to one peer for example?  
> **username_0**: I am not familiar of how bitcoin is implemented (or how a P2P network is implemented in general), but I could imagine that as a client I get to make a transaction, rather than decide who I broadcast it to. In other words, if I make a transaction it's broadcasted to everyone which is how the DEX would've been implemented, and based on your comment I figure this is what I am unaware of, that it's impossible in a P2P network or against its fundamental feature.  
> **username_1**: In the real world, "the network" isn't a separate entity that we can magically cause to behave the way we want. It consists of individual nodes, which may or may not be malicious. We don't get to say how other nodes behave, only our own. Bitcoin is designed so that it economically incentivizes the behavior we want, but this has significant limitations. There are basically no restrictions on what nodes do with individual transactions before they get mined. So no, all we can do is say how/when/where to the transaction creator's own node sends it.  
> **username_1**: Furthermore, even **if** (and that's a very big if) we could decree how *every* node behaves, we still could not prevent double spends, simply due to the law of physics. Signals cannot travel faster than the speed of light. If two conflicting transactions spending the same coin were authored and broadcast nearly simultaneously, one in the US and one in Australia, then necessarily, some nodes will hear about one first, and others will hear about the other first. In a decentralized system, there is no *objective* concept of "first". Someone will have to choose: in Bitcoin, the miners.  

---

## 2 answers

### Answer by username_2 on 2022-05-27. Score: 1

> why does the network allow any node to broadcast a transaction or a block, only to one node?

The Bitcoin network is a set of computers that communicate over the Internet using the Internet Protocol (IP) and the Transport Control Protocol (TCP). The Bitcoin network protocol is an application layer protocol that is a layer above the transport layer (TCP) and Internet layer (IP).

As such IP and TCP do not provide a mechanism that prevents one computer from communicating with one specific other. They don't prevent this because this is exactly what they were designed to do.

IP does include both broadcast and multicast capabilities however Bitcoin uses an approach generally described as a gossip protocol. Each node communicates on a direct one-to-one basis with each of a small number of other nodes. I'm not familiar with managing an IP multicast domain but I suspect it might be difficult in a purely peer-to-peer arrangement of nodes such as Bitcoin requires. You also have to allow for nodes that are offline at the time of the broadcast.

It is hard to imagine how one could enforce a broadcast-only policy since new Bitcoin nodes are continuously being created and older Bitcoin nodes disappearing and regular Bitcoin nodes are on computers that are only intermittently connected. We wouldn't want the whole network forced to a halt because someone with a Bitcoin wallet on their phone walked into a part of a building where phone reception was poor, or ran their battery down, suffered a power cut, broke their phone, etc. There will *never* be a time when *all* nodes are available.

I believe this would be especially difficult in a peer-to-peer network like Bitcoin, where there is no centralised control and anyone can write a Bitcoin application.

> **Comments:**
> **username_1**: IP multicast/broadcast are not a solution. They too cannot guarantee that everyone will hear about everything (e.g. network connections can be flaky, packets can be lost). What OP is calling for is a theoretical concept called broadcast channel... and Bitcoin has one: it's called the blockchain. If the network layer itself already provided a broadcast channel, we wouldn't need the blockchain in the first place.  
> **username_0**: @username_1 could you please explain what is the broadcast channel you are referring to and how is the blockchain one?  
> **username_1**: A broadcast channel is some kind of system where any participant can put a message on, and if successful, they know that every other participant will get that message. That is precisely what the blockchain provides: if someone sees their transaction included on chain, they know everyone else will see it. But the P2P network (or no real network) provides it in the way you're asking for.  
> **username_0**: Then the blockchain would be a broadcast channel only if the participants broadcast their transaction to everyone, otherwise, by assuming that a fraudster is able to create blocks faster than others, the victim will have a different blockchain than the rest on the network, contrasting the guarantee that "if someone sees their transaction included on the chain, they know everyone else will see it." Which is the case, that is the bitcoin blockchain provides no such guarantee (virtually does as the assumption is very extreme), because bitcoin is a / on a P2P network. Did I get that right?  

---

### Answer by username_3 on 2023-09-28. Score: 1

> Given that, they would be able to achieve double spending by making a fraudulent transaction, broadcasting only to a single node (the victim), and by being able to find proofs of work and broadcast blocks to the victim (and only to him, otherwise no double spending will be achieved) faster than everyone else, the victim accepts that transaction as authentic and updates their wallet.

Which version of the blockchain is accepted by the victim node is *not* determined by the speed at which blocks are added, but by the total combined hashrate which was used to make those blocks which can be cryptographically verified. A Bitcoin node always chooses the "heaviest" chain with the most combined hashrate, not the "longest" chain with the most blocks.

You'd need to pull off a 51% attack to do this unless you could also convince the victim node to somehow not talk to any other nodes on the network, in which case you could insure that your "version" of the chain is accepted by that node as it is the heaviest version out of 1 total versions. You could spend BTC in your "version" and when the victim node re-connected to the rest of the blockchain it would see that you didn't actually spend those coins since you spent them on a dead fork.

Note that even if you could isolate your victim node from all other nodes in the Bitcoin network, you would need enough hashpower to solve the cryptographic proof in the block previous to the start of your attack, which would require many resources and be a significant feat. Whatever you are "buying" with your double-spent BTC would have to be more expensive than the cost of the attack. Anybody accepting high-value payments is going to require a few block confirmations. So not only would you need to make one fraudulent block which matches the network's previous hashrate, you would need to make multiple.

Also, anybody who:

* Runs their own node
* Accepts high-value payments for goods or services which you are trying to steal

Is probably going to realize that their node is somehow disconnected from the rest of the Bitcoin network.


---

