From 1a00469fcd0a236dfbe58af1140ca13c467ecd19 Mon Sep 17 00:00:00 2001 From: Roman Khlopkov <roman.khlopkov@demlabs.net> Date: Fri, 17 Dec 2021 16:49:00 +0300 Subject: [PATCH] [*] Intermediate refactoring results --- dap-sdk/core/include/dap_math_ops.h | 25 +--- modules/chain/dap_chain_ledger.c | 8 +- modules/chain/include/dap_chain.h | 7 +- modules/chain/include/dap_chain_ledger.h | 10 +- modules/channel/chain/dap_stream_ch_chain.c | 5 +- modules/common/dap_chain_common.c | 100 ++++--------- modules/common/dap_chain_datum_token.c | 3 +- modules/common/dap_chain_datum_tx.c | 44 +----- modules/common/dap_chain_datum_tx_items.c | 111 ++------------- modules/common/include/dap_chain_common.h | 29 +--- modules/common/include/dap_chain_datum.h | 2 - .../common/include/dap_chain_datum_token.h | 3 +- modules/common/include/dap_chain_datum_tx.h | 6 +- .../common/include/dap_chain_datum_tx_items.h | 51 +++---- modules/consensus/none/dap_chain_cs_none.c | 29 ++-- modules/net/dap_chain_net.c | 42 +++--- modules/net/dap_chain_node_cli_cmd.c | 132 ++++++------------ modules/net/dap_chain_node_cli_cmd_tx.c | 48 +------ modules/net/include/dap_chain_net.h | 2 +- modules/type/blocks/dap_chain_cs_blocks.c | 2 +- modules/type/dag/dap_chain_cs_dag.c | 53 +++---- 21 files changed, 196 insertions(+), 516 deletions(-) diff --git a/dap-sdk/core/include/dap_math_ops.h b/dap-sdk/core/include/dap_math_ops.h index 745fde28fd..64882893b1 100755 --- a/dap-sdk/core/include/dap_math_ops.h +++ b/dap-sdk/core/include/dap_math_ops.h @@ -51,40 +51,21 @@ typedef int128_t _dap_int128_t; typedef struct uint256_t { uint128_t hi; uint128_t lo; - - } uint256_t; +} uint256_t; typedef struct uint512_t { uint256_t hi; uint256_t lo; - - } uint512_t; +} uint512_t; #endif //defined(__GNUC__) || defined (__clang__) //////////////////////////////////////////////////////////////////////////////////////////////// #ifndef DAP_GLOBAL_IS_INT128 - -// uint128_t dap_uint128_substract(uint128_t a, uint128_t b); -// uint128_t dap_uint128_add(uint128_t a, uint128_t b); -// bool dap_uint128_check_equal(uint128_t a, uint128_t b); -const uint128_t two_power_64={ .hi = 1, .lo = 0}; -const uint128_t lo_64={ .hi = 0, .lo = 0xffffffffffffffff}; -const uint128_t hi_64={ .hi = 0xffffffffffffffff, .lo = 0}; -// const uint128_t zero_128={.hi=0,.lo=0}; -// #define zero_128 ((uint128_t){.hi=0,.lo=0}) - #define uint128_0 ((uint128_t){.hi=0,.lo=0}) #define uint128_1 ((uint128_t){.hi=0,.lo=1}) - -// const uint64_t lo_32=0xffffffff; -// const uint64_t hi_32=0xffffffff00000000; -// const uint64_t ones_64=0xffffffffffffffff; - #else // DAP_GLOBAL_IS_INT128 - -// #define zero_128 ((uint128_t)0) #define uint128_0 0ULL #define uint128_1 1ULL @@ -92,7 +73,7 @@ const uint128_t hi_64={ .hi = 0xffffffffffffffff, .lo = 0}; // const uint256_t zero_256={.hi=zero_128,.lo=zero_128}; // #define zero_256 ((uint256_t){.hi=zero_128,.lo=zero_128}) -#define uint256_0 {.hi=uint128_0,.lo=uint128_0} +#define uint256_0 ((uint256_t){.hi=uint128_0,.lo=uint128_0}) #define uint256_1 ((uint256_t){.hi=uint128_0,.lo=uint128_1}) #define uint512_0 ((uint512_t){.hi=uint256_0,.lo=uint256_0}) #define lo_32 ((uint64_t)0xffffffff) diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c index e069b15142..0069bb0ba9 100644 --- a/modules/chain/dap_chain_ledger.c +++ b/modules/chain/dap_chain_ledger.c @@ -295,7 +295,7 @@ void dap_chain_ledger_load_end(dap_ledger_t *a_ledger) * @param a_token * @return */ -int dap_chain_ledger_token_decl_add_check(dap_ledger_t * a_ledger, dap_chain_datum_token_t *a_token) +int dap_chain_ledger_token_decl_add_check(dap_ledger_t *a_ledger, byte_t *a_token) { if ( !a_ledger){ if(s_debug_more) @@ -305,7 +305,7 @@ int dap_chain_ledger_token_decl_add_check(dap_ledger_t * a_ledger, dap_chain_da dap_chain_ledger_token_item_t * l_token_item; pthread_rwlock_rdlock(&PVT(a_ledger)->tokens_rwlock); - HASH_FIND_STR(PVT(a_ledger)->tokens,a_token->ticker,l_token_item); + HASH_FIND_STR(PVT(a_ledger)->tokens, a_token->ticker, l_token_item); pthread_rwlock_unlock(&PVT(a_ledger)->tokens_rwlock); if ( l_token_item != NULL ){ log_it(L_WARNING,"Duplicate token declaration for ticker '%s' ", a_token->ticker); @@ -341,7 +341,7 @@ int dap_chain_ledger_token_ticker_check(dap_ledger_t * a_ledger, const char *a_t * @param a_token_size * @return */ -int dap_chain_ledger_token_add(dap_ledger_t * a_ledger, dap_chain_datum_token_t *a_token, size_t a_token_size) +int dap_chain_ledger_token_add(dap_ledger_t *a_ledger, byte_t *a_token, size_t a_token_size) { if ( !a_ledger){ if(s_debug_more) @@ -897,7 +897,7 @@ static int s_token_tsd_parse(dap_ledger_t * a_ledger, dap_chain_ledger_token_ite return 0; } -int dap_chain_ledger_token_load(dap_ledger_t *a_ledger, dap_chain_datum_token_t *a_token, size_t a_token_size) +int dap_chain_ledger_token_load(dap_ledger_t *a_ledger, byte_t *a_token, size_t a_token_size) { if (PVT(a_ledger)->last_ticker.found) { return dap_chain_ledger_token_add(a_ledger, a_token, a_token_size); diff --git a/modules/chain/include/dap_chain.h b/modules/chain/include/dap_chain.h index 40899a1088..b527a10157 100644 --- a/modules/chain/include/dap_chain.h +++ b/modules/chain/include/dap_chain.h @@ -47,11 +47,13 @@ typedef struct dap_chain_atom_iter{ dap_chain_t * chain; dap_chain_atom_ptr_t cur; dap_chain_hash_fast_t *cur_hash; + dap_chain_cell_id_t cell_id; size_t cur_size; void * cur_item; void * _inheritor; } dap_chain_atom_iter_t; + typedef enum dap_chain_atom_verify_res{ ATOM_ACCEPT=0, ATOM_PASS=1, @@ -70,7 +72,7 @@ typedef dap_chain_atom_ptr_t (*dap_chain_callback_atom_form_treshold_t)(dap_chai typedef dap_chain_atom_verify_res_t (*dap_chain_callback_atom_verify_t)(dap_chain_t *, dap_chain_atom_ptr_t , size_t); typedef size_t (*dap_chain_callback_atom_get_hdr_size_t)(void); -typedef dap_chain_atom_iter_t* (*dap_chain_callback_atom_iter_create_t)(dap_chain_t * ); +typedef dap_chain_atom_iter_t* (*dap_chain_callback_atom_iter_create_t)(dap_chain_t *, dap_chain_cell_id_t); typedef dap_chain_atom_iter_t* (*dap_chain_callback_atom_iter_create_from_t)(dap_chain_t * ,dap_chain_atom_ptr_t, size_t); typedef dap_chain_atom_ptr_t (*dap_chain_callback_atom_iter_get_first_t)(dap_chain_atom_iter_t * , size_t*); typedef dap_chain_datum_t** (*dap_chain_callback_atom_get_datum_t)(dap_chain_atom_ptr_t, size_t, size_t * ); @@ -95,9 +97,6 @@ typedef enum dap_chain_type CHAIN_TYPE_TX, CHAIN_TYPE_CA, CHAIN_TYPE_LAST - // CHAIN_TYPE_256_TOKEN, // 256 - // CHAIN_TYPE_256_EMISSION, // 256 - // CHAIN_TYPE_256_TX, // 256 } dap_chain_type_t; typedef struct dap_chain{ diff --git a/modules/chain/include/dap_chain_ledger.h b/modules/chain/include/dap_chain_ledger.h index d1d22d3efc..543a4d7f5d 100644 --- a/modules/chain/include/dap_chain_ledger.h +++ b/modules/chain/include/dap_chain_ledger.h @@ -122,9 +122,9 @@ int dap_chain_ledger_token_ticker_check(dap_ledger_t * a_ledger, const char *a_t * */ -int dap_chain_ledger_token_add(dap_ledger_t * a_ledger,dap_chain_datum_token_t *a_token, size_t a_token_size); -int dap_chain_ledger_token_load(dap_ledger_t * a_ledger,dap_chain_datum_token_t *a_token, size_t a_token_size); -int dap_chain_ledger_token_decl_add_check(dap_ledger_t * a_ledger,dap_chain_datum_token_t *a_token); +int dap_chain_ledger_token_add(dap_ledger_t *a_ledger, byte_t *a_token, size_t a_token_size); +int dap_chain_ledger_token_load(dap_ledger_t *a_ledger, byte_t *a_token, size_t a_token_size); +int dap_chain_ledger_token_decl_add_check(dap_ledger_t *a_ledger, byte_t *a_token); dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger); /** * Add token emission datum @@ -184,10 +184,10 @@ bool dap_chain_ledger_tx_hash_is_used_out_item(dap_ledger_t *a_ledger, dap_chain * Calculate balance of addr * */ -uint128_t dap_chain_ledger_calc_balance(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr, +uint256_t dap_chain_ledger_calc_balance(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr, const char *a_token_ticker); -uint128_t dap_chain_ledger_calc_balance_full(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr, +uint256_t dap_chain_ledger_calc_balance_full(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr, const char *a_token_ticker); /** diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c index 85bcc06fe1..45185ab838 100644 --- a/modules/channel/chain/dap_stream_ch_chain.c +++ b/modules/channel/chain/dap_stream_ch_chain.c @@ -288,7 +288,7 @@ static bool s_sync_out_chains_proc_callback(dap_proc_thread_t *a_thread, void *a dap_chain_t * l_chain = dap_chain_find_by_id(l_sync_request->request_hdr.net_id, l_sync_request->request_hdr.chain_id); assert(l_chain); //pthread_rwlock_rdlock(&l_chain->atoms_rwlock); - l_sync_request->chain.request_atom_iter = l_chain->callback_atom_iter_create(l_chain); + l_sync_request->chain.request_atom_iter = l_chain->callback_atom_iter_create(l_chain, l_sync_request->request_hdr.cell_id); size_t l_first_size = 0; dap_chain_atom_ptr_t l_iter = l_chain->callback_atom_iter_get_first(l_sync_request->chain.request_atom_iter, &l_first_size); if (l_iter && l_first_size) { @@ -308,6 +308,7 @@ static bool s_sync_out_chains_proc_callback(dap_proc_thread_t *a_thread, void *a return true; } + /** * @brief s_sync_out_gdb_first_gdb_worker_callback * @param a_worker @@ -1035,7 +1036,7 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) if(s_debug_more) log_it(L_INFO, "Out: UPDATE_CHAINS_START pkt: net %s chain %s cell 0x%016"DAP_UINT64_FORMAT_X, l_chain->name, l_chain->net_name, l_chain_pkt->hdr.cell_id.uint64); - l_ch_chain->request_atom_iter = l_chain->callback_atom_iter_create(l_chain); + l_ch_chain->request_atom_iter = l_chain->callback_atom_iter_create(l_chain, l_chain_pkt->hdr.cell_id); l_chain->callback_atom_iter_get_first(l_ch_chain->request_atom_iter, NULL); memcpy(&l_ch_chain->request_hdr, &l_chain_pkt->hdr, sizeof(dap_stream_ch_chain_pkt_hdr_t)); dap_stream_ch_chain_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_PKT_TYPE_UPDATE_CHAINS_START, diff --git a/modules/common/dap_chain_common.c b/modules/common/dap_chain_common.c index d10e19b974..19513bcc0b 100644 --- a/modules/common/dap_chain_common.c +++ b/modules/common/dap_chain_common.c @@ -58,43 +58,6 @@ size_t dap_chain_hash_slow_to_str( dap_chain_hash_slow_t *a_hash, char *a_str, s return strlen(a_str); } -/** - * @brief dap_chain_hash_fast_to_str - * @param a_hash - * @param a_str - * @param a_str_max - * @return - */ -#if 0 -size_t dap_chain_hash_fast_to_str( dap_chain_hash_fast_t *a_hash, char *a_str, size_t a_str_max ) -{ - const size_t c_hash_str_size = sizeof(*a_hash) * 2 + 1 /*trailing zero*/+ 2 /* heading 0x */; - - if ( a_str_max < c_hash_str_size ) { - log_it( L_ERROR, "String for hash too small, need %u but have only %u", c_hash_str_size, a_str_max ); - } - -// size_t i; - // faster conversion to string - - dap_snprintf( a_str, 3, "0x" ); - - size_t l_ret = dap_bin2hex(a_str + 2, a_hash->raw, sizeof(a_hash->raw)); - - //for(i = 0; i < sizeof(a_hash->raw); ++i) - // dap_snprintf(a_str + i * 2 + 2, 3, "%02x", (a_hash->raw[i])); - - a_str[c_hash_str_size - 1] = '\0'; - - if(!l_ret) - return 0; - - return c_hash_str_size - 1; //strlen(a_str); -} -#endif - - - /** * @brief dap_chain_addr_to_str * @param a_addr @@ -146,38 +109,10 @@ dap_chain_net_id_t dap_chain_net_id_from_str(const char * a_net_str) log_it(L_DEBUG, "net id: %s", a_net_str); a_net_str += 2; - /*size_t l_net_str_len = strlen( a_net_str); - if (l_net_str_len >2){ - a_net_str+=2; - l_net_str_len-=2; - if (l_net_str_len == sizeof (l_ret)/2 ){ - size_t l_pos =0; - char l_byte[3]; - while(l_net_str_len){ - // Copy two characters for bytes - memcpy(l_byte,a_net_str,2); - l_byte[2]='\0'; - // Read byte chars - if ( sscanf(l_byte,"%02hhx",&l_ret.raw[l_pos] ) != 1) - if( sscanf(l_byte,"%02hhX",&l_ret.raw[l_pos] ) ==1 ) - break; - - // Update pos - l_pos++; - // Reduce in two steps to not to break if input will have bad input - l_net_str_len-=1; - if(l_net_str_len) - l_net_str_len-=1; - } - }else - log_it(L_WARNING,"Wrong input string \"%s\" not recognized as network id", a_net_str); - } */ - - if (!(l_ret.uint64 = strtol(a_net_str, NULL, 0))) { + if (!(l_ret.uint64 = strtoll(a_net_str, NULL, 0))) { log_it(L_ERROR, "Wrong input string \"%s\" not recognized as network id", a_net_str); return l_ret; } - //dap_stpcpy(&l_ret.raw, a_net_str); return l_ret; } @@ -297,7 +232,7 @@ uint64_t dap_chain_uint128_to(uint128_t a_from) #endif } -char *dap_chain_balance_print(uint128_t a_balance) +char *dap_chain_balance_print128(uint128_t a_balance) { char *l_buf = DAP_NEW_Z_SIZE(char, DATOSHI_POW + 3); int l_pos = 0; @@ -334,9 +269,15 @@ char *dap_chain_balance_print(uint128_t a_balance) return l_buf; } -char *dap_chain_balance_to_coins(uint128_t a_balance) +char *dap_chain_balance_print(uint256_t a_balance) +{ + return dap_chain_balance_print128(a_balance.lo); +} + + +char *dap_chain_balance_to_coins128(uint128_t a_balance) { - char *l_buf = dap_chain_balance_print(a_balance); + char *l_buf = dap_chain_balance_print128(a_balance); int l_strlen = strlen(l_buf); int l_pos; if (l_strlen > DATOSHI_DEGREE) { @@ -354,6 +295,11 @@ char *dap_chain_balance_to_coins(uint128_t a_balance) return l_buf; } +char *dap_chain_balance_to_coins(uint256_t a_balance) +{ + return dap_chain_balance_to_coins128(a_balance.lo); +} + const union { uint64_t u64[2]; uint32_t u32[4]; } c_pow10[DATOSHI_POW + 1] = { { .u64 = {0, 1ULL} }, // 0 { .u64 = {0, 10ULL} }, // 1 @@ -396,7 +342,7 @@ const union { uint64_t u64[2]; uint32_t u32[4]; } c_pow10[DATOSHI_POW + 1] = { { .u64 = {5421010862427522170ULL, 687399551400673280ULL} } // 38 }; -uint128_t dap_chain_balance_scan(char *a_balance) +uint128_t dap_chain_balance_scan128(char *a_balance) { int l_strlen = strlen(a_balance); #ifdef DAP_GLOBAL_IS_INT128 @@ -457,7 +403,13 @@ uint128_t dap_chain_balance_scan(char *a_balance) return l_ret; } -uint128_t dap_chain_coins_to_balance(char *a_coins) +uint256_t dap_chain_balance_scan(char *a_balance) +{ + return GET_256_FROM_128(dap_chain_balance_scan128(a_balance)); +} + + +uint128_t dap_chain_coins_to_balance128(char *a_coins) { #ifdef DAP_GLOBAL_IS_INT128 uint128_t l_ret = 0, l_nul = 0; @@ -497,8 +449,12 @@ uint128_t dap_chain_coins_to_balance(char *a_coins) l_buf[l_pos + i] = '0'; } l_buf[l_pos + i] = '\0'; - l_ret = dap_chain_balance_scan(l_buf); + l_ret = dap_chain_balance_scan128(l_buf); DAP_DELETE(l_buf); return l_ret; } +uint256_t dap_chain_coins_to_balance(char *a_coins) +{ + return GET_256_FROM_128(dap_chain_coins_to_balance128(a_coins)); +} diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c index dd1da5ab30..446d3adcce 100644 --- a/modules/common/dap_chain_datum_token.c +++ b/modules/common/dap_chain_datum_token.c @@ -117,7 +117,8 @@ dap_chain_datum_token_t *dap_chain_datum_token_read(byte_t *a_token_serial, size memcpy(l_token_old, a_token_serial, (*a_token_size)); size_t l_token_size = (*a_token_size) - sizeof(*l_token_old) + sizeof(dap_chain_datum_token_t); dap_chain_datum_token_t * l_token = DAP_NEW_Z_SIZE(dap_chain_datum_token_t, l_token_size); - strncpy(l_token->ticker, l_token_old->ticker, sizeof(l_token_old->ticker) ); + memcpy(l_token->ticker, l_token_old->ticker, sizeof(l_token_old->ticker)); + l_token->ticker[sizeof(l_token_old->ticker) - 1] = '\0'; size_t l_token_tsd_size = (*a_token_size) - sizeof(*l_token_old); memcpy(l_token->data_n_tsd, l_token_old->data_n_tsd, l_token_tsd_size); diff --git a/modules/common/dap_chain_datum_tx.c b/modules/common/dap_chain_datum_tx.c index c7ff6f97ee..e9a0001fb1 100644 --- a/modules/common/dap_chain_datum_tx.c +++ b/modules/common/dap_chain_datum_tx.c @@ -147,20 +147,9 @@ int dap_chain_datum_tx_add_in_cond_item(dap_chain_datum_tx_t **a_tx, dap_chain_h * * return 1 Ok, -1 Error */ -int dap_chain_datum_tx_add_out_item(dap_chain_datum_tx_t **a_tx, const dap_chain_addr_t *a_addr, uint64_t a_value) +int dap_chain_datum_tx_add_out_item(dap_chain_datum_tx_t **a_tx, const dap_chain_addr_t *a_addr, uint256_t a_value) { - dap_chain_tx_out_t *l_tx_out = dap_chain_datum_tx_item_out_create(a_addr, a_value); - if(l_tx_out) { - dap_chain_datum_tx_add_item(a_tx, (const uint8_t *)l_tx_out); - DAP_DELETE(l_tx_out); - return 1; - } - return -1; -} - -int dap_chain_datum_256_tx_add_out_item(dap_chain_datum_tx_t **a_tx, const dap_chain_addr_t *a_addr, uint256_t a_value) -{ - dap_chain_256_tx_out_t *l_tx_out = dap_chain_datum_tx_item_256_out_create(a_addr, a_value); + dap_chain_256_tx_out_t *l_tx_out = dap_chain_datum_tx_item_out_create(a_addr, a_value); if(l_tx_out) { dap_chain_datum_tx_add_item(a_tx, (const uint8_t *)l_tx_out); DAP_DELETE(l_tx_out); @@ -174,9 +163,9 @@ int dap_chain_datum_256_tx_add_out_item(dap_chain_datum_tx_t **a_tx, const dap_c * * return 1 Ok, -1 Error */ -int dap_chain_datum_tx_add_out_ext_item(dap_chain_datum_tx_t **a_tx, const dap_chain_addr_t *a_addr, uint64_t a_value, const char *a_token) +int dap_chain_datum_tx_add_out_ext_item(dap_chain_datum_tx_t **a_tx, const dap_chain_addr_t *a_addr, uint256_t a_value, const char *a_token) { - dap_chain_tx_out_ext_t *l_tx_out = dap_chain_datum_tx_item_out_ext_create(a_addr, a_value, a_token); + dap_chain_256_tx_out_ext_t *l_tx_out = dap_chain_datum_tx_item_out_ext_create(a_addr, a_value, a_token); if(l_tx_out) { dap_chain_datum_tx_add_item(a_tx, (const uint8_t *)l_tx_out); DAP_DELETE(l_tx_out); @@ -185,38 +174,15 @@ int dap_chain_datum_tx_add_out_ext_item(dap_chain_datum_tx_t **a_tx, const dap_c return -1; } -int dap_chain_datum_256_tx_add_out_ext_item(dap_chain_datum_tx_t **a_tx, const dap_chain_addr_t *a_addr, uint256_t a_value, const char *a_token) -{ - dap_chain_256_tx_out_ext_t *l_tx_out = dap_chain_datum_tx_item_256_out_ext_create(a_addr, a_value, a_token); - if(l_tx_out) { - dap_chain_datum_tx_add_item(a_tx, (const uint8_t *)l_tx_out); - DAP_DELETE(l_tx_out); - return 1; - } - return -1; -} /** * Create 'out_cond' item and insert to transaction * * return 1 Ok, -1 Error */ int dap_chain_datum_tx_add_out_cond_item(dap_chain_datum_tx_t **a_tx, dap_enc_key_t *a_key, dap_chain_net_srv_uid_t a_srv_uid, - uint64_t a_value, uint64_t a_value_max_per_unit, dap_chain_net_srv_price_unit_uid_t a_unit, const void *a_cond, size_t a_cond_size) -{ - dap_chain_tx_out_cond_t *l_tx_out = dap_chain_datum_tx_item_out_cond_create_srv_pay( - a_key, a_srv_uid,a_value, a_value_max_per_unit, a_unit, a_cond, a_cond_size ); - if(l_tx_out) { - dap_chain_datum_tx_add_item(a_tx, (const uint8_t *) l_tx_out); - DAP_DELETE(l_tx_out); - return 1; - } - return -1; -} - -int dap_chain_datum_256_tx_add_out_cond_item(dap_chain_datum_tx_t **a_tx, dap_enc_key_t *a_key, dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value, uint256_t a_value_max_per_unit, dap_chain_net_srv_price_unit_uid_t a_unit, const void *a_cond, size_t a_cond_size) { - dap_chain_256_tx_out_cond_t *l_tx_out = dap_chain_datum_tx_item_256_out_cond_create_srv_pay( + dap_chain_256_tx_out_cond_t *l_tx_out = dap_chain_datum_tx_item_out_cond_create_srv_pay( a_key, a_srv_uid,a_value, a_value_max_per_unit, a_unit, a_cond, a_cond_size ); if(l_tx_out) { dap_chain_datum_tx_add_item(a_tx, (const uint8_t *) l_tx_out); diff --git a/modules/common/dap_chain_datum_tx_items.c b/modules/common/dap_chain_datum_tx_items.c index e723ece1e7..a67bd64bea 100644 --- a/modules/common/dap_chain_datum_tx_items.c +++ b/modules/common/dap_chain_datum_tx_items.c @@ -143,7 +143,7 @@ size_t dap_chain_datum_item_tx_get_size(const uint8_t *a_item) case TX_ITEM_TYPE_256_OUT: // 256 size = dap_chain_256_tx_out_get_size((const dap_chain_256_tx_out_t*) a_item); break; - case TX_ITEM_TYPE_OUT_EXT: + case TX_ITEM_TYPE_OUT_EXT: // Exchange transaction outputs size = dap_chain_tx_out_ext_get_size((const dap_chain_tx_out_ext_t*) a_item); break; case TX_ITEM_TYPE_256_OUT_EXT: // 256 @@ -232,18 +232,7 @@ dap_chain_tx_in_cond_t* dap_chain_datum_tx_item_in_cond_create(dap_chain_hash_fa * * return item, NULL Error */ -dap_chain_tx_out_t* dap_chain_datum_tx_item_out_create(const dap_chain_addr_t *a_addr, uint64_t a_value) -{ - if(!a_addr) - return NULL; - dap_chain_tx_out_t *l_item = DAP_NEW_Z(dap_chain_tx_out_t); - l_item->header.type = TX_ITEM_TYPE_OUT; - l_item->header.value = a_value; - memcpy(&l_item->addr, a_addr, sizeof(dap_chain_addr_t)); - return l_item; -} - -dap_chain_256_tx_out_t* dap_chain_datum_tx_item_256_out_create(const dap_chain_addr_t *a_addr, uint256_t a_value) +dap_chain_256_tx_out_t* dap_chain_datum_tx_item_out_create(const dap_chain_addr_t *a_addr, uint256_t a_value) { if(!a_addr) return NULL; @@ -254,20 +243,7 @@ dap_chain_256_tx_out_t* dap_chain_datum_tx_item_256_out_create(const dap_chain_a return l_item; } -dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_out_ext_create(const dap_chain_addr_t *a_addr, uint64_t a_value, const char *a_token) -{ - if (!a_addr || !a_token) - return NULL; - dap_chain_tx_out_ext_t *l_item = DAP_NEW_Z(dap_chain_tx_out_ext_t); - l_item->header.type = TX_ITEM_TYPE_OUT_EXT; - l_item->header.value = a_value; - memcpy(&l_item->addr, a_addr, sizeof(dap_chain_addr_t)); - strcpy(l_item->token, a_token); - return l_item; -} - -//256 -dap_chain_256_tx_out_ext_t* dap_chain_datum_tx_item_256_out_ext_create(const dap_chain_addr_t *a_addr, uint256_t a_value, const char *a_token) +dap_chain_256_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; @@ -284,36 +260,10 @@ dap_chain_256_tx_out_ext_t* dap_chain_datum_tx_item_256_out_ext_create(const dap * * return item, NULL Error */ -dap_chain_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap_enc_key_t *a_key, dap_chain_net_srv_uid_t a_srv_uid, - uint64_t a_value,uint64_t a_value_max_per_unit, dap_chain_net_srv_price_unit_uid_t a_unit, - const void *a_params, size_t a_params_size) -{ - if(!a_key || !a_params) - return NULL; - size_t l_pub_key_size = 0; - uint8_t *l_pub_key = dap_enc_key_serealize_pub_key(a_key, &l_pub_key_size); - - - 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) - return 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; // By default creatre cond for service pay. Rework with smth more flexible - l_item->subtype.srv_pay.srv_uid = a_srv_uid; - l_item->subtype.srv_pay.unit = a_unit; - l_item->subtype.srv_pay.unit_price_max_datoshi = a_value_max_per_unit; - dap_hash_fast( l_pub_key, l_pub_key_size, & l_item->subtype.srv_pay.pkey_hash); - l_item->params_size = (uint32_t)a_params_size; - memcpy(l_item->params, a_params, a_params_size); - return l_item; -} - -// 256 -dap_chain_256_tx_out_cond_t* dap_chain_datum_tx_item_256_out_cond_create_srv_pay(dap_enc_key_t *a_key, dap_chain_net_srv_uid_t a_srv_uid, - uint256_t a_value,uint256_t a_value_max_per_unit, dap_chain_net_srv_price_unit_uid_t a_unit, - const void *a_params, size_t a_params_size) +dap_chain_256_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap_enc_key_t *a_key, dap_chain_net_srv_uid_t a_srv_uid, + uint256_t a_value, uint256_t a_value_max_per_unit, + dap_chain_net_srv_price_unit_uid_t a_unit, + const void *a_params, size_t a_params_size) { if(!a_key || !a_params) return NULL; @@ -337,30 +287,7 @@ dap_chain_256_tx_out_cond_t* dap_chain_datum_tx_item_256_out_cond_create_srv_pay return l_item; } - -dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap_chain_net_srv_uid_t a_srv_uid, dap_chain_net_id_t a_net_id, - const char *a_token, uint64_t a_value, - const void *a_params, uint32_t a_params_size) -{ - if (!a_token) { - 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); - 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_XCHANGE; - l_item->subtype.srv_xchange.srv_uid = a_srv_uid; - l_item->subtype.srv_xchange.net_id = a_net_id; - strcpy(l_item->subtype.srv_xchange.token, a_token); - l_item->params_size = a_params_size; - if (a_params_size) { - memcpy(l_item->params, a_params, a_params_size); - } - return l_item; -} - -// 256 -dap_chain_256_tx_out_cond_t *dap_chain_datum_tx_item_256_out_cond_create_srv_xchange(dap_chain_net_srv_uid_t a_srv_uid, dap_chain_net_id_t a_net_id, +dap_chain_256_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap_chain_net_srv_uid_t a_srv_uid, dap_chain_net_id_t a_net_id, const char *a_token, uint256_t a_value, const void *a_params, uint32_t a_params_size) { @@ -381,27 +308,7 @@ dap_chain_256_tx_out_cond_t *dap_chain_datum_tx_item_256_out_cond_create_srv_xch return l_item; } -dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_stake(dap_chain_net_srv_uid_t a_srv_uid, uint64_t a_value, long double a_fee_value, - dap_chain_addr_t *a_fee_addr, dap_chain_addr_t *a_hldr_addr, - const void *a_params, uint32_t a_params_size) -{ - 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); - 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; - l_item->subtype.srv_stake.srv_uid = a_srv_uid; - l_item->subtype.srv_stake.fee_value = a_fee_value; - memcpy(&l_item->subtype.srv_stake.fee_addr, a_fee_addr, sizeof(dap_chain_addr_t)); - memcpy(&l_item->subtype.srv_stake.hldr_addr, a_hldr_addr, sizeof(dap_chain_addr_t)); - l_item->params_size = a_params_size; - if (a_params_size) { - memcpy(l_item->params, a_params, a_params_size); - } - return l_item; -} - -// 256 -dap_chain_256_tx_out_cond_t *dap_chain_datum_tx_item_256_out_cond_create_srv_stake(dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value, long double a_fee_value, +dap_chain_256_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_stake(dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value, long double a_fee_value, dap_chain_addr_t *a_fee_addr, dap_chain_addr_t *a_hldr_addr, const void *a_params, uint32_t a_params_size) { diff --git a/modules/common/include/dap_chain_common.h b/modules/common/include/dap_chain_common.h index 35804fe06b..15697bb114 100644 --- a/modules/common/include/dap_chain_common.h +++ b/modules/common/include/dap_chain_common.h @@ -202,16 +202,12 @@ typedef enum dap_chain_tx_item_type { TX_ITEM_TYPE_TOKEN = 0x40, TX_ITEM_TYPE_TOKEN_EXT = 0x41, - TX_ITEM_TYPE_256_TOKEN = 0x42, - TX_ITEM_TYPE_256_TOKEN_EXT = 0x43, - TX_ITEM_TYPE_IN_COND = 0x50, /// @brief Transaction: conditon inputs TX_ITEM_TYPE_OUT_COND = 0x60, /// @brief Transaction: conditon outputs TX_ITEM_TYPE_256_OUT_COND = 0x61, // 256 TX_ITEM_TYPE_RECEIPT = 0x70, - TX_ITEM_TYPE_256_RECEIPT = 0x71, TX_ITEM_TYPE_OUT_ALL = 0xfe, TX_ITEM_TYPE_ANY = 0xff @@ -228,14 +224,6 @@ typedef struct dap_chain_receipt{ }; } dap_chain_receipt_info_t; -// 256 -// typedef struct dap_chain_256_receipt{ -// dap_chain_net_srv_uid_t srv_uid; // Service UID -// dap_chain_net_srv_price_unit_uid_t units_type; -// uint64_t units; // Unit of service (seconds, megabytes, etc.) Only for SERV_CLASS_PERMANENT -// uint256_t value_datoshi; // Receipt value -// } dap_chain_256_receipt_info_t; - #ifdef __cplusplus extern "C" { #endif @@ -265,12 +253,6 @@ DAP_STATIC_INLINE uint64_t dap_chain_coins_to_datoshi(long double a_count) DAP_STATIC_INLINE uint128_t dap_chain_uint128_from(uint64_t a_from) { -// #ifdef DAP_GLOBAL_IS_INT128 -// return (uint128_t)a_from; -// #else -// uint128_t l_ret = {{ .0, a_from}}; -// return l_ret; -// #endif uint128_t l_ret = uint128_0; ADD_64_INTO_128(a_from, &l_ret ); return l_ret; @@ -293,13 +275,10 @@ uint64_t dap_chain_uint128_to(uint128_t a_from); // 256 uint64_t dap_chain_uint256_to(uint256_t a_from); -char *dap_chain_u256tostr(uint256_t v); - - -char *dap_chain_balance_print(uint128_t a_balance); -char *dap_chain_balance_to_coins(uint128_t a_balance); -uint128_t dap_chain_balance_scan(char *a_balance); -uint128_t dap_chain_coins_to_balance(char *a_coins); +char *dap_chain_balance_print(uint256_t a_balance); +char *dap_chain_balance_to_coins(uint256_t a_balance); +uint256_t dap_chain_balance_scan(char *a_balance); +uint256_t dap_chain_coins_to_balance(char *a_coins); /** * @brief dap_chain_hash_to_str diff --git a/modules/common/include/dap_chain_datum.h b/modules/common/include/dap_chain_datum.h index f0ec919564..88f8dc13dd 100644 --- a/modules/common/include/dap_chain_datum.h +++ b/modules/common/include/dap_chain_datum.h @@ -37,7 +37,6 @@ /// Transaction header section #define DAP_CHAIN_DATUM_TX 0x0100 -#define DAP_CHAIN_DATUM_256_TX 0x0101 // 256 /// Transaction request section #define DAP_CHAIN_DATUM_TX_REQUEST 0x0300 @@ -61,7 +60,6 @@ #define DAP_CHAIN_DATUM_TOKEN_DECL 0xf000 #define DAP_CHAIN_DATUM_256_TOKEN_DECL 0xf001 // 256 #define DAP_CHAIN_DATUM_TOKEN_EMISSION 0xf100 -#define DAP_CHAIN_DATUM_256_TOKEN_EMISSION 0xf101 // 256 #define DAP_CHAIN_DATUM_TOKEN_DISMISSAL 0xf200 #define DAP_CHAIN_DATUM_CUSTOM 0xffff diff --git a/modules/common/include/dap_chain_datum_token.h b/modules/common/include/dap_chain_datum_token.h index 41a778c3cd..efdb862da7 100644 --- a/modules/common/include/dap_chain_datum_token.h +++ b/modules/common/include/dap_chain_datum_token.h @@ -264,10 +264,9 @@ typedef struct dap_chain_datum_token_emission{ dap_chain_addr_t address; // Emission holder's address union { uint64_t value; - uint256_t value256; + uint256_t value_256; }; uint8_t nonce[DAP_CHAIN_DATUM_NONCE_SIZE]; - // bool type_256; // emission 256 } DAP_ALIGN_PACKED hdr; union { struct { diff --git a/modules/common/include/dap_chain_datum_tx.h b/modules/common/include/dap_chain_datum_tx.h index 54885c4863..e36f33ac1c 100644 --- a/modules/common/include/dap_chain_datum_tx.h +++ b/modules/common/include/dap_chain_datum_tx.h @@ -104,7 +104,7 @@ int dap_chain_datum_tx_add_in_cond_item(dap_chain_datum_tx_t **a_tx, dap_chain_h * * return 1 Ok, -1 Error */ -int dap_chain_datum_tx_add_out_item(dap_chain_datum_tx_t **a_tx, const dap_chain_addr_t *a_addr, uint64_t a_value); +int dap_chain_datum_tx_add_out_item(dap_chain_datum_tx_t **a_tx, const dap_chain_addr_t *a_addr, uint256_t a_value); /** * Create 'out'_ext item and insert to transaction @@ -112,7 +112,7 @@ int dap_chain_datum_tx_add_out_item(dap_chain_datum_tx_t **a_tx, const dap_chain * return 1 Ok, -1 Error */ int dap_chain_datum_tx_add_out_ext_item(dap_chain_datum_tx_t **a_tx, const dap_chain_addr_t *a_addr, - uint64_t a_value, const char *a_token); + uint256_t a_value, const char *a_token); /** * Create 'out_cond' item and insert to transaction @@ -120,7 +120,7 @@ int dap_chain_datum_tx_add_out_ext_item(dap_chain_datum_tx_t **a_tx, const dap_c * return 1 Ok, -1 Error */ int dap_chain_datum_tx_add_out_cond_item(dap_chain_datum_tx_t **a_tx, dap_enc_key_t *a_key, dap_chain_net_srv_uid_t a_srv_uid, - uint64_t a_value, uint64_t a_value_max_per_unit, dap_chain_net_srv_price_unit_uid_t a_unit, const void *a_cond, size_t a_cond_size); + uint256_t a_value, uint256_t a_value_max_per_unit, dap_chain_net_srv_price_unit_uid_t a_unit, const void *a_cond, size_t a_cond_size); /** * Sign a transaction (Create sign item and insert to transaction) diff --git a/modules/common/include/dap_chain_datum_tx_items.h b/modules/common/include/dap_chain_datum_tx_items.h index a06fb55939..e2d7da7987 100644 --- a/modules/common/include/dap_chain_datum_tx_items.h +++ b/modules/common/include/dap_chain_datum_tx_items.h @@ -53,21 +53,21 @@ DAP_STATIC_INLINE const char * dap_chain_datum_tx_item_type_to_str(dap_chain_tx_ switch(a_item_type){ case TX_ITEM_TYPE_IN: return "TX_ITEM_TYPE_IN"; case TX_ITEM_TYPE_OUT: return "TX_ITEM_TYPE_OUT"; + case TX_ITEM_TYPE_256_OUT: return "TX_ITEM_TYPE_256_OUT"; // 256 case TX_ITEM_TYPE_OUT_EXT: return "TX_ITEM_TYPE_OUT_EXT"; + case TX_ITEM_TYPE_256_OUT_EXT: return "TX_ITEM_TYPE_256_OUT_EXT"; // 256 case TX_ITEM_TYPE_PKEY: return "TX_ITEM_TYPE_PKEY"; case TX_ITEM_TYPE_SIG: return "TX_ITEM_TYPE_SIG"; case TX_ITEM_TYPE_TOKEN: return "TX_ITEM_TYPE_TOKEN"; - case TX_ITEM_TYPE_256_TOKEN: return "TX_ITEM_TYPE_256_TOKEN"; // 256 case TX_ITEM_TYPE_TOKEN_EXT: return "TX_ITEM_TYPE_TOKEN_EXT"; - case TX_ITEM_TYPE_256_TOKEN_EXT: return "TX_ITEM_TYPE_256_TOKEN_EXT"; // 256 case TX_ITEM_TYPE_IN_COND: return "TX_ITEM_TYPE_IN_COND"; case TX_ITEM_TYPE_OUT_COND: return "TX_ITEM_TYPE_OUT_COND"; + case TX_ITEM_TYPE_256_OUT_COND: return "TX_ITEM_TYPE_256_OUT_COND"; // 256 case TX_ITEM_TYPE_RECEIPT: return "TX_ITEM_TYPE_RECEIPT"; case TX_ITEM_TYPE_OUT_ALL: return "TX_ITEM_TYPE_OUT_ALL"; case TX_ITEM_TYPE_ANY: return "TX_ITEM_TYPE_ANY"; default: return "UNDEFINED"; } - } /** @@ -99,70 +99,53 @@ dap_chain_tx_in_cond_t* dap_chain_datum_tx_item_in_cond_create(dap_chain_hash_fa * * return item, NULL Error */ -dap_chain_tx_out_t* dap_chain_datum_tx_item_out_create(const dap_chain_addr_t *a_addr, uint64_t a_value); - -// 256 -dap_chain_256_tx_out_t* dap_chain_datum_tx_item_256_out_create(const dap_chain_addr_t *a_addr, uint256_t a_value); +dap_chain_256_tx_out_t* dap_chain_datum_tx_item_out_create(const dap_chain_addr_t *a_addr, uint256_t a_value); /** * Create item dap_chain_tx_out_ext_t * * return item, NULL Error */ -dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_out_ext_create(const dap_chain_addr_t *a_addr, uint64_t a_value, const char *a_token); - -// 256 -dap_chain_256_tx_out_ext_t* dap_chain_datum_tx_item_256_out_ext_create(const dap_chain_addr_t *a_addr, uint256_t a_value, const char *a_token); +dap_chain_256_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); /** * Create item dap_chain_tx_out_cond_t * * return item, NULL Error */ -dap_chain_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap_enc_key_t *a_key, dap_chain_net_srv_uid_t a_srv_uid, - uint64_t a_value, uint64_t a_value_max_per_unit, dap_chain_net_srv_price_unit_uid_t a_unit, - const void *a_cond, size_t a_cond_size); -// 256 -dap_chain_256_tx_out_cond_t* dap_chain_datum_tx_item_256_out_cond_create_srv_pay(dap_enc_key_t *a_key, dap_chain_net_srv_uid_t a_srv_uid, - uint256_t a_value, uint256_t a_value_max_per_unit, dap_chain_net_srv_price_unit_uid_t a_unit, - const void *a_cond, size_t a_cond_size); +dap_chain_256_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap_enc_key_t *a_key, dap_chain_net_srv_uid_t a_srv_uid, + uint256_t a_value, uint256_t a_value_max_per_unit, + dap_chain_net_srv_price_unit_uid_t a_unit, + const void *a_params, size_t a_params_size); /** * Create item dap_chain_tx_out_cond_t for eXchange service * * return item, NULL Error */ -dap_chain_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap_chain_net_srv_uid_t a_srv_uid, - dap_chain_net_id_t a_net_id, const char *a_token, uint64_t a_value, - const void *a_params, uint32_t a_params_size); -//256 -dap_chain_256_tx_out_cond_t* dap_chain_datum_tx_item_256_out_cond_create_srv_xchange(dap_chain_net_srv_uid_t a_srv_uid, - dap_chain_net_id_t a_net_id, const char *a_token, uint256_t a_value, - const void *a_params, uint32_t a_params_size); +dap_chain_256_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap_chain_net_srv_uid_t a_srv_uid, + dap_chain_net_id_t a_net_id, const char *a_token, uint256_t a_value, + const void *a_params, uint32_t a_params_size); /** * Create item dap_chain_tx_out_cond_t for stake service * * return item, NULL Error */ -dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_stake(dap_chain_net_srv_uid_t a_srv_uid, uint64_t a_value, long double a_fee_value, - dap_chain_addr_t *a_fee_addr, dap_chain_addr_t *a_hldr_addr, - const void *a_params, uint32_t a_params_size); -// 256 -dap_chain_256_tx_out_cond_t *dap_chain_datum_tx_item_256_out_cond_create_srv_stake(dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value, long double a_fee_value, - dap_chain_addr_t *a_fee_addr, dap_chain_addr_t *a_hldr_addr, - const void *a_params, uint32_t a_params_size); +dap_chain_256_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_stake(dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value, long double a_fee_value, + dap_chain_addr_t *a_fee_addr, dap_chain_addr_t *a_hldr_addr, + const void *a_params, uint32_t a_params_size); /** * 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 void *a_data, size_t a_data_size); +dap_chain_tx_sig_t *dap_chain_datum_tx_item_sign_create(dap_enc_key_t *a_key, const void *a_data, size_t a_data_size); /** * Get sign from sign item * * return sign, NULL Error */ -dap_sign_t* dap_chain_datum_tx_item_sign_get_sig(dap_chain_tx_sig_t *a_tx_sig); +dap_sign_t *dap_chain_datum_tx_item_sign_get_sig(dap_chain_tx_sig_t *a_tx_sig); /** * Get item from transaction diff --git a/modules/consensus/none/dap_chain_cs_none.c b/modules/consensus/none/dap_chain_cs_none.c index a1c2a0614b..b797bb2623 100644 --- a/modules/consensus/none/dap_chain_cs_none.c +++ b/modules/consensus/none/dap_chain_cs_none.c @@ -70,7 +70,7 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha static dap_chain_atom_verify_res_t s_chain_callback_atom_verify(dap_chain_t * a_chain, dap_chain_atom_ptr_t, size_t); // Verify new event in gdb static size_t s_chain_callback_atom_get_static_hdr_size(void); // Get gdb event header size -static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain); +static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain, dap_chain_cell_id_t a_cell_id); static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create_from(dap_chain_t * a_chain, dap_chain_atom_ptr_t a, size_t a_atom_size); @@ -346,8 +346,7 @@ static dap_chain_atom_verify_res_t s_chain_callback_atom_add(dap_chain_t * a_cha switch (l_datum->header.type_id) { case DAP_CHAIN_DATUM_256_TOKEN_DECL: // 256 case DAP_CHAIN_DATUM_TOKEN_DECL:{ - dap_chain_datum_token_t *l_token = (dap_chain_datum_token_t*) l_datum->data; - if (dap_chain_ledger_token_load(a_chain->ledger,l_token, l_datum->header.data_size)) + if (dap_chain_ledger_token_load(a_chain->ledger, l_datum->data, l_datum->header.data_size)) return ATOM_REJECT; }break; case DAP_CHAIN_DATUM_TOKEN_EMISSION: { @@ -417,21 +416,21 @@ static size_t s_chain_callback_atom_get_static_hdr_size() * @param a_chain dap_chain_t a_chain * @return dap_chain_atom_iter_t* */ -static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain) +static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain, dap_chain_cell_id_t a_cell_id) { dap_chain_atom_iter_t * l_iter = DAP_NEW_Z(dap_chain_atom_iter_t); l_iter->chain = a_chain; - l_iter->cur_hash = DAP_NEW(dap_chain_hash_fast_t); + l_iter->cell_id = a_cell_id; return l_iter; } /** * @brief create atom object (dap_chain_atom_iter_t) - * + * * @param a_chain chain object * @param a_atom pointer to atom * @param a_atom_size size of atom - * @return dap_chain_atom_iter_t* + * @return dap_chain_atom_iter_t* */ static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create_from(dap_chain_t * a_chain, dap_chain_atom_ptr_t a_atom, size_t a_atom_size) @@ -461,11 +460,11 @@ static void s_chain_callback_atom_iter_delete(dap_chain_atom_iter_t * a_atom_ite /** * @brief get dap_chain_atom_ptr_t object form database by hash - * @details Searchs by datum data hash, not for datum's hash itself - * @param a_atom_iter dap_chain_atom_iter_t atom object + * @details Searchs by datum data hash, not for datum's hash itself + * @param a_atom_iter dap_chain_atom_iter_t atom object * @param a_atom_hash dap_chain_hash_fast_t atom hash * @param a_atom_size size of atom object - * @return dap_chain_atom_ptr_t + * @return dap_chain_atom_ptr_t */ static dap_chain_atom_ptr_t s_chain_callback_atom_iter_find_by_hash(dap_chain_atom_iter_t * a_atom_iter, dap_chain_hash_fast_t * a_atom_hash, size_t *a_atom_size) @@ -482,10 +481,10 @@ static dap_chain_atom_ptr_t s_chain_callback_atom_iter_find_by_hash(dap_chain_at /** * @brief Get the first dag event from database - * - * @param a_atom_iter ap_chain_atom_iter_t object + * + * @param a_atom_iter ap_chain_atom_iter_t object * @param a_atom_size a_atom_size atom size - * @return dap_chain_atom_ptr_t + * @return dap_chain_atom_ptr_t */ static dap_chain_atom_ptr_t s_chain_callback_atom_iter_get_first(dap_chain_atom_iter_t * a_atom_iter, size_t *a_atom_size) { @@ -517,10 +516,10 @@ static dap_chain_atom_ptr_t s_chain_callback_atom_iter_get_first(dap_chain_atom_ /** * @brief Get the next dag event from database - * + * * @param a_atom_iter dap_chain_atom_iter_t * @param a_atom_size size_t a_atom_size - * @return dap_chain_atom_ptr_t + * @return dap_chain_atom_ptr_t */ static dap_chain_atom_ptr_t s_chain_callback_atom_iter_get_next(dap_chain_atom_iter_t *a_atom_iter, size_t *a_atom_size) { diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 99e2c0075b..b5907395a3 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -2597,20 +2597,13 @@ int dap_chain_net_verify_datum_for_add(dap_chain_net_t *a_net, dap_chain_datum_t return -11; switch ( a_datum->header.type_id) { - case DAP_CHAIN_DATUM_256_TX: // 256 case DAP_CHAIN_DATUM_TX: - return dap_chain_ledger_tx_add_check( a_net->pub.ledger, - (dap_chain_datum_tx_t*) a_datum->data ); - + return dap_chain_ledger_tx_add_check( a_net->pub.ledger, (dap_chain_datum_tx_t*)a_datum->data ); case DAP_CHAIN_DATUM_256_TOKEN_DECL: // 256 case DAP_CHAIN_DATUM_TOKEN_DECL: - return dap_chain_ledger_token_decl_add_check( a_net->pub.ledger, - (dap_chain_datum_token_t*) a_datum->data ); - - case DAP_CHAIN_DATUM_256_TOKEN_EMISSION: // 256 - case DAP_CHAIN_DATUM_TOKEN_EMISSION: { + return dap_chain_ledger_token_decl_add_check( a_net->pub.ledger, a_datum->data ); + case DAP_CHAIN_DATUM_TOKEN_EMISSION: return dap_chain_ledger_token_emission_add_check( a_net->pub.ledger, a_datum->data, a_datum->header.data_size ); - } default: return 0; } } @@ -2624,7 +2617,7 @@ int dap_chain_net_verify_datum_for_add(dap_chain_net_t *a_net, dap_chain_datum_t * @param a_str_out * @param a_datum */ -void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_datum, const char *a_hash_out_type) +void dap_chain_net_dump_datum(dap_string_t *a_str_out, dap_chain_datum_t *a_datum, const char *a_hash_out_type) { if( a_datum == NULL){ dap_string_append_printf(a_str_out,"==Datum is NULL\n"); @@ -2633,8 +2626,8 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da switch (a_datum->header.type_id){ case DAP_CHAIN_DATUM_256_TOKEN_DECL: case DAP_CHAIN_DATUM_TOKEN_DECL:{ - dap_chain_datum_token_t * l_token = (dap_chain_datum_token_t*) a_datum->data; size_t l_token_size = a_datum->header.data_size; + dap_chain_datum_token_t * l_token = dap_chain_datum_token_read(a_datum->data, &l_token_size); if(l_token_size < sizeof(dap_chain_datum_token_t)){ dap_string_append_printf(a_str_out,"==Datum has incorrect size. Only %zu, while at least %zu is expected\n", l_token_size, sizeof(dap_chain_datum_token_t)); @@ -2653,7 +2646,7 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da dap_string_append_printf(a_str_out, "total_supply: %"DAP_UINT64_FORMAT_U"\n", l_token->header_private.total_supply ); else dap_string_append_printf(a_str_out, "total_supply: %s\n", - dap_chain_u256tostr(l_token->header_private.total_supply_256)); + dap_chain_balance_print(l_token->header_private.total_supply_256)); }break; case DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PRIVATE_UPDATE: case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE:{ @@ -2683,13 +2676,13 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da break; case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY_256: // 256 dap_string_append_printf(a_str_out,"total_supply: %s\n", - dap_chain_u256tostr( + dap_chain_balance_print( dap_tsd_get_scalar(l_tsd, uint256_t))); break; case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY: // 128 dap_string_append_printf(a_str_out,"total_supply: %s\n", - dap_chain_balance_print( - dap_tsd_get_scalar(l_tsd, uint128_t))); + dap_chain_balance_print(GET_256_FROM_128( + dap_tsd_get_scalar(l_tsd, uint128_t)))); break; case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID : dap_string_append_printf(a_str_out,"total_signs_valid: %u\n", @@ -2795,13 +2788,13 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da switch( l_tsd->type){ case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY_256: // 256 dap_string_append_printf(a_str_out,"total_supply: %s\n", - dap_chain_u256tostr( + dap_chain_balance_print( dap_tsd_get_scalar(l_tsd, uint256_t))); break; case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY: // 128 dap_string_append_printf(a_str_out,"total_supply: %s\n", - dap_chain_balance_print( - dap_tsd_get_scalar(l_tsd, uint128_t))); + dap_chain_balance_print(GET_256_FROM_128( + dap_tsd_get_scalar(l_tsd, uint128_t)))); break; case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID : dap_string_append_printf(a_str_out,"total_signs_valid: %u\n", @@ -2841,7 +2834,6 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da size_t l_certs_field_size = l_token_size - sizeof(*l_token) - l_token->header_private_decl.tsd_total_size; dap_chain_datum_token_certs_dump(a_str_out, l_token->data_n_tsd, l_certs_field_size); }break; - case DAP_CHAIN_DATUM_256_TX: case DAP_CHAIN_DATUM_TX:{ dap_chain_datum_tx_t * l_tx =(dap_chain_datum_tx_t *) a_datum->data; char buf[50]; @@ -2869,7 +2861,7 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da } break; case TX_ITEM_TYPE_256_OUT: { // 256 dap_string_append_printf(a_str_out,"\tvalue: %s\n", - dap_chain_u256tostr(((dap_chain_256_tx_out_t *)l_cur->data)->header.value) + dap_chain_balance_print(((dap_chain_256_tx_out_t *)l_cur->data)->header.value) ); char * l_addr_str = dap_chain_addr_to_str( &((dap_chain_256_tx_out_t *)l_cur->data)->addr ); dap_string_append_printf(a_str_out,"\taddr : %s\n", l_addr_str ); @@ -2884,9 +2876,8 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da DAP_DELETE(l_addr_str); } break; case TX_ITEM_TYPE_256_OUT_EXT: { // 256 - // dap_chain_256_tx_out_ext_t * l_out_ext = l_cur->data; dap_string_append_printf(a_str_out,"\tvalue: %s\n", - dap_chain_u256tostr(((dap_chain_256_tx_out_ext_t *)l_cur->data)->header.value) + dap_chain_balance_print(((dap_chain_256_tx_out_ext_t *)l_cur->data)->header.value) ); char * l_addr_str = dap_chain_addr_to_str( &((dap_chain_256_tx_out_ext_t *)l_cur->data)->addr ); dap_string_append_printf(a_str_out,"\taddr : %s\n", l_addr_str ); @@ -2894,7 +2885,6 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da DAP_DELETE(l_addr_str); } break; case TX_ITEM_TYPE_OUT_EXT:{ - // dap_chain_tx_out_ext_t * l_out_ext = l_cur->data; dap_string_append_printf(a_str_out,"\tvalue: %"DAP_UINT64_FORMAT_U"\n", ((dap_chain_tx_out_ext_t *)l_cur->data)->header.value ); @@ -2945,7 +2935,7 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da } break; case TX_ITEM_TYPE_256_OUT_COND: { // 256 dap_chain_256_tx_out_cond_t * l_out = l_cur->data; - dap_string_append_printf(a_str_out,"\tvalue: %s\n", dap_chain_u256tostr(l_out->header.value) ); + dap_string_append_printf(a_str_out,"\tvalue: %s\n", dap_chain_balance_print(l_out->header.value) ); switch ( l_out->header.subtype){ case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY:{ dap_string_append_printf(a_str_out,"\tsubtype: DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY\n"); @@ -2960,7 +2950,7 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da default: dap_string_append_printf(a_str_out,"\tunit: SERV_UNIT_UNKNOWN\n"); break; } dap_string_append_printf(a_str_out,"\tunit_price_max: %s\n", - dap_chain_u256tostr(l_out->subtype.srv_pay.unit_price_max_datoshi) + dap_chain_balance_print(l_out->subtype.srv_pay.unit_price_max_datoshi) ); char l_pkey_hash_str[70]={[0]='\0'}; dap_chain_hash_fast_to_str(&l_out->subtype.srv_pay.pkey_hash, l_pkey_hash_str, sizeof (l_pkey_hash_str)-1); diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 9f0152b51e..3fbc547a98 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -1801,7 +1801,7 @@ int com_tx_wallet(int argc, char ** argv, char **str_reply) for(size_t i = 0; i < l_addr_tokens_size; i++) { if(l_addr_tokens[i]) { - uint128_t l_balance = dap_chain_ledger_calc_balance(l_ledger, l_addr, l_addr_tokens[i]); + uint256_t l_balance = dap_chain_ledger_calc_balance(l_ledger, l_addr, l_addr_tokens[i]); char *l_balance_coins = dap_chain_balance_to_coins(l_balance); char *l_balance_datoshi = dap_chain_balance_print(l_balance); dap_string_append_printf(l_string_ret, "\t%s (%s) %s\n", l_balance_coins, @@ -2457,7 +2457,7 @@ int com_token_update(int a_argc, char ** a_argv, char ** a_str_reply) int l_arg_index = 1; const char * l_type_str = NULL; - uint16_t l_type = DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE; // 256 + uint16_t l_type = DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE; const char * l_ticker = NULL; @@ -2491,9 +2491,7 @@ int com_token_update(int a_argc, char ** a_argv, char ** a_str_reply) // Token type l_arg_index=dap_chain_node_cli_find_option_val(a_argv, l_arg_index, a_argc, "-type", &l_type_str); - if (!l_type_str || !strcmp(l_type_str, "private")) { - l_type = DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE; // 256 - } else { + if (l_type_str && strcmp(l_type_str, "private")) { dap_chain_node_cli_set_reply_text(a_str_reply, "token_update can't accept type \"%s\"", l_type_str); return -22; } @@ -2502,7 +2500,6 @@ int com_token_update(int a_argc, char ** a_argv, char ** a_str_reply) size_t l_datum_data_offset = 0; switch(l_type){ - case DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PRIVATE_UPDATE: case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE:{ // 256 dap_list_t *l_tsd_list = dap_list_alloc(); size_t l_tsd_total_size = 0; @@ -2556,15 +2553,9 @@ int com_token_update(int a_argc, char ** a_argv, char ** a_str_reply) } } else if ( strcmp( a_argv[l_arg_index],"-total_supply" )==0){ // Total supply dap_tsd_t * l_tsd; - if ( dap_chain_datum_token_is_old(l_type) ) { // 128 - uint128_t l_param_value = dap_chain_balance_scan(l_arg_param); - l_tsd = dap_tsd_create_scalar( - DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY, l_param_value); - } else { // 256 - uint256_t l_param_value = GET_256_FROM_128(dap_chain_balance_scan(l_arg_param)); - l_tsd = dap_tsd_create_scalar( - DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY_256, l_param_value); - } + uint256_t l_param_value = dap_chain_balance_scan(l_arg_param); + l_tsd = dap_tsd_create_scalar( + DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY_256, l_param_value); dap_list_append( l_tsd_list, l_tsd); l_tsd_total_size+= dap_tsd_size( l_tsd); }else if ( strcmp( a_argv[l_arg_index],"-total_signs_valid" )==0){ // Signs valid @@ -2785,7 +2776,7 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) const char * l_ticker = NULL; const char * l_total_supply_str = NULL; - uint256_t l_total_supply = uint256_0; // 256 + uint256_t l_total_supply = {}; // 256 const char * l_signs_emission_str = NULL; uint16_t l_signs_emission = 0; @@ -2801,12 +2792,7 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) dap_chain_t * l_chain = NULL; dap_chain_net_t * l_net = NULL; - // 256 - bool l_type_256 = true; //dap_chain_node_cli_check_option(a_argv, l_arg_index, a_argc, "-256") == -1 ? false : true; - - uint16_t l_type = l_type_256 - ? DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE // 256 - : DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_SIMPLE; + uint16_t l_type = DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE; const char * l_hash_out_type = NULL; dap_chain_node_cli_find_option_val(a_argv, l_arg_index, a_argc, "-H", &l_hash_out_type); @@ -2839,14 +2825,11 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) if (l_type_str) { if (strcmp( l_type_str, "private") == 0){ - l_type = l_type_256 ? DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL // 256 - : DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PRIVATE_DECL; + l_type = DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL; // 256 }else if (strcmp( l_type_str, "private_simple") == 0){ - l_type = l_type_256 ? DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE // 256 - : DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_SIMPLE; + l_type = DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE; // 256 }else if (strcmp( l_type_str, "public_simple") == 0){ - l_type = l_type_256 ? DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC // 256 - : DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PUBLIC; + l_type = DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC; // 256 } } @@ -2854,8 +2837,7 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) size_t l_datum_data_offset = 0; switch(l_type){ - case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL: // 256 - case DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PRIVATE_DECL: { + case DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL: { // 256 dap_list_t *l_tsd_list = dap_list_alloc(); size_t l_tsd_total_size = 0; uint16_t l_flags = 0; @@ -2876,15 +2858,9 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) } } else if ( strcmp( a_argv[l_arg_index],"-total_supply" )==0){ // Total supply dap_tsd_t * l_tsd; - if ( l_type == DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL ) { // 256 - uint256_t l_param_value = GET_256_FROM_128(dap_chain_balance_scan(l_arg_param)); - l_tsd = dap_tsd_create_scalar( - DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY_256, l_param_value); - } else { // 128 - uint128_t l_param_value = dap_chain_balance_scan(l_arg_param); - l_tsd = dap_tsd_create_scalar( - DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY, l_param_value); - } + uint256_t l_param_value = dap_chain_balance_scan(l_arg_param); + l_tsd = dap_tsd_create_scalar( + DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY_256, l_param_value); dap_list_append( l_tsd_list, l_tsd); l_tsd_total_size+= dap_tsd_size( l_tsd); }else if ( strcmp( a_argv[l_arg_index],"-total_signs_valid" )==0){ // Signs valid @@ -2978,14 +2954,7 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) switch (l_tsd->type){ case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY_256: { // 256 char *l_balance; - l_balance = dap_chain_u256tostr(dap_tsd_get_scalar(l_tsd, uint256_t)); - log_it(L_DEBUG,"== TOTAL_SUPPLY: %s", l_balance); - DAP_DELETE(l_balance); - } - break; - case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY: { // 128 - char *l_balance; - l_balance = dap_chain_balance_print(dap_tsd_get_scalar(l_tsd, uint128_t)); + l_balance = dap_chain_balance_print(dap_tsd_get_scalar(l_tsd, uint256_t)); log_it(L_DEBUG,"== TOTAL_SUPPLY: %s", l_balance); DAP_DELETE(l_balance); } @@ -3024,8 +2993,7 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) }break; - case DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE: // 256 - case DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_SIMPLE: { + case DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE: { // 256 // Total supply value dap_chain_node_cli_find_option_val(a_argv, l_arg_index, a_argc, "-total_supply", &l_total_supply_str); @@ -3039,14 +3007,11 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) // Signs minimum number thats need to authorize the emission dap_chain_node_cli_find_option_val(a_argv, l_arg_index, a_argc, "-signs_emission", &l_signs_emission_str); - if(!l_total_supply_str) { dap_chain_node_cli_set_reply_text(a_str_reply, "token_create requires parameter '-total_supply'"); return -3; } else { - // char * l_tmp = NULL; - l_total_supply = GET_256_FROM_128(dap_chain_balance_scan(l_total_supply_str)); - //if((l_total_supply = strtoull(l_total_supply_str, &l_tmp, 10)) == 0) { + l_total_supply = dap_chain_balance_scan((char *)l_total_supply_str); if ( IS_ZERO_256(l_total_supply) ) { dap_chain_node_cli_set_reply_text(a_str_reply, "token_create requires parameter '-total_supply' to be unsigned integer value that fits in 8 bytes"); @@ -3054,8 +3019,6 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) } } - - // Signs emission if(!l_signs_emission_str) { dap_chain_node_cli_set_reply_text(a_str_reply, "token_create requires parameter '-signs_emission'"); @@ -3102,14 +3065,9 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) // Create new datum token l_datum_token = DAP_NEW_Z_SIZE(dap_chain_datum_token_t, sizeof(dap_chain_datum_token_t)); - l_datum_token->type = l_type_256 - ? DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE // 256 - : DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_SIMPLE; + l_datum_token->type = DAP_CHAIN_DATUM_TOKEN_TYPE_SIMPLE; // 256 dap_snprintf(l_datum_token->ticker, sizeof(l_datum_token->ticker), "%s", l_ticker); - if ( l_type_256 ) - l_datum_token->header_private.total_supply_256 = l_total_supply; - else - l_datum_token->header_private.total_supply = dap_chain_uint256_to(l_total_supply); + l_datum_token->header_private.total_supply_256 = l_total_supply; l_datum_token->header_private.signs_total = l_signs_total; l_datum_token->header_private.signs_valid = l_signs_emission; @@ -3133,13 +3091,9 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) return -8; } - dap_chain_datum_t * l_datum = l_type_256 - ? dap_chain_datum_create( // 256 - DAP_CHAIN_DATUM_256_TOKEN_DECL, - l_datum_token, sizeof(*l_datum_token) + l_datum_data_offset) - : dap_chain_datum_create( - DAP_CHAIN_DATUM_TOKEN_DECL, - l_datum_token, sizeof(*l_datum_token) + l_datum_data_offset); + dap_chain_datum_t * l_datum = dap_chain_datum_create(DAP_CHAIN_DATUM_256_TOKEN_DECL, + l_datum_token, + sizeof(*l_datum_token) + l_datum_data_offset); size_t l_datum_size = dap_chain_datum_size(l_datum); // Calc datum's hash @@ -3150,7 +3104,7 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) // Add datum to mempool with datum_token hash as a key char * l_gdb_group_mempool; - if(l_chain) { + if (l_chain) { l_gdb_group_mempool = dap_chain_net_get_gdb_group_mempool(l_chain); } else { @@ -3158,15 +3112,11 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) } int l_ret = 0; - char * l_datum_type = l_type_256 ? "256_t" : ""; - if(dap_chain_global_db_gr_set(dap_strdup(l_key_str), (uint8_t *) l_datum, l_datum_size, l_gdb_group_mempool)) { - if(!dap_strcmp(l_hash_out_type,"hex")) - dap_chain_node_cli_set_reply_text(a_str_reply, "datum %s %s with token %s is placed in datum pool ", l_datum_type, l_key_str, l_ticker); - else - dap_chain_node_cli_set_reply_text(a_str_reply, "datum %s %s with token %s is placed in datum pool ", l_datum_type, l_key_str_base58, l_ticker); - } - else { - dap_chain_node_cli_set_reply_text(a_str_reply, "datum tx %s %s is not placed in datum pool ", l_datum_type, l_key_str_base58); + 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_strcmp(l_hash_out_type, "hex") ? l_key_str_base58 : l_key_str, + l_ticker, l_placed ? "" : " not"); + if (!l_placed) { DAP_DELETE(l_datum); l_ret = -2; } @@ -3186,7 +3136,7 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply) int arg_index = 1; const char *str_tmp = NULL; char *str_reply_tmp = NULL; - uint64_t l_emission_value = 0; + uint256_t l_emission_value = {}; const char * l_ticker = NULL; @@ -3241,14 +3191,15 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply) // Emission value if(dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-emission_value", &str_tmp)) { - l_emission_value = strtoull(str_tmp, NULL, 10); + l_emission_value = dap_chain_balance_scan((char *)str_tmp); } - if(!l_emission_value) { + if (EQUAL_256(l_emission_value, uint256_0) ) { dap_chain_node_cli_set_reply_text(a_str_reply, "token_emit requires parameter '-emission_value'"); return -1; } + if(!l_addr_str) { dap_chain_node_cli_set_reply_text(a_str_reply, "token_emit requires parameter '-addr'"); return -2; @@ -3340,7 +3291,7 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply) sizeof(l_emission->data.type_auth.signs_count); l_emission = DAP_NEW_Z_SIZE(dap_chain_datum_token_emission_t, l_emission_size); - l_emission->hdr.version = 1; + l_emission->hdr.version = 2; l_emission->hdr.value_256 = l_emission_value; strncpy(l_emission->hdr.ticker, l_ticker, sizeof(l_emission->hdr.ticker) - 1); l_emission->hdr.type = DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_AUTH; @@ -3376,12 +3327,13 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply) DAP_DEL_Z(l_emission); // Add to mempool emission token - if(dap_chain_global_db_gr_set(dap_strdup(l_emission_hash_str_new), (uint8_t *) l_datum_emission, l_datum_emission_size - , l_gdb_group_mempool_emission)) { - if(!dap_strcmp(l_hash_out_type,"hex")) - 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_new); + bool l_placed = dap_chain_global_db_gr_set(dap_strdup(l_emission_hash_str_new), + (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" : ""), @@ -3413,7 +3365,7 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply) // create items dap_chain_tx_token_t *l_tx_token = dap_chain_datum_tx_item_token_create(&l_emission_hash, l_ticker); dap_chain_tx_in_t *l_in = dap_chain_datum_tx_item_in_create(&l_tx_prev_hash, 0); - dap_chain_tx_out_t *l_out = dap_chain_datum_tx_item_out_create(l_addr, l_emission_value); + dap_chain_256_tx_out_t *l_out = dap_chain_datum_tx_item_out_create(l_addr, l_emission_value); // pack items to transaction dap_chain_datum_tx_add_item(&l_tx, (const uint8_t*) l_tx_token); diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c index 4c854b9756..fdc7d4e0bd 100644 --- a/modules/net/dap_chain_node_cli_cmd_tx.c +++ b/modules/net/dap_chain_node_cli_cmd_tx.c @@ -34,6 +34,7 @@ #include "dap_list.h" #include "dap_hash.h" +#include "dap_chain_cell.h" #include "dap_chain_datum.h" #include "dap_chain_datum_token.h" #include "dap_chain_datum_tx_items.h" @@ -165,7 +166,6 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum, dap_chain_addr_to_str(&((dap_chain_256_tx_out_t*)item)->addr)); break; } - case TX_ITEM_TYPE_256_TOKEN: case TX_ITEM_TYPE_TOKEN: l_hash_str_tmp = dap_chain_hash_fast_to_str_new(&((dap_chain_tx_token_t*)item)->header.token_emission_hash); dap_string_append_printf(a_str_out, "\t TOKEN:\n" @@ -424,25 +424,6 @@ static void s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum, dap_string_append_printf(a_str_out, "\n"); } -/*static char* dap_db_new_history_timestamp() -{ - static pthread_mutex_t s_mutex = PTHREAD_MUTEX_INITIALIZER; - // get unique key - pthread_mutex_lock(&s_mutex); - static time_t s_last_time = 0; - static uint64_t s_suffix = 0; - time_t l_cur_time = time(NULL); - if(s_last_time == l_cur_time) - s_suffix++; - else { - s_suffix = 0; - s_last_time = l_cur_time; - } - char *l_str = dap_strdup_printf("%lld_%lld", (uint64_t) l_cur_time, s_suffix); - pthread_mutex_unlock(&s_mutex); - return l_str; -}*/ - // for dap_db_history_tx & dap_db_history_addr() static dap_chain_datum_t* get_prev_tx(dap_tx_data_t *a_tx_data) { @@ -495,16 +476,10 @@ char* dap_db_history_tx(dap_chain_hash_fast_t* a_tx_hash, dap_chain_t * a_chain, dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*) l_datum->data; // find Token items - present in emit transaction - // dap_list_t *l_list_tx_token = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_TOKEN, NULL); - dap_list_t *l_list_tx_token; - if ( l_type_256 ) // 256 - l_list_tx_token = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_256_TOKEN, NULL); - else - l_list_tx_token = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_TOKEN, NULL); + 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 = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_OUT, NULL); dap_list_t *l_list_out_items; if ( l_type_256 ) // 256 @@ -1202,21 +1177,12 @@ static char* dap_db_history_filter(dap_chain_t * a_chain, dap_ledger_t *a_ledger break; // case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_256_ATOM_OWNER: // 256 case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_ATOM_OWNER: - if ( l_token_em->hdr.version == 1 ) { // && l_token_em->hdr.type_256 ) { // 256 - dap_string_append_printf(l_str_out, " value_start: %s(%s), codename: %s\n", - dap_chain_balance_to_coins(dap_chain_uint128_from_uint256(l_token_em->data.type_atom_owner.value_start_256)), - dap_chain_u256tostr(l_token_em->data.type_atom_owner.value_start_256), - l_token_em->data.type_atom_owner.value_change_algo_codename - ); - } else { - dap_string_append_printf(l_str_out, " value_start: %.0Lf(%"DAP_UINT64_FORMAT_U"), codename: %s\n", - dap_chain_datoshi_to_coins(l_token_em->data.type_atom_owner.value_start), - l_token_em->data.type_atom_owner.value_start, - l_token_em->data.type_atom_owner.value_change_algo_codename - ); - } + dap_string_append_printf(l_str_out, " value_start: %.0Lf(%"DAP_UINT64_FORMAT_U"), codename: %s\n", + dap_chain_datoshi_to_coins(l_token_em->data.type_atom_owner.value_start), + l_token_em->data.type_atom_owner.value_start, + l_token_em->data.type_atom_owner.value_change_algo_codename + ); break; - // case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_256_SMART_CONTRACT: case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_SMART_CONTRACT: { char *l_addr = dap_chain_addr_to_str(&l_token_em->data.type_presale.addr); // get time of create datum diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h index 58ea4b07db..d686c6d0f6 100644 --- a/modules/net/include/dap_chain_net.h +++ b/modules/net/include/dap_chain_net.h @@ -176,7 +176,7 @@ dap_chain_net_t **dap_chain_net_list(uint16_t *a_size); bool dap_chain_net_get_add_gdb_group(dap_chain_net_t *a_net, dap_chain_node_addr_t a_node_addr); int dap_chain_net_verify_datum_for_add(dap_chain_net_t *a_net, dap_chain_datum_t * a_datum ); -void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_datum, const char *a_hash_out_type); +void dap_chain_net_dump_datum(dap_string_t *a_str_out, dap_chain_datum_t *a_datum, const char *a_hash_out_type); void dap_chain_net_set_srv_callback_notify(dap_global_db_obj_callback_notify_t a_callback); void dap_chain_net_sync_gdb_broadcast(void *a_arg, const char a_op_code, const char *a_group, const char *a_key, const void *a_value, const size_t a_value_len); diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index a46defbea4..b5cb68d088 100644 --- a/modules/type/blocks/dap_chain_cs_blocks.c +++ b/modules/type/blocks/dap_chain_cs_blocks.c @@ -521,7 +521,7 @@ static int s_cli_blocks(int a_argc, char ** a_argv, char **a_str_reply) ctime_r(&l_datum_ts_create, buf); dap_string_append_printf(l_str_tmp,"\t\t\t\tts_create=%s\n", buf); dap_string_append_printf(l_str_tmp,"\t\t\t\tdata_size=%u\n", l_datum->header.data_size); - dap_chain_net_dump_datum(l_str_tmp, l_datum, "hex" ); + dap_chain_net_dump_datum(l_str_tmp, l_datum, "hex"); } // Signatures dap_string_append_printf(l_str_tmp,"\t\tsignatures:\tcount: %zu\n",l_block_cache->sign_count ); diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index 4aeec1806a..7bf68b5cd9 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -89,7 +89,7 @@ static dap_chain_atom_ptr_t s_chain_callback_atom_add_from_treshold(dap_chain_t static dap_chain_atom_verify_res_t s_chain_callback_atom_verify(dap_chain_t * a_chain, dap_chain_atom_ptr_t , size_t); // Verify new event in dag static size_t s_chain_callback_atom_get_static_hdr_size(void); // Get dag event header size -static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain ); +static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain, dap_chain_cell_id_t a_cell_id); static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create_from(dap_chain_t * , dap_chain_atom_ptr_t , size_t); @@ -305,14 +305,7 @@ static int s_dap_chain_add_atom_to_ledger(dap_chain_cs_dag_t * a_dag, dap_ledger } break; case DAP_CHAIN_DATUM_TOKEN_EMISSION: { -<<<<<<< HEAD - // dap_chain_datum_token_emission_t *l_token_em = (dap_chain_datum_token_emission_t*) l_datum->data; - // l_token_em->hdr.type_value_256 = l_datum->header.type_id == DAP_CHAIN_DATUM_256_TOKEN_EMISSION ? - // true : false; - return dap_chain_ledger_token_emission_load(a_ledger, (dap_chain_datum_token_emission_t*) l_datum->data, l_datum->header.data_size); -======= return dap_chain_ledger_token_emission_load(a_ledger, l_datum->data, l_datum->header.data_size); ->>>>>>> bugfix-5311 } break; case DAP_CHAIN_DATUM_TX: { @@ -994,10 +987,11 @@ static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create_from(dap_chain_t * @param a_chain * @return */ -static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_chain ) +static dap_chain_atom_iter_t *s_chain_callback_atom_iter_create(dap_chain_t *a_chain, dap_chain_cell_id_t a_cell_id) { dap_chain_atom_iter_t * l_atom_iter = DAP_NEW_Z(dap_chain_atom_iter_t); l_atom_iter->chain = a_chain; + l_atom_iter->cell_id = a_cell_id; pthread_rwlock_rdlock(&a_chain->atoms_rwlock); #ifdef WIN32 log_it(L_DEBUG, "! Create caller id %lu", GetThreadId(GetCurrentThread())); @@ -1005,6 +999,7 @@ static dap_chain_atom_iter_t* s_chain_callback_atom_iter_create(dap_chain_t * a_ return l_atom_iter; } + /** * @brief s_chain_callback_atom_get_datum Get the datum from event * @param a_atom_iter @@ -1042,7 +1037,14 @@ static dap_chain_atom_ptr_t s_chain_callback_atom_iter_get_first(dap_chain_atom_ assert(l_dag); dap_chain_cs_dag_pvt_t *l_dag_pvt = PVT(l_dag); assert(l_dag_pvt); - a_atom_iter->cur_item = l_dag_pvt->events; + a_atom_iter->cur_item = NULL; + dap_chain_cs_dag_event_item_t *l_item_tmp, *l_item_cur; + HASH_ITER(hh, l_dag_pvt->events, l_item_cur, l_item_tmp) { + if (l_item_cur->event->header.cell_id.uint64 == a_atom_iter->cell_id.uint64) { + a_atom_iter->cur_item = l_item_cur; + break; + } + } if ( a_atom_iter->cur_item ){ a_atom_iter->cur = ((dap_chain_cs_dag_event_item_t*) a_atom_iter->cur_item)->event; a_atom_iter->cur_size = ((dap_chain_cs_dag_event_item_t*) a_atom_iter->cur_item)->event_size; @@ -1058,6 +1060,7 @@ static dap_chain_atom_ptr_t s_chain_callback_atom_iter_get_first(dap_chain_atom_ return a_atom_iter->cur; } + /** * @brief s_chain_callback_atom_iter_get_lasts * @param a_atom_iter @@ -1190,23 +1193,23 @@ static dap_chain_datum_tx_t* s_chain_callback_atom_iter_find_by_tx_hash(dap_chai */ static dap_chain_atom_ptr_t s_chain_callback_atom_iter_get_next( dap_chain_atom_iter_t * a_atom_iter,size_t * a_atom_size ) { - if (a_atom_iter->cur ){ - //dap_chain_cs_dag_pvt_t* l_dag_pvt = PVT(DAP_CHAIN_CS_DAG(a_atom_iter->chain)); - dap_chain_cs_dag_event_item_t * l_event_item = (dap_chain_cs_dag_event_item_t*) a_atom_iter->cur_item; - a_atom_iter->cur_item = l_event_item->hh.next; - l_event_item = (dap_chain_cs_dag_event_item_t*) a_atom_iter->cur_item; - // if l_event_item=NULL then items are over - a_atom_iter->cur = l_event_item ? l_event_item->event : NULL; - a_atom_iter->cur_size = a_atom_iter->cur ? l_event_item->event_size : 0; - a_atom_iter->cur_hash = l_event_item ? &l_event_item->hash : NULL; - if(a_atom_size) - *a_atom_size = a_atom_iter->cur_size; - return a_atom_iter->cur; - }else - return NULL; - + dap_chain_cs_dag_event_item_t * l_event_item = (dap_chain_cs_dag_event_item_t*) a_atom_iter->cur_item; + while (l_event_item) { + l_event_item = (dap_chain_cs_dag_event_item_t *)l_event_item->hh.next; + if (l_event_item && l_event_item->event->header.cell_id.uint64 == a_atom_iter->cell_id.uint64) + break; + } + // if l_event_item=NULL then items are over + a_atom_iter->cur_item = l_event_item; + a_atom_iter->cur = l_event_item ? l_event_item->event : NULL; + a_atom_iter->cur_size = a_atom_iter->cur ? l_event_item->event_size : 0; + a_atom_iter->cur_hash = l_event_item ? &l_event_item->hash : NULL; + if(a_atom_size) + *a_atom_size = a_atom_iter->cur_size; + return a_atom_iter->cur; } + /** * @brief s_chain_callback_atom_iter_delete Delete dag event iterator * @param a_atom_iter -- GitLab