MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / SetAddressBookWithDB

Method SetAddressBookWithDB

src/wallet/wallet.cpp:2488–2522  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2486}
2487
2488bool CWallet::SetAddressBookWithDB(WalletBatch& batch, const CTxDestination& address, const std::string& strName, const std::optional<AddressPurpose>& new_purpose)
2489{
2490 bool fUpdated = false;
2491 bool is_mine;
2492 std::optional<AddressPurpose> purpose;
2493 {
2494 LOCK(cs_wallet);
2495 std::map<CTxDestination, CAddressBookData>::iterator mi = m_address_book.find(address);
2496 fUpdated = mi != m_address_book.end() && !mi->second.IsChange();
2497
2498 CAddressBookData& record = mi != m_address_book.end() ? mi->second : m_address_book[address];
2499 record.SetLabel(strName);
2500 is_mine = IsMine(address);
2501 if (new_purpose) { /* update purpose only if requested */
2502 record.purpose = new_purpose;
2503 }
2504 purpose = record.purpose;
2505 }
2506
2507 const std::string& encoded_dest = EncodeDestination(address);
2508 if (new_purpose && !batch.WritePurpose(encoded_dest, PurposeToString(*new_purpose))) {
2509 WalletLogPrintf("Error: fail to write address book 'purpose' entry\n");
2510 return false;
2511 }
2512 if (!batch.WriteName(encoded_dest, strName)) {
2513 WalletLogPrintf("Error: fail to write address book 'name' entry\n");
2514 return false;
2515 }
2516
2517 // In very old wallets, address purpose may not be recorded so we derive it from IsMine
2518 NotifyAddressBookChanged(address, strName, is_mine,
2519 purpose.value_or(is_mine ? AddressPurpose::RECEIVE : AddressPurpose::SEND),
2520 (fUpdated ? CT_UPDATED : CT_NEW));
2521 return true;
2522}
2523
2524bool CWallet::SetAddressBook(const CTxDestination& address, const std::string& strName, const std::optional<AddressPurpose>& purpose)
2525{

Callers

nothing calls this directly

Calls 10

EncodeDestinationFunction · 0.85
PurposeToStringFunction · 0.85
NotifyAddressBookChangedFunction · 0.85
findMethod · 0.80
IsChangeMethod · 0.80
SetLabelMethod · 0.80
WritePurposeMethod · 0.80
WriteNameMethod · 0.80
endMethod · 0.45
value_orMethod · 0.45

Tested by

no test coverage detected