diff --git a/src/wallet/MoneroWallet.cpp b/src/wallet/MoneroWallet.cpp index 5e7757b..e3ceb1a 100644 --- a/src/wallet/MoneroWallet.cpp +++ b/src/wallet/MoneroWallet.cpp @@ -1091,7 +1091,29 @@ namespace monero { shared_ptr MoneroWallet::importKeyImages(const vector>& keyImages) { cout << "MoneroWallet::importKeyImages()" << endl; - throw runtime_error("Not implemented"); + + // validate and prepare key images for wallet2 + std::vector> ski; + ski.resize(keyImages.size()); + for (size_t n = 0; n < ski.size(); ++n) { + if (!epee::string_tools::hex_to_pod(keyImages[n]->hex.get(), ski[n].first)) { + throw runtime_error("failed to parse key image"); + } + if (!epee::string_tools::hex_to_pod(keyImages[n]->signature.get(), ski[n].second)) { + throw runtime_error("failed to parse signature"); + } + } + + // import key images + uint64_t spent = 0, unspent = 0; + uint64_t height = wallet2->import_key_images(ski, 0, spent, unspent); // TODO: use offset? refer to wallet_rpc_server::on_import_key_images() req.offset + + // translate results + shared_ptr result = shared_ptr(new MoneroKeyImageImportResult()); + result->height = height; + result->spentAmount = spent; + result->unspentAmount = unspent; + return result; } vector> MoneroWallet::sendSplit(const MoneroSendRequest& request) {