Andy Parkins [ARCHIVE] on Nostr: š
Original date posted:2012-06-16 š Original message:On Saturday 16 Jun 2012 ...
š
Original date posted:2012-06-16
š Original message:On Saturday 16 Jun 2012 09:42:21 Wladimir 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.
My problem is that that I suspect the spectrum of clients will be far more
than simply "thin" or "thick". What about thick-pruned, thick-full? What
about thin-blocks-on-demand and thin-headers-on-demand? These are just what
I can think of now; it seems unwise to limit the functionality of clients
not yet designed with a binary designation. So... we make a field that can
hold more than just a bit; with each possible value representing a specific
(possibly overlapping) set of features? Why not just enumerate the features
then?
I did write responses to each of your following points; but they just
sounded like me being contrary. The short version is that I think too much
emphasis is being placed on defining a specific set of feature->version
mapping. That's going to make it hard for future clients that want to
implement some of the features but not all, and yet still want to be good
bitcoin citizens and be able to tell their peers what they don't support.
For example, there is no easy way for a node to tell another that it doesn't
have the whole block chain available, so requesting it from it will fail.
> I'm just afraid that the currently simple P2P protocol will turn into a
> zoo of complicated (and potentially buggy/insecure) interactions.
Fair enough.
> So maybe a capability system is a good idea but then the granularity
> should be large, not command-level. The interaction between protocol
> versions and capabilities needs to be defined as well. Does offering
> "getdata" at protocol version 10 mean the same as offering it at
> protocol version 11"? Probably not guaranteed. The arguments might have
> changed. So it's not entirely self-documenting either.
That problem doesn't go away just because you don't have a capabilities
system. Either version 11 can speak version 10 or it can't. I don't see
how having a system for finding out that fact changes anything other than
removing a load of protocol noise.
"I support getdata10" makes it far easier to discover that the peer supports
getdata10 than sending getdata11 and watching it fail does.
Andy
--
Dr Andy Parkins
andyparkins at gmail.com
Published at
2023-06-07 10:15:45Event JSON
{
"id": "3b119c8fce23e1597b7dde34f9ed44928e00411dd1f1888ed00fffbee5ffe7ea",
"pubkey": "99bec497728c848e65549d1a5257d08de97621edcb4b77073269a45dac708d59",
"created_at": 1686132945,
"kind": 1,
"tags": [
[
"e",
"76f83e7269d7cdc3a12f52c2cf18660afe267f079ced72d533a304a164bd5ac9",
"",
"root"
],
[
"e",
"7576577ed6d0423e72c1b681df441b8f84d6c98052240c337874e1524e5e505c",
"",
"reply"
],
[
"p",
"c86b2a2e41d61aaf7ab7198ba65cf5a35c015f3117a71eaba5e19bb537b20051"
]
],
"content": "š
Original date posted:2012-06-16\nš Original message:On Saturday 16 Jun 2012 09:42:21 Wladimir wrote:\n\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\n\u003e offers (at a certain version level), without having to explicitly\n\u003e enumerate everything over the protocol.\n\nMy problem is that that I suspect the spectrum of clients will be far more \nthan simply \"thin\" or \"thick\". What about thick-pruned, thick-full? What \nabout thin-blocks-on-demand and thin-headers-on-demand? These are just what \nI can think of now; it seems unwise to limit the functionality of clients \nnot yet designed with a binary designation. So... we make a field that can \nhold more than just a bit; with each possible value representing a specific \n(possibly overlapping) set of features? Why not just enumerate the features \nthen?\n\nI did write responses to each of your following points; but they just \nsounded like me being contrary. The short version is that I think too much \nemphasis is being placed on defining a specific set of feature-\u003eversion \nmapping. That's going to make it hard for future clients that want to \nimplement some of the features but not all, and yet still want to be good \nbitcoin citizens and be able to tell their peers what they don't support. \nFor example, there is no easy way for a node to tell another that it doesn't \nhave the whole block chain available, so requesting it from it will fail. \n\n\u003e I'm just afraid that the currently simple P2P protocol will turn into a\n\u003e zoo of complicated (and potentially buggy/insecure) interactions.\n\nFair enough.\n\n\u003e So maybe a capability system is a good idea but then the granularity\n\u003e should be large, not command-level. The interaction between protocol\n\u003e versions and capabilities needs to be defined as well. Does offering\n\u003e \"getdata\" at protocol version 10 mean the same as offering it at\n\u003e protocol version 11\"? Probably not guaranteed. The arguments might have\n\u003e changed. So it's not entirely self-documenting either.\n\nThat problem doesn't go away just because you don't have a capabilities \nsystem. Either version 11 can speak version 10 or it can't. I don't see \nhow having a system for finding out that fact changes anything other than \nremoving a load of protocol noise.\n\n\"I support getdata10\" makes it far easier to discover that the peer supports \ngetdata10 than sending getdata11 and watching it fail does.\n\n\n\nAndy\n-- \nDr Andy Parkins\nandyparkins at gmail.com",
"sig": "a9c8f6d1291989cc24a549a347f47f3ab236714acc85f6ef6489c09c7d3c06e4e08580fb0fc1d7ef50832e22c1b097a83b3fe0353e14bcd0ba1d83ec640da262"
}