From e6e10187dd0baf5e7e93dfb40af0a39c89ad127e Mon Sep 17 00:00:00 2001 From: Roman Khlopkov <roman.khlopkov@demlabs.net> Date: Fri, 17 Dec 2021 20:27:36 +0300 Subject: [PATCH] [*] Intermediate refactoring results --- dap-sdk/core/include/dap_common.h | 2 +- modules/chain/dap_chain_ledger.c | 16 +- modules/chain/include/dap_chain_ledger.h | 2 +- modules/common/include/dap_chain_common.h | 7 + .../include/dap_chain_datum_tx_out_cond.h | 8 +- modules/mempool/dap_chain_mempool.c | 18 +- modules/mempool/include/dap_chain_mempool.h | 2 +- modules/net/dap_chain_node_cli_cmd.c | 95 +++------ modules/net/dap_chain_node_cli_cmd_tx.c | 187 +++++++----------- 9 files changed, 135 insertions(+), 202 deletions(-) diff --git a/dap-sdk/core/include/dap_common.h b/dap-sdk/core/include/dap_common.h index 641096894d..0236aaeb3a 100755 --- a/dap-sdk/core/include/dap_common.h +++ b/dap-sdk/core/include/dap_common.h @@ -143,7 +143,7 @@ typedef uint8_t byte_t; #define DAP_DUP_SIZE(a, s) memcpy(malloc(s), a, s) #endif -#define DAP_DEL_Z(a) if(a) { DAP_DELETE(a); a=NULL;} +#define DAP_DEL_Z(a) if (a) { DAP_DELETE(a); (a) = NULL; } DAP_STATIC_INLINE void *_dap_aligned_alloc( uintptr_t alignment, uintptr_t size ) { diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c index 0069bb0ba9..8212d22647 100644 --- a/modules/chain/dap_chain_ledger.c +++ b/modules/chain/dap_chain_ledger.c @@ -935,7 +935,7 @@ dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger) "\tAuth signs (valid/total) %zu/%zu\n" "\tTotal emissions %u\n", &l_token_item->ticker, l_type_str, l_token_item->flags, - dap_chain_u256tostr(l_token_item->current_supply), dap_chain_u256tostr(l_token_item->total_supply), + dap_chain_balance_print(l_token_item->current_supply), dap_chain_balance_print(l_token_item->total_supply), l_token_item->auth_signs_valid, l_token_item->auth_signs_total, HASH_COUNT(l_token_item->token_emissions)); l_ret_list = dap_list_append(l_ret_list, l_item_str); @@ -1205,7 +1205,7 @@ int dap_chain_ledger_token_emission_add_check(dap_ledger_t *a_ledger, byte_t *a_ if(s_debug_more) { if ( l_token_emission_item->datum_token_emission->hdr.version == 1 ) //&& l_token_emission_item->datum_token_emission->hdr.type_256 ) log_it(L_ERROR, "Can't add token emission datum of %s %s ( %s ): already present in cache", - dap_chain_u256tostr(l_token_emission_item->datum_token_emission->hdr.value_256), c_token_ticker, l_hash_str); + dap_chain_balance_print(l_token_emission_item->datum_token_emission->hdr.value_256), c_token_ticker, l_hash_str); else log_it(L_ERROR, "Can't add token emission datum of %"DAP_UINT64_FORMAT_U" %s ( %s ): already present in cache", l_token_emission_item->datum_token_emission->hdr.value, c_token_ticker, l_hash_str); @@ -1258,7 +1258,7 @@ int dap_chain_ledger_token_emission_add_check(dap_ledger_t *a_ledger, byte_t *a_ if(s_debug_more) if ( l_emission->hdr.version == 1 ) // && l_emission->hdr.type_256 ) // 256 log_it(L_WARNING, "Emission of %s datoshi of %s:%s is wrong: only %u valid aproves when %u need", - dap_chain_u256tostr(l_emission->hdr.value_256), a_ledger->net_name, l_emission->hdr.ticker, l_aproves, l_aproves_valid ); + dap_chain_balance_print(l_emission->hdr.value_256), a_ledger->net_name, l_emission->hdr.ticker, l_aproves, l_aproves_valid ); else log_it(L_WARNING, "Emission of %"DAP_UINT64_FORMAT_U" datoshi of %s:%s is wrong: only %u valid aproves when %u need", l_emission->hdr.value, a_ledger->net_name, l_emission->hdr.ticker, l_aproves, l_aproves_valid ); @@ -1363,7 +1363,7 @@ int dap_chain_ledger_token_emission_add(dap_ledger_t *a_ledger, byte_t *a_token_ if(s_debug_more) { if ( ((dap_chain_datum_token_emission_t *)a_token_emission)->hdr.version == 1 ) // && ((dap_chain_datum_token_emission_t *)a_token_emission)->hdr.type_256 ) // 256 log_it(L_ERROR, "Duplicate token emission datum of %s %s ( %s )", - dap_chain_u256tostr(((dap_chain_datum_token_emission_t *)a_token_emission)->hdr.value_256), c_token_ticker, l_hash_str); + dap_chain_balance_print(((dap_chain_datum_token_emission_t *)a_token_emission)->hdr.value_256), c_token_ticker, l_hash_str); else log_it(L_ERROR, "Duplicate token emission datum of %"DAP_UINT64_FORMAT_U" %s ( %s )", ((dap_chain_datum_token_emission_t *)a_token_emission)->hdr.value, c_token_ticker, l_hash_str); @@ -2898,7 +2898,7 @@ uint256_t dap_chain_ledger_calc_balance(dap_ledger_t *a_ledger, const dap_chain_ if (l_balance_item) { if(s_debug_more) log_it (L_INFO,"Found address in cache with balance %s", - dap_chain_u256tostr(l_balance_item->balance)); + dap_chain_balance_print(l_balance_item->balance)); l_ret = l_balance_item->balance; } else { if (s_debug_more) @@ -3262,12 +3262,12 @@ uint64_t dap_chain_ledger_tx_cache_get_out_cond_value(dap_ledger_t *a_ledger, da * @return */ dap_list_t *dap_chain_ledger_get_list_tx_outs_with_val(dap_ledger_t *a_ledger, const char *a_token_ticker, const dap_chain_addr_t *a_addr_from, - uint64_t a_value_need, uint64_t *a_value_transfer) + uint256_t a_value_need, uint256_t *a_value_transfer) { dap_list_t *l_list_used_out = NULL; // list of transaction with 'out' items dap_chain_hash_fast_t l_tx_cur_hash = { 0 }; - uint64_t l_value_transfer = 0; - while(l_value_transfer < a_value_need) + uint256_t l_value_transfer = {}; + while(compare256(l_value_transfer, a_value_need) == -1) { // Get the transaction in the cache by the addr in out item dap_chain_datum_tx_t *l_tx = dap_chain_ledger_tx_find_by_addr(a_ledger, a_token_ticker, a_addr_from, diff --git a/modules/chain/include/dap_chain_ledger.h b/modules/chain/include/dap_chain_ledger.h index 543a4d7f5d..2133380eb7 100644 --- a/modules/chain/include/dap_chain_ledger.h +++ b/modules/chain/include/dap_chain_ledger.h @@ -217,7 +217,7 @@ uint64_t dap_chain_ledger_tx_cache_get_out_cond_value(dap_ledger_t *a_ledger, da // Get the list of 'out' items from previous transactions with summary value >= than a_value_need // Put this summary value to a_value_transfer dap_list_t *dap_chain_ledger_get_list_tx_outs_with_val(dap_ledger_t *a_ledger, const char *a_token_ticker, const dap_chain_addr_t *a_addr_from, - uint64_t a_value_need, uint64_t *a_value_transfer); + uint256_t a_value_need, uint256_t *a_value_transfer); int dap_chain_ledger_verificator_rwlock_init(void); // Add new verificator callback with associated subtype. Returns 1 if callback replaced, overwise returns 0 int dap_chain_ledger_verificator_add(dap_chain_tx_out_cond_subtype_t a_subtype, dap_chain_ledger_verificator_callback_t a_callback); diff --git a/modules/common/include/dap_chain_common.h b/modules/common/include/dap_chain_common.h index 15697bb114..58e0e3250f 100644 --- a/modules/common/include/dap_chain_common.h +++ b/modules/common/include/dap_chain_common.h @@ -271,6 +271,13 @@ DAP_STATIC_INLINE uint256_t dap_chain_uint256_from(uint64_t a_from) return l_ret_256; } +DAP_STATIC_INLINE uint256_t dap_chain_uint256_from_uint128(uint128_t a_from) +{ + uint256_t l_ret_256 = uint256_0; + ADD_128_INTO_256(a_from, &l_ret_256); + return l_ret_256; +} + uint64_t dap_chain_uint128_to(uint128_t a_from); // 256 uint64_t dap_chain_uint256_to(uint256_t a_from); diff --git a/modules/common/include/dap_chain_datum_tx_out_cond.h b/modules/common/include/dap_chain_datum_tx_out_cond.h index f8202e9440..de61d36934 100644 --- a/modules/common/include/dap_chain_datum_tx_out_cond.h +++ b/modules/common/include/dap_chain_datum_tx_out_cond.h @@ -33,7 +33,7 @@ enum dap_chain_tx_out_cond_subtype { DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY = 0x01, DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE = 0x02, DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE = 0x13, - DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_UPDATE = 0xFA // Virtual type for stake update verificator TODO change it to new type of callback for ledger tx add + DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_UPDATE = 0xFA // Virtual type for stake update verificator //TODO change it to new type of callback for ledger tx add }; typedef byte_t dap_chain_tx_out_cond_subtype_t; @@ -51,7 +51,7 @@ DAP_STATIC_INLINE const char *dap_chain_tx_out_cond_subtype_to_str(dap_chain_tx_ * @struct dap_chain_tx_out * @brief Transaction item out_cond */ -typedef struct dap_chain_tx_out_cond { +typedef struct dap_chain_tx_out_cond { // Absolete struct { /// Transaction item type dap_chain_tx_item_type_t item_type; @@ -107,9 +107,9 @@ typedef struct dap_chain_tx_out_cond { typedef struct dap_chain_256_tx_out_cond { struct { /// Transaction item type - dap_chain_tx_item_type_t item_type :8; + dap_chain_tx_item_type_t item_type; /// Condition subtype - dap_chain_tx_out_cond_subtype_t subtype : 8; + dap_chain_tx_out_cond_subtype_t subtype; /// Number of Datoshis ( DAP/10^9 ) to be reserver for service uint256_t value; /// When time expires this output could be used only by transaction owner diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c index e72a1242c0..5137d4f72a 100644 --- a/modules/mempool/dap_chain_mempool.c +++ b/modules/mempool/dap_chain_mempool.c @@ -107,7 +107,7 @@ dap_hash_fast_t* dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_ const dap_chain_addr_t* a_addr_from, const dap_chain_addr_t* a_addr_to, const dap_chain_addr_t* a_addr_fee, const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX], - uint64_t a_value, uint64_t a_value_fee) + uint256_t a_value, uint256_t a_value_fee) { // check valid param if(!a_chain | !a_key_from || ! a_addr_from || !a_key_from->priv_key_data || !a_key_from->priv_key_data_size || @@ -116,8 +116,9 @@ dap_hash_fast_t* dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_ return NULL; // find the transactions from which to take away coins - uint64_t l_value_transfer = 0; // how many coins to transfer - uint64_t l_value_need = a_value + a_value_fee; + uint256_t l_value_transfer = 0; // how many coins to transfer + uint256_t l_value_need; + SUM_256_256(a_value, a_value_fee, &l_value_need); dap_list_t *l_list_used_out = dap_chain_ledger_get_list_tx_outs_with_val(a_chain->ledger, a_token_ticker, a_addr_from, l_value_need, &l_value_transfer); if (!l_list_used_out) { @@ -134,18 +135,19 @@ dap_hash_fast_t* dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_ } // add 'out' items { - uint64_t l_value_pack = 0; // how much datoshi add to 'out' items + uint256_t l_value_pack = {}; // how much datoshi add to 'out' items if(dap_chain_datum_tx_add_out_item(&l_tx, a_addr_to, a_value) == 1) { - l_value_pack += a_value; + SUM_256_256(l_value_pack, a_value, &l_value_pack); // transaction fee if(a_addr_fee) { if(dap_chain_datum_tx_add_out_item(&l_tx, a_addr_fee, a_value_fee) == 1) - l_value_pack += a_value_fee; + SUM_256_256(l_value_pack, a_value_fee, &l_value_pack); } } // coin back - uint64_t l_value_back = l_value_transfer - l_value_pack; - if(l_value_back) { + uint256_t l_value_back; + SUBTRACT_256_256(l_value_transfer, l_value_pack, &l_value_back); + if(!IS_ZERO_256(l_value_back)) { if(dap_chain_datum_tx_add_out_item(&l_tx, a_addr_from, l_value_back) != 1) { dap_chain_datum_tx_delete(l_tx); return NULL; diff --git a/modules/mempool/include/dap_chain_mempool.h b/modules/mempool/include/dap_chain_mempool.h index 0e8b0be25b..b4b81ae28b 100644 --- a/modules/mempool/include/dap_chain_mempool.h +++ b/modules/mempool/include/dap_chain_mempool.h @@ -48,7 +48,7 @@ dap_hash_fast_t* dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key const dap_chain_addr_t* a_addr_from, const dap_chain_addr_t* a_addr_to, const dap_chain_addr_t* a_addr_fee, const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX], - uint64_t a_value, uint64_t a_value_fee); + uint256_t a_value, uint256_t a_value_fee); // Make transfer transaction & insert to cache dap_chain_hash_fast_t* dap_chain_proc_tx_create_cond(dap_chain_net_t * a_net, diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 3fbc547a98..5902c2be53 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -3113,7 +3113,7 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) } int l_ret = 0; bool l_placed = dap_chain_global_db_gr_set(dap_strdup(l_key_str), (uint8_t *) l_datum, l_datum_size, l_gdb_group_mempool); - dap_chain_node_cli_set_reply_text(a_str_reply, "datum 256_t %s with token %s is%s placed in datum pool", + dap_chain_node_cli_set_reply_text(a_str_reply, "Datum %s with 256bit token %s is%s placed in datum pool", dap_strcmp(l_hash_out_type, "hex") ? l_key_str_base58 : l_key_str, l_ticker, l_placed ? "" : " not"); if (!l_placed) { @@ -3143,7 +3143,6 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply) const char * l_addr_str = NULL; const char * l_emission_hash_str = NULL; - char * l_emission_hash_str_new = NULL; dap_chain_hash_fast_t l_emission_hash={0}; dap_chain_datum_token_emission_t * l_emission = NULL; char * l_emission_hash_str_base58 = NULL; @@ -3279,7 +3278,7 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply) } // Create emission datum // then create datum in memory - if(!l_emission){ + if (!l_emission) { char * l_gdb_group_mempool_emission; if(l_chain_emission) { l_gdb_group_mempool_emission = dap_chain_net_get_gdb_group_mempool(l_chain_emission); @@ -3313,50 +3312,35 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply) } // Produce datum - dap_chain_datum_t * l_datum_emission = dap_chain_datum_create(DAP_CHAIN_DATUM_TOKEN_EMISSION, + dap_chain_datum_t *l_datum_emission = dap_chain_datum_create(DAP_CHAIN_DATUM_TOKEN_EMISSION, l_emission, l_emission_size); size_t l_datum_emission_size = sizeof(l_datum_emission->header) + l_datum_emission->header.data_size; - // Calc emission's hash - dap_hash_fast(l_emission, l_emission_size, &l_emission_hash); - l_emission_hash_str = l_emission_hash_str_new = dap_chain_hash_fast_to_str_new(&l_emission_hash); + // Calc datum emission's hash + dap_hash_fast(l_datum_emission, l_datum_emission_size, &l_emission_hash); + l_emission_hash_str = dap_chain_hash_fast_to_str_new(&l_emission_hash); l_emission_hash_str_base58 = dap_enc_base58_encode_hash_to_str(&l_emission_hash); // Delete token emission DAP_DEL_Z(l_emission); - // Add to mempool emission token - bool l_placed = dap_chain_global_db_gr_set(dap_strdup(l_emission_hash_str_new), + // Add token emission datum to mempool + bool l_placed = dap_chain_global_db_gr_set(dap_strdup(l_emission_hash_str), (uint8_t *)l_datum_emission, l_datum_emission_size, l_gdb_group_mempool_emission); - str_reply_tmp = dap_strdup_printf("Datum 256_t emission %s is%s placed in datum pool", - (l_datum_emission->header.type_id == DAP_CHAIN_DATUM_256_TOKEN_EMISSION ? " 256_t" : ""), - l_emission_hash_str_new); - else - str_reply_tmp = dap_strdup_printf("Datum%s emission %s is placed in datum pool", - (l_datum_emission->header.type_id == DAP_CHAIN_DATUM_256_TOKEN_EMISSION ? " 256_t" : ""), - l_emission_hash_str_base58); - } - else { - if(!dap_strcmp(l_hash_out_type,"hex")) - dap_chain_node_cli_set_reply_text(a_str_reply, "Datum%s emission %s is not placed in datum pool", - (l_datum_emission->header.type_id == DAP_CHAIN_DATUM_256_TOKEN_EMISSION ? " 256_t" : ""), - l_emission_hash_str_new); - else - dap_chain_node_cli_set_reply_text(a_str_reply, "Datum%s emission %s is not placed in datum pool", - (l_datum_emission->header.type_id == DAP_CHAIN_DATUM_256_TOKEN_EMISSION ? " 256_t" : ""), - l_emission_hash_str_base58); - DAP_DEL_Z(l_emission_hash_str_new); - l_emission_hash_str = NULL; - DAP_DEL_Z(l_emission_hash_str_base58); + str_reply_tmp = dap_strdup_printf("Datum %s with 256bit emission is%s placed in datum pool", + dap_strcmp(l_hash_out_type, "hex") ? l_emission_hash_str_base58 : l_emission_hash_str, + l_placed ? "" : " not"); + DAP_DELETE((char *)l_emission_hash_str); + DAP_DEL_Z(l_emission_hash_str_base58); + if (!l_placed) { DAP_DEL_Z(l_datum_emission); return -1; } l_datum_emission = NULL; - l_emission = NULL; - } + } // TODO possible update emission if it found, or remove -emission parameter // create first transaction (with tx_token) dap_chain_datum_tx_t *l_tx = DAP_NEW_Z_SIZE(dap_chain_datum_tx_t, sizeof(dap_chain_datum_tx_t)); @@ -3391,18 +3375,12 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply) DAP_DEL_Z(l_in); DAP_DEL_Z(l_out); - DAP_DEL_Z(l_emission_hash_str_new); - l_emission_hash_str = NULL; - DAP_DEL_Z(l_emission_hash_str_base58); - size_t l_tx_size = dap_chain_datum_tx_get_size(l_tx); // Pack transaction into the datum dap_chain_datum_t * l_datum_tx = dap_chain_datum_create(DAP_CHAIN_DATUM_TX, l_tx, l_tx_size); size_t l_datum_tx_size = dap_chain_datum_size(l_datum_tx); - // use l_tx hash for compatible with utho hash - //dap_hash_fast(l_tx, l_tx_size, &l_key_hash); //dap_hash_fast(l_datum_tx, l_datum_tx_size, &l_key_hash); // calc datum hash dap_chain_hash_fast_t l_datum_tx_hash; dap_hash_fast(l_datum_tx, l_datum_tx_size, &l_datum_tx_hash); @@ -3411,38 +3389,21 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply) DAP_DEL_Z(l_tx); // Add to mempool tx token - if(dap_chain_global_db_gr_set(dap_strdup(l_tx_hash_str), l_datum_tx, l_datum_tx_size - , l_gdb_group_mempool_base_tx)) { - if(!dap_strcmp(l_hash_out_type,"hex")) - dap_chain_node_cli_set_reply_text(a_str_reply, "%s\ndatum%s tx %s is placed in datum pool ", - str_reply_tmp, - (l_datum_tx->header.type_id == DAP_CHAIN_DATUM_256_TX ? " 256_t" : ""), - l_tx_hash_str); - else - dap_chain_node_cli_set_reply_text(a_str_reply, "%s\ndatum%s tx %s is placed in datum pool ", - str_reply_tmp, - (l_datum_tx->header.type_id == DAP_CHAIN_DATUM_256_TX ? " 256_t" : ""), - l_tx_hash_str_base58); - DAP_DEL_Z(l_tx_hash_str); - DAP_DEL_Z(l_tx_hash_str_base58); - } else { - if(!dap_strcmp(l_hash_out_type,"hex")) - dap_chain_node_cli_set_reply_text(a_str_reply, "%s\ndatum%s tx %s is not placed in datum pool ", - str_reply_tmp, - (l_datum_tx->header.type_id == DAP_CHAIN_DATUM_256_TX ? " 256_t" : ""), - l_emission_hash_str); - else - dap_chain_node_cli_set_reply_text(a_str_reply, "%s\ndatum%s tx %s is not placed in datum pool ", - str_reply_tmp, - (l_datum_tx->header.type_id == DAP_CHAIN_DATUM_256_TX ? " 256_t" : ""), - l_tx_hash_str_base58); - DAP_DEL_Z(l_tx_hash_str); - DAP_DEL_Z(l_tx_hash_str_base58); - - return -2; - } + bool l_placed = dap_chain_global_db_gr_set(dap_strdup(l_tx_hash_str), l_datum_tx, + l_datum_tx_size, l_gdb_group_mempool_base_tx); + dap_chain_node_cli_set_reply_text(a_str_reply, "%s\nDatum %s with 256bit TX is%s placed in datum pool ", + str_reply_tmp, + dap_strcmp(l_hash_out_type, "hex") ? l_tx_hash_str_base58 : l_tx_hash_str, + l_placed ? "" : " not"); + DAP_DEL_Z(l_tx_hash_str); + DAP_DEL_Z(l_tx_hash_str_base58); DAP_DELETE(str_reply_tmp); DAP_DELETE(l_addr); + if (!l_placed) { + DAP_DELETE(l_datum_tx); + return -2; + } + return 0; } diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c index fdc7d4e0bd..8d465e0384 100644 --- a/modules/net/dap_chain_node_cli_cmd_tx.c +++ b/modules/net/dap_chain_node_cli_cmd_tx.c @@ -149,9 +149,8 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum, dap_string_append_printf(a_str_out, "\t OUT:\n" "\t\t Value: %s (%"DAP_UINT64_FORMAT_U")\n" "\t\t Address: %s\n", - dap_chain_balance_to_coins(dap_chain_uint128_from( - ((dap_chain_tx_out_t*)item)->header.value) - ), + dap_chain_balance_to_coins(dap_chain_uint256_from( + ((dap_chain_tx_out_t*)item)->header.value)), ((dap_chain_tx_out_t*)item)->header.value, dap_chain_addr_to_str(&((dap_chain_tx_out_t*)item)->addr)); break; @@ -159,10 +158,8 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum, dap_string_append_printf(a_str_out, "\t OUT 256_t:\n" "\t\t Value: %s (%s)\n" "\t\t Address: %s\n", - dap_chain_balance_to_coins(dap_chain_uint128_from_uint256( - ((dap_chain_256_tx_out_t*)item)->header.value) - ), - dap_chain_u256tostr(((dap_chain_256_tx_out_t*)item)->header.value), + dap_chain_balance_to_coins(((dap_chain_256_tx_out_t*)item)->header.value), + dap_chain_balance_print(((dap_chain_256_tx_out_t*)item)->header.value), dap_chain_addr_to_str(&((dap_chain_256_tx_out_t*)item)->addr)); break; } @@ -172,7 +169,7 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum, "\t\t ticker: %s \n" "\t\t token_emission_hash: %s\n" "\t\t token_emission_chain_id: 0x%016"DAP_UINT64_FORMAT_x"\n", ((dap_chain_tx_token_t*)item)->header.ticker, l_hash_str_tmp, - ((dap_chain_tx_token_t*)item)->header.token_emission_chain_id.uint64); + ((dap_chain_tx_token_t*)item)->header.token_emission_chain_id.uint64); DAP_DELETE(l_hash_str_tmp); break; case TX_ITEM_TYPE_TOKEN_EXT: @@ -214,11 +211,8 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum, serv_unit_enum_to_str( &((dap_chain_datum_tx_receipt_t*)item)->receipt_info.units_type.enm ), - dap_chain_balance_to_coins( - dap_chain_uint128_from( - ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.value_datoshi - ) - ), + dap_chain_balance_to_coins(dap_chain_uint256_from( + ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.value_datoshi)), ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.value_datoshi); if (((dap_chain_datum_tx_receipt_t*)item)->exts_size == sizeof(dap_sign_t) + sizeof(dap_sign_t)){ dap_sign_t *l_provider = DAP_NEW_Z(dap_sign_t); @@ -278,9 +272,8 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum, "\t\t\t subtype: %s\n" "\t\t SubType:\n", dap_ctime_r((time_t *)&((dap_chain_tx_out_cond_t*)item)->header.ts_expires, l_tmp_buf), - dap_chain_balance_to_coins( - dap_chain_uint128_from(((dap_chain_tx_out_cond_t*)item)->header.value) - ), + dap_chain_balance_to_coins(dap_chain_uint256_from( + ((dap_chain_tx_out_cond_t*)item)->header.value)), ((dap_chain_tx_out_cond_t*)item)->header.value, dap_chain_tx_out_cond_subtype_to_str(((dap_chain_tx_out_cond_t*)item)->header.subtype)); switch (((dap_chain_tx_out_cond_t*)item)->header.subtype) { @@ -293,9 +286,8 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum, ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit.uint32, ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.srv_uid.uint64, l_hash_str_tmp, - dap_chain_balance_to_coins(dap_chain_uint128_from( - ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi) - ), + dap_chain_balance_to_coins(dap_chain_uint256_from( + ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi)), ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi); DAP_FREE(l_hash_str_tmp); break; @@ -317,11 +309,8 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum, ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.srv_uid.uint64, ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.net_id.uint64, ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.token, - dap_chain_balance_to_coins( - dap_chain_uint128_from( - ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.value - ) - ), + dap_chain_balance_to_coins(dap_chain_uint256_from( + ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.value)), ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.value); break; default: break; @@ -335,10 +324,8 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum, "\t\t\t subtype: %s\n" "\t\t SubType:\n", dap_ctime_r((time_t*)((dap_chain_256_tx_out_cond_t*)item)->header.ts_expires, l_tmp_buf), - dap_chain_balance_to_coins( - dap_chain_uint128_from_uint256(((dap_chain_256_tx_out_cond_t*)item)->header.value) - ), - dap_chain_u256tostr(((dap_chain_256_tx_out_cond_t*)item)->header.value), + dap_chain_balance_to_coins(((dap_chain_256_tx_out_cond_t*)item)->header.value), + dap_chain_balance_print(((dap_chain_256_tx_out_cond_t*)item)->header.value), dap_chain_tx_out_cond_subtype_to_str(((dap_chain_256_tx_out_cond_t*)item)->header.subtype) ); switch (((dap_chain_256_tx_out_cond_t*)item)->header.subtype) { @@ -351,10 +338,8 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum, ((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_pay.unit.uint32, ((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_pay.srv_uid.uint64, l_hash_str_tmp, - dap_chain_balance_to_coins(dap_chain_uint128_from_uint256( - ((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi) - ), - dap_chain_u256tostr(((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi) + dap_chain_balance_to_coins(((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi), + dap_chain_balance_print(((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi) ); DAP_FREE(l_hash_str_tmp); break; @@ -377,12 +362,8 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum, ((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_xchange.srv_uid.uint64, ((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_xchange.net_id.uint64, ((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_xchange.token, - dap_chain_balance_to_coins( - dap_chain_uint128_from_uint256( - ((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_xchange.value - ) - ), - dap_chain_u256tostr(((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_xchange.value) + dap_chain_balance_to_coins(((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_xchange.value), + dap_chain_balance_print(((dap_chain_256_tx_out_cond_t*)item)->subtype.srv_xchange.value) ); break; } @@ -394,9 +375,8 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum, "\t\t Value: %s (%"DAP_UINT64_FORMAT_U")\n", dap_chain_addr_to_str(&((dap_chain_tx_out_ext_t*)item)->addr), ((dap_chain_tx_out_ext_t*)item)->token, - dap_chain_balance_to_coins(dap_chain_uint128_from( - ((dap_chain_tx_out_ext_t*)item)->header.value) - ), + dap_chain_balance_to_coins(dap_chain_uint256_from( + ((dap_chain_tx_out_ext_t*)item)->header.value)), ((dap_chain_tx_out_ext_t*)item)->header.value ); break; @@ -407,10 +387,8 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum, "\t\t Value: %s (%s)\n", dap_chain_addr_to_str(&((dap_chain_256_tx_out_ext_t*)item)->addr), ((dap_chain_256_tx_out_ext_t*)item)->token, - dap_chain_balance_to_coins(dap_chain_uint128_from_uint256( - ((dap_chain_256_tx_out_ext_t*)item)->header.value) - ), - dap_chain_u256tostr(((dap_chain_256_tx_out_ext_t*)item)->header.value) + dap_chain_balance_to_coins(((dap_chain_256_tx_out_ext_t*)item)->header.value), + dap_chain_balance_print(((dap_chain_256_tx_out_ext_t*)item)->header.value) ); break; default: @@ -459,16 +437,13 @@ char* dap_db_history_tx(dap_chain_hash_fast_t* a_tx_hash, dap_chain_t * a_chain, while(l_atom && l_atom_size) { dap_chain_datum_t *l_datum = (dap_chain_datum_t*) l_atom; - if(!l_datum && (l_datum->header.type_id != DAP_CHAIN_DATUM_TX && l_datum->header.type_id != DAP_CHAIN_DATUM_256_TX ) ) { + if (!l_datum || (l_datum->header.type_id != DAP_CHAIN_DATUM_TX)) { // go to next transaction l_atom = a_chain->callback_atom_iter_get_next(l_atom_iter, &l_atom_size); continue; } - bool l_type_256 = false; - if ( l_datum->header.type_id == DAP_CHAIN_DATUM_256_TX ) - l_type_256 = true; dap_tx_data_t *l_tx_data = NULL; @@ -480,12 +455,12 @@ char* dap_db_history_tx(dap_chain_hash_fast_t* a_tx_hash, dap_chain_t * a_chain, l_list_tx_token = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_TOKEN, NULL); // find OUT items - - dap_list_t *l_list_out_items; - if ( l_type_256 ) // 256 + bool l_type_256 = false; + dap_list_t *l_list_out_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_OUT, NULL); + if (!l_list_out_items) { l_list_out_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_256_OUT, NULL); - else - l_list_out_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_OUT, NULL); + l_type_256 = true; + } dap_list_t *l_list_tmp = l_list_out_items; @@ -593,8 +568,8 @@ char* dap_db_history_tx(dap_chain_hash_fast_t* a_tx_hash, dap_chain_t * a_chain, if(l_tx_out || l_tx_out_256) { if ( l_type_256 ) // 256 - dap_string_append_printf(l_str_out, " OUT 256_t item %s %s to %s\n", - dap_chain_u256tostr(l_tx_out_256->header.value), + dap_string_append_printf(l_str_out, " OUT 256bit item %s %s to %s\n", + dap_chain_balance_print(l_tx_out_256->header.value), dap_strlen(l_token_str) > 0 ? l_token_str : "?", l_dst_to_str ? l_dst_to_str : "?" ); @@ -653,8 +628,8 @@ char* dap_db_history_tx(dap_chain_hash_fast_t* a_tx_hash, dap_chain_t * a_chain, dap_chain_256_tx_out_t *l_tx_prev_out = l_list_out_prev_item ? (dap_chain_256_tx_out_t*)l_list_out_prev_item->data : NULL; // print value from prev out item - dap_string_append_printf(l_str_out, " prev OUT 256_t item value=%s", - l_tx_prev_out ? dap_chain_u256tostr(l_tx_prev_out->header.value) : "0"); + dap_string_append_printf(l_str_out, " prev OUT 256bitt item value=%s", + l_tx_prev_out ? dap_chain_balance_print(l_tx_prev_out->header.value) : "0"); } else { dap_list_t *l_list_out_prev_items = dap_chain_datum_tx_items_get(l_tx_prev, TX_ITEM_TYPE_OUT, NULL); @@ -723,7 +698,7 @@ char* dap_db_history_addr(dap_chain_addr_t * a_addr, dap_chain_t * a_chain, cons dap_tx_data_t *l_tx_data_hash = NULL; // load transactions - dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain); + dap_chain_atom_iter_t *l_atom_iter = a_chain->callback_atom_iter_create(a_chain, a_chain->cells->id); size_t l_atom_size=0; dap_chain_atom_ptr_t l_atom = a_chain->callback_atom_iter_get_first(l_atom_iter, &l_atom_size); if (!l_atom) { @@ -894,7 +869,8 @@ static char* dap_db_history_token_list(dap_chain_t * a_chain, const char *a_toke // get time of create datum if (dap_time_to_str_rfc822(l_time_str, 70, l_datum->header.ts_create) < 1) l_time_str[0] = '\0'; - dap_chain_datum_token_t *l_token = (dap_chain_datum_token_t*) l_datum->data; + size_t l_token_size = l_datum->header.data_size; + dap_chain_datum_token_t *l_token = dap_chain_datum_token_read(l_datum->data, &l_token_size); if (!a_token_name || !dap_strcmp(l_token->ticker, a_token_name)) { dap_chain_hash_fast_t l_datum_hash = {}; dap_hash_fast(l_datum, dap_chain_datum_size(l_datum), &l_datum_hash); @@ -905,13 +881,13 @@ static char* dap_db_history_token_list(dap_chain_t * a_chain, const char *a_toke l_out_hash_str = dap_enc_base58_encode_hash_to_str(&l_datum_hash); dap_string_append(l_str_out, l_out_hash_str); dap_string_append(l_str_out, "\n"); - dap_string_append_printf(l_str_out, "token %s, created: %s\n", l_token->ticker, l_time_str); + dap_string_append_printf(l_str_out, "Token %s, created: %s\n", l_token->ticker, l_time_str); switch (l_token->type) { // Simple private token decl case DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE: // 256 dap_string_append_printf(l_str_out, " total_supply: %s(%s), signs: valid/total %02d/%02d \n", - dap_chain_balance_to_coins(dap_chain_uint128_from_uint256(l_token->header_private.total_supply_256)), - dap_chain_u256tostr(l_token->header_private.total_supply_256), + dap_chain_balance_to_coins(l_token->header_private.total_supply_256), + dap_chain_balance_print(l_token->header_private.total_supply_256), l_token->header_private.signs_valid, l_token->header_private.signs_total); break; case DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_SIMPLE: @@ -928,38 +904,40 @@ static char* dap_db_history_token_list(dap_chain_t * a_chain, const char *a_toke break; case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE: // 256 case DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PRIVATE_UPDATE: - dap_string_append_printf(l_str_out, " tsd_total_size: %"DAP_UINT64_FORMAT_U", padding: 0x%x \n", - l_token->header_private_update.tsd_total_size, - l_token->header_private_update.padding); + dap_string_append_printf(l_str_out, " tsd_total_size: %"DAP_UINT64_FORMAT_U"\n", + l_token->header_private_update.tsd_total_size); break; case DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC: { // 256 char *l_addr = dap_chain_addr_to_str(&l_token->header_public.premine_address); - char * l_balance = dap_chain_balance_to_coins(dap_chain_uint128_from_uint256(l_token->header_public.total_supply_256)); + char * l_balance = dap_chain_balance_to_coins(l_token->header_public.total_supply_256); dap_string_append_printf(l_str_out, " total_supply: %s(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n", - dap_chain_balance_to_coins(dap_chain_uint128_from_uint256(l_token->header_public.total_supply_256)), - dap_chain_u256tostr(l_token->header_public.total_supply_256), + dap_chain_balance_to_coins(l_token->header_public.total_supply_256), + dap_chain_balance_print(l_token->header_public.total_supply_256), l_token->header_public.flags, - dap_chain_u256tostr(l_token->header_public.premine_supply_256), + dap_chain_balance_print(l_token->header_public.premine_supply_256), l_addr ? l_addr : "-"); DAP_DELETE(l_addr); DAP_DELETE(l_balance); }break; case DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PUBLIC: { char *l_addr = dap_chain_addr_to_str(&l_token->header_public.premine_address); - char * l_balance = dap_chain_balance_to_coins(l_token->header_public.total_supply); + char * l_balance = dap_chain_balance_to_coins(dap_chain_uint256_from_uint128( + l_token->header_public.total_supply)); dap_string_append_printf(l_str_out, - " total_supply: %.0Lf(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n", - dap_chain_datoshi_to_coins(l_token->header_public.total_supply), - dap_chain_balance_print(l_token->header_public.total_supply), + " total_supply: %s(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n", + l_balance, + dap_chain_balance_print(dap_chain_uint256_from_uint128( + l_token->header_public.total_supply)), l_token->header_public.flags, - dap_chain_balance_print(l_token->header_public.premine_supply), + dap_chain_balance_print(dap_chain_uint256_from_uint128( + l_token->header_public.premine_supply)), l_addr ? l_addr : "-"); DAP_DELETE(l_addr); DAP_DELETE(l_balance); }break; default: - dap_string_append_printf(l_str_out, "unknown token type: 0x%x\n", l_token->type); + dap_string_append_printf(l_str_out, "Unknown token type: 0x%x\n", l_token->type); break; } dap_string_append_printf(l_str_out, "\n"); @@ -1062,9 +1040,9 @@ static char* dap_db_history_filter(dap_chain_t * a_chain, dap_ledger_t *a_ledger switch (l_token->type) { // Simple private token decl case DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE: // 256 - dap_string_append_printf(l_str_out, " 256_t total_supply: %s(%s), signs: valid/total %02d/%02d \n", - dap_chain_balance_to_coins(dap_chain_uint128_from_uint256(l_token->header_private.total_supply_256)), - dap_chain_u256tostr(l_token->header_private.total_supply_256), + dap_string_append_printf(l_str_out, " 256bit total_supply: %s(%s), signs: valid/total %02d/%02d \n", + dap_chain_balance_to_coins(l_token->header_private.total_supply_256), + dap_chain_balance_print(l_token->header_private.total_supply_256), l_token->header_private.signs_valid, l_token->header_private.signs_total); break; case DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_SIMPLE: @@ -1074,7 +1052,7 @@ static char* dap_db_history_filter(dap_chain_t * a_chain, dap_ledger_t *a_ledger l_token->header_private.signs_valid, l_token->header_private.signs_total); break; case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL: // 256 - dap_string_append_printf(l_str_out, "256_t tsd_total_size: %"DAP_UINT64_FORMAT_U", flags: 0x%x \n", + dap_string_append_printf(l_str_out, "256bit tsd_total_size: %"DAP_UINT64_FORMAT_U", flags: 0x%x \n", l_token->header_private_decl.tsd_total_size, l_token->header_private_decl.flags); break; @@ -1084,37 +1062,36 @@ static char* dap_db_history_filter(dap_chain_t * a_chain, dap_ledger_t *a_ledger l_token->header_private_decl.flags); break; case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE: // 256 - dap_string_append_printf(l_str_out, "256_t tsd_total_size: %"DAP_UINT64_FORMAT_U", padding: 0x%x \n", - l_token->header_private_update.tsd_total_size, - l_token->header_private_update.padding); + dap_string_append_printf(l_str_out, "256bit tsd_total_size: %"DAP_UINT64_FORMAT_U"\n", + l_token->header_private_update.tsd_total_size); break; case DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PRIVATE_UPDATE: - dap_string_append_printf(l_str_out, " tsd_total_size: %"DAP_UINT64_FORMAT_U", padding: 0x%x \n", - l_token->header_private_update.tsd_total_size, - l_token->header_private_update.padding); + dap_string_append_printf(l_str_out, " tsd_total_size: %"DAP_UINT64_FORMAT_U"\n", + l_token->header_private_update.tsd_total_size); break; case DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC: { // 256 char *l_addr = dap_chain_addr_to_str(&l_token->header_public.premine_address); - char * l_balance = dap_chain_balance_to_coins(l_token->header_public.total_supply); dap_string_append_printf(l_str_out, " total_supply: %s(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n", - dap_chain_balance_to_coins(dap_chain_uint128_from_uint256(l_token->header_public.total_supply_256)), - dap_chain_u256tostr(l_token->header_public.total_supply_256), + dap_chain_balance_to_coins(l_token->header_public.total_supply_256), + dap_chain_balance_print(l_token->header_public.total_supply_256), l_token->header_public.flags, - dap_chain_u256tostr(l_token->header_public.premine_supply_256), + dap_chain_balance_print(l_token->header_public.premine_supply_256), l_addr ? l_addr : "-"); DAP_DELETE(l_addr); - DAP_DELETE(l_balance); } break; case DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PUBLIC: { char *l_addr = dap_chain_addr_to_str(&l_token->header_public.premine_address); - char * l_balance = dap_chain_balance_to_coins(l_token->header_public.total_supply); + char * l_balance = dap_chain_balance_to_coins(dap_chain_uint256_from_uint128( + l_token->header_public.total_supply)); dap_string_append_printf(l_str_out, " total_supply: %s(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n", - dap_chain_balance_to_coins(l_token->header_public.total_supply), - dap_chain_balance_print(l_token->header_public.total_supply), + l_balance, + dap_chain_balance_print(dap_chain_uint256_from_uint128( + l_token->header_public.total_supply)), l_token->header_public.flags, - dap_chain_balance_print(l_token->header_public.premine_supply), + dap_chain_balance_print(dap_chain_uint256_from_uint128( + l_token->header_public.premine_supply)), l_addr ? l_addr : "-"); DAP_DELETE(l_addr); DAP_DELETE(l_balance); @@ -1131,7 +1108,6 @@ static char* dap_db_history_filter(dap_chain_t * a_chain, dap_ledger_t *a_ledger break; // emission - case DAP_CHAIN_DATUM_256_TOKEN_EMISSION: // 256 case DAP_CHAIN_DATUM_TOKEN_EMISSION: { // datum out of page if(a_datum_start >= 0 && (l_datum_num+l_datum_num_global < (size_t)a_datum_start || l_datum_num+l_datum_num_global >= (size_t)a_datum_end)) { @@ -1148,8 +1124,8 @@ static char* dap_db_history_filter(dap_chain_t * a_chain, dap_ledger_t *a_ledger } if ( l_token_em->hdr.version == 1 ) { // && l_token_em->hdr.type_256 ) { // 256 dap_string_append_printf(l_str_out, "emission 256: %s(%s) %s, type: %s, version: %d\n", - dap_chain_balance_to_coins(dap_chain_uint128_from_uint256(l_token_em->hdr.value_256)), - dap_chain_u256tostr(l_token_em->hdr.value_256), + dap_chain_balance_to_coins(l_token_em->hdr.value_256), + dap_chain_balance_print(l_token_em->hdr.value_256), l_token_em->hdr.ticker, c_dap_chain_datum_token_emission_type_str[l_token_em->hdr.type], l_token_em->hdr.version); @@ -1211,20 +1187,7 @@ static char* dap_db_history_filter(dap_chain_t * a_chain, dap_ledger_t *a_ledger dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*)l_datum->data; //calc tx hash s_dap_chain_datum_tx_out_data(l_tx, a_ledger, l_str_out, a_hash_out_type, true, &a_tx_hash_processed, &l_tx_num); - } - break; - - // transaction - case DAP_CHAIN_DATUM_256_TX:{ // 256 - // datum out of page - if(a_datum_start >= 0 && (l_datum_num+l_datum_num_global < (size_t)a_datum_start || l_datum_num+l_datum_num_global >= (size_t)a_datum_end)) { - l_tx_num++; - break; - } - dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*)l_datum->data; - s_dap_chain_datum_tx_out_data(l_tx, a_ledger, l_str_out, a_hash_out_type, true, &a_tx_hash_processed, &l_tx_num); - } - break; + } break; default: dap_string_append_printf(l_str_out, "unknown datum type=%d\n", l_datum->header.type_id); -- GitLab