Bitcoin ABC  0.28.12
P2P Digital Currency
sendcoinsrecipient.h
Go to the documentation of this file.
1 // Copyright (c) 2011-2019 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #ifndef BITCOIN_QT_SENDCOINSRECIPIENT_H
6 #define BITCOIN_QT_SENDCOINSRECIPIENT_H
7 
8 #if defined(HAVE_CONFIG_H)
9 #include <config/bitcoin-config.h>
10 #endif
11 
12 #ifdef ENABLE_BIP70
13 #include <qt/paymentrequestplus.h>
14 #endif
15 
16 #include <consensus/amount.h>
17 #include <serialize.h>
18 
19 #include <string>
20 
21 #include <QString>
22 
24 public:
25  explicit SendCoinsRecipient()
26  : amount(), fSubtractFeeFromAmount(false),
28  explicit SendCoinsRecipient(const QString &addr, const QString &_label,
29  const Amount _amount, const QString &_message)
30  : address(addr), label(_label), amount(_amount), message(_message),
33 
34  // If from an unauthenticated payment request, this is used for storing the
35  // addresses, e.g. address-A<br />address-B<br />address-C.
36  // Info: As we don't need to process addresses in here when using payment
37  // requests, we can abuse it for displaying an address list.
38  // TOFO: This is a hack, should be replaced with a cleaner solution!
39  QString address;
40  QString label;
42  // If from a payment request, this is used for storing the memo
43  QString message;
44 
45 #ifdef ENABLE_BIP70
46  // If from a payment request, paymentRequest.IsInitialized() will be true
47  PaymentRequestPlus paymentRequest;
48 #else
49  // If building with BIP70 is disabled, keep the payment request around as
50  // serialized string to ensure load/store is lossless
51  std::string sPaymentRequest;
52 #endif
53  // Empty if no authentication or invalid signature/cert/etc.
55 
56  // memory only
58 
59  static const int CURRENT_VERSION = 1;
60  int nVersion;
61 
63  std::string address_str, label_str, message_str, auth_merchant_str;
64  std::string payment_request_str;
65 
66  SER_WRITE(obj, address_str = obj.address.toStdString());
67  SER_WRITE(obj, label_str = obj.label.toStdString());
68  SER_WRITE(obj, message_str = obj.message.toStdString());
69 #ifdef ENABLE_BIP70
70  if (obj.paymentRequest.IsInitialized()) {
71  SER_WRITE(obj, obj.paymentRequest.SerializeToString(
72  &payment_request_str));
73  }
74 #else
75  SER_WRITE(obj, payment_request_str = obj.sPaymentRequest);
76 #endif
77  SER_WRITE(obj,
78  auth_merchant_str = obj.authenticatedMerchant.toStdString());
79 
80  READWRITE(obj.nVersion, address_str, label_str, obj.amount, message_str,
81  payment_request_str, auth_merchant_str);
82 
83  SER_READ(obj, obj.address = QString::fromStdString(address_str));
84  SER_READ(obj, obj.label = QString::fromStdString(label_str));
85  SER_READ(obj, obj.message = QString::fromStdString(message_str));
86 #ifdef ENABLE_BIP70
87  if (!payment_request_str.empty()) {
88  SER_READ(obj, obj.paymentRequest.parse(QByteArray::fromRawData(
89  payment_request_str.data(),
90  payment_request_str.size())));
91  }
92 #else
93  SER_READ(obj, obj.sPaymentRequest = payment_request_str);
94 #endif
95  SER_READ(obj, obj.authenticatedMerchant =
96  QString::fromStdString(auth_merchant_str));
97  }
98 };
99 
100 #endif // BITCOIN_QT_SENDCOINSRECIPIENT_H
SendCoinsRecipient(const QString &addr, const QString &_label, const Amount _amount, const QString &_message)
static const int CURRENT_VERSION
SERIALIZE_METHODS(SendCoinsRecipient, obj)
std::string sPaymentRequest
#define SER_WRITE(obj, code)
Definition: serialize.h:187
#define SER_READ(obj, code)
Definition: serialize.h:183
#define READWRITE(...)
Definition: serialize.h:180
Definition: amount.h:19