Lectura del código fuente de Bitcoin 3

En el artículo anterior, leí la línea 123 de la función AppInit: la función InitParameterInteraction (). Esta función se implementa en src / init.cpp, y los parámetros de red se establecen por inicialización de parámetros.

1. Primero analice los parámetros -bind, -whitebind. Si estos dos parámetros están configurados, -listen se establecerá en verdadero, lo que permite escuchar para aceptar conexiones externas, incluso si los parámetros -connect o -proxy se configuran más tarde, escucharán la dirección enlazada

    // 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. El parámetro -connect se usa para conectar solo nodos de confianza. Si el parámetro -connect está configurado, -dnsseed y -listen se establecerán en falso, lo que no permite escuchar solicitudes y no descubre al azar nodos en la red a través de dns seed.

    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 es para configurar el servidor proxy,
si este parámetro está configurado para deshabilitar la supervisión, establezca -listen en falso.
Establezca -upnp en falso, use plug and play global (UPNP) para asignar el puerto de escucha. Cuando UPnP está cerrado, su nodo aún se conectará a los otros 8 nodos pares en la red de Bitcoin para aceptar nuevos bloques y transacciones. Sin embargo, no aceptará conexiones entrantes de otros nodos pares a menos que habilite manualmente el reenvío de puertos en su enrutador.
Al mismo tiempo, establezca -discover en false -Discover indica si desea que otros nodos de la red encuentren su propia dirección. Si se establece un proxy, naturalmente debería establecerse en false aquí.

    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. Si no se establece la supervisión, establezca los parámetros -upnp, -discover y -listenonion en false, y -listennonion significa supervisión de dirección anónima.

    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. Este -externo indica la dirección pública especificada, es decir, sincroniza la información del bloque y transmite la información de la transacción desde la dirección pública especificada, todos los mensajes solo se envían a la dirección pública especificada y no busca otras direcciones

    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. Si -blocksonly se establece en true, -blocksonly significa que solo se aceptan bloques empaquetados, el valor predeterminado DEFAULT_BLOCKSONLY es falso y -whitelistrelay está deshabilitado, lo que significa que no se aceptan transacciones reenviadas desde nodos en la lista blanca.

    // 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.Si -whitelistforcerelay se establece en verdadero, significa que la información de la transacción transmitida desde la lista blanca se ve obligada a reenviarse, luego establezca -whitelistrelay en 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. El parámetro -blockmaxsize ha sido reemplazado por -blockmaxweight, y el concepto de tamaño de bloque en SegWit se reemplaza por peso de bloque. Consulte https://en.bitcoin.it/wiki/Weight_units, constante WITNESS_SCALE_FACTOR en src / consenso / consenso .h definición, const estático 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 artículos originales publicados · elogiados 74 · 230,000 vistas +

Supongo que te gusta

Origin blog.csdn.net/ruiyiin/article/details/104633275
Recomendado
Clasificación