Remove direct bitcoin calls from qt/paymentserver.cpp
This commit is contained in:
committed by
John Newbery
parent
3ec2ebcd9b
commit
3cab2ce5f9
+16
-15
@@ -9,6 +9,7 @@
|
||||
#include <qt/optionsmodel.h>
|
||||
|
||||
#include <chainparams.h>
|
||||
#include <interface/node.h>
|
||||
#include <policy/policy.h>
|
||||
#include <key_io.h>
|
||||
#include <ui_interface.h>
|
||||
@@ -199,7 +200,7 @@ void PaymentServer::LoadRootCAs(X509_STORE* _store)
|
||||
// Warning: ipcSendCommandLine() is called early in init,
|
||||
// so don't use "Q_EMIT message()", but "QMessageBox::"!
|
||||
//
|
||||
void PaymentServer::ipcParseCommandLine(int argc, char* argv[])
|
||||
void PaymentServer::ipcParseCommandLine(interface::Node& node, int argc, char* argv[])
|
||||
{
|
||||
for (int i = 1; i < argc; i++)
|
||||
{
|
||||
@@ -221,11 +222,11 @@ void PaymentServer::ipcParseCommandLine(int argc, char* argv[])
|
||||
auto tempChainParams = CreateChainParams(CBaseChainParams::MAIN);
|
||||
|
||||
if (IsValidDestinationString(r.address.toStdString(), *tempChainParams)) {
|
||||
SelectParams(CBaseChainParams::MAIN);
|
||||
node.selectParams(CBaseChainParams::MAIN);
|
||||
} else {
|
||||
tempChainParams = CreateChainParams(CBaseChainParams::TESTNET);
|
||||
if (IsValidDestinationString(r.address.toStdString(), *tempChainParams)) {
|
||||
SelectParams(CBaseChainParams::TESTNET);
|
||||
node.selectParams(CBaseChainParams::TESTNET);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -239,11 +240,11 @@ void PaymentServer::ipcParseCommandLine(int argc, char* argv[])
|
||||
{
|
||||
if (request.getDetails().network() == "main")
|
||||
{
|
||||
SelectParams(CBaseChainParams::MAIN);
|
||||
node.selectParams(CBaseChainParams::MAIN);
|
||||
}
|
||||
else if (request.getDetails().network() == "test")
|
||||
{
|
||||
SelectParams(CBaseChainParams::TESTNET);
|
||||
node.selectParams(CBaseChainParams::TESTNET);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -526,7 +527,7 @@ bool PaymentServer::processPaymentRequest(const PaymentRequestPlus& request, Sen
|
||||
|
||||
if (request.IsInitialized()) {
|
||||
// Payment request network matches client network?
|
||||
if (!verifyNetwork(request.getDetails())) {
|
||||
if (!verifyNetwork(optionsModel->node(), request.getDetails())) {
|
||||
Q_EMIT message(tr("Payment request rejected"), tr("Payment request network doesn't match client network."),
|
||||
CClientUIInterface::MSG_ERROR);
|
||||
|
||||
@@ -583,7 +584,7 @@ bool PaymentServer::processPaymentRequest(const PaymentRequestPlus& request, Sen
|
||||
|
||||
// Extract and check amounts
|
||||
CTxOut txOut(sendingTo.second, sendingTo.first);
|
||||
if (IsDust(txOut, ::dustRelayFee)) {
|
||||
if (IsDust(txOut, optionsModel->node().getDustRelayFee())) {
|
||||
Q_EMIT message(tr("Payment request error"), tr("Requested payment amount of %1 is too small (considered dust).")
|
||||
.arg(BitcoinUnits::formatWithUnit(optionsModel->getDisplayUnit(), sendingTo.second)),
|
||||
CClientUIInterface::MSG_ERROR);
|
||||
@@ -621,7 +622,7 @@ void PaymentServer::fetchRequest(const QUrl& url)
|
||||
netManager->get(netRequest);
|
||||
}
|
||||
|
||||
void PaymentServer::fetchPaymentACK(CWallet* wallet, const SendCoinsRecipient& recipient, QByteArray transaction)
|
||||
void PaymentServer::fetchPaymentACK(WalletModel* walletModel, const SendCoinsRecipient& recipient, QByteArray transaction)
|
||||
{
|
||||
const payments::PaymentDetails& details = recipient.paymentRequest.getDetails();
|
||||
if (!details.has_payment_url())
|
||||
@@ -640,17 +641,17 @@ void PaymentServer::fetchPaymentACK(CWallet* wallet, const SendCoinsRecipient& r
|
||||
|
||||
// Create a new refund address, or re-use:
|
||||
CPubKey newKey;
|
||||
if (wallet->GetKeyFromPool(newKey)) {
|
||||
if (walletModel->wallet().getKeyFromPool(false /* internal */, newKey)) {
|
||||
// BIP70 requests encode the scriptPubKey directly, so we are not restricted to address
|
||||
// types supported by the receiver. As a result, we choose the address format we also
|
||||
// use for change. Despite an actual payment and not change, this is a close match:
|
||||
// it's the output type we use subject to privacy issues, but not restricted by what
|
||||
// other software supports.
|
||||
const OutputType change_type = wallet->m_default_change_type != OutputType::NONE ? wallet->m_default_change_type : wallet->m_default_address_type;
|
||||
wallet->LearnRelatedScripts(newKey, change_type);
|
||||
const OutputType change_type = walletModel->wallet().getDefaultChangeType() != OutputType::NONE ? walletModel->wallet().getDefaultChangeType() : walletModel->wallet().getDefaultAddressType();
|
||||
walletModel->wallet().learnRelatedScripts(newKey, change_type);
|
||||
CTxDestination dest = GetDestinationForKey(newKey, change_type);
|
||||
std::string label = tr("Refund from %1").arg(recipient.authenticatedMerchant).toStdString();
|
||||
wallet->SetAddressBook(dest, label, "refund");
|
||||
walletModel->wallet().setAddressBook(dest, label, "refund");
|
||||
|
||||
CScript s = GetScriptForDestination(dest);
|
||||
payments::Output* refund_to = payment.add_refund_to();
|
||||
@@ -758,14 +759,14 @@ void PaymentServer::handlePaymentACK(const QString& paymentACKMsg)
|
||||
Q_EMIT message(tr("Payment acknowledged"), paymentACKMsg, CClientUIInterface::ICON_INFORMATION | CClientUIInterface::MODAL);
|
||||
}
|
||||
|
||||
bool PaymentServer::verifyNetwork(const payments::PaymentDetails& requestDetails)
|
||||
bool PaymentServer::verifyNetwork(interface::Node& node, const payments::PaymentDetails& requestDetails)
|
||||
{
|
||||
bool fVerified = requestDetails.network() == Params().NetworkIDString();
|
||||
bool fVerified = requestDetails.network() == node.getNetwork();
|
||||
if (!fVerified) {
|
||||
qWarning() << QString("PaymentServer::%1: Payment request network \"%2\" doesn't match client network \"%3\".")
|
||||
.arg(__func__)
|
||||
.arg(QString::fromStdString(requestDetails.network()))
|
||||
.arg(QString::fromStdString(Params().NetworkIDString()));
|
||||
.arg(QString::fromStdString(node.getNetwork()));
|
||||
}
|
||||
return fVerified;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user