diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c index f20e687aafcc675b94b2f1408712c1c887d8649e..f7e876bdf7b4f97de9dda3c32032599cf8ed30c7 100644 --- a/modules/net/dap_chain_ledger.c +++ b/modules/net/dap_chain_ledger.c @@ -3163,11 +3163,11 @@ dap_hash_fast_t dap_ledger_get_final_chain_tx_hash(dap_ledger_t *a_ledger, dap_c int l_out_num = 0; dap_ledger_tx_item_t *l_item = NULL; while (( l_tx = dap_ledger_tx_find_datum_by_hash(a_ledger, &l_hash, &l_item, false) )) { - l_hash_tmp = l_item->cache_data.tx_hash_spent_fast[l_out_num]; - if ( !dap_chain_datum_tx_out_cond_get(l_tx, a_cond_type, &l_out_num) - || dap_hash_fast_is_blank(&l_hash_tmp) ) + if ( !dap_chain_datum_tx_out_cond_get(l_tx, a_cond_type, &l_out_num) + || dap_hash_fast_is_blank(&l_item->cache_data.tx_hash_spent_fast[l_out_num])) break; - l_hash = l_hash_tmp; + + l_hash = l_item->cache_data.tx_hash_spent_fast[l_out_num]; } return l_hash; } diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c index 62a3284a951193e46d342c49ddd2815a4cbf1335..f1a5597ab9a9d392c8518252b26b472272f98a7b 100644 --- a/modules/service/xchange/dap_chain_net_srv_xchange.c +++ b/modules/service/xchange/dap_chain_net_srv_xchange.c @@ -104,7 +104,8 @@ static bool s_tag_check_xchange(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_ if (have_xchange_in || have_xchange_out) { //xchange by xchange module - xchange_tx_type_t type = dap_chain_net_srv_xchange_tx_get_type(a_ledger, a_tx, NULL, NULL, NULL); + dap_chain_tx_out_cond_t *l_out_cond_item = NULL; + xchange_tx_type_t type = dap_chain_net_srv_xchange_tx_get_type(a_ledger, a_tx, &l_out_cond_item, NULL, NULL); switch(type) { case TX_TYPE_ORDER: @@ -115,7 +116,13 @@ static bool s_tag_check_xchange(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_ case TX_TYPE_EXCHANGE: { - if(a_action) *a_action = DAP_CHAIN_TX_TAG_ACTION_USE; + + if(a_action) { + if(l_out_cond_item) + *a_action = DAP_CHAIN_TX_TAG_ACTION_USE; + else + *a_action = DAP_CHAIN_TX_TAG_ACTION_CLOSE; + } return true; } @@ -1577,12 +1584,6 @@ static int s_cli_srv_xchange_order(int a_argc, char **a_argv, int a_arg_index, v }; dap_chain_tx_out_cond_t *l_out_cond_last_tx = dap_chain_datum_tx_out_cond_get(l_last_tx, DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE , NULL); - if (!l_out_cond_last_tx || IS_ZERO_256(l_out_cond_last_tx->header.value)){ - l_status_order = "CLOSED"; - } else { - l_status_order = "OPENED"; - } - dap_hash_fast_t l_tx_hash = {}; dap_hash_fast(l_tx, dap_chain_datum_tx_get_size(l_tx), &l_tx_hash); @@ -1696,18 +1697,10 @@ xchange_tx_type_t dap_chain_net_srv_xchange_tx_get_type (dap_ledger_t * a_ledger dap_chain_tx_in_cond_t * l_in_cond_temp = (dap_chain_tx_in_cond_t *) l_tx_item_temp; l_prev_tx_temp = dap_ledger_tx_find_by_hash(a_ledger, &l_in_cond_temp->header.tx_prev_hash); } - - //have to find EXCHANGE tx_out_cond! - l_out_cond_item = NULL; - l_out_cond_item = dap_chain_datum_tx_out_cond_get(l_prev_tx_temp, DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE, - &l_cond_idx); - if (!l_out_cond_item) { - l_tx_type = TX_TYPE_UNDEFINED; - } else { - dap_chain_tx_sig_t *l_tx_prev_sig = (dap_chain_tx_sig_t *)dap_chain_datum_tx_item_get(l_prev_tx_temp, NULL, NULL, TX_ITEM_TYPE_SIG, NULL); - dap_sign_t *l_prev_sign = dap_chain_datum_tx_item_sign_get_sig((dap_chain_tx_sig_t *)l_tx_prev_sig); - dap_chain_tx_sig_t *l_tx_sig = (dap_chain_tx_sig_t *)dap_chain_datum_tx_item_get(a_tx, NULL, NULL, TX_ITEM_TYPE_SIG, NULL); - dap_sign_t *l_sign = dap_chain_datum_tx_item_sign_get_sig((dap_chain_tx_sig_t *)l_tx_sig); + dap_chain_tx_sig_t *l_tx_prev_sig = (dap_chain_tx_sig_t *)dap_chain_datum_tx_item_get(l_prev_tx_temp, NULL, NULL, TX_ITEM_TYPE_SIG, NULL); + dap_sign_t *l_prev_sign = dap_chain_datum_tx_item_sign_get_sig((dap_chain_tx_sig_t *)l_tx_prev_sig); + dap_chain_tx_sig_t *l_tx_sig = (dap_chain_tx_sig_t *)dap_chain_datum_tx_item_get(a_tx, NULL, NULL, TX_ITEM_TYPE_SIG, NULL); + dap_sign_t *l_sign = dap_chain_datum_tx_item_sign_get_sig((dap_chain_tx_sig_t *)l_tx_sig); bool l_owner = false; l_owner = dap_sign_compare_pkeys(l_prev_sign,l_sign); @@ -1715,8 +1708,6 @@ xchange_tx_type_t dap_chain_net_srv_xchange_tx_get_type (dap_ledger_t * a_ledger l_tx_type = TX_TYPE_INVALIDATE; else l_tx_type = TX_TYPE_EXCHANGE; - } - } if(a_out_cond_item) *a_out_cond_item = l_out_cond_item;