From c685a30e52d0be91b3c9d47295997ccddde056fd Mon Sep 17 00:00:00 2001 From: "roman.khlopkov" <roman.khlopkov@demlabs.net> Date: Mon, 19 Aug 2024 17:05:09 +0300 Subject: [PATCH] [*] TSD iterations acceptable way choosed --- dap-sdk | 2 +- modules/common/dap_chain_datum_anchor.c | 19 +- modules/common/dap_chain_datum_decree.c | 208 +----------------- .../common/include/dap_chain_datum_anchor.h | 2 +- modules/net/dap_chain_ledger.c | 5 - 5 files changed, 7 insertions(+), 229 deletions(-) diff --git a/dap-sdk b/dap-sdk index 0bc8b39bb0..31ae342434 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 0bc8b39bb03244c4f9d25c0b1228848bf27c9fe8 +Subproject commit 31ae342434501e6097f1c44712e092d47b2d582d diff --git a/modules/common/dap_chain_datum_anchor.c b/modules/common/dap_chain_datum_anchor.c index b3b4ea6da8..d0e934bb72 100644 --- a/modules/common/dap_chain_datum_anchor.c +++ b/modules/common/dap_chain_datum_anchor.c @@ -30,22 +30,11 @@ #define LOG_TAG "dap_chain_datum_anchor" -int dap_chain_datum_anchor_get_hash_from_data(dap_chain_datum_anchor_t* a_anchor, dap_hash_fast_t * l_out_hash) +int dap_chain_datum_anchor_get_hash_from_data(dap_chain_datum_anchor_t* a_anchor, dap_hash_fast_t *a_out_hash) { - if(!a_anchor){ - log_it(L_WARNING,"Wrong arguments"); - return -1; - } - dap_tsd_t *l_tsd; size_t l_tsd_size; - dap_tsd_iter(l_tsd, l_tsd_size, a_anchor->data_n_sign, a_anchor->header.data_size) { - if (l_tsd->type == DAP_CHAIN_DATUM_ANCHOR_TSD_TYPE_DECREE_HASH) { - if (l_tsd->size > sizeof(dap_hash_fast_t)) - return log_it(L_WARNING,"Wrong fee tsd data size"), -1; - _dap_tsd_get_scalar(l_tsd, l_out_hash); - return 0; - } - } - return -2; + dap_return_val_if_fail(a_anchor && a_out_hash, -1); + dap_tsd_t *l_tsd = dap_tsd_find(a_anchor->data_n_sign, a_anchor->header.data_size, DAP_CHAIN_DATUM_ANCHOR_TSD_TYPE_DECREE_HASH); + return l_tsd && l_tsd->size == sizeof(dap_hash_fast_t) ? ( _dap_tsd_get_scalar(l_tsd, a_out_hash), 0 ) : 1; } void dap_chain_datum_anchor_certs_dump(dap_string_t * a_str_out, byte_t * a_signs, size_t a_certs_size, const char *a_hash_out_type) diff --git a/modules/common/dap_chain_datum_decree.c b/modules/common/dap_chain_datum_decree.c index 405ae8ffdc..5ef31fc6f9 100644 --- a/modules/common/dap_chain_datum_decree.c +++ b/modules/common/dap_chain_datum_decree.c @@ -71,12 +71,7 @@ int dap_chain_datum_decree_get_fee_addr(dap_chain_datum_decree_t *a_decree, dap_ dap_list_t *dap_chain_datum_decree_get_owners(dap_chain_datum_decree_t *a_decree, uint16_t *a_owners_num) { dap_return_val_if_fail(a_decree && a_owners_num, NULL); - dap_list_t *l_ret = NULL; - dap_tsd_t *l_tsd; size_t l_tsd_size; - dap_tsd_iter(l_tsd, l_tsd_size, a_decree->data_n_signs, a_decree->header.data_size) { - if (l_tsd->type == DAP_CHAIN_DATUM_DECREE_TSD_TYPE_OWNER) - l_ret = dap_list_append( l_ret, DAP_DUP_SIZE(l_tsd->data, dap_pkey_get_size((dap_pkey_t*)l_tsd->data)) ); - } + dap_list_t *l_ret = dap_tsd_find_all(a_decree->data_n_signs, a_decree->header.data_size, DAP_CHAIN_DATUM_DECREE_TSD_TYPE_OWNER); if (a_owners_num) *a_owners_num = (uint16_t)dap_list_length(l_ret); return l_ret; @@ -154,207 +149,6 @@ int dap_chain_datum_decree_get_ban_addr(dap_chain_datum_decree_t *a_decree, cons return l_tsd ? ( *a_addr = dap_tsd_get_string_const(l_tsd), !dap_strcmp(*a_addr, DAP_TSD_CORRUPTED_STRING) ) : 1; } -void dap_chain_datum_decree_dump(dap_string_t *a_str_out, dap_chain_datum_decree_t *a_decree, size_t a_decree_size, const char *a_hash_out_type) -{ - char *l_type_str = ""; - switch(a_decree->header.type) - { - case DAP_CHAIN_DATUM_DECREE_TYPE_COMMON: - l_type_str = "DECREE_TYPE_COMMON"; - break; - case DAP_CHAIN_DATUM_DECREE_TYPE_SERVICE: - l_type_str = "DECREE_TYPE_SERVICE"; - break; - default: - l_type_str = "DECREE_TYPE_UNKNOWN"; - } - dap_string_append_printf(a_str_out, "type: %s\n", l_type_str); - const char *l_subtype_str = dap_chain_datum_decree_subtype_to_str(a_decree->header.sub_type); - dap_string_append_printf(a_str_out, "subtype: %s\n", l_subtype_str); - dap_string_append_printf(a_str_out, "TSD:\n"); - dap_tsd_t *l_tsd; size_t l_tsd_size; - dap_tsd_iter(l_tsd, l_tsd_size, a_decree->data_n_signs, a_decree->header.data_size) { - switch(l_tsd->type) { - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_VALUE: - if (l_tsd->size != sizeof(uint256_t)){ - dap_string_append_printf(a_str_out, "\tValue: <WRONG SIZE>\n"); - break; - } - uint256_t l_value = uint256_0; - _dap_tsd_get_scalar(l_tsd, &l_value); - const char *l_value_str = dap_uint256_to_char(l_value, NULL); - dap_string_append_printf(a_str_out, "\tValue: %s\n", l_value_str); - break; - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_SIGN: - break; - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_FEE: - if (l_tsd->size != sizeof(uint256_t)){ - dap_string_append_printf(a_str_out, "\tFee: <WRONG SIZE>\n"); - break; - } - uint256_t l_fee_value = uint256_0; - _dap_tsd_get_scalar(l_tsd, &l_fee_value); - const char *l_fee_value_str = dap_uint256_to_char(l_fee_value, NULL); - dap_string_append_printf(a_str_out, "\tFee: %s\n", l_fee_value_str); - break; - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_OWNER: - if (l_tsd->size != sizeof(dap_pkey_t)) { - dap_string_append_printf(a_str_out, "\tOwner fingerprint: <WRONG SIZE>\n"); - break; - } - dap_pkey_t *l_owner_pkey = /*DAP_NEW_STACK_SIZE(dap_pkey_t, l_tsd->size); - memcpy(l_owner_pkey, l_tsd->data, l_tsd->size);*/ _dap_tsd_get_object(l_tsd, dap_pkey_t); - char *l_owner_pkey_str; - dap_get_data_hash_str_static(l_owner_pkey->pkey, l_owner_pkey->header.size, l_owner_pkey_str); - dap_string_append_printf(a_str_out, "\tOwner fingerprint: %s\n", l_owner_pkey_str); - break; - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_MIN_OWNER: - if (l_tsd->size != sizeof(uint256_t)) { - dap_string_append_printf(a_str_out, "\tOwner min: <WRONG SIZE>\n"); - break; - } - uint256_t l_owner_min = uint256_0; - _dap_tsd_get_scalar(l_tsd, &l_owner_min); - const char *l_owner_min_str = dap_uint256_to_char(l_owner_min, NULL); - dap_string_append_printf(a_str_out, "\tOwner min: %s\n", l_owner_min_str); - break; - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_FEE_WALLET: - if (l_tsd->size != sizeof(dap_chain_addr_t)) { - dap_string_append_printf(a_str_out, "\tWallet for fee: <WRONG SIZE>\n"); - break; - } - dap_chain_addr_t *l_addr_fee_wallet = /*{ }; - _dap_tsd_get_scalar(l_tsd, &l_addr_fee_wallet);*/ _dap_tsd_get_object(l_tsd, dap_chain_addr_t); - dap_string_append_printf(a_str_out, "\tWallet for fee: %s\n", dap_chain_addr_to_str_static(l_addr_fee_wallet)); - break; - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_HASH: - if (l_tsd->size != sizeof(dap_hash_fast_t)) { - dap_string_append_printf(a_str_out, "\tHash: <WRONG SIZE>\n"); - break; - } - dap_hash_fast_t *l_stake_tx = /*{ }; - _dap_tsd_get_scalar(l_tsd, &l_stake_tx);*/ _dap_tsd_get_object(l_tsd, dap_hash_fast_t); - const char *l_stake_tx_hash = dap_strcmp(a_hash_out_type, "hex") - ? dap_enc_base58_encode_hash_to_str_static(l_stake_tx) - : dap_chain_hash_fast_to_str_static(l_stake_tx); - dap_string_append_printf(a_str_out, "\tHash: %s\n", l_stake_tx_hash); - break; - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_VALUE: - if (l_tsd->size != sizeof(uint256_t)){ - dap_string_append_printf(a_str_out, "\tStake value: <WRONG SIZE>\n"); - break; - } - uint256_t l_stake_value = uint256_0; - _dap_tsd_get_scalar(l_tsd, &l_stake_value); - const char *l_stake_value_str = dap_uint256_to_char(l_stake_value, NULL); - dap_string_append_printf(a_str_out, "\tStake value: %s\n", l_stake_value_str); - break; - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_SIGNING_ADDR: - if (l_tsd->size != sizeof(dap_chain_addr_t)) { - dap_string_append_printf(a_str_out, "\tSigning addr: <WRONG SIZE>\n"); - break; - } - dap_chain_addr_t *l_stake_addr_signing = /*{ }; - _dap_tsd_get_scalar(l_tsd, &l_stake_addr_signing);*/ _dap_tsd_get_object(l_tsd, dap_chain_addr_t); - dap_string_append_printf(a_str_out, "\tSigning addr: %s\n", dap_chain_addr_to_str_static(l_stake_addr_signing)); - dap_chain_hash_fast_t l_pkey_signing = l_stake_addr_signing->data.hash_fast; - const char *l_pkey_signing_str = dap_strcmp(a_hash_out_type, "hex") - ? dap_enc_base58_encode_hash_to_str_static(&l_pkey_signing) - : dap_chain_hash_fast_to_str_static(&l_pkey_signing); - dap_string_append_printf(a_str_out, "\tSigning pkey fingerprint: %s\n", l_pkey_signing_str); - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_NODE_ADDR: - if (l_tsd->size != sizeof(dap_chain_node_addr_t)){ - dap_string_append_printf(a_str_out, "\tNode addr: <WRONG SIZE>\n"); - break; - } - dap_chain_node_addr_t *l_node_addr = _dap_tsd_get_object(l_tsd, dap_chain_node_addr_t); - dap_string_append_printf(a_str_out, "\tNode addr: "NODE_ADDR_FP_STR"\n", NODE_ADDR_FP_ARGS(l_node_addr)); - break; - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_MIN_VALUE: - if (l_tsd->size != sizeof(uint256_t)) { - dap_string_append_printf(a_str_out, "\tMin value: <WRONG SIZE>\n"); - break; - } - uint256_t l_min_value = uint256_0; - _dap_tsd_get_scalar(l_tsd, &l_min_value); - const char *l_min_value_str = dap_uint256_to_char(l_min_value, NULL); - dap_string_append_printf(a_str_out, "\tMin value: %s\n", l_min_value_str); - break; - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_MIN_SIGNERS_COUNT: - if (l_tsd->size != sizeof(uint256_t)) { - dap_string_append_printf(a_str_out, "\tMin signers count: <WRONG SIZE>\n"); - break; - } - uint256_t l_min_signers_count = uint256_0; - _dap_tsd_get_scalar(l_tsd, &l_min_signers_count); - const char *l_min_signers_count_str = dap_uint256_to_char(l_min_signers_count, NULL); - dap_string_append_printf(a_str_out, "\tMin signers count: %s\n", l_min_signers_count_str); - break; - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_HOST: - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STRING: - dap_string_append_printf(a_str_out, "\tHost address: %s\n", dap_tsd_get_string(l_tsd)); - break; - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_ACTION: - if (l_tsd->size != sizeof(uint8_t)){ - dap_string_append_printf(a_str_out, "\tAction: <WRONG SIZE>\n"); - break; - } - uint8_t l_action = 0; - _dap_tsd_get_scalar(l_tsd, &l_action); - dap_string_append_printf(a_str_out, "\tAction: %s\n", l_action ? "add (enable)" : "delete (disable)"); - break; - case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_SIGNATURE_TYPE: - if (l_tsd->size != sizeof(uint32_t)){ - dap_string_append_printf(a_str_out, "\tSignature type: <WRONG SIZE>\n"); - break; - } - uint32_t l_type = 0; - _dap_tsd_get_scalar(l_tsd, &l_type); - dap_sign_type_t l_sign_type = { .type = l_type }; - dap_string_append_printf(a_str_out, "\tSignature type: %s\n", dap_sign_type_to_str(l_sign_type)); - break; - default: - dap_string_append_printf(a_str_out, "\t<UNKNOWN_TYPE_TSD_SECTION>\n"); - break; - } - } - dap_chain_datum_decree_certs_dump(a_str_out, a_decree->data_n_signs + a_decree->header.data_size, - a_decree->header.signs_size, a_hash_out_type); -} - -void dap_chain_datum_decree_certs_dump(dap_string_t * a_str_out, byte_t * a_signs, size_t a_certs_size, const char *a_hash_out_type) -{ - dap_string_append_printf(a_str_out, "signatures: "); - if (!a_certs_size) { - dap_string_append_printf(a_str_out, "<NONE>\n"); - return; - } - - dap_string_append_printf(a_str_out, "\n"); - - size_t l_offset = 0; - for (int i = 1; l_offset < (a_certs_size); i++) { - dap_sign_t *l_sign = (dap_sign_t *) (a_signs + l_offset); - l_offset += dap_sign_get_size(l_sign); - if (l_sign->header.sign_size == 0) { - dap_string_append_printf(a_str_out, "<CORRUPTED - 0 size signature>\n"); - continue; - } - - dap_chain_hash_fast_t l_pkey_hash = {0}; - if (dap_sign_get_pkey_hash(l_sign, &l_pkey_hash) == false) { - dap_string_append_printf(a_str_out, "<CORRUPTED - can't calc hash>\n"); - continue; - } - - const char *l_hash_str = dap_strcmp(a_hash_out_type, "hex") - ? dap_enc_base58_encode_hash_to_str_static(&l_pkey_hash) - : dap_chain_hash_fast_to_str_static(&l_pkey_hash); - dap_string_append_printf(a_str_out, "%d) %s, %s, %u bytes\n", i, l_hash_str, - dap_sign_type_to_str(l_sign->header.type), l_sign->header.sign_size); - } -} - void dap_chain_datum_decree_dump_json(json_object *a_json_out, dap_chain_datum_decree_t *a_decree, size_t a_decree_size, const char *a_hash_out_type) { char *l_type_str = ""; diff --git a/modules/common/include/dap_chain_datum_anchor.h b/modules/common/include/dap_chain_datum_anchor.h index 16c1ab9159..79a0c48102 100644 --- a/modules/common/include/dap_chain_datum_anchor.h +++ b/modules/common/include/dap_chain_datum_anchor.h @@ -48,7 +48,7 @@ DAP_STATIC_INLINE size_t dap_chain_datum_anchor_get_size(dap_chain_datum_anchor_ return sizeof(*a_datum_anchor) + a_datum_anchor->header.data_size + a_datum_anchor->header.signs_size; } -int dap_chain_datum_anchor_get_hash_from_data(dap_chain_datum_anchor_t* a_anchor, dap_hash_fast_t * l_out_hash); +int dap_chain_datum_anchor_get_hash_from_data(dap_chain_datum_anchor_t* a_anchor, dap_hash_fast_t * a_out_hash); void dap_chain_datum_anchor_certs_dump(dap_string_t * a_str_out, byte_t * a_signs, size_t a_certs_size, const char *a_hash_out_type); diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c index e55e10c626..d10b144a15 100644 --- a/modules/net/dap_chain_ledger.c +++ b/modules/net/dap_chain_ledger.c @@ -608,10 +608,6 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain l_new_tx_send_allow, l_new_tx_send_block, \ l_new_pkeys, l_new_pkey_hashes); \ ret_code; }) -#if 0 - dap_tsd_t *l_tsd; size_t l_tsd_size; - dap_tsd_iter(l_tsd, l_tsd_size, a_tsd, a_tsd_total_size) { -#else uint64_t l_tsd_size = 0; dap_tsd_t *l_tsd = (dap_tsd_t *)a_tsd; for (uint64_t l_offset = 0; l_offset < a_tsd_total_size; l_offset += l_tsd_size) { @@ -625,7 +621,6 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain log_it(L_WARNING, "Wrong TSD size %zu, exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } -#endif switch (l_tsd->type) { // set flags case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_SET_FLAGS: { -- GitLab