$ bitcoin-cli help getgenerate
getgenerate

返回服务器是否设置了生成币。默认是 false。
它通过命令行参数 -gen(或 bitcoin.conf 设置选项 gen)进行设置
也可以使用 setgenerate 调用进行设置。

结果:
true|false(布尔型)服务器是否设置了生成币

例子:
> bitcoin-cli getgenerate
> curl --user myusername:mypassword --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getgenerate", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/

源码剖析

getgenerate 对应的函数在文件 rpcserver.h 中被引用。

extern UniValue getgenerate(const UniValue& params, bool fHelp);

实现在文件 rpcmining.cpp 中。

UniValue getgenerate(const UniValue& params, bool fHelp)
{
    if (fHelp || params.size() != 0)
        throw runtime_error(
            "getgenerate\n"
            "\nReturn if the server is set to generate coins or not. The default is false.\n"
            "It is set with the command line argument -gen (or " + std::string(BITCOIN_CONF_FILENAME) + " setting gen)\n"
            "It can also be set with the setgenerate call.\n"
            "\nResult\n"
            "true|false      (boolean) If the server is set to generate coins or not\n"
            "\nExamples:\n"
            + HelpExampleCli("getgenerate", "")
            + HelpExampleRpc("getgenerate", "")
        ); // 1. 帮助内容

    LOCK(cs_main);
    return GetBoolArg("-gen", DEFAULT_GENERATE); // 2. 获取 "-gen" 的值并返回
}

1. 帮助内容

参考比特币 RPC 命令「getbestblockhash」1. 帮助内容

2. 获取 “-gen” 的值并返回

DEFAULT_GENERATE 定义在文件 miner.h 中,默认为 false

static const bool DEFAULT_GENERATE = false;

获取布尔型参数函数 GetBoolArg("-gen", DEFAULT_GENERATE) 声明在文件 util.h 中。

/**
 * Return boolean argument or default value
 *
 * @param strArg Argument to get (e.g. "-foo")
 * @param default (true or false)
 * @return command-line argument or default value
 */
bool GetBoolArg(const std::string& strArg, bool fDefault); // 返回布尔型参数或默认值

实现在文件 util.cpp 中。

bool GetBoolArg(const std::string& strArg, bool fDefault)
{
    if (mapArgs.count(strArg)) // 若该选项存在
        return InterpretBool(mapArgs[strArg]); // 返回其对应的值(转换为布尔型)
    return fDefault; // 否则返回默认值
}

参数映射对象 mapArgs 定义在 util.cpp 文件中,保存所有用户指定的命令行参数和配置文件中的启动选项。

其初始化是在比特币核心启动过程 3.1.ParseParameters(argc, argv) 和 3.4.ReadConfigFile(mapArgs, mapMultiArgs) 中完成的。

map<string, string> mapArgs;

转换为布尔型函数 InterpretBool(mapArgs[strArg]) 实现在 util.cpp 文件中。

/** Interpret string as boolean, for argument parsing */
static bool InterpretBool(const std::string& strValue) // 把字符串转换为布尔型,用于参数解析
{
    if (strValue.empty())
        return true;
    return (atoi(strValue) != 0);
}

参考链接