btc1 just merged the ability for segwit2x to disguise itself to not get banned by 0.15 nodes

Viruses or contaminants are a set of computer instructions that are designed to modify, damage, destroy, record, or transmit information within a computer system or network without the permission of the owner.

You might be able to read law but it's clear you can't read code.

Let's take a look at the code:

In src/init.cpp: @@ -72,6 +72,7 @@ static const bool DEFAULT_REST_ENABLE = false; ```c++ static const bool DEFAULT_DISABLE_SAFEMODE = false; static const bool DEFAULT_STOPAFTERBLOCKIMPORT = false; static const bool DEFAULT_PREFPEERING = true; + static const bool DEFAULT_ADVERTISE_2X = true;

std::unique_ptr<CConnman> g_connman; std::unique_ptr<PeerLogicValidation> peerLogic; ```

In this part, static const bool DEFAULT_ADVERTISE_2X = true; is added

@@ -488,6 +489,7 @@ std::string HelpMessage(HelpMessageMode mode)

c++ strUsage += HelpMessageOpt("-datacarrier", strprintf(_("Relay and mine data carrier transactions (default: %u)"), DEFAULT_ACCEPT_DATACARRIER)); strUsage += HelpMessageOpt("-datacarriersize", strprintf(_("Maximum size of data in data carrier transactions we relay and mine (default: %u)"), MAX_OP_RETURN_RELAY)); strUsage += HelpMessageOpt("-prefpeering", strprintf(_("Preferential peering with segwit2x (and segwit) nodes (default: %u)"), DEFAULT_PREFPEERING)); + strUsage += HelpMessageOpt("-advertise2x", strprintf(_("Advertise on network as a segwit2x-compatible node (default: %u)"), DEFAULT_ADVERTISE_2X)); strUsage += HelpMessageOpt("-mempoolreplacement", strprintf(_("Enable transaction replacement in the memory pool (default: %u)"), DEFAULT_ENABLE_REPLACEMENT)); strUsage += HelpMessageOpt("-minrelaytxfee=<amt>", strprintf(_("Fees (in %s/kB) smaller than this are considered zero fee for relaying, mining and transaction creation (default: %s)"), CURRENCY_UNIT, FormatMoney(DEFAULT_MIN_RELAY_TX_FEE)));

In this part, strUsage += HelpMessageOpt("-advertise2x", strprintf(_("Advertise on network as a segwit2x-compatible node (default: %u)"), DEFAULT_ADVERTISE_2X)); is added.

@@ -1079,7 +1081,8 @@ bool AppInitParameterInteraction()

```c++ nMaxDatacarrierBytes = gArgs.GetArg("-datacarriersize", nMaxDatacarrierBytes);

 // Advertise as segwit2x node
  • nLocalServices = ServiceFlags(nLocalServices | NODE_SEGWIT2X);
  • if (gArgs.GetBoolArg("-advertise2x", DEFAULT_ADVERTISE_2X))
  •   nLocalServices = ServiceFlags(nLocalServices | NODE_SEGWIT2X);
    

    // Prefer peers with compatible rulesets if (gArgs.GetBoolArg("-prefpeering", DEFAULT_PREFPEERING)) { ```

In this part:

nLocalServices = ServiceFlags(nLocalServices | NODE_SEGWIT2X); is removed. And

c++ if (gArgs.GetBoolArg("-advertise2x", DEFAULT_ADVERTISE_2X)) nLocalServices = ServiceFlags(nLocalServices | NODE_SEGWIT2X);

is added instead.

Let's take a closer look at these additions.

The first is simple.

static const bool DEFAULT_ADVERTISE_2X = true; simply sets DEFAULT_ADVERTISE_2X to true which basically means that the init file is set to advertise the node as a 2x node by default.

The second one is also simple to understand.

c++ strUsage += HelpMessageOpt("-advertise2x", strprintf(_("Advertise on network as a segwit2x-compatible node (default: %u)"), DEFAULT_ADVERTISE_2X));

This users HelpMessageOpt() to inform the users that -advertise2x allows them to set a flag that will either advertise OR not advertise as a 2x node. The strprintf() function replaces the %uin (default: %u) with the default to let users know that the default setting is the value of the constant in the previously added line (which is true).

The third addition is a little more complicated yet still simple to explain.

c++ if (gArgs.GetBoolArg("-advertise2x", DEFAULT_ADVERTISE_2X)) nLocalServices = ServiceFlags(nLocalServices | NODE_SEGWIT2X);

This uses gArgs.GetBoolArg()to check what value the flag -advertise2xwas given. Without a flag set, it reverts to default (which we've been over, it is true). If that boolean is set to true, nLocalServices, which is one of the

All this code does is allow the node the option to NOT advertise as 2x. By default, it ADVERTISES 2x. In NO part of this code do these instructions

modify, damage, destroy, record, or transmit information within a computer system or network without the permission of the owner.

Let's check them off one by one though.

modify - By running a node signalling no2x it is possible for them to interfere with the network itself but they have no ability to modify the code on your machine. Your node is going to run the same software it was running. A parallel to this is if we were both running bittorrent and I somehow interfered with a file you were downloading. Yes I modified the file, but I did not modify the code you were using to download.

damage - Again, they may be able to interfere with the network but they do not damage information within your system. An example of this: I may be able to post stupid comments on this subreddit and it may damage the conversation but I do no damage to your machine by posting my comments.

destroy - The code does nothing to destroy your node, your system or anything on your machine. It may interfere with the bitcoin network but it does NOT destroy " information within a computer system or network". Your machine and the network you are connected to will not be affected even if the bitcoin network is.

transmit - It may transmit messages to the bitcoin network but in no way, shape or form does it transmit anything information about your machine or the network you are connected to

The key takeway here is the legal speak you are referencing mentions "NETWORK" but specifically meaning the computer network you are connected to. It does NOT apply to the "BITCOIN NETWORK". Anyone can write code that may or may not interfere with the bitcoin network but in no way does that affect YOUR COMPUTER SYSTEM OR NETWORK YOU ARE CONNECTED TO.

/r/Bitcoin Thread Parent Link - github.com