mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 14:38:29 +01:00
wallet: Replace use of purpose strings with an enum
Instead of storing and passing around fixed strings for the purpose of an address, use an enum. This also rationalizes the CAddressBookData struct, documenting all fields and making them public, and simplifying the representation to avoid bugs like https://github.com/bitcoin/bitcoin/pull/26761#discussion_r1134615114 and make it not possible to invalid address data like change addresses with labels. Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
This commit is contained in:
@@ -138,7 +138,7 @@ void WalletModel::updateTransaction()
|
||||
}
|
||||
|
||||
void WalletModel::updateAddressBook(const QString &address, const QString &label,
|
||||
bool isMine, const QString &purpose, int status)
|
||||
bool isMine, wallet::AddressPurpose purpose, int status)
|
||||
{
|
||||
if(addressTableModel)
|
||||
addressTableModel->updateEntry(address, label, isMine, purpose, status);
|
||||
@@ -280,11 +280,11 @@ void WalletModel::sendCoins(WalletModelTransaction& transaction)
|
||||
if (!m_wallet->getAddress(
|
||||
dest, &name, /* is_mine= */ nullptr, /* purpose= */ nullptr))
|
||||
{
|
||||
m_wallet->setAddressBook(dest, strLabel, "send");
|
||||
m_wallet->setAddressBook(dest, strLabel, wallet::AddressPurpose::SEND);
|
||||
}
|
||||
else if (name != strLabel)
|
||||
{
|
||||
m_wallet->setAddressBook(dest, strLabel, ""); // "" means don't change purpose
|
||||
m_wallet->setAddressBook(dest, strLabel, {}); // {} means don't change purpose
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -377,18 +377,17 @@ static void NotifyKeyStoreStatusChanged(WalletModel *walletmodel)
|
||||
|
||||
static void NotifyAddressBookChanged(WalletModel *walletmodel,
|
||||
const CTxDestination &address, const std::string &label, bool isMine,
|
||||
const std::string &purpose, ChangeType status)
|
||||
wallet::AddressPurpose purpose, ChangeType status)
|
||||
{
|
||||
QString strAddress = QString::fromStdString(EncodeDestination(address));
|
||||
QString strLabel = QString::fromStdString(label);
|
||||
QString strPurpose = QString::fromStdString(purpose);
|
||||
|
||||
qDebug() << "NotifyAddressBookChanged: " + strAddress + " " + strLabel + " isMine=" + QString::number(isMine) + " purpose=" + strPurpose + " status=" + QString::number(status);
|
||||
qDebug() << "NotifyAddressBookChanged: " + strAddress + " " + strLabel + " isMine=" + QString::number(isMine) + " purpose=" + QString::number(static_cast<uint8_t>(purpose)) + " status=" + QString::number(status);
|
||||
bool invoked = QMetaObject::invokeMethod(walletmodel, "updateAddressBook",
|
||||
Q_ARG(QString, strAddress),
|
||||
Q_ARG(QString, strLabel),
|
||||
Q_ARG(bool, isMine),
|
||||
Q_ARG(QString, strPurpose),
|
||||
Q_ARG(wallet::AddressPurpose, purpose),
|
||||
Q_ARG(int, status));
|
||||
assert(invoked);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user