<p>Yes, the p2p protocol itself is not consensus-critical. Of course there can not be two completely seperate networks, so you will have to take care to create bridges between the two. But other than that you could make a sneakernet p2p network where people exchange USB sticks if you like.</p>

CC BY-SA 3.0
2016-02-25T14:04:42.343Z
While it is true that you can modify the P2P protocols in many instances, some message formats are consensus critical. For example the block message format cannot be changed since the block header as defined in the protocol is hashed to search for a valid PoW.
cdecker
CC BY-SA 3.0
2016-02-25T16:43:01.837Z
@cdecker No, that's not critical within the new custom p2p network which OP is asking about, only when communicating to the "normal" bitcoind. That's the role of those bridges I mentioned. Within the custom p2p network you can for example use JSON format or hide them in JPEG files, or in IBLT blocks or anything crazy. Note how Matt's Relay Network does something similar: it bridges with the Bitcoin p2p network, but internally it doesn't use the Bitcoin p2p protocol.
Jannes
CC BY-SA 3.0
2016-02-25T13:15:13.457Z
2016-02-25T13:15:13.457Z
Jannes
<p>I had a look at <a href="https://en.bitcoin.it/wiki/Protocol_documentation" rel="nofollow">https://en.bitcoin.it/wiki/Protocol_documentation</a> where the p2p protocol is documented. Although it states incompleteness I thought it is a good starting point to understand the protocol.
To my initial understanding the protocol is based on c-structs that are directly sent over the wire. This makes implementations in other languages more complex.</p>

<p>Would it be possible to introduce a new protocol based on a well known communication method (for example JSON) and make a smooth transition between the protocols? For example with bridge nodes, which are using two protocols in a transition period?</p>

CC BY-SA 3.0
2016-02-25T10:42:29.900Z
I have made an implementation of the protocol in javascript: https://github.com/getbitpocket/bitcoin-p2p-messages There are already many implementations in other languages as well. Be aware the message payload is much lower with the current serialization as it would be with json. I think this won't change in the future to a json serialization.
Stefan
<bitcoin-core><protocol>
Would it be possible to change the p2p protocol used by the bitcoin-clients without a hard-fork?
wuza
# Would it be possible to change the p2p protocol used by the bitcoin-clients without a hard-fork?

(Asked by: username_0 on 2016-02-25)

I had a look at <https://en.bitcoin.it/wiki/Protocol_documentation> where the p2p protocol is documented. Although it states incompleteness I thought it is a good starting point to understand the protocol.
To my initial understanding the protocol is based on c-structs that are directly sent over the wire. This makes implementations in other languages more complex.

Would it be possible to introduce a new protocol based on a well known communication method (for example JSON) and make a smooth transition between the protocols? For example with bridge nodes, which are using two protocols in a transition period?

**Tags:** bitcoin-core, protocol

> **Comments:**
> **username_1**: I have made an implementation of the protocol in javascript: https://github.com/getbitpocket/bitcoin-p2p-messages There are already many implementations in other languages as well. Be aware the message payload is much lower with the current serialization as it would be with json. I think this won't change in the future to a json serialization.  

---

## 1 answers

### Answer by username_2 on 2016-02-25. Score: 1 | Accepted answer

Yes, the p2p protocol itself is not consensus-critical. Of course there can not be two completely seperate networks, so you will have to take care to create bridges between the two. But other than that you could make a sneakernet p2p network where people exchange USB sticks if you like.

> **Comments:**
> **username_3**: While it is true that you can modify the P2P protocols in many instances, some message formats are consensus critical. For example the block message format cannot be changed since the block header as defined in the protocol is hashed to search for a valid PoW.  
> **username_2**: @username_3 No, that's not critical within the new custom p2p network which OP is asking about, only when communicating to the "normal" bitcoind. That's the role of those bridges I mentioned. Within the custom p2p network you can for example use JSON format or hide them in JPEG files, or in IBLT blocks or anything crazy. Note how Matt's Relay Network does something similar: it bridges with the Bitcoin p2p network, but internally it doesn't use the Bitcoin p2p protocol.  

---

