ビットコインのソースコードを読む3

前回の記事では、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__);
        }
    }
}
元の記事を30件公開 賞賛された74件 230,000回の閲覧+

おすすめ

転載: blog.csdn.net/ruiyiin/article/details/104633275