Right now, RecentRequestsTableModel deserializes raw blobs it gets back from getAddressReceiveRequests() using SpanReader with no try/catch. If anything in the wallet DB is malformed, the GUI crashes on startup — there's no recovery path.
This PR replaces the two raw-string methods (getAddressReceiveRequests() / setAddressReceiveRequest()) with typed ones:
getReceiveRequests()returns avector<WalletReceiveRequest>instead of opaque blobsaddReceiveRequest()lets the wallet assign the ID and timestamperaseReceiveRequest()is now its own method instead of overloading the setter with an empty string
Serialization still happens the same way — I added RecipientData / RequestEntryData structs in wallet/interfaces.cpp that are byte-identical to the Qt-side ones, so the DB format doesn't change. The difference is that deserialization is now wrapped in try/catch at the wallet layer, so bad entries get logged and skipped rather than taking down the GUI.
Closes #34629