diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c index 72febb8922a11d6f9c35cb0d2c067a5826af66f6..031b3ebffe787f381a9cc175f629239d14a36e10 100644 --- a/modules/common/dap_chain_datum_token.c +++ b/modules/common/dap_chain_datum_token.c @@ -125,13 +125,58 @@ dap_chain_datum_token_tsd_t* dap_chain_datum_token_tsd_get(dap_chain_datum_token void dap_chain_datum_token_flags_dump(dap_string_t * a_str_out, uint16_t a_flags) { if(!a_flags){ - dap_string_append_printf(a_str_out, "<NONE>\n"); + dap_string_append_printf(a_str_out, "%s\n", + c_dap_chain_datum_token_flag_str[DAP_CHAIN_DATUM_TOKEN_FLAG_NONE]); return; } - for ( uint16_t i = 0; (2^i) <=DAP_CHAIN_DATUM_TOKEN_FLAG_MAX; i++ ){ - if( a_flags & (2^i) ) - dap_string_append_printf(a_str_out,"%s%s", c_dap_chain_datum_token_flag_str[2^i], - (2^i)==DAP_CHAIN_DATUM_TOKEN_FLAG_MAX?",":"\n" ); + bool is_first = true; + for ( uint16_t i = 0; i <= DAP_CHAIN_DATUM_TOKEN_FLAG_MAX; i++){ + if( a_flags & (1 << i) ){ + if(is_first) + is_first = false; + else + dap_string_append_printf(a_str_out,", "); + dap_string_append_printf(a_str_out,"%s", c_dap_chain_datum_token_flag_str[i]); + } + if(i == DAP_CHAIN_DATUM_TOKEN_FLAG_MAX) + dap_string_append_printf(a_str_out, "\n"); } } + +/** + * @brief dap_chain_datum_token_certs_dump + * @param a_str_out + * @param a_data_n_tsd + * @param a_certs_size + */ +void dap_chain_datum_token_certs_dump(dap_string_t * a_str_out, byte_t * a_data_n_tsd, size_t a_certs_size) { + dap_string_append_printf(a_str_out, "signatures: "); + if (!a_certs_size) { + dap_string_append_printf(a_str_out, "<NONE>\n"); + return; + } + + dap_string_append_printf(a_str_out, "\n"); + + size_t l_offset = 0; + for (int i = 1; l_offset < (a_certs_size); i++) { + dap_sign_t *l_sign = (dap_sign_t *) (a_data_n_tsd + l_offset); + l_offset += dap_sign_get_size(l_sign); + if (l_sign->header.sign_size == 0) { + dap_string_append_printf(a_str_out, "<CORRUPTED - 0 size signature>\n"); + continue; + } + + dap_chain_hash_fast_t l_pkey_hash = {0}; + if (dap_sign_get_pkey_hash(l_sign, &l_pkey_hash) == false) { + dap_string_append_printf(a_str_out, "<CORRUPTED - can't calc hash>\n"); + continue; + } + + char *l_hash_str = dap_chain_hash_fast_to_str_new(&l_pkey_hash); + + dap_string_append_printf(a_str_out, "%d) %s, %s, %lu bytes\n", i, l_hash_str, + dap_sign_type_to_str(l_sign->header.type), l_sign->header.sign_size); + } +} diff --git a/modules/common/include/dap_chain_datum_token.h b/modules/common/include/dap_chain_datum_token.h index 32e2f42eb5787b38fb40bb1ebb78bbbdd80ee4c5..d130cec690b5597b0cd196cf8b8974d980de3709 100644 --- a/modules/common/include/dap_chain_datum_token.h +++ b/modules/common/include/dap_chain_datum_token.h @@ -237,6 +237,7 @@ extern const char *c_dap_chain_datum_token_emission_type_str[]; dap_chain_datum_token_tsd_t * dap_chain_datum_token_tsd_create(uint16_t a_type, const void * a_data, size_t a_data_size); dap_chain_datum_token_tsd_t* dap_chain_datum_token_tsd_get(dap_chain_datum_token_t * a_token, size_t a_token_size); void dap_chain_datum_token_flags_dump(dap_string_t * a_str_out, uint16_t a_flags); +void dap_chain_datum_token_certs_dump(dap_string_t * a_str_out, byte_t * a_data_n_tsd, size_t a_certs_size); #define dap_chain_datum_token_tsd_create_scalar(type,value) dap_chain_datum_token_tsd_create (type, &value, sizeof(value) ) #define dap_chain_datum_token_tsd_get_scalar(a,typeconv) *((typeconv*) a->data) diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 30e9e292fa1acf50b62c867a96d97b9275ef2a7a..04cbb57a92b7dd73f18fa2c9d9eb2bfee969b350 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -2217,7 +2217,7 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da if(l_tsd->size == sizeof(dap_chain_hash_fast_t) ){ char *l_hash_str = dap_chain_hash_fast_to_str_new( (dap_chain_hash_fast_t*) l_tsd->data ); - dap_string_append_printf(a_str_out,"total_signs_remoev: %s\n", l_hash_str ); + dap_string_append_printf(a_str_out,"total_signs_remove: %s\n", l_hash_str ); DAP_DELETE( l_hash_str ); }else dap_string_append_printf(a_str_out,"total_signs_add: <WRONG SIZE %zd>\n", l_tsd->size); @@ -2281,13 +2281,14 @@ 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,"type: PRIVATE_DECL\n"); dap_string_append_printf(a_str_out,"flags: "); dap_chain_datum_token_flags_dump(a_str_out, l_token->header_private_decl.flags); - dap_chain_datum_token_tsd_t * l_tsd = dap_chain_datum_token_tsd_get(l_token, l_token_size); - if (l_tsd == NULL) + dap_chain_datum_token_tsd_t * l_tsd_first = dap_chain_datum_token_tsd_get(l_token, l_token_size); + if (l_tsd_first == NULL) dap_string_append_printf(a_str_out,"<CORRUPTED TSD SECTION>\n"); else{ size_t l_offset = 0; size_t l_offset_max = l_token->header_private_decl.tsd_total_size; while( l_offset< l_offset_max){ + dap_chain_datum_token_tsd_t * l_tsd = (void*)l_tsd_first + l_offset; if ( (l_tsd->size+l_offset) >l_offset_max){ log_it(L_WARNING, "<CORRUPTED TSD> too big size %zd when left maximum %zd", l_tsd->size, l_offset_max - l_offset); @@ -2295,7 +2296,7 @@ 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: - dap_string_append_printf(a_str_out,"total_supply: %u\n", + dap_string_append_printf(a_str_out,"total_supply: %lu\n", dap_chain_datum_token_tsd_get_scalar(l_tsd, uint128_t) ); break; case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID : @@ -2332,6 +2333,9 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da } } + + int 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_TOKEN_TYPE_PUBLIC:{ dap_string_append_printf(a_str_out,"type: PUBLIC\n"); diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 1513a12acc6be27e541c70dbba42ca760b2024b5..b4272b63e2e90185c59ae6861523363424cbffe9 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -2294,7 +2294,7 @@ int com_token_update(int argc, char ** argv, void *arg_func, char ** a_str_reply dap_chain_node_cli_set_reply_text(a_str_reply, "Flag can't be \"%s\"",*l_str_flags); return -20; } - l_flags |= l_flag; + l_flags |= (1<<l_flag); l_str_flags++; } // Add flags as set_flags TDS section @@ -2337,6 +2337,7 @@ int com_token_update(int argc, char ** argv, void *arg_func, char ** a_str_reply l_tsd_total_size+= dap_chain_datum_token_tsd_size( l_tsd); }else if ( strcmp( argv[l_arg_index],"-total_signs_valid" )==0){ // Signs valid uint16_t l_param_value = (uint16_t)atoi(l_arg_param); + l_signs_total = l_param_value; dap_chain_datum_token_tsd_t * l_tsd = dap_chain_datum_token_tsd_create_scalar( DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID, l_param_value); dap_list_append( l_tsd_list, l_tsd); @@ -2604,7 +2605,7 @@ int com_token_decl(int argc, char ** argv, void *arg_func, char ** a_str_reply) dap_chain_node_cli_set_reply_text(a_str_reply, "Flag can't be \"%s\"",*l_str_flags); return -20; } - l_flags |= l_flag; + l_flags |= (1<<l_flag); l_str_flags++; } } else if ( strcmp( argv[l_arg_index],"-total_supply" )==0){ // Total supply @@ -2613,8 +2614,9 @@ int com_token_decl(int argc, char ** argv, void *arg_func, char ** a_str_reply) DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY, l_param_value); dap_list_append( l_tsd_list, l_tsd); l_tsd_total_size+= dap_chain_datum_token_tsd_size( l_tsd); - }else if ( strcmp( argv[l_arg_index],"-signs_valid" )==0){ // Signs valid + }else if ( strcmp( argv[l_arg_index],"-total_signs_valid" )==0){ // Signs valid uint16_t l_param_value = (uint16_t)atoi(l_arg_param); + l_signs_total = l_param_value; dap_chain_datum_token_tsd_t * l_tsd = dap_chain_datum_token_tsd_create_scalar( DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID, l_param_value); dap_list_append( l_tsd_list, l_tsd); @@ -2700,7 +2702,7 @@ int com_token_decl(int argc, char ** argv, void *arg_func, char ** a_str_reply) } switch (l_tsd->type){ case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY: - log_it(L_DEBUG,"== TOTAL_SUPPLY: %llf.20", + log_it(L_DEBUG,"== TOTAL_SUPPLY: %0.9llf", dap_chain_balance_to_coins( dap_chain_datum_token_tsd_get_scalar(l_tsd,uint128_t) ) ); break; case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID: