Jeff Garzik [ARCHIVE] on Nostr: 📅 Original date posted:2012-06-17 📝 Original message:On Sat, Jun 16, 2012 at ...
📅 Original date posted:2012-06-17
📝 Original message:On Sat, Jun 16, 2012 at 4:42 AM, Wladimir <laanwj at gmail.com> wrote:
> Which is a perfectly reasonable requirement. However, one could simply
> standardize what a 'thin client' and what a 'thick client' does and offers
> (at a certain version level), without having to explicitly enumerate
> everything over the protocol.
>
> This also makes it easier to deprecate (lack of) certain features later on.
> You can simply drop support for protocol versions before a certain number
> (which has happened before). With the extension system this is much harder,
> which likely means you keep certain workarounds forever.
>
> Letting the node know of each others capabilities at connection time helps
> somewhat. It'd allow refusing clients that do not implement a certain
> feature. Then again, to me it's unclear what this wins compared to
> incremental protocol versions with clear requirements.
>
> I'm just afraid that the currently simple P2P protocol will turn into a zoo
> of complicated (and potentially buggy/insecure) interactions.
What is missing here is some perspective on the current situation. It
is -very- easy to make a protocol change and bump PROTOCOL_VERSION in
the Satoshi client.
But for anyone maintaining a non-Satoshi codebase, the P2P protocol is
already filled with all sorts of magic numbers, arbitrarily versioned
binary data structures.. already an unfriendly zoo of complicated and
potentially buggy interactions. There is scant, incomplete
documentation on the wiki -- the Satoshi source code is really the
only true reference.
I see these problems personally, trying to keep ArtForz' half-a-node
running on mainnet (distributed as 'blkmond' with pushpool).
In an era of HTTP and JSON, NFS and iSCSI, bitcoin's P2P protocol is
woefully backwards, fragile, limited and inflexible when it comes to
parameter/extension exchange and negotiation. Even iSCSI, that which
is implemented on hard drive firmware, has the ability to exchange
key=value parameters between local and remote sides of the RPC
connection.
Calling the current P2P protocol "simple" belies all the
implementation details you absolutely -must- get right, to run on
mainnet today. Satoshi client devs almost never see the fragility and
complexity inherent in the current legacy codebase, built up over
time.
--
Jeff Garzik
exMULTI, Inc.
jgarzik at exmulti.com
Published at
2023-06-07 10:15:48Event JSON
{
"id": "ba524441bf7df7e25f4ea7a77e0c28faa7548663b75d55637c020ebbbf85cb98",
"pubkey": "b25e10e25d470d9b215521b50da0dfe7a209bec7fedeb53860c3e180ffdc8c11",
"created_at": 1686132948,
"kind": 1,
"tags": [
[
"e",
"76f83e7269d7cdc3a12f52c2cf18660afe267f079ced72d533a304a164bd5ac9",
"",
"root"
],
[
"e",
"3b119c8fce23e1597b7dde34f9ed44928e00411dd1f1888ed00fffbee5ffe7ea",
"",
"reply"
],
[
"p",
"99bec497728c848e65549d1a5257d08de97621edcb4b77073269a45dac708d59"
]
],
"content": "📅 Original date posted:2012-06-17\n📝 Original message:On Sat, Jun 16, 2012 at 4:42 AM, Wladimir \u003claanwj at gmail.com\u003e wrote:\n\u003e Which is a perfectly reasonable requirement. However, one could simply\n\u003e standardize what a 'thin client' and what a 'thick client' does and offers\n\u003e (at a certain version level), without having to explicitly enumerate\n\u003e everything over the protocol.\n\u003e\n\u003e This also makes it easier to deprecate (lack of) certain features later on.\n\u003e You can simply drop support for protocol versions before a certain number\n\u003e (which has happened before). With the extension system this is much harder,\n\u003e which likely means you keep certain workarounds forever.\n\u003e\n\u003e Letting the node know of each others capabilities at connection time helps\n\u003e somewhat. It'd allow refusing clients that do not implement a certain\n\u003e feature. Then again, to me it's unclear what this wins compared to\n\u003e incremental protocol versions with clear requirements.\n\u003e\n\u003e I'm just afraid that the currently simple P2P protocol will turn into a zoo\n\u003e of complicated (and potentially buggy/insecure) interactions.\n\nWhat is missing here is some perspective on the current situation. It\nis -very- easy to make a protocol change and bump PROTOCOL_VERSION in\nthe Satoshi client.\n\nBut for anyone maintaining a non-Satoshi codebase, the P2P protocol is\nalready filled with all sorts of magic numbers, arbitrarily versioned\nbinary data structures.. already an unfriendly zoo of complicated and\npotentially buggy interactions. There is scant, incomplete\ndocumentation on the wiki -- the Satoshi source code is really the\nonly true reference.\n\nI see these problems personally, trying to keep ArtForz' half-a-node\nrunning on mainnet (distributed as 'blkmond' with pushpool).\n\nIn an era of HTTP and JSON, NFS and iSCSI, bitcoin's P2P protocol is\nwoefully backwards, fragile, limited and inflexible when it comes to\nparameter/extension exchange and negotiation. Even iSCSI, that which\nis implemented on hard drive firmware, has the ability to exchange\nkey=value parameters between local and remote sides of the RPC\nconnection.\n\nCalling the current P2P protocol \"simple\" belies all the\nimplementation details you absolutely -must- get right, to run on\nmainnet today. Satoshi client devs almost never see the fragility and\ncomplexity inherent in the current legacy codebase, built up over\ntime.\n\n-- \nJeff Garzik\nexMULTI, Inc.\njgarzik at exmulti.com",
"sig": "6ed9e4b7b6b8d75ff85702dcebe558c4439a44472ea3268c46b9d35e351d0cfb0e244fc9d52a2eab0b3a94c4dad55261ef339b6409efcef8d6abf6b890c1876f"
}