diff --git a/modules/service/emit-delegate/dap_chain_net_srv_emit_delegate.c b/modules/service/emit-delegate/dap_chain_net_srv_emit_delegate.c index 58ef9fb6ffd593834bee7478af286541bc0fd9ac..72b36c1a9f4b167307c6119440f9b67e18088bd5 100644 --- a/modules/service/emit-delegate/dap_chain_net_srv_emit_delegate.c +++ b/modules/service/emit-delegate/dap_chain_net_srv_emit_delegate.c @@ -32,6 +32,7 @@ #include "dap_chain_net_tx.h" #include "dap_chain_net_srv_emit_delegate.h" #include "dap_chain_node_cli_cmd.h" +#include "dap_list.h" enum emit_delegation_error { @@ -289,7 +290,7 @@ static bool s_is_key_present(dap_chain_tx_out_cond_t *a_cond, dap_enc_key_t *a_e } dap_chain_datum_tx_t *dap_chain_net_srv_emit_delegate_taking_tx_create(json_object *a_json_arr_reply, dap_chain_net_t *a_net, dap_enc_key_t *a_enc_key, - dap_chain_addr_t *a_addr_to, uint256_t a_value, uint256_t a_fee, dap_hash_fast_t *a_tx_in_hash) + dap_chain_addr_t *a_addr_to, uint256_t a_value, uint256_t a_fee, dap_hash_fast_t *a_tx_in_hash, dap_list_t* tsd_items) { // create empty transaction dap_chain_datum_tx_t *l_tx = dap_chain_datum_tx_create(); @@ -367,6 +368,16 @@ dap_chain_datum_tx_t *dap_chain_net_srv_emit_delegate_taking_tx_create(json_obje m_tx_fail(ERROR_COMPOSE, "Can't add TSD section item with withdraw value"); DAP_DELETE(l_takeoff_tsd); + //add other tsd if available + if (tsd_items) { + dap_list_t *l_tsd, *l_tmp; + DL_FOREACH_SAFE(tsd_items, l_tsd, l_tmp) { + if (dap_chain_datum_tx_add_item(&l_tx, l_tsd->data) != 1){ + m_tx_fail(ERROR_COMPOSE, "Can't add custom TSD section item "); + } + } + } + // add fee items if (l_net_fee_used) { int rc = l_taking_native ? dap_chain_datum_tx_add_out_item(&l_tx, &l_net_fee_addr, l_net_fee) @@ -620,7 +631,7 @@ static int s_cli_take(int a_argc, char **a_argv, int a_arg_index, json_object ** return ERROR_VALUE; } // Create emission from conditional transaction - dap_chain_datum_tx_t *l_tx = dap_chain_net_srv_emit_delegate_taking_tx_create(*a_json_arr_reply, a_net, l_enc_key, l_addr, l_value, l_fee, &l_tx_in_hash); + dap_chain_datum_tx_t *l_tx = dap_chain_net_srv_emit_delegate_taking_tx_create(*a_json_arr_reply, a_net, l_enc_key, l_addr, l_value, l_fee, &l_tx_in_hash, NULL); DAP_DEL_MULTY(l_enc_key, l_addr); if (!l_tx) { dap_json_rpc_error_add(*a_json_arr_reply, ERROR_CREATE, "Can't compose transaction for delegated emission"); diff --git a/modules/service/emit-delegate/include/dap_chain_net_srv_emit_delegate.h b/modules/service/emit-delegate/include/dap_chain_net_srv_emit_delegate.h index 210f73c531198bce14b6c75f02408b10f2d9dc88..8cca1e2faa3dd7a585a89c9a4cbbd84f001b4f71 100644 --- a/modules/service/emit-delegate/include/dap_chain_net_srv_emit_delegate.h +++ b/modules/service/emit-delegate/include/dap_chain_net_srv_emit_delegate.h @@ -12,6 +12,6 @@ void dap_chain_net_srv_emit_delegate_deinit(); dap_chain_datum_tx_t *dap_chain_net_srv_emit_delegate_taking_tx_create(json_object *a_json_arr_rweply, dap_chain_net_t *a_net, dap_enc_key_t *a_enc_key, - dap_chain_addr_t *a_addr_to, uint256_t a_value, uint256_t a_fee, dap_hash_fast_t *a_tx_in_hash); + dap_chain_addr_t *a_addr_to, uint256_t a_value, uint256_t a_fee, dap_hash_fast_t *a_tx_in_hash, dap_list_t *tsd_items); dap_chain_datum_tx_t *dap_chain_net_srv_emit_delegate_taking_tx_sign(json_object *a_json_arr_reply, dap_chain_net_t *a_net, dap_enc_key_t *a_enc_key, dap_chain_datum_tx_t *a_tx_in);