前回の記事では、AppInit関数の123行目であるInitParameterInteraction()関数を読みましたが、この関数はsrc / init.cppに実装されており、ネットワークパラメーターはパラメーターの初期化によって設定されます。
1.最初に-bind、-whitebindパラメータを解析します。これらの2つのパラメータが設定されている場合、-listenがtrueに設定され、外部接続を受け入れることができます。-connectまたは-proxyパラメータが後で設定されていても、バインドされたアドレスをリッスンします
// when specifying an explicit binding address, you want to listen on it
// even when -connect or -proxy is specified
if (gArgs.IsArgSet("-bind")) {
if (gArgs.SoftSetBoolArg("-listen", true))
LogPrintf("%s: parameter interaction: -bind set -> setting -listen=1\n", __func__);
}
if (gArgs.IsArgSet("-whitebind")) {
if (gArgs.SoftSetBoolArg("-listen", true))
LogPrintf("%s: parameter interaction: -whitebind set -> setting -listen=1\n", __func__);
}
2. -connectパラメータは、信頼されたノードのみを接続するために使用されます。-connectパラメータが設定されている場合、-dnsseedと-listenはfalseに設定されます。これにより、リクエストをリッスンできず、dnsシードを通じてネットワーク内のノードをランダムに検出しません。
if (gArgs.IsArgSet("-connect")) {
// when only connecting to trusted nodes, do not seed via DNS, or listen by default
if (gArgs.SoftSetBoolArg("-dnsseed", false))
LogPrintf("%s: parameter interaction: -connect set -> setting -dnsseed=0\n", __func__);
if (gArgs.SoftSetBoolArg("-listen", false))
LogPrintf("%s: parameter interaction: -connect set -> setting -listen=0\n", __func__);
}
3、-proxyはプロキシサーバーを設定します。
このパラメーターが監視を無効にするように設定されている場合は、-listenをfalseに設定します。
-upnpをfalseに設定し、グローバルプラグアンドプレイ(UPNP)を使用してリスニングポートをマップします。UPnPを閉じても、ノードはビットコインネットワーク上の他の8つのピアノードに接続され、新しいブロックとトランザクションを受け入れます。ただし、ルーターでポート転送を手動で有効にしない限り、他のピアノードからの着信接続を受け入れません。
同時に、-discoverをfalseに設定します。-Discoverは、ネットワーク内の他のノードが独自のアドレスを検索するかどうかを示します。プロキシが設定されている場合は、当然、ここでfalseに設定する必要があります。
if (gArgs.IsArgSet("-proxy")) {
// to protect privacy, do not listen by default if a default proxy server is specified
if (gArgs.SoftSetBoolArg("-listen", false))
LogPrintf("%s: parameter interaction: -proxy set -> setting -listen=0\n", __func__);
// to protect privacy, do not use UPNP when a proxy is set. The user may still specify -listen=1
// to listen locally, so don't rely on this happening through -listen below.
if (gArgs.SoftSetBoolArg("-upnp", false))
LogPrintf("%s: parameter interaction: -proxy set -> setting -upnp=0\n", __func__);
// to protect privacy, do not discover addresses by default
if (gArgs.SoftSetBoolArg("-discover", false))
LogPrintf("%s: parameter interaction: -proxy set -> setting -discover=0\n", __func__);
}
4.監視が設定されていない場合は、-upnp、-discover、および-listenonionパラメータをfalseに設定します。-listennonionは、匿名アドレスの監視を意味します。
if (!gArgs.GetBoolArg("-listen", DEFAULT_LISTEN)) {
// do not map ports or try to retrieve public IP when not listening (pointless)
if (gArgs.SoftSetBoolArg("-upnp", false))
LogPrintf("%s: parameter interaction: -listen=0 -> setting -upnp=0\n", __func__);
if (gArgs.SoftSetBoolArg("-discover", false))
LogPrintf("%s: parameter interaction: -listen=0 -> setting -discover=0\n", __func__);
if (gArgs.SoftSetBoolArg("-listenonion", false))
LogPrintf("%s: parameter interaction: -listen=0 -> setting -listenonion=0\n", __func__);
}
5.この-externalipは、指定されたパブリックアドレスを示します。つまり、指定されたパブリックアドレスからブロック情報とブロードキャストトランザクション情報を同期します。すべてのメッセージは指定されたパブリックアドレスにのみ送信され、他のアドレスは検索しません。
if (gArgs.IsArgSet("-externalip")) {
// if an explicit public IP is specified, do not try to find others
if (gArgs.SoftSetBoolArg("-discover", false))
LogPrintf("%s: parameter interaction: -externalip set -> setting -discover=0\n", __func__);
}
6. -blocksonlyがtrueに設定されている場合、-blocksonlyはパッケージ化されたブロックのみが受け入れられることを意味し、DEFAULT_BLOCKSONLYのデフォルトはfalseであり、-whitelistrelayは無効です。つまり、ホワイトリストのノードから転送されたトランザクションは受け入れられません。
// disable whitelistrelay in blocksonly mode
if (gArgs.GetBoolArg("-blocksonly", DEFAULT_BLOCKSONLY)) {
if (gArgs.SoftSetBoolArg("-whitelistrelay", false))
LogPrintf("%s: parameter interaction: -blocksonly=1 -> setting -whitelistrelay=0\n", __func__);
}
7. -whitelistforcerelayがtrueに設定されている場合、ホワイトリストからリレーされたトランザクション情報が強制的に転送されることを意味し、次に-whitelistrelayをtrueに設定します。
// Forcing relay from whitelisted hosts implies we will accept relays from them in the first place.
if (gArgs.GetBoolArg("-whitelistforcerelay", DEFAULT_WHITELISTFORCERELAY)) {
if (gArgs.SoftSetBoolArg("-whitelistrelay", true))
LogPrintf("%s: parameter interaction: -whitelistforcerelay=1 -> setting -whitelistrelay=1\n", __func__);
}
8.パラメータ-blockmaxsizeは-blockmaxweightに置き換えられ、SegWitのブロックサイズの概念はブロックの重みに置き換えられました。src/ consensus / consensusのhttps://en.bitcoin.it/wiki/Weight_units、WITNESS_SCALE_FACTOR定数を参照してください.h定義、静的const int WITNESS_SCALE_FACTOR = 4;
if (gArgs.IsArgSet("-blockmaxsize")) {
unsigned int max_size = gArgs.GetArg("-blockmaxsize", 0);
if (gArgs.SoftSetArg("blockmaxweight", strprintf("%d", max_size * WITNESS_SCALE_FACTOR))) {
LogPrintf("%s: parameter interaction: -blockmaxsize=%d -> setting -blockmaxweight=%d (-blockmaxsize is deprecated!)\n", __func__, max_size, max_size * WITNESS_SCALE_FACTOR);
} else {
LogPrintf("%s: Ignoring blockmaxsize setting which is overridden by blockmaxweight", __func__);
}
}
}