mirror of
https://github.com/monero-project/monero.git
synced 2024-10-01 11:49:47 -04:00
Maintenance of light wallet methods
This commit is contained in:
parent
5c8c898ffd
commit
b200b6e527
@ -353,6 +353,14 @@ namespace cryptonote
|
|||||||
};
|
};
|
||||||
typedef epee::misc_utils::struct_init<request_t> request;
|
typedef epee::misc_utils::struct_init<request_t> request;
|
||||||
|
|
||||||
|
struct standard_response_t
|
||||||
|
{
|
||||||
|
bool status;
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
KV_SERIALIZE(status)
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
typedef epee::misc_utils::struct_init<standard_response_t> standard_response;
|
||||||
|
|
||||||
struct response_t
|
struct response_t
|
||||||
{
|
{
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -91,6 +91,14 @@ class wallet_accessor_test;
|
|||||||
|
|
||||||
namespace tools
|
namespace tools
|
||||||
{
|
{
|
||||||
|
enum light_wallet_server_type : uint8_t
|
||||||
|
{
|
||||||
|
STANDARD = 0,
|
||||||
|
OPENMONERO,
|
||||||
|
MYMONERO,
|
||||||
|
UNDEFINED = 255
|
||||||
|
};
|
||||||
|
|
||||||
class ringdb;
|
class ringdb;
|
||||||
class wallet2;
|
class wallet2;
|
||||||
class Notify;
|
class Notify;
|
||||||
@ -1023,6 +1031,7 @@ private:
|
|||||||
*/
|
*/
|
||||||
bool light_wallet() const { return m_light_wallet; }
|
bool light_wallet() const { return m_light_wallet; }
|
||||||
void set_light_wallet(bool light_wallet) { m_light_wallet = light_wallet; }
|
void set_light_wallet(bool light_wallet) { m_light_wallet = light_wallet; }
|
||||||
|
void set_light_wallet_server_type(light_wallet_server_type server_type){ m_light_wallet_server_type = server_type; };
|
||||||
uint64_t get_light_wallet_scanned_block_height() const { return m_light_wallet_scanned_block_height; }
|
uint64_t get_light_wallet_scanned_block_height() const { return m_light_wallet_scanned_block_height; }
|
||||||
uint64_t get_light_wallet_blockchain_height() const { return m_light_wallet_blockchain_height; }
|
uint64_t get_light_wallet_blockchain_height() const { return m_light_wallet_blockchain_height; }
|
||||||
|
|
||||||
@ -1611,7 +1620,39 @@ private:
|
|||||||
// Parse rct string
|
// Parse rct string
|
||||||
bool light_wallet_parse_rct_str(const std::string& rct_string, const crypto::public_key& tx_pub_key, uint64_t internal_output_index, rct::key& decrypted_mask, rct::key& rct_commit, bool decrypt) const;
|
bool light_wallet_parse_rct_str(const std::string& rct_string, const crypto::public_key& tx_pub_key, uint64_t internal_output_index, rct::key& decrypted_mask, rct::key& rct_commit, bool decrypt) const;
|
||||||
// check if key image is ours
|
// check if key image is ours
|
||||||
bool light_wallet_key_image_is_ours(const crypto::key_image& key_image, const crypto::public_key& tx_public_key, uint64_t out_index);
|
bool light_wallet_key_image_is_ours(const crypto::key_image& key_image, const crypto::public_key& tx_public_key, uint64_t out_index, const cryptonote::subaddress_index subaddress_index);
|
||||||
|
|
||||||
|
bool light_wallet_is_output_spent(const std::string& out_public_key, const std::string& tx_public_key, uint64_t out_index);
|
||||||
|
|
||||||
|
bool light_wallet_is_output_spent(const crypto::public_key& out_public_key, const crypto::public_key& tx_public_key, uint64_t out_index);
|
||||||
|
|
||||||
|
bool light_wallet_is_key_image_spent(const crypto::key_image& key_image) {
|
||||||
|
std::vector<crypto::key_image> key_images;
|
||||||
|
|
||||||
|
key_images.push_back(key_image);
|
||||||
|
std::vector<bool> spent_list = light_wallet_is_key_image_spent(key_images);
|
||||||
|
|
||||||
|
if (spent_list.empty()) return false;
|
||||||
|
|
||||||
|
return spent_list[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
bool m_light_wallet_is_logged_in;
|
||||||
|
boost::optional<tools::COMMAND_RPC_GET_UNSPENT_OUTS::response> m_unspent_outputs_response;
|
||||||
|
boost::optional<tools::COMMAND_RPC_GET_ADDRESS_TXS::response> m_address_txs_response;
|
||||||
|
void light_wallet_get_tx_unspent_outs(const std::string tx_hash, std::vector<tools::COMMAND_RPC_GET_UNSPENT_OUTS::output> &outputs) const;
|
||||||
|
void light_wallet_refresh(uint64_t & blocks_fectched, bool& received_money);
|
||||||
|
|
||||||
|
std::vector<bool> light_wallet_is_key_image_spent(const std::vector<crypto::key_image>& key_images);
|
||||||
|
std::vector<cryptonote::subaddress_index> m_light_wallet_subaddrs;
|
||||||
|
std::vector<uint32_t> m_light_wallet_accounts;
|
||||||
|
std::list<tools::COMMAND_RPC_GET_UNSPENT_OUTS::output> m_light_wallet_unspent_outputs;
|
||||||
|
bool light_wallet_supports_subaddrs();
|
||||||
|
void light_wallet_get_subaddrs();
|
||||||
|
bool light_wallet_provision_subaddrs(uint32_t maj_i, uint32_t min_i, uint32_t n_maj, uint32_t n_min);
|
||||||
|
bool light_wallet_upsert_subaddrs(std::vector<cryptonote::subaddress_index> subaddrs);
|
||||||
|
bool generate_output_key_image(const std::string& out_public_key, const std::string& tx_public_key, uint64_t out_index, const cryptonote::subaddress_index subaddress, crypto::key_image& ki) const;
|
||||||
|
bool generate_output_key_image(const crypto::public_key& out_public_key, const crypto::public_key& tx_public_key, uint64_t out_index, const cryptonote::subaddress_index subaddress, crypto::key_image& ki) const;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "attributes" are a mechanism to store an arbitrary number of string values
|
* "attributes" are a mechanism to store an arbitrary number of string values
|
||||||
@ -1823,6 +1864,7 @@ private:
|
|||||||
void on_device_progress(const hw::device_progress& event);
|
void on_device_progress(const hw::device_progress& event);
|
||||||
|
|
||||||
std::string get_rpc_status(const std::string &s) const;
|
std::string get_rpc_status(const std::string &s) const;
|
||||||
|
std::string get_rpc_status(const bool &s) const;
|
||||||
void throw_on_rpc_response_error(bool r, const epee::json_rpc::error &error, const std::string &status, const char *method) const;
|
void throw_on_rpc_response_error(bool r, const epee::json_rpc::error &error, const std::string &status, const char *method) const;
|
||||||
|
|
||||||
std::string get_client_signature() const;
|
std::string get_client_signature() const;
|
||||||
@ -1849,6 +1891,7 @@ private:
|
|||||||
transfer_container m_transfers;
|
transfer_container m_transfers;
|
||||||
payment_container m_payments;
|
payment_container m_payments;
|
||||||
serializable_unordered_map<crypto::key_image, size_t> m_key_images;
|
serializable_unordered_map<crypto::key_image, size_t> m_key_images;
|
||||||
|
std::set<std::string> m_spent_key_images;
|
||||||
serializable_unordered_map<crypto::public_key, size_t> m_pub_keys;
|
serializable_unordered_map<crypto::public_key, size_t> m_pub_keys;
|
||||||
cryptonote::account_public_address m_account_public_address;
|
cryptonote::account_public_address m_account_public_address;
|
||||||
serializable_unordered_map<crypto::public_key, cryptonote::subaddress_index> m_subaddresses;
|
serializable_unordered_map<crypto::public_key, cryptonote::subaddress_index> m_subaddresses;
|
||||||
@ -1940,6 +1983,7 @@ private:
|
|||||||
|
|
||||||
// Light wallet
|
// Light wallet
|
||||||
bool m_light_wallet; /* sends view key to daemon for scanning */
|
bool m_light_wallet; /* sends view key to daemon for scanning */
|
||||||
|
light_wallet_server_type m_light_wallet_server_type = STANDARD;
|
||||||
uint64_t m_light_wallet_scanned_block_height;
|
uint64_t m_light_wallet_scanned_block_height;
|
||||||
uint64_t m_light_wallet_blockchain_height;
|
uint64_t m_light_wallet_blockchain_height;
|
||||||
uint64_t m_light_wallet_per_kb_fee = FEE_PER_KB;
|
uint64_t m_light_wallet_per_kb_fee = FEE_PER_KB;
|
||||||
@ -1949,6 +1993,7 @@ private:
|
|||||||
// Light wallet info needed to populate m_payment requires 2 separate api calls (get_address_txs and get_unspent_outs)
|
// Light wallet info needed to populate m_payment requires 2 separate api calls (get_address_txs and get_unspent_outs)
|
||||||
// We save the info from the first call in m_light_wallet_address_txs for easier lookup.
|
// We save the info from the first call in m_light_wallet_address_txs for easier lookup.
|
||||||
std::unordered_map<crypto::hash, address_tx> m_light_wallet_address_txs;
|
std::unordered_map<crypto::hash, address_tx> m_light_wallet_address_txs;
|
||||||
|
std::vector<crypto::public_key> m_light_wallet_processed_out_public_keys;
|
||||||
// store calculated key image for faster lookup
|
// store calculated key image for faster lookup
|
||||||
serializable_unordered_map<crypto::public_key, serializable_map<uint64_t, crypto::key_image> > m_key_image_cache;
|
serializable_unordered_map<crypto::public_key, serializable_map<uint64_t, crypto::key_image> > m_key_image_cache;
|
||||||
|
|
||||||
|
@ -49,13 +49,28 @@ namespace tools
|
|||||||
};
|
};
|
||||||
typedef epee::misc_utils::struct_init<request_t> request;
|
typedef epee::misc_utils::struct_init<request_t> request;
|
||||||
|
|
||||||
|
struct address_meta {
|
||||||
|
uint32_t maj_i;
|
||||||
|
uint32_t min_i;
|
||||||
|
|
||||||
|
BEGIN_SERIALIZE_OBJECT()
|
||||||
|
FIELD(maj_i)
|
||||||
|
FIELD(min_i)
|
||||||
|
END_SERIALIZE()
|
||||||
|
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
KV_SERIALIZE(maj_i)
|
||||||
|
KV_SERIALIZE(min_i)
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
|
||||||
struct spent_output {
|
struct spent_output {
|
||||||
uint64_t amount;
|
uint64_t amount;
|
||||||
std::string key_image;
|
std::string key_image;
|
||||||
std::string tx_pub_key;
|
std::string tx_pub_key;
|
||||||
uint64_t out_index;
|
uint64_t out_index;
|
||||||
uint32_t mixin;
|
uint32_t mixin;
|
||||||
|
address_meta sender;
|
||||||
|
|
||||||
BEGIN_KV_SERIALIZE_MAP()
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
KV_SERIALIZE(amount)
|
KV_SERIALIZE(amount)
|
||||||
@ -63,6 +78,7 @@ namespace tools
|
|||||||
KV_SERIALIZE(tx_pub_key)
|
KV_SERIALIZE(tx_pub_key)
|
||||||
KV_SERIALIZE(out_index)
|
KV_SERIALIZE(out_index)
|
||||||
KV_SERIALIZE(mixin)
|
KV_SERIALIZE(mixin)
|
||||||
|
KV_SERIALIZE(sender)
|
||||||
END_KV_SERIALIZE_MAP()
|
END_KV_SERIALIZE_MAP()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -75,11 +91,13 @@ namespace tools
|
|||||||
uint64_t total_sent;
|
uint64_t total_sent;
|
||||||
uint64_t unlock_time;
|
uint64_t unlock_time;
|
||||||
uint64_t height;
|
uint64_t height;
|
||||||
|
uint64_t fee;
|
||||||
std::list<spent_output> spent_outputs;
|
std::list<spent_output> spent_outputs;
|
||||||
std::string payment_id;
|
std::string payment_id;
|
||||||
bool coinbase;
|
bool coinbase;
|
||||||
bool mempool;
|
bool mempool;
|
||||||
uint32_t mixin;
|
uint32_t mixin;
|
||||||
|
address_meta recipient;
|
||||||
|
|
||||||
BEGIN_KV_SERIALIZE_MAP()
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
KV_SERIALIZE(id)
|
KV_SERIALIZE(id)
|
||||||
@ -89,11 +107,13 @@ namespace tools
|
|||||||
KV_SERIALIZE(total_sent)
|
KV_SERIALIZE(total_sent)
|
||||||
KV_SERIALIZE(unlock_time)
|
KV_SERIALIZE(unlock_time)
|
||||||
KV_SERIALIZE(height)
|
KV_SERIALIZE(height)
|
||||||
|
KV_SERIALIZE_OPT(fee, (uint64_t)0)
|
||||||
KV_SERIALIZE(spent_outputs)
|
KV_SERIALIZE(spent_outputs)
|
||||||
KV_SERIALIZE(payment_id)
|
KV_SERIALIZE(payment_id)
|
||||||
KV_SERIALIZE(coinbase)
|
KV_SERIALIZE(coinbase)
|
||||||
KV_SERIALIZE(mempool)
|
KV_SERIALIZE(mempool)
|
||||||
KV_SERIALIZE(mixin)
|
KV_SERIALIZE(mixin)
|
||||||
|
KV_SERIALIZE(recipient)
|
||||||
END_KV_SERIALIZE_MAP()
|
END_KV_SERIALIZE_MAP()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -136,6 +156,21 @@ namespace tools
|
|||||||
};
|
};
|
||||||
typedef epee::misc_utils::struct_init<request_t> request;
|
typedef epee::misc_utils::struct_init<request_t> request;
|
||||||
|
|
||||||
|
struct address_meta {
|
||||||
|
uint32_t maj_i;
|
||||||
|
uint32_t min_i;
|
||||||
|
|
||||||
|
BEGIN_SERIALIZE_OBJECT()
|
||||||
|
FIELD(maj_i)
|
||||||
|
FIELD(min_i)
|
||||||
|
END_SERIALIZE()
|
||||||
|
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
KV_SERIALIZE(maj_i)
|
||||||
|
KV_SERIALIZE(min_i)
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
|
||||||
struct spent_output
|
struct spent_output
|
||||||
{
|
{
|
||||||
uint64_t amount;
|
uint64_t amount;
|
||||||
@ -143,6 +178,7 @@ namespace tools
|
|||||||
std::string tx_pub_key;
|
std::string tx_pub_key;
|
||||||
uint64_t out_index;
|
uint64_t out_index;
|
||||||
uint32_t mixin;
|
uint32_t mixin;
|
||||||
|
address_meta sender;
|
||||||
|
|
||||||
BEGIN_KV_SERIALIZE_MAP()
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
KV_SERIALIZE(amount)
|
KV_SERIALIZE(amount)
|
||||||
@ -150,6 +186,7 @@ namespace tools
|
|||||||
KV_SERIALIZE(tx_pub_key)
|
KV_SERIALIZE(tx_pub_key)
|
||||||
KV_SERIALIZE(out_index)
|
KV_SERIALIZE(out_index)
|
||||||
KV_SERIALIZE(mixin)
|
KV_SERIALIZE(mixin)
|
||||||
|
KV_SERIALIZE(sender)
|
||||||
END_KV_SERIALIZE_MAP()
|
END_KV_SERIALIZE_MAP()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -203,6 +240,20 @@ namespace tools
|
|||||||
};
|
};
|
||||||
typedef epee::misc_utils::struct_init<request_t> request;
|
typedef epee::misc_utils::struct_init<request_t> request;
|
||||||
|
|
||||||
|
struct address_meta {
|
||||||
|
uint32_t maj_i;
|
||||||
|
uint32_t min_i;
|
||||||
|
|
||||||
|
BEGIN_SERIALIZE_OBJECT()
|
||||||
|
FIELD(maj_i)
|
||||||
|
FIELD(min_i)
|
||||||
|
END_SERIALIZE()
|
||||||
|
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
KV_SERIALIZE(maj_i)
|
||||||
|
KV_SERIALIZE(min_i)
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
|
||||||
struct output {
|
struct output {
|
||||||
uint64_t amount;
|
uint64_t amount;
|
||||||
@ -216,7 +267,7 @@ namespace tools
|
|||||||
std::vector<std::string> spend_key_images;
|
std::vector<std::string> spend_key_images;
|
||||||
uint64_t timestamp;
|
uint64_t timestamp;
|
||||||
uint64_t height;
|
uint64_t height;
|
||||||
|
address_meta recipient;
|
||||||
|
|
||||||
BEGIN_KV_SERIALIZE_MAP()
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
KV_SERIALIZE(amount)
|
KV_SERIALIZE(amount)
|
||||||
@ -230,6 +281,7 @@ namespace tools
|
|||||||
KV_SERIALIZE(spend_key_images)
|
KV_SERIALIZE(spend_key_images)
|
||||||
KV_SERIALIZE(timestamp)
|
KV_SERIALIZE(timestamp)
|
||||||
KV_SERIALIZE(height)
|
KV_SERIALIZE(height)
|
||||||
|
KV_SERIALIZE(recipient)
|
||||||
END_KV_SERIALIZE_MAP()
|
END_KV_SERIALIZE_MAP()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -364,4 +416,148 @@ namespace tools
|
|||||||
typedef epee::misc_utils::struct_init<response_t> response;
|
typedef epee::misc_utils::struct_init<response_t> response;
|
||||||
};
|
};
|
||||||
//-----------------------------------------------
|
//-----------------------------------------------
|
||||||
|
struct COMMAND_RPC_PROVISION_SUBADDRS
|
||||||
|
{
|
||||||
|
class index_range : public std::vector<uint32_t> {
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
|
||||||
|
struct subaddrs_t {
|
||||||
|
uint32_t key;
|
||||||
|
std::vector<index_range> value;
|
||||||
|
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
KV_SERIALIZE(key)
|
||||||
|
KV_SERIALIZE(value)
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
typedef epee::misc_utils::struct_init<subaddrs_t> subaddrs;
|
||||||
|
|
||||||
|
struct request_t
|
||||||
|
{
|
||||||
|
std::string address;
|
||||||
|
std::string view_key;
|
||||||
|
uint32_t maj_i;
|
||||||
|
uint32_t min_i;
|
||||||
|
uint32_t n_maj;
|
||||||
|
uint32_t n_min;
|
||||||
|
bool get_all;
|
||||||
|
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
KV_SERIALIZE(address)
|
||||||
|
KV_SERIALIZE(view_key)
|
||||||
|
KV_SERIALIZE(maj_i)
|
||||||
|
KV_SERIALIZE(min_i)
|
||||||
|
KV_SERIALIZE(n_maj)
|
||||||
|
KV_SERIALIZE(n_min)
|
||||||
|
KV_SERIALIZE(get_all)
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
typedef epee::misc_utils::struct_init<request_t> request;
|
||||||
|
|
||||||
|
struct response_t
|
||||||
|
{
|
||||||
|
std::vector<subaddrs> new_subaddrs;
|
||||||
|
std::vector<subaddrs> all_subaddrs;
|
||||||
|
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
KV_SERIALIZE(new_subaddrs)
|
||||||
|
KV_SERIALIZE(all_subaddrs)
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
typedef epee::misc_utils::struct_init<response_t> response;
|
||||||
|
};
|
||||||
|
//-----------------------------------------------
|
||||||
|
struct COMMAND_RPC_UPSERT_SUBADDRS
|
||||||
|
{
|
||||||
|
class index_range : public std::vector<uint32_t> {
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
|
||||||
|
struct subaddrs_obj_t {
|
||||||
|
uint32_t key;
|
||||||
|
std::vector<index_range> value;
|
||||||
|
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
KV_SERIALIZE(key)
|
||||||
|
KV_SERIALIZE(value)
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
typedef epee::misc_utils::struct_init<subaddrs_obj_t> subaddrs_obj;
|
||||||
|
|
||||||
|
struct request_t
|
||||||
|
{
|
||||||
|
std::string address;
|
||||||
|
std::string view_key;
|
||||||
|
subaddrs_obj subaddrs;
|
||||||
|
bool get_all;
|
||||||
|
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
KV_SERIALIZE(address)
|
||||||
|
KV_SERIALIZE(view_key)
|
||||||
|
KV_SERIALIZE(subaddrs)
|
||||||
|
KV_SERIALIZE(get_all)
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
typedef epee::misc_utils::struct_init<request_t> request;
|
||||||
|
|
||||||
|
struct response_t
|
||||||
|
{
|
||||||
|
std::vector<subaddrs_obj> new_subaddrs;
|
||||||
|
std::vector<subaddrs_obj> all_subaddrs;
|
||||||
|
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
KV_SERIALIZE(new_subaddrs)
|
||||||
|
KV_SERIALIZE(all_subaddrs)
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
typedef epee::misc_utils::struct_init<response_t> response;
|
||||||
|
};
|
||||||
|
//-----------------------------------------------
|
||||||
|
struct COMMAND_RPC_GET_SUBADDRS
|
||||||
|
{
|
||||||
|
struct request_t
|
||||||
|
{
|
||||||
|
std::string address;
|
||||||
|
std::string view_key;
|
||||||
|
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
KV_SERIALIZE(address)
|
||||||
|
KV_SERIALIZE(view_key)
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
typedef epee::misc_utils::struct_init<request_t> request;
|
||||||
|
|
||||||
|
class index_range : public std::vector<uint32_t> {
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
|
||||||
|
struct subaddrs_t {
|
||||||
|
uint32_t key;
|
||||||
|
std::vector<index_range> value;
|
||||||
|
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
KV_SERIALIZE(key)
|
||||||
|
KV_SERIALIZE(value)
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
typedef epee::misc_utils::struct_init<subaddrs_t> subaddrs;
|
||||||
|
|
||||||
|
struct response_t
|
||||||
|
{
|
||||||
|
std::vector<subaddrs> all_subaddrs;
|
||||||
|
|
||||||
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
KV_SERIALIZE(all_subaddrs)
|
||||||
|
END_KV_SERIALIZE_MAP()
|
||||||
|
};
|
||||||
|
typedef epee::misc_utils::struct_init<response_t> response;
|
||||||
|
};
|
||||||
|
//-----------------------------------------------
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user