Proposal: allocate 8 service bits for experimental use

Proposal: allocate 8 service bits for experimental use
2014-06-17  7:57 ` Wladimir
  2014-06-18 10:23 ` Wladimir
  
From: Peter Todd @ 2014-06-17  7:23 UTC (permalink / raw)
  To: Bitcoin-development

[-- Attachment #1: Type: text/plain, Size: 1107 bytes --]

For my replace-by-fee implementation(1) I used service bit 26 to let
preferential peering work so that replace-by-fee nodes could easily find
each other. Of course, that's a temporary/experimental usage that can be
dropped after wider adoption, so I included the following comment:

    // Reserve 24-31 for temporary experiments
    NODE_REPLACE_BY_FEE = (1 << 26)

Service bits are never a guaranteed thing anyway, so occasional
collisions can and should be tolerated by applications using these
experimental service bits.


Alternately Wladimir J. van der Laan brought up elsewhere(2) the
possibility for a wider notion of an extension namespace. I'm personally
not convinced of the short-term need - we've got 64 service bits yet
NODE_BLOOM is the first fully fleshed out proposal to use one - but it's
worth thinking about for the long term.

1) https://github.com/petertodd/bitcoin/tree/replace-by-fee-v0.9.1
2) https://github.com/bitcoin/bitcoin/pull/4351#issuecomment-46272958

-- 
'peter'[:-1]@petertodd.org
000000000000000058ca7ee3a40438ea5a96e499910638352468c6d69abdb226

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 685 bytes --]

 permalink raw reply	[|nested]
2014-06-17  7:23 [Bitcoin-development] Proposal: allocate 8 service bits for experimental use Peter Todd

  2014-06-17  8:02   ` Matt Whitlock
  2014-06-17 21:29   ` Jeff Garzik
  2014-06-18 10:23 ` Wladimir
  
From: Wladimir @ 2014-06-17  7:57 UTC (permalink / raw)
  To: Peter Todd;  Bitcoin Dev

On Tue, Jun 17, 2014 at 9:23 AM, Peter Todd <pete@petertodd•org> wrote:

> Alternately Wladimir J. van der Laan brought up elsewhere(2) the
> possibility for a wider notion of an extension namespace. I'm personally
> not convinced of the short-term need - we've got 64 service bits yet
> NODE_BLOOM is the first fully fleshed out proposal to use one - but it's
> worth thinking about for the long term

Yes, as I said in the github topic
(https://github.com/bitcoin/bitcoin/pull/4351) I suggest we adapt a
string-based name space for extensions.

A new network version could add a command 'getextensions' to query the
supported extensions, returning a list of extension strings or
(extension,version) pairs. For BIPs some something like 'BIP0064'
could be defined, but for an experiment for example
'experimental-getutxo'. This would be easy to implement and specify.

Unlike with the 64 service bits it does not require (as much) central
coordination to assign as there is no real danger of collisions. It
takes the political aspect out of P2P network extensions, and gives
more freedom to alternative implementations to experiment with their
own extensions. And no more need for bitcoin core to drive what must
be supported with increasing network versions.

Wladimir



 permalink raw reply	[|nested]
2014-06-17  7:57 ` Wladimir

  2014-06-17  8:08     ` Wladimir
  2014-06-17 21:29   ` Jeff Garzik
  
From: Matt Whitlock @ 2014-06-17  8:02 UTC (permalink / raw)
  To: Wladimir;  bitcoin-development

On Tuesday, 17 June 2014, at 9:57 am, Wladimir wrote:
> Yes, as I said in the github topic
> (https://github.com/bitcoin/bitcoin/pull/4351) I suggest we adapt a
> string-based name space for extensions.

Why use textual strings? These fields are not for human consumption. Why not use UUIDs, which are fixed length and will not waste as much bandwidth in the protocol? Or if you'd prefer a hierarchical namespace, you could use OIDs, a la ASN.1.



 permalink raw reply	[|nested]
2014-06-17  8:02   ` Matt Whitlock

  2014-06-17  8:16       ` Wladimir
  
From: Wladimir @ 2014-06-17  8:08 UTC (permalink / raw)
  To: Matt Whitlock;  Bitcoin Dev

On Tue, Jun 17, 2014 at 10:02 AM, Matt Whitlock <bip@mattwhitlock•name> wrote:
> On Tuesday, 17 June 2014, at 9:57 am, Wladimir wrote:
>> Yes, as I said in the github topic
>> (https://github.com/bitcoin/bitcoin/pull/4351) I suggest we adapt a
>> string-based name space for extensions.
>
> Why use textual strings? These fields are not for human consumption. Why not use UUIDs, which are fixed length and will not waste as much bandwidth in the protocol? Or if you'd prefer a hierarchical namespace, you could use OIDs, a la ASN.1.

Come on, this is only sent over the line at connection time at most
once. No need to overdesign a scheme here.

Anyhow, if we like to bike-shed so much:
- UUIDs are 16 bytes -- most human-recognizable strings are shorter.
And they're ugly to use as well.
- OIDs need central and hierarchical coordination, just what we're
trying to avoid.

Wladimir



 permalink raw reply	[|nested]
2014-06-17  8:08     ` Wladimir

  
From: Wladimir @ 2014-06-17  8:16 UTC (permalink / raw)
  To: Matt Whitlock;  Bitcoin Dev

On Tue, Jun 17, 2014 at 10:08 AM, Wladimir <laanwj@gmail•com> wrote:
> On Tue, Jun 17, 2014 at 10:02 AM, Matt Whitlock <bip@mattwhitlock•name> wrote:
>> On Tuesday, 17 June 2014, at 9:57 am, Wladimir wrote:
>>> Yes, as I said in the github topic
>>> (https://github.com/bitcoin/bitcoin/pull/4351) I suggest we adapt a
>>> string-based name space for extensions.
>>
>> Why use textual strings? These fields are not for human consumption. Why not use UUIDs, which are fixed length and will not waste as much bandwidth in the protocol? Or if you'd prefer a hierarchical namespace, you could use OIDs, a la ASN.1.

Also it IS useful for these fields to be human readable for
statistics, peer list views and such. When encountering a new, unknown
extension when connecting to a node it's much more useful to get a
google-able string to find out what it is about, than some long
hexadecimal or dotted-number identifier.

Wladimir



 permalink raw reply	[|nested]
2014-06-17  7:57 ` Wladimir
  2014-06-17  8:02   ` Matt Whitlock

  2014-06-18  6:20     ` Wladimir
  
From: Jeff Garzik @ 2014-06-17 21:29 UTC (permalink / raw)
  To: Wladimir;  Bitcoin Dev

I wrote a patch for string-based name extensions, circa 2011-2012.  I
agree that is preferable to unreadable bits, for reasons you cite.

However, it was noted that extensions (or UUIDs etc.) would not be
propagated around the network in "addr" messages, as service bits are.

On Tue, Jun 17, 2014 at 3:57 AM, Wladimir <laanwj@gmail•com> wrote:
> On Tue, Jun 17, 2014 at 9:23 AM, Peter Todd <pete@petertodd•org> wrote:
>
>> Alternately Wladimir J. van der Laan brought up elsewhere(2) the
>> possibility for a wider notion of an extension namespace. I'm personally
>> not convinced of the short-term need - we've got 64 service bits yet
>> NODE_BLOOM is the first fully fleshed out proposal to use one - but it's
>> worth thinking about for the long term
>
> Yes, as I said in the github topic
> (https://github.com/bitcoin/bitcoin/pull/4351) I suggest we adapt a
> string-based name space for extensions.
>
> A new network version could add a command 'getextensions' to query the
> supported extensions, returning a list of extension strings or
> (extension,version) pairs. For BIPs some something like 'BIP0064'
> could be defined, but for an experiment for example
> 'experimental-getutxo'. This would be easy to implement and specify.
>
> Unlike with the 64 service bits it does not require (as much) central
> coordination to assign as there is no real danger of collisions. It
> takes the political aspect out of P2P network extensions, and gives
> more freedom to alternative implementations to experiment with their
> own extensions. And no more need for bitcoin core to drive what must
> be supported with increasing network versions.
>
> Wladimir
>
> ------------------------------------------------------------------------------
> HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions
> Find What Matters Most in Your Big Data with HPCC Systems
> Open Source. Fast. Scalable. Simple. Ideal for Dirty Data.
> Leverages Graph Analysis for Fast Processing & Easy Data Exploration
> http://p.sf.net/sfu/hpccsystems
> _______________________________________________
> Bitcoin-development mailing list
> Bitcoin-development@lists•sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bitcoin-development



-- 
Jeff Garzik
Bitcoin core developer and open source evangelist
BitPay, Inc.      https://bitpay.com/



 permalink raw reply	[|nested]
2014-06-17 21:29   ` Jeff Garzik

  
From: Wladimir @ 2014-06-18  6:20 UTC (permalink / raw)
  To: Jeff Garzik;  Bitcoin Dev

On Tue, Jun 17, 2014 at 11:29 PM, Jeff Garzik <jgarzik@bitpay•com> wrote:
> I wrote a patch for string-based name extensions, circa 2011-2012.  I
> agree that is preferable to unreadable bits, for reasons you cite.
>
> However, it was noted that extensions (or UUIDs etc.) would not be
> propagated around the network in "addr" messages, as service bits are.

Thanks for letting me know, I didn't remember your patch.

Ugh, yes, propagating all extensions in `addr` messages is not how I
imagined this to work.

But then there would need to be an alternative way to discover nodes
that offer a certain extension. Alas, this moves it from a
straightforward and common sense change to a significant change to the
protocol.

Wladimir



 permalink raw reply	[|nested]
2014-06-17  7:23 [Bitcoin-development] Proposal: allocate 8 service bits for experimental use Peter Todd
  2014-06-17  7:57 ` Wladimir

  2014-06-18 11:48   ` Jeff Garzik
  
From: Wladimir @ 2014-06-18 10:23 UTC (permalink / raw)
  To: Peter Todd;  Bitcoin Dev

On Tue, Jun 17, 2014 at 9:23 AM, Peter Todd <pete@petertodd•org> wrote:
> For my replace-by-fee implementation(1) I used service bit 26 to let
> preferential peering work so that replace-by-fee nodes could easily find
> each other. Of course, that's a temporary/experimental usage that can be
> dropped after wider adoption, so I included the following comment:
>
>     // Reserve 24-31 for temporary experiments
>     NODE_REPLACE_BY_FEE = (1 << 26)
>
> Service bits are never a guaranteed thing anyway, so occasional
> collisions can and should be tolerated by applications using these
> experimental service bits.

Anyhow -- back to the original proposal. I'm fine with setting aside
part of the service bit space for experiments.

Wladimir



 permalink raw reply	[|nested]
2014-06-18 10:23 ` Wladimir

  
From: Jeff Garzik @ 2014-06-18 11:48 UTC (permalink / raw)
  To: Wladimir;  Bitcoin Dev

On Wed, Jun 18, 2014 at 5:23 AM, Wladimir <laanwj@gmail•com> wrote:
> Anyhow -- back to the original proposal. I'm fine with setting aside
> part of the service bit space for experiments.

ACK

-- 
Jeff Garzik
Bitcoin core developer and open source evangelist
BitPay, Inc.      https://bitpay.com/



 permalink raw reply	[|nested]