Out of curiosity, was the interaction between fRelay and bloom disabling ever 
specified? ie if you aren’t allowed to enable bloom filters on a connection due 
to resource constraints/new limits, is it ever possible to “set” fRelay later?

Matt

> On Jan 6, 2021, at 11:35, Suhas Daftuar via bitcoin-dev 
> <bitcoin-dev@lists.linuxfoundation.org> wrote:
> 
> 
> Hi,
> 
> I'm proposing the addition of a new, optional p2p message to allow peers to 
> communicate that they do not want to send or receive (loose) transactions for 
> the lifetime of a connection. 
> 
> The goal of this message is to help facilitate connections on the network 
> over which only block-related data (blocks/headers/compact blocks/etc) are 
> relayed, to create low-resource connections that help protect against 
> partition attacks on the network.  In particular, by adding a network message 
> that communicates that transactions will not be relayed for the life of the 
> connection, we ease the implementation of software that could have increased 
> inbound connection limits for such peers, which in turn will make it easier 
> to add additional persistent block-relay-only connections on the network -- 
> strengthening network security for little additional bandwidth.
> 
> Software has been deployed for over a year now which makes such connections, 
> using the BIP37/BIP60 "fRelay" field in the version message to signal that 
> transactions should not be sent initially.  However, BIP37 allows for 
> transaction relay to be enabled later in the connection's lifetime, 
> complicating software that would try to distinguish inbound peers that will 
> never relay transactions from those that might.
> 
> This proposal would add a single new p2p message, "disabletx", which (if used 
> at all) must be sent between version and verack.  I propose that this message 
> is valid for peers advertising protocol version 70017 or higher.  Software is 
> free to implement this BIP or ignore this message and remain compatible with 
> software that does implement it.
> 
> Full text of the proposed BIP is below.
> 
> Thanks,
> Suhas
> 
> ---------------------------------------------------
> 
> <pre>
>   BIP: XXX
>   Layer: Peer Services
>   Title: Disable transaction relay message
>   Author: Suhas Daftuar <sdaft...@chaincode.com>
>   Comments-Summary: No comments yet.
>   Comments-URI:
>   Status: Draft
>   Type: Standards Track
>   Created: 2020-09-03
>   License: BSD-2-Clause
> </pre>
> 
> ==Abstract==
> 
> This BIP describes a change to the p2p protocol to allow a node to tell a peer
> that a connection will not be used for transaction relay, to support
> block-relay-only connections that are currently in use on the network.
> 
> ==Motivation==
> 
> For nearly the past year, software has been deployed[1] which initiates
> connections on the Bitcoin network and sets the transaction relay field
> (introduced by BIP 37 and also defined in BIP 60) to false, to prevent
> transaction relay from occurring on the connection. Additionally, addr 
> messages
> received from the peer are ignored by this software.
> 
> The purpose of these connections is two-fold: by making additional
> low-bandwidth connections on which blocks can propagate, the robustness of a
> node to network partitioning attacks is strengthened.  Additionally, by not
> relaying transactions and ignoring received addresses, the ability of an
> adversary to learn the complete network graph (or a subgraph) is reduced[2],
> which in turn increases the cost or difficulty to an attacker seeking to carry
> out a network partitioning attack (when compared with having such knowledge).
> 
> The low-bandwidth / minimal-resource nature of these connections is currently
> known only by the initiator of the connection; this is because the transaction
> relay field in the version message is not a permanent setting for the lifetime
> of the connection.  Consequently, a node receiving an inbound connection with
> transaction relay disabled cannot distinguish between a peer that will never
> enable transaction relay (as described in BIP 37) and one that will.  
> Moreover,
> the node also cannot determine that the incoming connection will ignore 
> relayed
> addresses; with that knowledge a node would likely choose other peers to
> receive announced addresses instead.
> 
> This proposal adds a new, optional message that a node can send a peer when
> initiating a connection to that peer, to indicate that connection should not 
> be
> used for transaction-relay for the connection's lifetime. In addition, without
> a current mechanism to negotiate whether addresses should be relayed on a
> connection, this BIP suggests that address messages not be sent on links where
> tx-relay has been disabled.
> 
> ==Specification==
> 
> # A new disabletx message is added, which is defined as an empty message 
> where pchCommand == "disabletx".
> # The protocol version of nodes implementing this BIP must be set to 70017 or 
> higher.
> # If a node sets the transaction relay field in the version message to a peer 
> to false, then the disabletx message MAY also be sent in response to a 
> version message from that peer if the peer's protocol version is >= 70017. If 
> sent, the disabletx message MUST be sent prior to sending a verack.
> # A node that has sent or received a disabletx message to/from a peer MUST 
> NOT send any of these messages to the peer:
> ## inv messages for transactions
> ## getdata messages for transactions
> ## getdata messages for merkleblock (BIP 37)
> ## filteradd/filterload/filterclear (BIP 37)
> ## mempool (BIP 35)
> # It is RECOMMENDED that a node that has sent or received a disabletx message 
> to/from a peer not send any of these messages to the peer:
> ## addr/getaddr
> ## addrv2 (BIP 155)
> # The behavior regarding sending or processing other message types is not 
> specified by this BIP.
> # Nodes MAY decide to not remain connected to peers that send this message 
> (for example, if trying to find a peer that will relay transactions).
> 
> ==Compatibility==
> 
> Nodes with protocol version >= 70017 that do not implement this BIP, and nodes
> with protocol version < 70017, will continue to remain compatible with
> implementing software: transactions would not be relayed to peers sending the
> disabletx message (provided that BIP 37 or BIP 60 has been implemented), and 
> while
> periodic address relay may still take place, software implementing this BIP
> should not be disconnecting such peers solely for that reason.
> 
> Disabling address relay is suggested but not required by this BIP, to allow 
> for
> future protocol extensions that might specify more carefully how address relay
> is to be negotiated. This BIP's recommendations for software to not relay
> addresses is intended to be interpreted as guidance in the absence of any such
> future protocol extension, to accommodate existing software behavior.
> 
> Note that all messages specified in BIP 152, including blocktxn and
> getblocktxn, are permitted between peers that have sent/received a disabletx
> message, subject to the feature negotiation of BIP 152.
> 
> ==Implementation==
> 
> TBD
> 
> ==References==
> 
> # Bitcoin Core has [https://github.com/bitcoin/bitcoin/pull/15759 implemented 
> this functionality] since version 0.19.0.1, released in November 2019.
> # For example, see https://www.cs.umd.edu/projects/coinscope/coinscope.pdf 
> and https://arxiv.org/pdf/1812.00942.pdf.
> 
> ==Copyright==
> 
> This BIP is licensed under the 2-clause BSD license.
> _______________________________________________
> bitcoin-dev mailing list
> bitcoin-dev@lists.linuxfoundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
_______________________________________________
bitcoin-dev mailing list
bitcoin-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev

Reply via email to