diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c index 24c3ffe620ec8446dc615de693feffd578232a8f..91ee1b33f98e12f97164f5cf3d04dbbef1412d2d 100644 --- a/modules/service/xchange/dap_chain_net_srv_xchange.c +++ b/modules/service/xchange/dap_chain_net_srv_xchange.c @@ -1826,6 +1826,22 @@ static bool s_string_append_tx_cond_info( dap_string_t * a_reply_str, char l_tx_prev_cond_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE]; dap_hash_fast_to_str(&l_in_cond->header.tx_prev_hash,l_tx_prev_cond_hash_str, sizeof(l_tx_prev_cond_hash_str)); + dap_chain_datum_tx_t *l_prev_tx = dap_ledger_tx_find_by_hash(a_net->pub.ledger, &l_in_cond->header.tx_prev_hash); + if (!l_prev_tx) + return false; + + int l_out_num = l_in_cond->header.tx_out_prev_idx; + dap_hash_fast_t l_order_hash = l_in_cond->header.tx_prev_hash; + dap_chain_tx_out_cond_t *l_out_cond = dap_chain_datum_tx_out_cond_get(l_prev_tx, DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE, &l_out_num); + dap_hash_fast_t *l_order_hash_ptr = dap_ledger_get_first_chain_tx_hash(a_net->pub.ledger, a_tx, l_out_cond); + if (l_order_hash_ptr){ + l_order_hash = *l_order_hash_ptr; + DAP_DEL_Z(l_order_hash_ptr); + } + + char *l_value_from_str = dap_chain_balance_to_coins(l_out_prev_cond_item->header.value); + char *l_value_from_datoshi_str = dap_chain_balance_print(l_out_prev_cond_item->header.value); + dap_string_append_printf(a_reply_str, "Hash: %s\n", l_tx_hash_str); if(a_print_ts){ char l_tmp_buf[DAP_TIME_STR_SIZE]; @@ -1834,8 +1850,10 @@ static bool s_string_append_tx_cond_info( dap_string_t * a_reply_str, } if (a_print_status) dap_string_append_printf(a_reply_str, " Status: inactive,"); - char *l_value_from_str, *l_value_from_datoshi_str = dap_uint256_to_char(l_out_prev_cond_item->header.value, &l_value_from_str); - dap_string_append_printf(a_reply_str, " returned %s(%s) %s to owner", l_value_from_str, l_value_from_datoshi_str, l_tx_input_ticker); + + char l_order_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE]; + dap_hash_fast_to_str(&l_order_hash, l_order_hash_str, sizeof(l_order_hash_str)); + dap_string_append_printf(a_reply_str, " returned %s(%s) %s to owner from order %s", l_value_from_str, l_value_from_datoshi_str, l_tx_input_ticker, l_order_hash_str); if(a_print_prev_hash) dap_string_append_printf(a_reply_str, "\n Prev cond: %s", l_tx_prev_cond_hash_str); } break; @@ -1860,7 +1878,7 @@ size_t l_tx_total; memset(&l_tx_first_hash, 0, sizeof(dap_chain_hash_fast_t)); /* Initial hash == zero */ - + size_t l_tx_count = 0; for (l_tx_total = 0; (l_datum_tx = dap_ledger_tx_find_by_addr(a_net->pub.ledger, NULL, a_addr, &l_tx_first_hash)); l_tx_total++) @@ -1872,8 +1890,11 @@ size_t l_tx_total; if ( a_before && (l_datum_tx->header.ts_created > a_before) ) continue; - s_string_append_tx_cond_info(l_reply_str, a_net, l_datum_tx, a_opt_status, false, true, false); + if (s_string_append_tx_cond_info(l_reply_str, a_net, l_datum_tx, a_opt_status, false, true, false)) + l_tx_count++; } + + dap_string_append_printf(l_reply_str, "\nFound %"DAP_UINT64_FORMAT_U" transactions", l_tx_count); *a_str_reply = dap_string_free(l_reply_str, false); /* Free string descriptor, but keep ASCIZ buffer itself */ return 0; }