LearnBitcoin

Bitcoin Dev Archive 2011

Lock protocol version numbers

17 messages, 2 to 5 Nov 2011. Started by Amir Taaki.

Amir Taaki (6), Christian Decker (5), Luke Dashjr (3), Jeff Garzik, Mike Hearn, Jordan Mack

Permalink Original thread on gnusha.org

Amir Taaki permalink original

Hey,

Can we lock the version numbers to be the protocol version (which changes rarely) and instead use the sub_version_num field + revision number for individual builds?

Satoshi 0.4 BitcoinJava 120311 bitcoin-js 6

Like so. Otherwise we will have version bumping insanity :)

Christian Decker in reply to Amir Taaki permalink original

I don't really get what you want to achieve with this. The protocol will be slow down evolution (hopefully) soon, while the clients will continue releasing at a similar rhythm. It took long enough to decouple the protocol version from being bumped each client release, now doing the inverse coupling makes no sense.

Regards, Chris On Wed, Nov 2, 2011 at 10:23 PM, Amir Taaki <zgenjix@yahoo•com> wrote:

Quoted text (24 lines)
> Hey,
>
> Can we lock the version numbers to be the protocol version (which changes
> rarely) and instead use the sub_version_num field + revision number for
> individual builds?
>
> Satoshi 0.4
> BitcoinJava 120311
> bitcoin-js 6
>
> Like so. Otherwise we will have version bumping insanity :)
>
>
> ------------------------------------------------------------------------------
> RSA(R) Conference 2012
> Save $700 by Nov 18
> Register now
> http://p.sf.net/sfu/rsa-sfdev2dev1
> _______________________________________________
> Bitcoin-development mailing list
> Bitcoin-development@lists•sourceforge•net
> https://lists.sourceforge.net/lists/listinfo/bitcoin-development
>
>
Amir Taaki in reply to Amir Taaki permalink original

Point taken.

About the sub_version_num though. I prefer to let the field by defined clients however they wish, with just a guideline suggestion that IDENTIFIER VERSION is a format they should follow.

The idea being that different projects would have different release scheduling schemes and it'd be restrictive to lock people into the popular major.minor system.

So for the current bitcoin to find out the version number of other clients (if it was needed), it would have to parse the number from the string:

"Satoshi 0.5"

Although there would be little reason for this with a sane protocol versioning scheme.

If we're agreed then I'll start on that BIP.

________________________________ From: Gavin Andresen <gavinandresen@gmail•com> To: Amir Taaki <zgenjix@yahoo•com> Sent: Wednesday, November 2, 2011 9:34 PM Subject: Re: [Bitcoin-development] Lock protocol version numbers

Good idea.

Sounds perfect for a BIP....

On Wed, Nov 2, 2011 at 5:23 PM, Amir Taaki <zgenjix@yahoo•com> wrote:

Quoted text (4 lines)
> Hey,
> Can we lock the version numbers to be the protocol version (which changes
> rarely) and instead use the sub_version_num field + revision number for
> individual builds?
Christian Decker in reply to Amir Taaki permalink original

Just for reference: https://github.com/bitcoin/bitcoin/pull/63 The issue resulted in my most useless pull request fixing two variables :-)

I second the use of sub_version_num as a Client and Version identifier.

Regards, Chris

On Wed, Nov 2, 2011 at 11:33 PM, Amir Taaki <zgenjix@yahoo•com> wrote:

Quoted text (55 lines)
> Point taken.
>
> About the sub_version_num though. I prefer to let the field by defined
> clients however they wish, with just a guideline suggestion that IDENTIFIER
> VERSION is a format they should follow.
>
> The idea being that different projects would have different release
> scheduling schemes and it'd be restrictive to lock people into the popular
> major.minor system.
>
> So for the current bitcoin to find out the version number of other clients
> (if it was needed), it would have to parse the number from the string:
>
> "Satoshi 0.5"
>
> Although there would be little reason for this with a sane protocol
> versioning scheme.
>
> If we're agreed then I'll start on that BIP.
>
> ------------------------------
> *From:* Gavin Andresen <gavinandresen@gmail•com>
> *To:* Amir Taaki <zgenjix@yahoo•com>
> *Sent:* Wednesday, November 2, 2011 9:34 PM
> *Subject:* Re: [Bitcoin-development] Lock protocol version numbers
>
> Good idea.
>
> Sounds perfect for a BIP....
>
>
> On Wed, Nov 2, 2011 at 5:23 PM, Amir Taaki <zgenjix@yahoo•com> wrote:
> > Hey,
> > Can we lock the version numbers to be the protocol version (which changes
> > rarely) and instead use the sub_version_num field + revision number for
> > individual builds?
>
> --
> --
> Gavin Andresen
>
>
>
>
> ------------------------------------------------------------------------------
> RSA(R) Conference 2012
> Save $700 by Nov 18
> Register now
> http://p.sf.net/sfu/rsa-sfdev2dev1
> _______________________________________________
> Bitcoin-development mailing list
> Bitcoin-development@lists•sourceforge•net
> https://lists.sourceforge.net/lists/listinfo/bitcoin-development
>
>
Luke Dashjr in reply to Amir Taaki permalink original

On Wednesday, November 02, 2011 6:33:12 PM Amir Taaki wrote:

Quoted text (1 line)
> "Satoshi 0.5"

What is "Satoshi 0.5" anyway? 0.5's server is bitcoind and GUI is Bitcoin-Qt; the wx GUI client is gone, which is more or less what "Satoshi" referred to in the past...

Amir Taaki in reply to Luke Dashjr permalink original

Bitcoin is the protocol. The client protocol identifier needs a unique name. It is not a public name that anybody ever sees except protocol developers.

For instance with libbitcoin, there might be several clients using it, but they'd all have the same protocol identifier.

I think calling it Satoshi is apt homage to the person who made the original client reference protocol.

Satoshi BitcoinCommunityOriginal ...

Take your pick.

________________________________ From: Luke-Jr <luke@dashjr•org> To: "bitcoin-development@lists•sourceforge•net" <bitcoin-development@lists•sourceforge•net> Cc: Amir Taaki <zgenjix@yahoo•com> Sent: Wednesday, November 2, 2011 10:46 PM Subject: Re: [Bitcoin-development] Lock protocol version numbers

On Wednesday, November 02, 2011 6:33:12 PM Amir Taaki wrote:

Quoted text (1 line)
> "Satoshi 0.5"

What is "Satoshi 0.5" anyway? 0.5's server is bitcoind and GUI is Bitcoin-Qt; the wx GUI client is gone, which is more or less what "Satoshi" referred to in the past...

Amir Taaki in reply to Christian Decker permalink original

Cool thread. I enjoyed reading that :) Thanks for sharing.

________________________________ From: Christian Decker <decker.christian@gmail•com> To: Amir Taaki <zgenjix@yahoo•com> Cc: "bitcoin-development@lists•sourceforge•net" <bitcoin-development@lists•sourceforge•net> Sent: Wednesday, November 2, 2011 10:42 PM Subject: Re: [Bitcoin-development] Lock protocol version numbers

Just for reference: https://github.com/bitcoin/bitcoin/pull/63 The issue resulted in my most useless pull request fixing two variables :-)

I second the use of sub_version_num as a Client and Version identifier.

Regards, Chris

On Wed, Nov 2, 2011 at 11:33 PM, Amir Taaki <zgenjix@yahoo•com> wrote:

Point taken.

Quoted text (55 lines)
>
>
>About the sub_version_num though. I prefer to let the field by defined clients however they wish, with just a guideline suggestion that IDENTIFIER VERSION is a format they should follow.
>
>
>The idea being that different projects would have different release scheduling schemes and it'd be restrictive to lock people into the popular major.minor system.
>
>
>So for the current bitcoin to find out the version number of other clients (if it was needed), it would have to parse the number from the string:
>
>
>"Satoshi 0.5"
>
>
>Although there would be little reason for this with a sane protocol versioning scheme.
>
>
>If we're agreed then I'll start on that BIP.
>
>
>
>________________________________
>From: Gavin Andresen <gavinandresen@gmail•com>
>To: Amir Taaki <zgenjix@yahoo•com>
>Sent: Wednesday, November 2, 2011 9:34 PM
>Subject: Re: [Bitcoin-development] Lock protocol version numbers
>
>Good idea.
>
>Sounds perfect for a BIP....
>
>
>On Wed, Nov 2, 2011 at 5:23 PM, Amir Taaki <zgenjix@yahoo•com> wrote:
>> Hey,
>> Can we lock the version numbers to be the protocol version (which changes
>> rarely) and instead use the sub_version_num field + revision number for
>> individual builds?
>
>--
>--
>Gavin Andresen
>
>
>
>------------------------------------------------------------------------------
>RSA(R) Conference 2012
>Save $700 by Nov 18
>Register now
>http://p.sf.net/sfu/rsa-sfdev2dev1
>_______________________________________________
>Bitcoin-development mailing list
>Bitcoin-development@lists•sourceforge•net
>https://lists.sourceforge.net/lists/listinfo/bitcoin-development
>
>
Luke Dashjr in reply to Amir Taaki permalink original

On Wednesday, November 02, 2011 6:55:27 PM Amir Taaki wrote:

Quoted text (2 lines)
> I think calling it Satoshi is apt homage to the person who made the
> original client reference protocol.

My point is that the "Satoshi client" was the wxWidgets client, which was retired by 0.5.

Christian Decker in reply to Luke Dashjr permalink original

The mainline client (independently from the GUI) has been referenced to as "Satoshi" client. I personally like the name as a homage, but I guess it all comes down to the decision of the maintainers.

Regards, Chris

On Thu, Nov 3, 2011 at 12:07 AM, Luke-Jr <luke@dashjr•org> wrote:

Quoted text (18 lines)
> On Wednesday, November 02, 2011 6:55:27 PM Amir Taaki wrote:
> > I think calling it Satoshi is apt homage to the person who made the
> > original client reference protocol.
>
> My point is that the "Satoshi client" was the wxWidgets client, which was
> retired by 0.5.
>
>
> ------------------------------------------------------------------------------
> RSA(R) Conference 2012
> Save $700 by Nov 18
> Register now
> http://p.sf.net/sfu/rsa-sfdev2dev1
> _______________________________________________
> Bitcoin-development mailing list
> Bitcoin-development@lists•sourceforge•net
> https://lists.sourceforge.net/lists/listinfo/bitcoin-development
>
Jeff Garzik in reply to Christian Decker permalink original

On Wed, Nov 2, 2011 at 7:22 PM, Christian Decker <decker.christian@gmail•com> wrote:

Quoted text (3 lines)
> The mainline client (independently from the GUI) has been referenced to as
> "Satoshi" client. I personally like the name as a homage, but I guess it all
> comes down to the decision of the maintainers.

That's how I take it to mean: "satoshi client" is the client -started- by satoshi, that is actively distributed through github.com/bitcoin/bitcoin and bitcoin.org-linked downloads. Changing to QT doesn't change the lingo.

Mike Hearn in reply to Amir Taaki permalink original

BitCoinJ already sets the subver field to its name and version.

Christian Decker in reply to Mike Hearn permalink original

On BitDroid I stopped updating the protocol version at 31700 and set the string to be both Version and Client, just like BitcoinJ :-)

On Sat, Nov 5, 2011 at 3:32 PM, Mike Hearn <mike@plan99•net> wrote:

Quoted text (15 lines)
> BitCoinJ already sets the subver field to its name and version.
>
>
>
> ------------------------------------------------------------------------------
> RSA(R) Conference 2012
> Save $700 by Nov 18
> Register now
> http://p.sf.net/sfu/rsa-sfdev2dev1
> _______________________________________________
> Bitcoin-development mailing list
> Bitcoin-development@lists•sourceforge•net
> https://lists.sourceforge.net/lists/listinfo/bitcoin-development
>
>
Amir Taaki in reply to Christian Decker permalink original

From talking with Patrick Strateman (phantomcircuit), he suggested this idea (which I will elaborate more on in the BIP):

User-agent strings are a good starting point, however they aren't easy for parsing so we'll make a small modification to them.

We need a hierarchy from protocol, variant, gui, flavour, build

/Satoshi:314700/bitcoin-qt:0.4/

How does that sound? In BitcoinJ's case:

/BitcoinJ:0.2/AndroidBuild:0.8/

Thoughts:

- Do we need a freely defined comments field?

/BitcoinJ:0.2[iPad; U; CPU OS 3_2_1]/AndroidBuild:0.8/ /Satoshi:314700/bitcoin-qt:0.4[Ubuntu Oneiric]/

________________________________ From: Christian Decker <decker.christian@gmail•com> To: Mike Hearn <mike@plan99•net> Cc: Amir Taaki <zgenjix@yahoo•com>; "bitcoin-development@lists•sourceforge•net" <bitcoin-development@lists•sourceforge•net> Sent: Saturday, November 5, 2011 2:45 PM Subject: Re: [Bitcoin-development] Lock protocol version numbers

On BitDroid I stopped updating the protocol version at 31700 and set the string to be both Version and Client, just like BitcoinJ :-)

On Sat, Nov 5, 2011 at 3:32 PM, Mike Hearn <mike@plan99•net> wrote:

BitCoinJ already sets the subver field to its name and version.

Quoted text (13 lines)
>
>
>------------------------------------------------------------------------------
>RSA(R) Conference 2012
>Save $700 by Nov 18
>Register now
>http://p.sf.net/sfu/rsa-sfdev2dev1
>_______________________________________________
>Bitcoin-development mailing list
>Bitcoin-development@lists•sourceforge•net
>https://lists.sourceforge.net/lists/listinfo/bitcoin-development
>
>
Christian Decker in reply to Amir Taaki permalink original

Sorry for shooting this approach down, but I'm against it. User-agent strings are an extremely bad idea as it would lead developers to start making communication choices depending on the client type. User-Agents in HTTP are only useful if the clients (browsers) do not adhere to a well defined behavior. I see the version string more as a kind of vanity point (xyz peers are using my network code) and it would be bad to base choices on it. For protocol choices we already have a good mechanism in place (nServices) to negotiate capabilities.

I for one vote for keeping it as simple as possible, just a simple string, without any further meaning.

On Sat, Nov 5, 2011 at 4:39 PM, Amir Taaki <zgenjix@yahoo•com> wrote:

Quoted text (67 lines)
> From talking with Patrick Strateman (phantomcircuit), he suggested this
> idea (which I will elaborate more on in the BIP):
>
> User-agent strings are a good starting point, however they aren't easy for
> parsing so we'll make a small modification to them.
>
> We need a hierarchy from protocol, variant, gui, flavour, build
>
> /Satoshi:314700/bitcoin-qt:0.4/
>
> How does that sound? In BitcoinJ's case:
>
> /BitcoinJ:0.2/AndroidBuild:0.8/
>
> Thoughts:
>
> - Do we need a freely defined comments field?
>
> /BitcoinJ:0.2[iPad; U; CPU OS 3_2_1]/AndroidBuild:0.8/
> /Satoshi:314700/bitcoin-qt:0.4[Ubuntu Oneiric]/
>
> ------------------------------
> *From:* Christian Decker <decker.christian@gmail•com>
> *To:* Mike Hearn <mike@plan99•net>
> *Cc:* Amir Taaki <zgenjix@yahoo•com>; "
> bitcoin-development@lists•sourceforge•net" <
> bitcoin-development@lists•sourceforge•net>
> *Sent:* Saturday, November 5, 2011 2:45 PM
> *Subject:* Re: [Bitcoin-development] Lock protocol version numbers
>
> On BitDroid I stopped updating the protocol version at 31700 and set the
> string to be both Version and Client, just like BitcoinJ :-)
>
> On Sat, Nov 5, 2011 at 3:32 PM, Mike Hearn <mike@plan99•net> wrote:
>
> BitCoinJ already sets the subver field to its name and version.
>
>
>
> ------------------------------------------------------------------------------
> RSA(R) Conference 2012
> Save $700 by Nov 18
> Register now
> http://p.sf.net/sfu/rsa-sfdev2dev1
> _______________________________________________
> Bitcoin-development mailing list
> Bitcoin-development@lists•sourceforge•net
> https://lists.sourceforge.net/lists/listinfo/bitcoin-development
>
>
>
>
>
>
>
>
> ------------------------------------------------------------------------------
> RSA(R) Conference 2012
> Save $700 by Nov 18
> Register now
> http://p.sf.net/sfu/rsa-sfdev2dev1
> _______________________________________________
> Bitcoin-development mailing list
> Bitcoin-development@lists•sourceforge•net
> https://lists.sourceforge.net/lists/listinfo/bitcoin-development
>
>
Luke Dashjr in reply to Christian Decker permalink original

On Saturday, November 05, 2011 12:17:58 PM Christian Decker wrote:

Quoted text (3 lines)
> Sorry for shooting this approach down, but I'm against it. User-agent
> strings are an extremely bad idea as it would lead developers to start
> making communication choices depending on the client type.

This can be necessary in some cases. What happens when some popular client is found with a subtle bug, and cannot otherwise be differentiated from other similar-functionality clients? I have found User-Agent very valuable when dealing with the wide variety of miner bugs when I have enabled new functionality/behaviour on Eligius.

Amir Taaki in reply to Luke Dashjr permalink original

On Saturday, November 05, 2011 12:17:58 PM Christian Decker wrote:

Quoted text (8 lines)
>> Sorry for shooting this approach down, but I'm against it. User-agent
>> strings are an extremely bad idea as it would lead developers to start
>> making communication choices depending on the client type.
> This can be necessary in some cases. What happens when some popular client is
> found with a subtle bug, and cannot otherwise be differentiated from other
> similar-functionality clients? I have found User-Agent very valuable when
> dealing with the wide variety of miner bugs when I have enabled new
> functionality/behaviour on Eligius.

I can agree with this point though. If clients break the network protocol/do not comply properly with it, they should be disconnected and shunned. Hard love. We don't want any ambiguity in the protocol.

Fail hard and fast.

However my feeling about the user-agent string is that it is a vanity item, but here we'd be enforcing a format that everybody can understand and read. Lets say with libbitcoin- I'm sure that users of libbitcoin would like to have their client name in the string somehow. This was we can quickly understand which code-bases are being used and all the variants that exist build on those code-bases.

Together with system information (how many Linux users are there?) and various system settings (how many 32bit users are there), and so on.

Jordan Mack in reply to Amir Taaki permalink original
Quoted text (6 lines)
> If clients break the network protocol/do not comply properly with it,
 > they should be disconnected and shunned. Hard love. We don't want any
 > ambiguity in the protocol.

 > However my feeling about the user-agent string is that it is a vanity
 > item, but here we'd be enforcing a format that everybody can
 > understand and read.

I agree with Amir completely on both these points.

With something as critical as financial transactions, no exceptions can be made. The reported client and version should be ignored completely. If a client does not comply with the protocol, they must be rejected outright.

It is not in the best interest, or ability, to attempt to micromanage how developers choose to use the information given. Recommendations and guidelines can be made, but how they choose to implement is ultimately their decision. In my opinion, clear and concise definition of the protocol, and strict adherence in the mainline client, are the best options available.

The protocol version should be indicated so that it can properly be handled. Neither the name of the client, or it's version, need to be reported in this. Protocol validation should ignore this completely.

I do not believe that leaving out the client name and version entirely is the best option though. As silly as it may seem to some, vanity and recognition are very strong motivators. We want to encourage more supporters to the scene, not scare them away. The additional data provided by this could also be used for calculating various statistics. It sounds like BitcoinJ and BitDroid have already found ways of adding it in anyway. I believe it is in the best interest of the developers to formalize how this information will be included, and use it to their advantage.

TL;DR: Adhere strictly to the protocol, and reject clients that do not. Add a user agent string of some kind, but keep it separate from the protocol version.