From c4e8477918301ded37bb8ff5528852034f00d169 Mon Sep 17 00:00:00 2001 From: "roman.khlopkov" <roman.khlopkov@demlabs.net> Date: Fri, 10 Jan 2025 22:34:52 +0300 Subject: [PATCH 1/7] [*] TX signing fixes --- dap-sdk | 2 +- modules/common/dap_chain_datum_tx_items.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/dap-sdk b/dap-sdk index d6b6934683..5931f83c88 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit d6b6934683168160e7d25647ceef59d9439de2c3 +Subproject commit 5931f83c8894be1f78e4888ef39873fc87aa4df2 diff --git a/modules/common/dap_chain_datum_tx_items.c b/modules/common/dap_chain_datum_tx_items.c index 9c5ef20846..5a5ce3de32 100644 --- a/modules/common/dap_chain_datum_tx_items.c +++ b/modules/common/dap_chain_datum_tx_items.c @@ -424,7 +424,8 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_emit_delega dap_chain_tx_sig_t *dap_chain_datum_tx_item_sign_create(dap_enc_key_t *a_key, dap_chain_datum_tx_t *a_tx) { dap_return_val_if_fail(a_key && a_tx, NULL); - size_t l_tx_size = a_tx->header.tx_items_size + sizeof(dap_chain_datum_tx_t); + uint8_t *l_tx_sig_present = dap_chain_datum_tx_item_get(a_tx, NULL, NULL, TX_ITEM_TYPE_SIG, NULL); + size_t l_tx_size = sizeof(dap_chain_datum_tx_t) + (l_tx_sig_present ? (l_tx_sig_present - (byte_t *)a_tx) : a_tx->header.tx_items_size); dap_chain_datum_tx_t *l_tx = DAP_DUP_SIZE(a_tx, l_tx_size); if (!l_tx) { log_it(L_CRITICAL, "%s", c_error_memory_alloc); -- GitLab From 960d760dfd38c71fc96cee61e9c95b59682d1351 Mon Sep 17 00:00:00 2001 From: "roman.khlopkov" <roman.khlopkov@demlabs.net> Date: Sat, 11 Jan 2025 09:21:31 +0300 Subject: [PATCH 2/7] [*] TX signs verification fix --- modules/common/dap_chain_datum_tx.c | 12 ++++++++---- modules/common/dap_chain_datum_tx_items.c | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/modules/common/dap_chain_datum_tx.c b/modules/common/dap_chain_datum_tx.c index 30e6cbc5c4..b20f02a17e 100644 --- a/modules/common/dap_chain_datum_tx.c +++ b/modules/common/dap_chain_datum_tx.c @@ -241,9 +241,13 @@ int dap_chain_datum_tx_verify_sign(dap_chain_datum_tx_t *a_tx, int a_sign_num) { dap_return_val_if_pass(!a_tx, -1); int l_ret = -4, l_sign_num = 0; - byte_t *l_item = NULL; size_t l_item_size; + byte_t *l_item = NULL, *l_first_item = NULL; size_t l_item_size; TX_ITEM_ITER_TX(l_item, l_item_size, a_tx) { - if ( *l_item == TX_ITEM_TYPE_SIG && l_sign_num++ == a_sign_num ) + if (*l_item != TX_ITEM_TYPE_SIG) + continue; + if (!l_first_item) + l_first_item = l_item; + if (l_sign_num++ == a_sign_num) break; } if (!l_item || !l_item_size) @@ -255,9 +259,9 @@ int dap_chain_datum_tx_verify_sign(dap_chain_datum_tx_t *a_tx, int a_sign_num) dap_chain_datum_tx_t *l_tx; byte_t *l_tx_data; if ( l_sign_item->header.version ) { - l_data_size = (size_t)( l_item - (byte_t*)a_tx ); + l_data_size = (size_t)( l_first_item - (byte_t *)a_tx ); l_tx = dap_config_get_item_bool_default(g_config, "ledger", "mapped", true) - ? DAP_DUP_SIZE(a_tx, dap_chain_datum_tx_get_size(a_tx)) : a_tx; + ? DAP_DUP_SIZE(a_tx, l_data_size) : a_tx; l_tx_data = (byte_t*)l_tx; l_tx->header.tx_items_size = 0; } else { diff --git a/modules/common/dap_chain_datum_tx_items.c b/modules/common/dap_chain_datum_tx_items.c index 5a5ce3de32..4ef3ded852 100644 --- a/modules/common/dap_chain_datum_tx_items.c +++ b/modules/common/dap_chain_datum_tx_items.c @@ -425,7 +425,7 @@ dap_chain_tx_sig_t *dap_chain_datum_tx_item_sign_create(dap_enc_key_t *a_key, da { dap_return_val_if_fail(a_key && a_tx, NULL); uint8_t *l_tx_sig_present = dap_chain_datum_tx_item_get(a_tx, NULL, NULL, TX_ITEM_TYPE_SIG, NULL); - size_t l_tx_size = sizeof(dap_chain_datum_tx_t) + (l_tx_sig_present ? (l_tx_sig_present - (byte_t *)a_tx) : a_tx->header.tx_items_size); + size_t l_tx_size = sizeof(dap_chain_datum_tx_t) + (l_tx_sig_present ? (size_t)(l_tx_sig_present - (byte_t *)a_tx) : a_tx->header.tx_items_size); dap_chain_datum_tx_t *l_tx = DAP_DUP_SIZE(a_tx, l_tx_size); if (!l_tx) { log_it(L_CRITICAL, "%s", c_error_memory_alloc); -- GitLab From d215761d36d9ea349d39c307eee6347c754d2c94 Mon Sep 17 00:00:00 2001 From: "roman.khlopkov" <roman.khlopkov@demlabs.net> Date: Sat, 11 Jan 2025 10:24:07 +0300 Subject: [PATCH 3/7] [*] dap_sign -> dap_chain_tx_sig conversion function --- modules/common/dap_chain_datum_tx_items.c | 56 ++++++++++++------- .../common/include/dap_chain_datum_tx_items.h | 8 ++- 2 files changed, 42 insertions(+), 22 deletions(-) diff --git a/modules/common/dap_chain_datum_tx_items.c b/modules/common/dap_chain_datum_tx_items.c index 4ef3ded852..114b2dc345 100644 --- a/modules/common/dap_chain_datum_tx_items.c +++ b/modules/common/dap_chain_datum_tx_items.c @@ -416,35 +416,51 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_emit_delega return l_item; } -/** - * Create item dap_chain_tx_sig_t - * - * return item, NULL Error - */ -dap_chain_tx_sig_t *dap_chain_datum_tx_item_sign_create(dap_enc_key_t *a_key, dap_chain_datum_tx_t *a_tx) +dap_chain_tx_sig_t *dap_chain_datum_tx_item_sign_create_from_sign(const dap_sign_t *a_sign) +{ + dap_return_val_if_fail(a_sign, NULL); + size_t l_chain_sign_size = dap_sign_get_size((dap_sign_t *)a_sign); // sign data + dap_chain_tx_sig_t *l_tx_sig = DAP_NEW_Z_SIZE(dap_chain_tx_sig_t, + sizeof(dap_chain_tx_sig_t) + l_chain_sign_size); + l_tx_sig->header.type = TX_ITEM_TYPE_SIG; + l_tx_sig->header.version = 1; + l_tx_sig->header.sig_size = (uint32_t)l_chain_sign_size; + memcpy(l_tx_sig->sig, a_sign, l_chain_sign_size); + return l_tx_sig; +} + +dap_sign_t *dap_chain_datum_tx_sign_create(dap_enc_key_t *a_key, const dap_chain_datum_tx_t *a_tx) { dap_return_val_if_fail(a_key && a_tx, NULL); uint8_t *l_tx_sig_present = dap_chain_datum_tx_item_get(a_tx, NULL, NULL, TX_ITEM_TYPE_SIG, NULL); - size_t l_tx_size = sizeof(dap_chain_datum_tx_t) + (l_tx_sig_present ? (size_t)(l_tx_sig_present - (byte_t *)a_tx) : a_tx->header.tx_items_size); - dap_chain_datum_tx_t *l_tx = DAP_DUP_SIZE(a_tx, l_tx_size); + size_t l_tx_size = sizeof(dap_chain_datum_tx_t) + + (l_tx_sig_present ? (size_t)(l_tx_sig_present - a_tx->tx_items) + : a_tx->header.tx_items_size); + dap_chain_datum_tx_t *l_tx = DAP_DUP_SIZE((dap_chain_datum_tx_t *)a_tx, l_tx_size); if (!l_tx) { log_it(L_CRITICAL, "%s", c_error_memory_alloc); return NULL; } l_tx->header.tx_items_size = 0; - dap_sign_t *l_chain_sign = dap_sign_create(a_key, l_tx, l_tx_size, 0); + dap_sign_t *ret = dap_sign_create(a_key, l_tx, l_tx_size, 0); DAP_DELETE(l_tx); + return ret; +} + +/** + * Create item dap_chain_tx_sig_t + * + * return item, NULL Error + */ +dap_chain_tx_sig_t *dap_chain_datum_tx_item_sign_create(dap_enc_key_t *a_key, const dap_chain_datum_tx_t *a_tx) +{ + dap_return_val_if_fail(a_key && a_tx, NULL); + dap_sign_t *l_chain_sign = dap_chain_datum_tx_sign_create(a_key, a_tx); if (!l_chain_sign) return NULL; - size_t l_chain_sign_size = dap_sign_get_size(l_chain_sign); // sign data - dap_chain_tx_sig_t *l_tx_sig = DAP_NEW_Z_SIZE(dap_chain_tx_sig_t, - sizeof(dap_chain_tx_sig_t) + l_chain_sign_size); - l_tx_sig->header.type = TX_ITEM_TYPE_SIG; - l_tx_sig->header.version = 1; - l_tx_sig->header.sig_size = (uint32_t)l_chain_sign_size; - memcpy(l_tx_sig->sig, l_chain_sign, l_chain_sign_size); + dap_chain_tx_sig_t *ret = dap_chain_datum_tx_item_sign_create_from_sign(l_chain_sign); DAP_DELETE(l_chain_sign); - return l_tx_sig; + return ret; } /** @@ -485,14 +501,14 @@ byte_t *dap_chain_datum_tx_item_get_data(dap_chain_tx_tsd_t *a_tx_tsd, int *a_ty * a_item_out_size size[out] size of returned item * return item data, NULL Error index or bad format transaction */ -uint8_t* dap_chain_datum_tx_item_get( dap_chain_datum_tx_t *a_tx, int *a_item_idx, +uint8_t *dap_chain_datum_tx_item_get(const dap_chain_datum_tx_t *a_tx, int *a_item_idx, byte_t *a_iter, dap_chain_tx_item_type_t a_type, size_t *a_item_out_size) { if (!a_tx) return NULL; int i = a_item_idx ? *a_item_idx : 0, j = -1; - byte_t *l_end = a_tx->tx_items + a_tx->header.tx_items_size, - *l_begin = i || !a_iter || a_iter < a_tx->tx_items || a_iter > l_end ? a_tx->tx_items : a_iter; + const byte_t *l_end = a_tx->tx_items + a_tx->header.tx_items_size, + *l_begin = i || !a_iter || a_iter < a_tx->tx_items || a_iter > l_end ? a_tx->tx_items : a_iter; size_t l_left_size = (size_t)(l_end - l_begin), l_tx_item_size; byte_t *l_item; #define m_item_idx_n_size(item, idx, size) ({ \ diff --git a/modules/common/include/dap_chain_datum_tx_items.h b/modules/common/include/dap_chain_datum_tx_items.h index 9c004c1979..34c30d75e4 100644 --- a/modules/common/include/dap_chain_datum_tx_items.h +++ b/modules/common/include/dap_chain_datum_tx_items.h @@ -216,7 +216,11 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_emit_delega * * return item, NULL Error */ -dap_chain_tx_sig_t *dap_chain_datum_tx_item_sign_create(dap_enc_key_t *a_key, dap_chain_datum_tx_t *a_tx); +dap_chain_tx_sig_t *dap_chain_datum_tx_item_sign_create(dap_enc_key_t *a_key, const dap_chain_datum_tx_t *a_tx); + +dap_chain_tx_sig_t *dap_chain_datum_tx_item_sign_create_from_sign(const dap_sign_t *a_sign); + +dap_sign_t *dap_chain_datum_tx_sign_create(dap_enc_key_t *a_key, const dap_chain_datum_tx_t *a_tx); /** * Get sign from sign item @@ -237,7 +241,7 @@ dap_chain_tx_tsd_t *dap_chain_datum_tx_item_get_tsd_by_type(dap_chain_datum_tx_t * a_item_out_size size[out] size of returned item * return item data, NULL Error index or bad format transaction */ -uint8_t* dap_chain_datum_tx_item_get( dap_chain_datum_tx_t *a_tx, int *a_item_idx_start, +uint8_t* dap_chain_datum_tx_item_get(const dap_chain_datum_tx_t *a_tx, int *a_item_idx_start, byte_t *a_iter, dap_chain_tx_item_type_t a_type, size_t *a_item_out_size); // Get Nth item of pointed type uint8_t *dap_chain_datum_tx_item_get_nth(dap_chain_datum_tx_t *a_tx, dap_chain_tx_item_type_t a_type, int a_item_idx); -- GitLab From da51040027b5c75cde78aafa9cc013f6d0955891 Mon Sep 17 00:00:00 2001 From: "roman.khlopkov" <roman.khlopkov@demlabs.net> Date: Sun, 12 Jan 2025 13:07:29 +0300 Subject: [PATCH 4/7] [*] Delegated emission service taking TX composing fix for native token --- modules/consensus/dag-poa/dap_chain_cs_dag_poa.c | 4 ++++ .../emit-delegate/dap_chain_net_srv_emit_delegate.c | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c index 3ba0e8d336..1bfef5ffba 100644 --- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c +++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c @@ -703,6 +703,10 @@ static int s_callback_created(dap_chain_t * a_chain, dap_config_t *a_chain_net_c dap_guuid_compose(l_net->pub.id.uint64, DAP_CHAIN_CLUSTER_ID_DAG), l_dag->gdb_group_events_round_new, DAG_ROUND_NEW_TTL, true, DAP_GDB_MEMBER_ROLE_NOBODY, DAP_CLUSTER_TYPE_AUTONOMIC); + if (!l_dag_cluster) { + log_it(L_ERROR, "Can't create cluster for consensus communication. Can't start the DAG consensus"); + return -1; + } dap_global_db_cluster_add_notify_callback(l_dag_cluster, s_round_changes_notify, l_dag); dap_chain_net_add_auth_nodes_to_cluster(l_net, l_dag_cluster); dap_link_manager_add_net_associate(l_net->pub.id.uint64, l_dag_cluster->links_cluster); 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 5494b0ee71..58ef9fb6ff 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 @@ -380,8 +380,12 @@ dap_chain_datum_tx_t *dap_chain_net_srv_emit_delegate_taking_tx_create(json_obje uint256_t l_fee_back = {}; // fee coin back SUBTRACT_256_256(l_fee_transfer, l_fee_total, &l_fee_back); - if (!IS_ZERO_256(l_fee_back) && dap_chain_datum_tx_add_out_ext_item(&l_tx, &l_owner_addr, l_fee_back, a_net->pub.native_ticker) != 1) - m_tx_fail(ERROR_COMPOSE, "Cant add fee back output"); + if (!IS_ZERO_256(l_fee_back)) { + int rc = l_taking_native ? dap_chain_datum_tx_add_out_item(&l_tx, &l_owner_addr, l_fee_back) + : dap_chain_datum_tx_add_out_ext_item(&l_tx, &l_owner_addr, l_fee_back, a_net->pub.native_ticker); + if (rc != 1) + m_tx_fail(ERROR_COMPOSE, "Cant add fee back output"); + } // add 'sign' item if (dap_chain_datum_tx_add_sign_item(&l_tx, a_enc_key) != 1) -- GitLab From 86979d640d6f79710cee66191b1786110c1420db Mon Sep 17 00:00:00 2001 From: dmitry <dpuzyrkov@gmail.com> Date: Sun, 12 Jan 2025 21:12:00 +0700 Subject: [PATCH 5/7] [*] tsd input param for emit delegate --- .../dap_chain_net_srv_emit_delegate.c | 15 +++++++++++++-- .../include/dap_chain_net_srv_emit_delegate.h | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) 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 58ef9fb6ff..72b36c1a9f 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 210f73c531..8cca1e2faa 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); -- GitLab From b22a0c98b06f544e8ee4d747ef700b1b3dcea91b Mon Sep 17 00:00:00 2001 From: Constantin P <papizh.konstantin@demlabs.net> Date: Mon, 13 Jan 2025 15:07:26 +0700 Subject: [PATCH 6/7] Improvements --- modules/common/dap_chain_datum_tx.c | 7 +++---- modules/common/dap_chain_datum_tx_items.c | 15 ++++----------- .../dap_chain_net_srv_emit_delegate.c | 10 +++------- 3 files changed, 10 insertions(+), 22 deletions(-) diff --git a/modules/common/dap_chain_datum_tx.c b/modules/common/dap_chain_datum_tx.c index b20f02a17e..fc0dcd4450 100644 --- a/modules/common/dap_chain_datum_tx.c +++ b/modules/common/dap_chain_datum_tx.c @@ -39,10 +39,9 @@ */ dap_chain_datum_tx_t* dap_chain_datum_tx_create(void) { - dap_chain_datum_tx_t *tx = DAP_NEW_Z(dap_chain_datum_tx_t); - return tx - ? tx->header.ts_created = time(NULL), tx - : ( log_it(L_CRITICAL, "%s", c_error_memory_alloc), NULL ); + dap_chain_datum_tx_t *tx = DAP_NEW_Z_RET_VAL_IF_FAIL(dap_chain_datum_tx_t, NULL); + tx->header.ts_created = time(NULL); + return tx; } /** diff --git a/modules/common/dap_chain_datum_tx_items.c b/modules/common/dap_chain_datum_tx_items.c index 114b2dc345..df0278a320 100644 --- a/modules/common/dap_chain_datum_tx_items.c +++ b/modules/common/dap_chain_datum_tx_items.c @@ -192,17 +192,10 @@ dap_chain_tx_in_reward_t *dap_chain_datum_tx_item_in_reward_create(dap_chain_has * Create tsd section */ dap_chain_tx_tsd_t *dap_chain_datum_tx_item_tsd_create(void *a_data, int a_type, size_t a_size) { - if (!a_data || !a_size) { - return NULL; - } - dap_tsd_t *l_tsd = dap_tsd_create(a_type, a_data, a_size); - size_t l_tsd_sz = dap_tsd_size(l_tsd); - dap_chain_tx_tsd_t *l_item = DAP_NEW_Z_SIZE(dap_chain_tx_tsd_t, - sizeof(dap_chain_tx_tsd_t) + l_tsd_sz); - memcpy(l_item->tsd, l_tsd, l_tsd_sz); - DAP_DELETE(l_tsd); - l_item->header.type = TX_ITEM_TYPE_TSD; - l_item->header.size = l_tsd_sz; + dap_return_val_if_fail(a_data && a_size, NULL); + dap_chain_tx_tsd_t *l_item = DAP_NEW_SIZE(dap_chain_tx_tsd_t, sizeof(dap_chain_tx_tsd_t) + sizeof(dap_tsd_t) + a_size); + *l_item = (dap_chain_tx_tsd_t){ .header = { .type = TX_ITEM_TYPE_TSD, .size = sizeof(dap_tsd_t) + a_size }}; + dap_tsd_write(l_item->tsd, (uint16_t)a_type, a_data, a_size); return l_item; } 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 72b36c1a9f..56ee649962 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 @@ -369,13 +369,9 @@ dap_chain_datum_tx_t *dap_chain_net_srv_emit_delegate_taking_tx_create(json_obje 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 "); - } - } + for ( dap_list_t *l_tsd = tsd_items; l_tsd; l_tsd = l_tsd->next ) { + 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 -- GitLab From 2644af25e5a47ba7cc6ddd0fc8b676f41f864427 Mon Sep 17 00:00:00 2001 From: Constantin P <papizh.konstantin@demlabs.net> Date: Mon, 13 Jan 2025 15:26:24 +0700 Subject: [PATCH 7/7] LOCs number reduced --- modules/common/dap_chain_datum_tx_items.c | 75 ++++++----------------- 1 file changed, 18 insertions(+), 57 deletions(-) diff --git a/modules/common/dap_chain_datum_tx_items.c b/modules/common/dap_chain_datum_tx_items.c index df0278a320..e47b0c38b5 100644 --- a/modules/common/dap_chain_datum_tx_items.c +++ b/modules/common/dap_chain_datum_tx_items.c @@ -147,10 +147,7 @@ dap_chain_tx_in_ems_t *dap_chain_datum_tx_item_in_ems_create(dap_chain_id_t a_id { if(!a_ticker) return NULL; - dap_chain_tx_in_ems_t *l_item = DAP_NEW_Z(dap_chain_tx_in_ems_t); - if (!l_item) { - return NULL; - } + dap_chain_tx_in_ems_t *l_item = DAP_NEW_Z_RET_VAL_IF_FAIL(dap_chain_tx_in_ems_t, NULL); l_item->header.type = TX_ITEM_TYPE_IN_EMS; l_item->header.token_emission_chain_id.uint64 = a_id.uint64; l_item->header.token_emission_hash = *a_datum_token_hash; @@ -167,9 +164,7 @@ dap_chain_tx_in_t* dap_chain_datum_tx_item_in_create(dap_chain_hash_fast_t *a_tx { if(!a_tx_prev_hash) return NULL; - dap_chain_tx_in_t *l_item = DAP_NEW_Z(dap_chain_tx_in_t); - if (!l_item) - return NULL; + dap_chain_tx_in_t *l_item = DAP_NEW_Z_RET_VAL_IF_FAIL(dap_chain_tx_in_t, NULL); l_item->header.type = TX_ITEM_TYPE_IN; l_item->header.tx_out_prev_idx = a_tx_out_prev_idx; l_item->header.tx_prev_hash = *a_tx_prev_hash; @@ -180,9 +175,7 @@ dap_chain_tx_in_reward_t *dap_chain_datum_tx_item_in_reward_create(dap_chain_has { if (!a_block_hash) return NULL; - dap_chain_tx_in_reward_t *l_item = DAP_NEW_Z(dap_chain_tx_in_reward_t); - if (!l_item) - return NULL; + dap_chain_tx_in_reward_t *l_item = DAP_NEW_Z_RET_VAL_IF_FAIL(dap_chain_tx_in_reward_t, NULL); l_item->type = TX_ITEM_TYPE_IN_REWARD; l_item->block_hash = *a_block_hash; return l_item; @@ -193,7 +186,7 @@ dap_chain_tx_in_reward_t *dap_chain_datum_tx_item_in_reward_create(dap_chain_has */ dap_chain_tx_tsd_t *dap_chain_datum_tx_item_tsd_create(void *a_data, int a_type, size_t a_size) { dap_return_val_if_fail(a_data && a_size, NULL); - dap_chain_tx_tsd_t *l_item = DAP_NEW_SIZE(dap_chain_tx_tsd_t, sizeof(dap_chain_tx_tsd_t) + sizeof(dap_tsd_t) + a_size); + dap_chain_tx_tsd_t *l_item = DAP_NEW_Z_SIZE_RET_VAL_IF_FAIL(dap_chain_tx_tsd_t, sizeof(dap_chain_tx_tsd_t) + sizeof(dap_tsd_t) + a_size, NULL); *l_item = (dap_chain_tx_tsd_t){ .header = { .type = TX_ITEM_TYPE_TSD, .size = sizeof(dap_tsd_t) + a_size }}; dap_tsd_write(l_item->tsd, (uint16_t)a_type, a_data, a_size); return l_item; @@ -211,10 +204,7 @@ dap_chain_tx_in_cond_t* dap_chain_datum_tx_item_in_cond_create(dap_chain_hash_fa { if(!a_tx_prev_hash ) return NULL; - dap_chain_tx_in_cond_t *l_item = DAP_NEW_Z(dap_chain_tx_in_cond_t); - if (!l_item) { - return NULL; - } + dap_chain_tx_in_cond_t *l_item = DAP_NEW_Z_RET_VAL_IF_FAIL(dap_chain_tx_in_cond_t, NULL); l_item->header.type = TX_ITEM_TYPE_IN_COND; l_item->header.receipt_idx = a_receipt_idx; l_item->header.tx_out_prev_idx = a_tx_out_prev_idx; @@ -231,10 +221,7 @@ dap_chain_tx_out_t* dap_chain_datum_tx_item_out_create(const dap_chain_addr_t *a { if (!a_addr || IS_ZERO_256(a_value)) return NULL; - dap_chain_tx_out_t *l_item = DAP_NEW_Z(dap_chain_tx_out_t); - if (!l_item) { - return NULL; - } + dap_chain_tx_out_t *l_item = DAP_NEW_Z_RET_VAL_IF_FAIL(dap_chain_tx_out_t, NULL); l_item->addr = *a_addr; l_item->header.type = TX_ITEM_TYPE_OUT; l_item->header.value = a_value; @@ -243,14 +230,9 @@ dap_chain_tx_out_t* dap_chain_datum_tx_item_out_create(const dap_chain_addr_t *a dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_out_ext_create(const dap_chain_addr_t *a_addr, uint256_t a_value, const char *a_token) { - if (!a_addr || !a_token) - return NULL; - if (IS_ZERO_256(a_value)) + if (!a_addr || !a_token || IS_ZERO_256(a_value)) return NULL; - dap_chain_tx_out_ext_t *l_item = DAP_NEW_Z(dap_chain_tx_out_ext_t); - if (!l_item) { - return NULL; - } + dap_chain_tx_out_ext_t *l_item = DAP_NEW_Z_RET_VAL_IF_FAIL(dap_chain_tx_out_ext_t, NULL); l_item->header.type = TX_ITEM_TYPE_OUT_EXT; l_item->header.value = a_value; l_item->addr = *a_addr; @@ -262,10 +244,7 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_fee(uint256_t a { if (IS_ZERO_256(a_value)) return NULL; - dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z(dap_chain_tx_out_cond_t); - if (!l_item) { - return NULL; - } + dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z_RET_VAL_IF_FAIL(dap_chain_tx_out_cond_t, NULL); l_item->header.item_type = TX_ITEM_TYPE_OUT_COND; l_item->header.value = a_value; l_item->header.subtype = DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE; @@ -282,14 +261,9 @@ dap_chain_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap_pke dap_chain_net_srv_price_unit_uid_t a_unit, const void *a_params, size_t a_params_size) { - if (!a_key || !a_key->header.size ) - return NULL; - if (IS_ZERO_256(a_value)) - return NULL; - dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z_SIZE(dap_chain_tx_out_cond_t, sizeof(dap_chain_tx_out_cond_t) + a_params_size); - if (l_item == NULL) + if (!a_key || !a_key->header.size || IS_ZERO_256(a_value)) return NULL; - + dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z_SIZE_RET_VAL_IF_FAIL(dap_chain_tx_out_cond_t, sizeof(dap_chain_tx_out_cond_t) + a_params_size, NULL); l_item->header.item_type = TX_ITEM_TYPE_OUT_COND; l_item->header.value = a_value; l_item->header.subtype = DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY; @@ -314,7 +288,7 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap return NULL; if (IS_ZERO_256(a_value_sell) || IS_ZERO_256(a_value_rate)) return NULL; - dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z_SIZE(dap_chain_tx_out_cond_t, sizeof(dap_chain_tx_out_cond_t) + a_params_size); + dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z_SIZE_RET_VAL_IF_FAIL(dap_chain_tx_out_cond_t, sizeof(dap_chain_tx_out_cond_t) + a_params_size, NULL); l_item->header.item_type = TX_ITEM_TYPE_OUT_COND; l_item->header.value = a_value_sell; l_item->header.subtype = DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE; @@ -339,10 +313,7 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_stake(dap_c return NULL; size_t l_tsd_total_size = a_sovereign_addr && !dap_chain_addr_is_blank(a_sovereign_addr) ? dap_chain_datum_tx_item_out_cond_create_srv_stake_get_tsd_size() : 0; - dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z_SIZE(dap_chain_tx_out_cond_t, sizeof(dap_chain_tx_out_cond_t) + l_tsd_total_size); - if (!l_item) { - return NULL; - } + dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z_SIZE_RET_VAL_IF_FAIL(dap_chain_tx_out_cond_t, sizeof(dap_chain_tx_out_cond_t) + l_tsd_total_size, NULL); l_item->header.item_type = TX_ITEM_TYPE_OUT_COND; l_item->header.value = a_value; l_item->header.subtype = DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE; @@ -372,10 +343,7 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_stake_lock( { if (IS_ZERO_256(a_value)) return NULL; - dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z(dap_chain_tx_out_cond_t); - if (!l_item) { - return NULL; - } + dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z_RET_VAL_IF_FAIL(dap_chain_tx_out_cond_t, NULL); l_item->header.item_type = TX_ITEM_TYPE_OUT_COND; l_item->header.value = a_value; l_item->header.subtype = DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK; @@ -393,10 +361,7 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_emit_delega if (IS_ZERO_256(a_value)) return NULL; size_t l_tsd_total_size = a_pkey_hashes_count * (sizeof(dap_hash_fast_t) + sizeof(dap_tsd_t)); - dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z_SIZE(dap_chain_tx_out_cond_t, sizeof(dap_chain_tx_out_cond_t) + l_tsd_total_size); - if (!l_item) { - return NULL; - } + dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z_SIZE_RET_VAL_IF_FAIL(dap_chain_tx_out_cond_t, sizeof(dap_chain_tx_out_cond_t) + l_tsd_total_size, NULL); l_item->header.item_type = TX_ITEM_TYPE_OUT_COND; l_item->header.value = a_value; l_item->header.subtype = DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_EMIT_DELEGATE; @@ -413,8 +378,8 @@ dap_chain_tx_sig_t *dap_chain_datum_tx_item_sign_create_from_sign(const dap_sign { dap_return_val_if_fail(a_sign, NULL); size_t l_chain_sign_size = dap_sign_get_size((dap_sign_t *)a_sign); // sign data - dap_chain_tx_sig_t *l_tx_sig = DAP_NEW_Z_SIZE(dap_chain_tx_sig_t, - sizeof(dap_chain_tx_sig_t) + l_chain_sign_size); + dap_chain_tx_sig_t *l_tx_sig = DAP_NEW_Z_SIZE_RET_VAL_IF_FAIL(dap_chain_tx_sig_t, + sizeof(dap_chain_tx_sig_t) + l_chain_sign_size, NULL); l_tx_sig->header.type = TX_ITEM_TYPE_SIG; l_tx_sig->header.version = 1; l_tx_sig->header.sig_size = (uint32_t)l_chain_sign_size; @@ -429,11 +394,7 @@ dap_sign_t *dap_chain_datum_tx_sign_create(dap_enc_key_t *a_key, const dap_chain size_t l_tx_size = sizeof(dap_chain_datum_tx_t) + (l_tx_sig_present ? (size_t)(l_tx_sig_present - a_tx->tx_items) : a_tx->header.tx_items_size); - dap_chain_datum_tx_t *l_tx = DAP_DUP_SIZE((dap_chain_datum_tx_t *)a_tx, l_tx_size); - if (!l_tx) { - log_it(L_CRITICAL, "%s", c_error_memory_alloc); - return NULL; - } + dap_chain_datum_tx_t *l_tx = DAP_DUP_SIZE_RET_VAL_IF_FAIL((dap_chain_datum_tx_t *)a_tx, l_tx_size, NULL); l_tx->header.tx_items_size = 0; dap_sign_t *ret = dap_sign_create(a_key, l_tx, l_tx_size, 0); DAP_DELETE(l_tx); -- GitLab