diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c index 57f1d5602ff6af40756a6c0ef6aae64ef4edebc5..53e3c90f6c19e73f08166a8332fff91845b8a6e2 100644 --- a/modules/mempool/dap_chain_mempool.c +++ b/modules/mempool/dap_chain_mempool.c @@ -883,12 +883,17 @@ char* dap_chain_mempool_tx_create_cond_input(dap_chain_net_t *a_net, dap_chain_h //add 'out_cond' item uint256_t l_new_val = {}; uint256_t l_value_cond = l_out_cond->header.value; - SUBTRACT_256_256(l_out_cond->header.value, l_value_send, &l_new_val); - //if (!!IS_ZERO_256(l_new_val)){ - l_out_cond->header.value = l_new_val; // Use old conditinal output to form the new one - dap_chain_datum_tx_add_item(&l_tx, (const uint8_t *)l_out_cond); - l_out_cond->header.value = l_value_cond; // Restore original value - //} + SUBTRACT_256_256(l_value_cond, l_value_send, &l_new_val); + if (!!IS_ZERO_256(l_new_val)){ + dap_chain_tx_out_cond_t *l_new_out_cond = DAP_NEW_Z_SIZE(dap_chain_tx_out_cond_t, sizeof(dap_chain_tx_out_cond_t) + l_out_cond->tsd_size); + l_new_out_cond->header = l_out_cond->header; + l_new_out_cond->header.value = l_new_val; + l_new_out_cond->subtype.srv_pay = l_out_cond->subtype.srv_pay; + l_new_out_cond->tsd_size = l_out_cond->tsd_size; + memcpy(l_new_out_cond->tsd, l_out_cond->tsd, l_out_cond->tsd_size); + dap_chain_datum_tx_add_item(&l_tx, (const uint8_t *)l_new_out_cond); + DAP_DELETE(l_new_out_cond); + } // add 'sign' item if(dap_chain_datum_tx_add_sign_item(&l_tx, a_key_tx_sign) != 1) { dap_chain_datum_tx_delete(l_tx);