diff --git a/dap-sdk/core/include/dap_math_ops.h b/dap-sdk/core/include/dap_math_ops.h index b7bd03b4b92c4d74ddcb833184e97b19137e8a12..bd75c7acc2f7cf9769a85468aa193e59f65b037d 100755 --- a/dap-sdk/core/include/dap_math_ops.h +++ b/dap-sdk/core/include/dap_math_ops.h @@ -18,13 +18,22 @@ typedef __int128 int128_t; typedef unsigned __int128 uint128_t; #endif - #else // __SIZEOF_INT128__ == 16 + typedef union uint128 { - uint64_t u64[2]; - uint32_t u32[4]; + struct{ + uint64_t lo; + 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]; @@ -40,4 +49,3 @@ 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); - diff --git a/dap-sdk/core/src/dap_math_ops.c b/dap-sdk/core/src/dap_math_ops.c index 502d7ecb60a71c242b8d3be79fd396d683baa5b8..ff70f40e8549d3d708b95405b0baba4321efafd7 100644 --- a/dap-sdk/core/src/dap_math_ops.c +++ b/dap-sdk/core/src/dap_math_ops.c @@ -39,14 +39,14 @@ uint128_t dap_uint128_substract(uint128_t a, uint128_t b) return a - b; #else uint128_t l_ret = {}; - if (a.u64[0] < b.u64[0] || (a.u64[0] == b.u64[0] && a.u64[1] < b.u64[1])) { + if (a.hi < b.hi || (a.hi == b.hi && a.lo < b.lo)) { log_it(L_WARNING, "Substract result overflow"); return l_ret; } - l_ret.u64[0] = a.u64[0] - b.u64[0]; - l_ret.u64[1] = a.u64[1] - b.u64[1]; - if (a.u64[1] < b.u64[1]) - l_ret.u64[0]--; + l_ret.hi = a.hi - b.hi; + l_ret.lo = a.lo - b.lo; + if (a.lo < b.lo) + l_ret.hi--; return l_ret; #endif } @@ -67,11 +67,11 @@ uint128_t dap_uint128_add(uint128_t a, uint128_t b) } #else uint128_t l_ret = {}; - l_ret.u64[0] = a.u64[0] + b.u64[0]; - l_ret.u64[1] = a.u64[1] + b.u64[1]; - if (l_ret.u64[1] < a.u64[1] || l_ret.u64[1] < b.u64[1]) - l_ret.u64[0]++; - if (l_ret.u64[0] < a.u64[0] || l_ret.u64[0] < b.u64[0]) { + l_ret.hi = a.hi + b.hi; + l_ret.lo = a.lo + b.lo; + if (l_ret.lo < a.lo || l_ret.lo < b.lo) + l_ret.hi++; + if (l_ret.hi < a.hi || l_ret.hi < b.hi) { log_it(L_WARNING, "Sum result overflow"); uint128_t l_nul = {}; return l_nul; @@ -91,7 +91,7 @@ bool dap_uint128_check_equal(uint128_t a, uint128_t b) #ifdef DAP_GLOBAL_IS_INT128 return a == b; #else - return a.u64[0]==b.u64[0] && a.u64[1]==b.u64[1]; + return a.hi==b.hi && a.lo==b.lo; #endif } 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 792a6d978297f494055b52d0404ae9e243ea8518..b6150a0e5e2ca7af04fa048be2b0a9ac224789a3 100644 --- a/modules/chain/dap_chain_ledger.c +++ b/modules/chain/dap_chain_ledger.c @@ -2621,8 +2621,8 @@ uint128_t dap_chain_ledger_calc_balance(dap_ledger_t *a_ledger, const dap_chain_ pthread_rwlock_unlock(&PVT(a_ledger)->balance_accounts_rwlock); if (l_balance_item) { if(s_debug_more) - log_it (L_INFO,"Found address in cache with balance %"DAP_UINT64_FORMAT_U"", - dap_chain_uint128_to(l_balance_item->balance)); + log_it (L_INFO,"Found address in cache with balance %s", + dap_chain_balance_print(l_balance_item->balance)); l_ret = l_balance_item->balance; } else { if (s_debug_more) diff --git a/modules/common/dap_chain_common.c b/modules/common/dap_chain_common.c index 3189c9ec51e390b3fe0ae5c596c51b256626d4df..d10e19b974ab94ef3718ca3128b1f183dfba843b 100644 --- a/modules/common/dap_chain_common.c +++ b/modules/common/dap_chain_common.c @@ -290,10 +290,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 } @@ -308,21 +308,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++) { @@ -426,30 +427,30 @@ uint128_t dap_chain_balance_scan(char *a_balance) 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_tmp.hi = 0; + l_tmp.lo = c_pow10[i].u32[2] * l_digit; l_ret = dap_uint128_add(l_ret, l_tmp); - 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_tmp.lo = l_mul << 32; + l_tmp.hi = l_mul >> 32; l_ret = dap_uint128_add(l_ret, l_tmp); - 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_tmp.lo = 0; + l_tmp.hi = c_pow10[i].u32[0] * l_digit; l_ret = dap_uint128_add(l_ret, l_tmp); - 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; if (l_mul >> 32) { log_it(L_WARNING, "Input number is too big"); return l_nul; } - l_tmp.u64[0] = l_mul << 32; + l_tmp.hi = l_mul << 32; l_ret = dap_uint128_add(l_ret, l_tmp); - if (l_ret.u64[0] == 0 && l_ret.u64[1] == 0) + if (l_ret.hi == 0 && l_ret.lo == 0) return l_nul; #endif } diff --git a/modules/common/include/dap_chain_common.h b/modules/common/include/dap_chain_common.h index 3a6f8fb209fadcb90199ea01ec90876f1a199962..2d1e24def5b95443da24da1acac4515c6b6cb71f 100644 --- a/modules/common/include/dap_chain_common.h +++ b/modules/common/include/dap_chain_common.h @@ -247,7 +247,8 @@ 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 = { .u64 = {0, a_from} }; + // uint128_t l_ret = { .u64 = {0, a_from} }; + uint128_t l_ret = { .hi=0, .lo=a_from }; return l_ret; #endif } diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c index b2e69b18ba1a486b287f9fa4006f80fb4882e373..e19b286d93ae76b7eb5313f30a3c2c7a81dab956 100644 --- a/modules/net/dap_chain_node_cli_cmd_tx.c +++ b/modules/net/dap_chain_node_cli_cmd_tx.c @@ -805,8 +805,9 @@ static char* dap_db_history_token_list(dap_chain_t * a_chain, const char *a_toke case DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC: { char *l_addr = dap_chain_addr_to_str(&l_token->header_public.premine_address); dap_string_append_printf(l_str_out, - " total_supply: %.0Lf(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n", - l_token->header_public.total_supply / DATOSHI_LD, + " total_supply: %s(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n", + // l_token->header_public.total_supply / DATOSHI_LD, + 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), @@ -936,8 +937,9 @@ static char* dap_db_history_filter(dap_chain_t * a_chain, dap_ledger_t *a_ledger case DAP_CHAIN_DATUM_TOKEN_TYPE_PUBLIC: { char *l_addr = dap_chain_addr_to_str(&l_token->header_public.premine_address); dap_string_append_printf(l_str_out, - " total_supply: %.0Lf(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n", - l_token->header_public.total_supply / DATOSHI_LD, + " total_supply: %s(%s), flags: 0x%x\n, premine_supply: %s, premine_address '%s'\n", + //l_token->header_public.total_supply / DATOSHI_LD, + 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),