From 67af395fc57f105c411d029c70a0c780b86563c2 Mon Sep 17 00:00:00 2001 From: "daniil.frolov" <daniil.frolov@demlabs.net> Date: Tue, 28 Jan 2025 15:08:55 +0300 Subject: [PATCH 1/3] .. --- modules/net/dap_chain_net_tx.c | 4 ++-- .../service/xchange/dap_chain_net_srv_xchange.c | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/modules/net/dap_chain_net_tx.c b/modules/net/dap_chain_net_tx.c index b6a7cb2fe4..a93a1fac68 100644 --- a/modules/net/dap_chain_net_tx.c +++ b/modules/net/dap_chain_net_tx.c @@ -1192,13 +1192,13 @@ int dap_chain_net_tx_create_by_json(json_object *a_tx_json, dap_chain_net_t *a_n l_sign_list = dap_list_append(l_sign_list, l_json_item_obj); break; } - const char *l_sign_b64_str = json_object_get_string(l_json_item_obj); + const char *l_sign_b64_str = json_object_get_string(l_jobj_sign); if ( !l_sign_b64_str ) { json_object_array_add(l_jobj_errors, json_object_new_string("Can't get base64-encoded sign")); log_it(L_ERROR, "Json TX: Can't get base64-encoded sign!"); break; } - int64_t l_sign_size = 0, l_sign_b64_strlen = json_object_get_string_len(l_json_item_obj), + int64_t l_sign_size = 0, l_sign_b64_strlen = json_object_get_string_len(l_jobj_sign), l_sign_decoded_size = DAP_ENC_BASE64_DECODE_SIZE(l_sign_b64_strlen); if ( !s_json_get_int64(l_json_item_obj, "sig_size", &l_sign_size) ) log_it(L_NOTICE, "Json TX: \"sig_size\" unspecified, will be calculated automatically"); diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c index f49389ff34..ea06483b3d 100644 --- a/modules/service/xchange/dap_chain_net_srv_xchange.c +++ b/modules/service/xchange/dap_chain_net_srv_xchange.c @@ -996,9 +996,21 @@ uint64_t dap_chain_net_srv_xchange_get_order_completion_rate(dap_chain_net_t *a_ SUBTRACT_256_256(l_out_cond->header.value, l_out_cond_last_tx->header.value, &l_percent_completed); DIV_256_COIN(l_percent_completed, l_out_cond->header.value, &l_percent_completed); MULT_256_COIN(l_percent_completed, dap_chain_coins_to_balance("100.0"), &l_percent_completed); - } else + } else { + dap_chain_tx_out_cond_t *l_out_prev_cond_item = NULL; + xchange_tx_type_t tx_type = dap_chain_net_srv_xchange_tx_get_type(a_net->pub.ledger, l_last_tx, NULL, NULL, &l_out_prev_cond_item); + if (tx_type == TX_TYPE_EXCHANGE){ + l_percent_completed = l_out_cond->header.value; + DIV_256_COIN(l_percent_completed, l_out_cond->header.value, &l_percent_completed); + MULT_256_COIN(l_percent_completed, dap_chain_coins_to_balance("100.0"), &l_percent_completed); + } else if (tx_type == TX_TYPE_INVALIDATE){ + SUBTRACT_256_256(l_out_cond->header.value, l_out_prev_cond_item->header.value, &l_percent_completed); + DIV_256_COIN(l_percent_completed, l_out_cond->header.value, &l_percent_completed); + MULT_256_COIN(l_percent_completed, dap_chain_coins_to_balance("100.0"), &l_percent_completed); + } l_percent_completed = dap_chain_coins_to_balance("100.0"); - + } + return dap_chain_balance_to_coins_uint64(l_percent_completed); } -- GitLab From e063b9c0835c9c43348152e8763c972b7d387309 Mon Sep 17 00:00:00 2001 From: "daniil.frolov" <daniil.frolov@demlabs.net> Date: Tue, 28 Jan 2025 15:54:32 +0300 Subject: [PATCH 2/3] [*] Fix "filled" value for invalidate transactions in xchanger --- .../xchange/dap_chain_net_srv_xchange.c | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c index ea06483b3d..0d1c32c6b9 100644 --- a/modules/service/xchange/dap_chain_net_srv_xchange.c +++ b/modules/service/xchange/dap_chain_net_srv_xchange.c @@ -79,6 +79,7 @@ typedef struct xchange_tx_cache { uint256_t value; uint256_t value_ammount; dap_hash_fast_t next_hash; + uint64_t percent_completed; } order_info; struct { dap_hash_fast_t order_hash; @@ -1000,15 +1001,12 @@ uint64_t dap_chain_net_srv_xchange_get_order_completion_rate(dap_chain_net_t *a_ dap_chain_tx_out_cond_t *l_out_prev_cond_item = NULL; xchange_tx_type_t tx_type = dap_chain_net_srv_xchange_tx_get_type(a_net->pub.ledger, l_last_tx, NULL, NULL, &l_out_prev_cond_item); if (tx_type == TX_TYPE_EXCHANGE){ - l_percent_completed = l_out_cond->header.value; - DIV_256_COIN(l_percent_completed, l_out_cond->header.value, &l_percent_completed); - MULT_256_COIN(l_percent_completed, dap_chain_coins_to_balance("100.0"), &l_percent_completed); + l_percent_completed = dap_chain_coins_to_balance("100.0"); } else if (tx_type == TX_TYPE_INVALIDATE){ SUBTRACT_256_256(l_out_cond->header.value, l_out_prev_cond_item->header.value, &l_percent_completed); DIV_256_COIN(l_percent_completed, l_out_cond->header.value, &l_percent_completed); MULT_256_COIN(l_percent_completed, dap_chain_coins_to_balance("100.0"), &l_percent_completed); } - l_percent_completed = dap_chain_coins_to_balance("100.0"); } return dap_chain_balance_to_coins_uint64(l_percent_completed); @@ -1802,12 +1800,7 @@ static int s_cli_srv_xchange_order(int a_argc, char **a_argv, int a_arg_index, j l_token_buy = l_item->buy_token; l_proposed = l_item->tx_info.order_info.value; - uint256_t l_completed = {}; - SUBTRACT_256_256(l_item->tx_info.order_info.value, l_item->tx_info.order_info.value_ammount, &l_completed); - DIV_256_COIN(l_completed, l_item->tx_info.order_info.value, &l_completed); - MULT_256_COIN(l_completed, dap_chain_coins_to_balance("100.0"), &l_completed); - - l_percent_completed = dap_chain_balance_to_coins_uint64(l_completed); + l_percent_completed = l_item->tx_info.order_info.percent_completed; l_owner_addr = dap_strdup(dap_chain_addr_to_str(&l_item->seller_addr)); } else { l_tx = dap_ledger_tx_find_by_hash(l_net->pub.ledger, &l_order_tx_hash); @@ -2679,12 +2672,7 @@ static int s_cli_srv_xchange(int a_argc, char **a_argv, void **a_str_reply) l_rate = l_item->rate; l_amount = l_item->tx_info.order_info.value_ammount; l_proposed = l_item->tx_info.order_info.value; - uint256_t l_completed = {}; - SUBTRACT_256_256(l_item->tx_info.order_info.value, l_item->tx_info.order_info.value_ammount, &l_completed); - DIV_256_COIN(l_completed, l_item->tx_info.order_info.value, &l_completed); - MULT_256_COIN(l_completed, dap_chain_coins_to_balance("100.0"), &l_completed); - - l_percent_completed = dap_chain_balance_to_coins_uint64(l_completed); + l_percent_completed = l_item->tx_info.order_info.percent_completed; } else { xchange_tx_list_t *l_tx_item = (xchange_tx_list_t*)it->data; l_tx = l_tx_item->tx; @@ -3688,6 +3676,7 @@ static void s_ledger_tx_add_notify(void *a_arg, dap_ledger_t *a_ledger, dap_chai l_cache->tx_info.order_info.order_status = XCHANGE_ORDER_STATUS_OPENED; l_cache->tx_info.order_info.value = l_out_cond_item->header.value; l_cache->tx_info.order_info.value_ammount = l_cache->tx_info.order_info.value; + l_cache->tx_info.order_info.percent_completed = 0; } else if (l_tx_type == TX_TYPE_EXCHANGE){ l_cache->rate = l_out_prev_cond_item->subtype.srv_xchange.rate; dap_strncpy(l_cache->buy_token, l_out_prev_cond_item->subtype.srv_xchange.buy_token, sizeof(l_cache->buy_token)); @@ -3713,6 +3702,15 @@ static void s_ledger_tx_add_notify(void *a_arg, dap_ledger_t *a_ledger, dap_chai if(l_cache_order){ if (l_cache_order->tx_type == TX_TYPE_ORDER){ l_cache_order->tx_info.order_info.value_ammount = l_out_cond_item && !IS_ZERO_256(l_out_cond_item->header.value) ? l_out_cond_item->header.value : uint256_0; + if (l_out_cond_item && !IS_ZERO_256(l_out_cond_item->header.value)){ + uint256_t l_percent_completed = {}; + SUBTRACT_256_256(l_cache_order->tx_info.order_info.value, l_cache_order->tx_info.order_info.value_ammount, &l_percent_completed); + DIV_256_COIN(l_percent_completed, l_cache_order->tx_info.order_info.value, &l_percent_completed); + MULT_256_COIN(l_percent_completed, dap_chain_coins_to_balance("100.0"), &l_percent_completed); + l_cache_order->tx_info.order_info.percent_completed = dap_chain_balance_to_coins_uint64(l_percent_completed); + } else { + l_cache_order->tx_info.order_info.percent_completed = dap_chain_balance_to_coins_uint64(dap_chain_coins_to_balance("100.0")); + } l_cache_order->tx_info.order_info.order_status = IS_ZERO_256(l_cache_order->tx_info.order_info.value_ammount) ? XCHANGE_ORDER_STATUS_CLOSED : XCHANGE_ORDER_STATUS_OPENED; if (dap_hash_fast_is_blank(&l_cache_order->tx_info.order_info.next_hash)) l_cache_order->tx_info.order_info.next_hash = *a_tx_hash; -- GitLab From 6ea960877781a30aec097f48d7e47ce50389129f Mon Sep 17 00:00:00 2001 From: "daniil.frolov" <daniil.frolov@demlabs.net> Date: Tue, 28 Jan 2025 16:04:40 +0300 Subject: [PATCH 3/3] .. --- modules/service/xchange/dap_chain_net_srv_xchange.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c index 0d1c32c6b9..26512e70f6 100644 --- a/modules/service/xchange/dap_chain_net_srv_xchange.c +++ b/modules/service/xchange/dap_chain_net_srv_xchange.c @@ -3775,9 +3775,15 @@ static void s_ledger_tx_add_notify(void *a_arg, dap_ledger_t *a_ledger, dap_chai HASH_FIND(hh, l_cache->cache, &l_cache_found->tx_info.exchange_info.order_hash, sizeof(dap_hash_fast_t), l_cache_order); l_cache_prev_tx->tx_info.exchange_info.next_hash = (dap_hash_fast_t){0}; SUM_256_256(l_cache_order->tx_info.order_info.value_ammount, l_cache_found->tx_info.exchange_info.buy_value, &l_cache_order->tx_info.order_info.value_ammount); + uint256_t l_percent_completed = {}; + SUBTRACT_256_256(l_cache_order->tx_info.order_info.value, l_cache_order->tx_info.order_info.value_ammount, &l_percent_completed); + DIV_256_COIN(l_percent_completed, l_cache_order->tx_info.order_info.value, &l_percent_completed); + MULT_256_COIN(l_percent_completed, dap_chain_coins_to_balance("100.0"), &l_percent_completed); + l_cache_order->tx_info.order_info.percent_completed = dap_chain_balance_to_coins_uint64(l_percent_completed); } else if (l_cache_prev_tx->tx_type == TX_TYPE_ORDER){ l_cache_prev_tx->tx_info.order_info.next_hash = (dap_hash_fast_t){0}; l_cache_prev_tx->tx_info.order_info.value_ammount = l_cache_prev_tx->tx_info.order_info.value; + l_cache_prev_tx->tx_info.order_info.percent_completed = 0; } } } else if (l_tx_type == TX_TYPE_INVALIDATE){ -- GitLab