Re: [Bitcoin-development] NODE_BLOOM BIP

2013-08-18 Thread Mike Hearn
The original Bloom filtering spec did not make this feature optional for
the same reason gzip isn't an optional part of the PNG specification. I see
no reason to revisit that. It's definitely not the case that making every
possible feature optional is smart design, often it's the opposite.

If in future there are nodes that for some reason can't technically support
this feature, then there'd be a stronger rationale for something like this.
However no such nodes exist, nor are they likely to in future given that
it's a simple feature to implement.

For these reason I oppose this BIP.


On Sun, Aug 18, 2013 at 4:59 AM, Peter Todd p...@petertodd.org wrote:

 My draft is as follows.

 Gregory Maxwell: Can you assign a BIP # for this? The next number, 38,
 is on the wiki as Passphrase-protected private key by Mike Caldwell,
 although it isn't in the list so I don't know if that is official or
 not.



 BIP: ?
 Title: NODE_BLOOM service bit
 Author: Peter Todd p...@petertodd.org
 Type: Standards Track (draft)
 Created: 17-08-2013

 Abstract
 

 This BIP extends BIP 37, Connection Bloom filtering, by defining a service
 bit
 to allow peers to advertise that they support bloom filters explicitly.


 Motivation
 ==

 BIP 37 did not specify a service bit for the bloom filter service, thus
 implicitly assuming that all nodes that serve peers data support it. There
 are
 however cases where a node may want to provide data, such as mempool
 transactions and blocks, but do not want to or have not implemented bloom
 filtering. Additionally it is good practice for nodes to be given options
 as to
 the granularity of the services they are providing the public - a full-node
 operator may be able to donate only a small amount of bandwidth and may
 want
 those efforts to be used by other full-node operators.


 Specification
 =

 The following protocol bit is added:

 NODE_BLOOM = (1  1)

 In addition the protocol version is increased from 70001 to 70002 in the
 reference implementation. Nodes that support bloom filters should set that
 protocol bit. Otherwise it should remain unset.

 NODE_BLOOM is distinct from NODE_NETWORK, and it is legal to advertise
 NODE_BLOOM but not NODE_NETWORK.

 If a node does not support bloom filters but receives a filterload,
 filteradd, or filterclear message from a peer the node should
 disconnect
 that peer immediately.

 While outside the scope of this BIP it is suggested that DNS seeds and
 other
 peer discovery mechanisms support the ability to specify the services
 required;
 current implementations simply check only that NODE_NETWORK is set.


 Design rational
 ===

 A service bit was chosen as applying a bloom filter is a service.

 The increase in protocol version is for backwards compatibility. Nodes that
 require the bloom filter service can set NODE_BLOOM for peers advertising a
 protocol version  70002, allowing the rest of the implementation to be
 unchanged. Nodes with implementations that do not know of the NODE_BLOOM
 bit
 will be disconnected immediately as though the connection failed for some
 reason, and thus will not have incoming bandwidth wasted by that peer and
 can
 easily connect to another peer.

 Supporting NODE_BLOOM but not NODE_NETWORK allows for situations where a
 node
 may have data that its peers may be interested in, but is not a full node
 and
 thus does not have block data in general. For instance an SPV node that
 receives a full, unfiltered, block from a peer may want to let its SPV
 peers
 know about the existence of that block and provide them that data if
 requested.
 Those peers in turn may only be interested in knowing about the block if it
 matches a specific bloom filter. Note how in this example DoS attacks are
 made
 prohibitively expensive by the work required to create a valid block
 header.


 Reference Implementation
 

 https://github.com/bitcoin/bitcoin/pull/2900


 Copyright
 =

 This document is placed in the public domain.

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


 --
 Get 100% visibility into Java/.NET code with AppDynamics Lite!
 It's a free troubleshooting tool designed for production.
 Get down to code-level detail for bottlenecks, with 2% overhead.
 Download for free and get started troubleshooting in minutes.
 http://pubads.g.doubleclick.net/gampad/clk?id=48897031iu=/4140/ostg.clktrk
 ___
 Bitcoin-development mailing list
 Bitcoin-development@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/bitcoin-development


--
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with 2% overhead. 
Download for free and get started troubleshooting in 

Re: [Bitcoin-development] NODE_BLOOM BIP

2013-08-18 Thread Gavin Andresen
Mike pointed out exactly the reason I oppose a NODE_BLOOM service bit: I
also think it is a bad idea to start making various bits and pieces of the
protocol optional.

It is bad for privacy (easier to fingerprint nodes) and bad for
decentralization (fewer nodes support your required feature set). And every
bit you add can give you an exponential number of combinations your QA team
should test.

I'd say the same thing about NODE_TRANSACTION (I don't know about blocks,
have and NODE_BLOCK bits.

-- 
--
Gavin Andresen
--
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with 2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031iu=/4140/ostg.clktrk___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] NODE_BLOOM BIP

2013-08-18 Thread Peter Todd
On Mon, Aug 19, 2013 at 12:00:23AM +0200, Mike Hearn wrote:
 The original Bloom filtering spec did not make this feature optional for
 the same reason gzip isn't an optional part of the PNG specification. I see
 no reason to revisit that. It's definitely not the case that making every
 possible feature optional is smart design, often it's the opposite.

Bloom filtering isn't lossless so to speak.

A better analogy would be making re-sharing an optinal part of the
BitTorrent specification, and then expecting that the majority of users
would never upload data to peers that needed it.

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


signature.asc
Description: Digital signature
--
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with 2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031iu=/4140/ostg.clktrk___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Gavin's post-0.9 TODO list...

2013-08-18 Thread John Dillon
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA256

On Fri, Aug 16, 2013 at 2:15 PM, Peter Todd p...@petertodd.org wrote:
 On Fri, Aug 16, 2013 at 10:01:16AM -0400, Peter Todd wrote:
 Doing this also makes it more difficult to sybil the network - for
 instance right now you can create SPV honeypots that allow incoming
 connections only from SPV nodes, thus attracting a disproportionate % of
 the total SPV population given a relatively small number of nodes. You
 can then use that to harm SPV nodes by, for instance, making a % of
 transactions be dropped deterministicly, either by the bloom matching
 code, or when sent. Users unlucky enough to be surrounded by sybil nodes
 will have their transactions mysteriously fail to arrive in their
 wallets, or have their transactions mysteriously never confirm. Given
 how few full nodes there are, it probably won't take very many honeypots
 to pull off this attack, especially if you combine it with a
 simultaneous max connections or bloom io attack to degrade the capacity
 of honest nodes.

 Oh, here's an even better way to do the tx drop attack: when you drop
 a transaction, make a fake one that pays the same scriptPubKeys with the
 same amount, and send it to the SPV peer instead. They'll see the
 transaction go through and show up in their wallet, but it'll look like
 it got stuck and never confirmed. They'll soon wind up with a wallet
 full of useless transactions, effectively locking them out of their
 money.

Excellent, and makes a mockery of zero-confirmation transactions to boot.

Can be prevented by passing along txin proofs, but they require the full
transaction, so the effective UTXO set size would go up greatly post-pruning. I
am sure Mike would love to demand that full nodes do this for their peers
though, at least until UTXO commitments are greated, at great cost to full
nodes.

On the other hand, a tx with some txin proofs can be safely relayed by SPV
nodes, an interesting concept. Do the UTXO commitment people have keeping proof
size small in mind?

 Here's another question for you Mike: So does bitcoinj have any
 protections against peers flooding you with useless garbage? It'd be
 easy to rack up a user's data bill for instance by just creating junk
 unconfirmed transactions matching the bloom filter.

That is good too.

I'll bounty 2.5BTC to implement the first attack, and 0.5BTC for the second.
Should be easy to do as a patch to satoshi bitcoin I think. The implementation
must include a RFC3514 compliant service bit to let peers know of the operators
intentions. Along those lines I'll donate 3BTC to adding service bit selection
to DNS seeds.

We should clearly show people the limitations of SPV before they depend too
much on it. Nothing wakes users up like a 21 million BTC transaction in their
wallet.

-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.11 (GNU/Linux)

iQEcBAEBCAAGBQJSEYvxAAoJEEWCsU4mNhiPxI8IAJaWJ9s0YG3Ex5h8Dr6oPJ9M
uXTXa/Rt0DqS6mmyD9O80sXfgPbPbQa2rDL6imlqONaWfpXFZl2W9vxRGaZJ9wrr
3KBHzK8lasDOKqlEX92h8ZmQBjw4w5bK/heRLo1PnSZ8ojKn8+My1JvZWOPzF0Ct
tDXXuCE94csKuGRdmdDdVoXqy4XZaMQhHrGbrWVotQs1HzX3iK146GoGaZC0YyBx
cdWg/xDPtAxgb5zf2RSeNHfXeY0wZawe8vBxaS56gCRl54PG7fJvqL+YPcarNb1p
zEmahJjoyQHskjFeDpgEiXnWu3K3JGTSA5GvekWvBbJCcV4o1E6EI6LG0f1SfIs=
=12DC
-END PGP SIGNATURE-

--
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with 2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031iu=/4140/ostg.clktrk
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Gavin's post-0.9 TODO list...

2013-08-18 Thread John Dillon
-BEGIN PGP MESSAGE-
Version: GnuPG v1.4.11 (GNU/Linux)

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
=6OvE
-END PGP MESSAGE-

--
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with 2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031iu=/4140/ostg.clktrk
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development