mirror of
https://github.com/monero-project/monero.git
synced 2024-12-28 21:16:14 -05:00
rpc: add --rpc-payment-allow-free-loopback
This allows RPC coming from the loopback interface to not have to pay for service. This makes it possible to run an externally accessible RPC server for payment while also having a local RPC server that can be run unrestricted and payment free.
This commit is contained in:
parent
820ab9fdea
commit
320bc845b3
@ -153,6 +153,7 @@ namespace cryptonote
|
||||
command_line::add_arg(desc, arg_rpc_payment_address);
|
||||
command_line::add_arg(desc, arg_rpc_payment_difficulty);
|
||||
command_line::add_arg(desc, arg_rpc_payment_credits);
|
||||
command_line::add_arg(desc, arg_rpc_payment_allow_free_loopback);
|
||||
}
|
||||
//------------------------------------------------------------------------------------------------------------------------------
|
||||
core_rpc_server::core_rpc_server(
|
||||
@ -163,6 +164,7 @@ namespace cryptonote
|
||||
, m_p2p(p2p)
|
||||
, m_was_bootstrap_ever_used(false)
|
||||
, disable_rpc_ban(false)
|
||||
, m_rpc_payment_allow_free_loopback(false)
|
||||
{}
|
||||
//------------------------------------------------------------------------------------------------------------------------------
|
||||
bool core_rpc_server::set_bootstrap_daemon(const std::string &address, const std::string &username_password)
|
||||
@ -280,6 +282,7 @@ namespace cryptonote
|
||||
MERROR("Payments difficulty and/or payments credits are 0, but a payment address was given");
|
||||
return false;
|
||||
}
|
||||
m_rpc_payment_allow_free_loopback = command_line::get_arg(vm, arg_rpc_payment_allow_free_loopback);
|
||||
m_rpc_payment.reset(new rpc_payment(info.address, diff, credits));
|
||||
m_rpc_payment->load(command_line::get_arg(vm, cryptonote::arg_data_dir));
|
||||
m_p2p.set_rpc_credits_per_hash(RPC_CREDITS_PER_HASH_SCALE * (credits / (float)diff));
|
||||
@ -353,7 +356,7 @@ namespace cryptonote
|
||||
#define CHECK_PAYMENT_BASE(req, res, payment, same_ts) do { if (!ctx) break; uint64_t P = (uint64_t)payment; if (P > 0 && !check_payment(req.client, P, tracker.rpc_name(), same_ts, res.status, res.credits, res.top_hash)){return true;} tracker.pay(P); } while(0)
|
||||
#define CHECK_PAYMENT(req, res, payment) CHECK_PAYMENT_BASE(req, res, payment, false)
|
||||
#define CHECK_PAYMENT_SAME_TS(req, res, payment) CHECK_PAYMENT_BASE(req, res, payment, true)
|
||||
#define CHECK_PAYMENT_MIN1(req, res, payment, same_ts) do { if (!ctx) break; uint64_t P = (uint64_t)payment; if (P == 0) P = 1; if(!check_payment(req.client, P, tracker.rpc_name(), same_ts, res.status, res.credits, res.top_hash)){return true;} tracker.pay(P); } while(0)
|
||||
#define CHECK_PAYMENT_MIN1(req, res, payment, same_ts) do { if (!ctx || (m_rpc_payment_allow_free_loopback && ctx->m_remote_address.is_loopback())) break; uint64_t P = (uint64_t)payment; if (P == 0) P = 1; if(!check_payment(req.client, P, tracker.rpc_name(), same_ts, res.status, res.credits, res.top_hash)){return true;} tracker.pay(P); } while(0)
|
||||
//------------------------------------------------------------------------------------------------------------------------------
|
||||
bool core_rpc_server::check_core_ready()
|
||||
{
|
||||
@ -3255,4 +3258,10 @@ namespace cryptonote
|
||||
, "Restrict RPC to clients sending micropayment, yields that many credits per payment"
|
||||
, DEFAULT_PAYMENT_CREDITS_PER_HASH
|
||||
};
|
||||
|
||||
const command_line::arg_descriptor<bool> core_rpc_server::arg_rpc_payment_allow_free_loopback = {
|
||||
"rpc-payment-allow-free-loopback"
|
||||
, "Allow free access from the loopback address (ie, the local host)"
|
||||
, false
|
||||
};
|
||||
} // namespace cryptonote
|
||||
|
@ -75,6 +75,7 @@ namespace cryptonote
|
||||
static const command_line::arg_descriptor<std::string> arg_rpc_payment_address;
|
||||
static const command_line::arg_descriptor<uint64_t> arg_rpc_payment_difficulty;
|
||||
static const command_line::arg_descriptor<uint64_t> arg_rpc_payment_credits;
|
||||
static const command_line::arg_descriptor<bool> arg_rpc_payment_allow_free_loopback;
|
||||
|
||||
typedef epee::net_utils::connection_context_base connection_context;
|
||||
|
||||
@ -287,6 +288,7 @@ private:
|
||||
std::map<std::string, uint64_t> m_host_fails_score;
|
||||
std::unique_ptr<rpc_payment> m_rpc_payment;
|
||||
bool disable_rpc_ban;
|
||||
bool m_rpc_payment_allow_free_loopback;
|
||||
};
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user