The wallet code uses `Optional::emplace()`, which was only added in boost 1.56, see https://github.com/boostorg/optional/commit/2e583aaf30964afd66c1284aa71d0d8b42fa440d

So for 0.21.0 there are two options:
* Work around `emplace` and keep the minimum boost version below 1.56
* Require boost 1.56


```
wallet/rpcwallet.cpp: In function ‘UniValue listsinceblock(const JSONRPCRequest&)’:
wallet/rpcwallet.cpp:1560:16: error: ‘Optional<int>’ has no member named ‘emplace’
         height.emplace();
                ^
wallet/rpcwallet.cpp:1561:19: error: ‘Optional<int>’ has no member named ‘emplace’
         altheight.emplace();
                   ^
+ HelpExampleRpc("walletpassphrase", "\"my pass phrase\", 60")
                },
            }.Check(request);
    int64_t nSleepTime;
    int64_t relock_time;
    
    LOCK(pwallet->m_unlock_mutex);
    {
        LOCK(pwallet->cs_wallet);
        if (!pwallet->IsCrypted()) {
            throw JSONRPCError(RPC_WALLET_WRONG_ENC_STATE, "Error: running with an unencrypted wallet, but walletpassphrase was called.");
        }
        
        SecureString strWalletPass;
        strWalletPass.reserve(100);
        
        
        strWalletPass = request.params[0].get_str().c_str();
        
        nSleepTime = request.params[1].get_int64();
        
        if (nSleepTime < 0) {
            throw JSONRPCError(RPC_INVALID_PARAMETER, "Timeout cannot be negative.");
        }
        
        constexpr int64_t MAX_SLEEP_TIME = 100000000; 
        if (nSleepTime > MAX_SLEEP_TIME) {
            nSleepTime = MAX_SLEEP_TIME;
        }
        if (strWalletPass.empty()) {