diff --git a/dap-sdk/core/include/dap_math_ops.h b/dap-sdk/core/include/dap_math_ops.h index 946a6be6a7d73a15f754e79674d421c7779df43f..5cc8142dd9757d042dc4b9b9403d092c02bf7a58 100755 --- a/dap-sdk/core/include/dap_math_ops.h +++ b/dap-sdk/core/include/dap_math_ops.h @@ -33,13 +33,18 @@ typedef unsigned __int128 uint128_t; typedef union uint128 { struct{ - uint64_t hi; uint64_t lo; - } DAP_ALIGN_PACKED; - uint64_t u64[2]; - uint32_t u32[4]; + uint64_t hi; + } DAP_ALIGN_PACKED; + struct{ + uint32_t c; + uint32_t d; + uint32_t a; + uint32_t b; + } DAP_ALIGN_PACKED u32; } uint128_t; + typedef union int128 { int64_t i64[2]; int32_t i32[4]; @@ -52,12 +57,12 @@ typedef int128_t _dap_int128_t; typedef struct uint256 { uint128_t hi; uint128_t lo; -} uint256_t; +} DAP_ALIGN_PACKED uint256_t; typedef struct uint512 { uint256_t hi; uint256_t lo; -} uint512_t; +} DAP_ALIGN_PACKED uint512_t; #endif //defined(__GNUC__) || defined (__clang__) @@ -68,9 +73,9 @@ typedef struct uint512 { // 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 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}) diff --git a/dap-sdk/net/stream/stream/include/dap_stream.h b/dap-sdk/net/stream/stream/include/dap_stream.h index baa5a86ba0f68b3856418e377c545148eb4ab29f..b6685a93c473da560e390b0bee0ec031698962a9 100644 --- a/dap-sdk/net/stream/stream/include/dap_stream.h +++ b/dap-sdk/net/stream/stream/include/dap_stream.h @@ -53,7 +53,8 @@ typedef struct dap_stream { int id; dap_stream_session_t * session; dap_events_socket_t * esocket; // Connection - uint128_t esocket_uuid; + // uint128_t esocket_uuid; + uint64_t esocket_uuid; dap_stream_worker_t * stream_worker; struct dap_http_client * conn_http; // HTTP-specific diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c index ba54cceed23c06d607448a2840580fee99ce8e4d..5f99b6083339ac399c6f3eccff42a7a5f3a6c28e 100644 --- a/modules/chain/dap_chain_ledger.c +++ b/modules/chain/dap_chain_ledger.c @@ -3038,12 +3038,6 @@ bool dap_chain_ledger_tx_hash_is_used_out_item(dap_ledger_t *a_ledger, dap_chain uint256_t dap_chain_ledger_calc_balance(dap_ledger_t *a_ledger, const dap_chain_addr_t *a_addr, const char *a_token_ticker) { -// #ifdef DAP_GLOBAL_IS_INT128 -// uint128_t l_ret = 0; -// #else -// uint128_t l_ret = {}; -// #endif - //uint128_t l_ret = uint128_0; uint256_t l_ret = uint256_0; dap_ledger_wallet_balance_t *l_balance_item = NULL;// ,* l_balance_item_tmp = NULL; @@ -3069,12 +3063,6 @@ uint256_t dap_chain_ledger_calc_balance(dap_ledger_t *a_ledger, const dap_chain_ 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) { -// #ifdef DAP_GLOBAL_IS_INT128 -// uint128_t balance = 0; -// #else -// uint128_t balance = {0}; -// #endif - //uint128_t balance = uint128_0; uint256_t balance = uint256_0; if(!a_addr || !dap_chain_addr_check_sum(a_addr)) diff --git a/modules/common/dap_chain_common.c b/modules/common/dap_chain_common.c index 8b6c329fa58bc9e1af94ac13dfb6ee1364ca94d8..0a1409b07a81529c0e8b9c40a06aaff3c7cadb93 100644 --- a/modules/common/dap_chain_common.c +++ b/modules/common/dap_chain_common.c @@ -299,10 +299,10 @@ uint64_t dap_chain_uint128_to(uint128_t a_from) } return (uint64_t)a_from; #else - if (a_from.u64[0]) { + if (a_from.hi) { log_it(L_ERROR, "Can't convert balance to uint64_t. It's too big."); } - return a_from.u64[1]; + return a_from.lo; #endif } @@ -315,8 +315,9 @@ uint64_t dap_chain_uint256_to(uint256_t a_from) // for tests char *dap_chain_u256tostr(uint256_t v_256) { - char *dest = malloc(130 * sizeof(char)); - return strcpy(dest, dap_utoa128((char[130]){}, dap_chain_uint128_from_uint256(v_256), 10)); + //char *dest = malloc(130 * sizeof(char)); + //return strcpy(dest, dap_utoa128((char[130]){}, dap_chain_uint128_from_uint256(v_256), 10)); + return dap_chain_balance_print(dap_chain_uint128_from_uint256(v_256)); } @@ -331,21 +332,22 @@ char *dap_chain_balance_print(uint128_t a_balance) l_value /= 10; } while (l_value); #else + uint32_t l_tmp[4] = {l_value.u32.a, l_value.u32.b, l_value.u32.c, l_value.u32.d}; uint64_t t, q; do { q = 0; // Byte order is 1, 0, 3, 2 for little endian for (int i = 1; i <= 3; ) { - t = q << 32 | l_value.u32[i]; + t = q << 32 | l_tmp[i]; q = t % 10; - l_value.u32[i] = t / 10; + l_tmp[i] = t / 10; if (i == 2) i = 4; // end of cycle if (i == 3) i = 2; if (i == 0) i = 3; if (i == 1) i = 0; } l_buf[l_pos++] = q + '0'; - } while (l_value.u32[2]); + } while (l_tmp[2]); #endif int l_strlen = strlen(l_buf) - 1; for (int i = 0; i < (l_strlen + 1) / 2; i++) { @@ -376,7 +378,7 @@ char *dap_chain_balance_to_coins(uint128_t a_balance) return l_buf; } -const union { uint64_t u64[2]; uint32_t u32[4]; } c_pow10[DATOSHI_POW + 1] = { +const union { uint64_t u64[2]; uint32_t u32[4]; } DAP_ALIGN_PACKED c_pow10[DATOSHI_POW + 1] = { { .u64 = {0, 1ULL} }, // 0 { .u64 = {0, 10ULL} }, // 1 { .u64 = {0, 100ULL} }, // 2 @@ -421,11 +423,7 @@ const union { uint64_t u64[2]; uint32_t u32[4]; } c_pow10[DATOSHI_POW + 1] = { uint128_t dap_chain_balance_scan(char *a_balance) { int l_strlen = strlen(a_balance); -#ifdef DAP_GLOBAL_IS_INT128 - uint128_t l_ret = 0, l_nul = 0; -#else - uint128_t l_ret = {}, l_nul = {}; -#endif + uint128_t l_ret = uint128_0, l_nul = uint128_0; if (l_strlen > DATOSHI_POW + 1) return l_nul; for (int i = 0; i < l_strlen ; i++) { @@ -443,41 +441,36 @@ uint128_t dap_chain_balance_scan(char *a_balance) log_it(L_WARNING, "Input number is too big"); return l_nul; } - l_tmp = (l_tmp << 64) + c_pow10[i].u64[1] * l_digit; - // l_ret = dap_uint128_add(l_ret, l_tmp); + l_tmp = (l_tmp << 64) + (uint128_t)c_pow10[i].u64[1] * l_digit; SUM_128_128(l_ret, l_tmp, &l_ret); if (l_ret == l_nul) return l_nul; #else uint128_t l_tmp; - l_tmp.u64[0] = 0; - l_tmp.u64[1] = c_pow10[i].u32[2] * l_digit; - // l_ret = dap_uint128_add(l_ret, l_tmp); + l_tmp.hi = 0; + l_tmp.lo = (uint64_t)c_pow10[i].u32[2] * (uint64_t)l_digit; SUM_128_128(l_ret, l_tmp, &l_ret); - if (l_ret.u64[0] == 0 && l_ret.u64[1] == 0) + if (l_ret.hi == 0 && l_ret.lo == 0) return l_nul; - uint64_t l_mul = c_pow10[i].u32[3] * l_digit; - l_tmp.u64[1] = l_mul << 32; - l_tmp.u64[0] = l_mul >> 32; - // l_ret = dap_uint128_add(l_ret, l_tmp); + uint64_t l_mul = (uint64_t)c_pow10[i].u32[3] * (uint64_t)l_digit; + l_tmp.lo = l_mul << 32; + l_tmp.hi = l_mul >> 32; SUM_128_128(l_ret, l_tmp, &l_ret); - if (l_ret.u64[0] == 0 && l_ret.u64[1] == 0) + if (l_ret.hi == 0 && l_ret.lo == 0) return l_nul; - l_tmp.u64[1] = 0; - l_tmp.u64[0] = c_pow10[i].u32[0] * l_digit; - //l_ret = dap_uint128_add(l_ret, l_tmp); + l_tmp.lo = 0; + l_tmp.hi = (uint64_t)c_pow10[i].u32[0] * (uint64_t)l_digit; SUM_128_128(l_ret, l_tmp, &l_ret); - if (l_ret.u64[0] == 0 && l_ret.u64[1] == 0) + if (l_ret.hi == 0 && l_ret.lo == 0) return l_nul; - l_mul = c_pow10[i].u32[1] * l_digit; + l_mul = (uint64_t)c_pow10[i].u32[1] * (uint64_t)l_digit; if (l_mul >> 32) { log_it(L_WARNING, "Input number is too big"); return l_nul; } - l_tmp.u64[0] = l_mul << 32; - //l_ret = dap_uint128_add(l_ret, l_tmp); + l_tmp.hi = l_mul << 32; SUM_128_128(l_ret, l_tmp, &l_ret); - if (l_ret.u64[0] == 0 && l_ret.u64[1] == 0) + if (l_ret.hi == 0 && l_ret.lo == 0) return l_nul; #endif } @@ -486,11 +479,7 @@ uint128_t dap_chain_balance_scan(char *a_balance) uint128_t dap_chain_coins_to_balance(char *a_coins) { -#ifdef DAP_GLOBAL_IS_INT128 - uint128_t l_ret = 0, l_nul = 0; -#else - uint128_t l_ret = {}, l_nul = {}; -#endif + uint128_t l_ret = uint128_0, l_nul = uint128_0; if (strlen(a_coins) > DATOSHI_POW + 2) { log_it(L_WARNING, "Incorrect balance format - too long"); return l_nul; diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 75e348ad4ef6424351e4790cf25de256a8574429..1501362a3e9153ccbd704a5cd70863da455f243a 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -3255,7 +3255,7 @@ 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 = GET_256_FROM_128(dap_strtou128(str_tmp, NULL, 10)); + l_emission_value = GET_256_FROM_128(dap_chain_balance_scan(str_tmp)); } if( EQUAL_256(l_emission_value, uint256_0) ) { diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c index 7fb56397a1f65f2911732a3eb67ff22b72b94d63..accf1657ecf370c428e75e960008ddf9deb441c6 100644 --- a/modules/net/dap_chain_node_cli_cmd_tx.c +++ b/modules/net/dap_chain_node_cli_cmd_tx.c @@ -1256,8 +1256,8 @@ static char* dap_db_history_token_list(dap_chain_t * a_chain, const char *a_toke 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: %.0Lf(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n", - dap_chain_datoshi_to_coins(l_token->header_public.total_supply), + " 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_token->header_public.flags, dap_chain_balance_print(l_token->header_public.premine_supply), @@ -1417,8 +1417,8 @@ static char* dap_db_history_filter(dap_chain_t * a_chain, dap_ledger_t *a_ledger 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: %.0Lf(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n", - dap_chain_datoshi_to_coins(l_token->header_public.total_supply), + " 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_token->header_public.flags, dap_chain_balance_print(l_token->header_public.premine_supply),