From 595f2f0173a0ee503671bccbe7071feb61872274 Mon Sep 17 00:00:00 2001 From: "alexey.stratulat" <alexey.stratulat@demlabs.net> Date: Wed, 3 May 2023 19:01:32 +0700 Subject: [PATCH] [*] Backported their wizard functionality to get total signature count, wild signature count, and all public key hashes for a token from a ledger. --- modules/chain/dap_chain_ledger.c | 66 ++++++++++++++++++++++++ modules/chain/include/dap_chain_ledger.h | 5 ++ 2 files changed, 71 insertions(+) diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c index 29b2df85cb..ca769f4f7b 100644 --- a/modules/chain/dap_chain_ledger.c +++ b/modules/chain/dap_chain_ledger.c @@ -1623,6 +1623,72 @@ dap_string_t *dap_chain_ledger_balance_info(dap_ledger_t *a_ledger) return l_str_ret; } +/** + * @breif dap_chain_ledger_token_auth_signs_valid + * @param a_ledger + * @param a_token_ticker + * @return 0 if no ticker found + */ +size_t dap_chain_ledger_token_auth_signs_valid(dap_ledger_t *a_ledger, const char * a_token_ticker) +{ + dap_chain_ledger_token_item_t *l_token_item, *l_tmp_item; + pthread_rwlock_rdlock(&PVT(a_ledger)->tokens_rwlock); + size_t l_res = 0; + HASH_ITER(hh, PVT(a_ledger)->tokens, l_token_item, l_tmp_item) { + if (!dap_strcmp(l_token_item->ticker, a_token_ticker)) { + l_res = l_token_item->auth_signs_valid; + break; + } + } + pthread_rwlock_unlock(&PVT(a_ledger)->tokens_rwlock); + return l_res; +} + +/** + * @breif dap_chain_ledger_token_auth_signs_total + * @param a_ledger + * @param a_token_ticker + * @return + */ +size_t dap_chain_ledger_token_auth_signs_total(dap_ledger_t *a_ledger, const char * a_token_ticker) +{ + dap_chain_ledger_token_item_t *l_token_item, *l_tmp_item; + pthread_rwlock_rdlock(&PVT(a_ledger)->tokens_rwlock); + size_t l_res = 0; + HASH_ITER(hh, PVT(a_ledger)->tokens, l_token_item, l_tmp_item) { + if (!dap_strcmp(l_token_item->ticker, a_token_ticker)) { + l_res = l_token_item->auth_signs_total; + break; + } + } + pthread_rwlock_unlock(&PVT(a_ledger)->tokens_rwlock); + return l_res; +} + +/** + * @breif dap_chain_ledger_token_auth_signs_hashes + * @param a_ledger + * @param a_token_ticker + * @return + */ +dap_list_t * dap_chain_ledger_token_auth_signs_hashes(dap_ledger_t *a_ledger, const char * a_token_ticker) +{ + dap_list_t * l_ret = NULL; + dap_chain_ledger_token_item_t *l_token_item, *l_tmp_item; + pthread_rwlock_rdlock(&PVT(a_ledger)->tokens_rwlock); + HASH_ITER(hh, PVT(a_ledger)->tokens, l_token_item, l_tmp_item) { + if (!dap_strcmp(l_token_item->ticker, a_token_ticker)) { + debug_if(s_debug_more, L_INFO, " ! Token %s : total %lu auth signs", a_token_ticker, l_token_item->auth_signs_total); + for (size_t i = 0; i < l_token_item->auth_signs_total; i++) { + l_ret = dap_list_append(l_ret, (dap_chain_hash_fast_t*)(&l_token_item->auth_signs_pkey_hash[i])); + } + break; + } + } + pthread_rwlock_unlock(&PVT(a_ledger)->tokens_rwlock); + return l_ret; +} + /** * @brief Compose string list of all tokens with information * @param a_ledger diff --git a/modules/chain/include/dap_chain_ledger.h b/modules/chain/include/dap_chain_ledger.h index 8c7514dc6c..c76a9d1127 100644 --- a/modules/chain/include/dap_chain_ledger.h +++ b/modules/chain/include/dap_chain_ledger.h @@ -145,6 +145,11 @@ dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger); dap_string_t *dap_chain_ledger_threshold_info(dap_ledger_t *a_ledger); dap_string_t *dap_chain_ledger_threshold_hash_info(dap_ledger_t *a_ledger, dap_chain_hash_fast_t *l_tx_treshold_hash); dap_string_t *dap_chain_ledger_balance_info(dap_ledger_t *a_ledger); + +size_t dap_chain_ledger_token_auth_signs_valid(dap_ledger_t *a_ledger, const char * a_token_ticker); +size_t dap_chain_ledger_token_auth_signs_total(dap_ledger_t *a_ledger, const char * a_token_ticker); +dap_list_t * dap_chain_ledger_token_auth_signs_hashes(dap_ledger_t *a_ledger, const char * a_token_ticker); + /** * Add token emission datum */ -- GitLab