`banlist.dat` was introduced in https://github.com/bitcoin/bitcoin/pull/6310, storing nodes that were automatically banned (due to exceeding the misbehavior threshold) and manually banned (through the `setban` RPC).

Automatic bans were removed in https://github.com/bitcoin/bitcoin/pull/19219 and replaced with a discouragement filter. That filter is not saved to disk/persisted over shutdown/startup. The `banlist.dat` therefore now only contains addresses that have been banned through the `setban` rpc.

Since https://github.com/bitcoin/bitcoin/pull/15935, we have a specific file for configuration that is updated through the RPC and persisted over shutdown/startup, namely `settings.json`. We should therefore move the manual ban configuration from `banlist.dat` to `settings.json`. Doing so has a couple of benefits:

- `settings.json` is human readable and easily analyzable by any json parser.
- we wouldn't need to maintain custom [de]serialization code for the `banlist.dat` file.

`banlist.dat` is expected to be fairly small and infrequently updated, so disk space/performance are not huge concerns.
if (args.IsArgSet("-dustrelayfee")) {
        CAmount n = 0;
        if (!ParseMoney(args.GetArg("-dustrelayfee", ""), n))
            return InitError(AmountErrMsg("dustrelayfee", args.GetArg("-dustrelayfee", "")));
        dustRelayFee = CFeeRate(n);
    }
    fRequireStandard = !args.GetBoolArg("-acceptnonstdtxn", !chainparams.RequireStandard());
    if (!chainparams.IsTestChain() && !fRequireStandard) {
        return InitError(strprintf(Untranslated("acceptnonstdtxn is not currently supported for %s chain"), chainparams.NetworkIDString()));
    }
    nBytesPerSigOp = args.GetArg("-bytespersigop", nBytesPerSigOp);
    if (!g_wallet_init_interface.ParameterInteraction()) return false;
    fIsBareMultisigStd = args.GetBoolArg("-permitbaremultisig", DEFAULT_PERMIT_BAREMULTISIG);
    fAcceptDatacarrier = args.GetBoolArg("-datacarrier", DEFAULT_ACCEPT_DATACARRIER);
    nMaxDatacarrierBytes = args.GetArg("-datacarriersize", nMaxDatacarrierBytes);
    
    SetMockTime(args.GetArg("-mocktime", 0)); 
    if (args.GetBoolArg("-peerbloomfilters", DEFAULT_PEERBLOOMFILTERS))
        nLocalServices = ServiceFlags(nLocalServices | NODE_BLOOM);
    if (args.GetArg("-rpcserialversion", DEFAULT_RPC_SERIALIZE_VERSION) < 0)
        return InitError(Untranslated("rpcserialversion must be non-negative."));
    if (args.GetArg("-rpcserialversion", DEFAULT_RPC_SERIALIZE_VERSION) > 1)
        return InitError(Untranslated("Unknown rpcserialversion requested."));
    nMaxTipAge = args.GetArg("-maxtipage", DEFAULT_MAX_TIP_AGE);
    if (args.IsArgSet("-proxy") && args.GetArg("-proxy", "").empty()) {
        return InitError(_("No proxy server specified. Use -proxy=<ip> or -proxy=<ip:port>."));
    }
    return true;
}
static bool LockDataDirectory(bool probeOnly)