From ce02e5727932b7a99c878bfcfdd71050cdcf7bc5 Mon Sep 17 00:00:00 2001
From: Aleksey Feoktistov <aleksey@synestproject.com>
Date: Tue, 7 Dec 2021 12:03:27 +0500
Subject: [PATCH] [*] fixes

---
 modules/chain/dap_chain_ledger.c              | 11 +--
 .../common/include/dap_chain_datum_token.h    |  3 +-
 modules/net/dap_chain_net.c                   | 30 ++++----
 modules/net/dap_chain_node_cli_cmd.c          | 74 ++++++++++++-------
 4 files changed, 71 insertions(+), 47 deletions(-)

diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index 59e87cd51a..ba54cceed2 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -500,11 +500,12 @@ static int s_token_tsd_parse(dap_ledger_t * a_ledger, dap_chain_ledger_token_ite
             }break;
 
             // set total supply
-            case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY:{
-                a_token_item->total_supply = dap_chain_datum_token_is_old(a_token->type) 
-                            ? GET_256_FROM_128(dap_tsd_get_scalar(l_tsd,uint64_t)) 
-                            : dap_tsd_get_scalar(l_tsd,uint256_t); // 256
-                // a_token_item->total_supply = GET_256_FROM_128(dap_tsd_get_scalar(l_tsd,uint64_t));
+            case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY_256:{ // 256
+                a_token_item->total_supply = dap_tsd_get_scalar(l_tsd,uint256_t); 
+            }break;
+
+            case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY:{ // 128
+                a_token_item->total_supply = GET_256_FROM_128(dap_tsd_get_scalar(l_tsd,uint128_t));
             }break;
 
             // Set total signs count value to set to be valid
diff --git a/modules/common/include/dap_chain_datum_token.h b/modules/common/include/dap_chain_datum_token.h
index 8a6ef75ec5..53939e9808 100644
--- a/modules/common/include/dap_chain_datum_token.h
+++ b/modules/common/include/dap_chain_datum_token.h
@@ -196,7 +196,8 @@ static inline uint16_t dap_chain_datum_token_flag_from_str(const char* a_str)
 #define DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_UNSET_FLAGS         0x0002
 
 // Total supply limits
-#define DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY        0x0003
+#define DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY        0x0003 // 128
+#define DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY_256    0x0026 // 256
 
 // Set total signs count value to set to be valid
 #define DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID   0x0004
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 927f51bb81..e2548f03a5 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -2631,15 +2631,15 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
                                     dap_chain_datum_token_flags_dump(a_str_out,
                                                                      dap_tsd_get_scalar(l_tsd, uint16_t));
                                 break;
-                                case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY:
-                                    if ( dap_chain_datum_token_is_old(l_token->type) )
-                                        dap_string_append_printf(a_str_out,"total_supply: %s\n",
-                                                            dap_chain_balance_print(
-                                                                dap_tsd_get_scalar(l_tsd, uint128_t)));
-                                    else  // 256
-                                        dap_string_append_printf(a_str_out,"total_supply: %s\n",
-                                                            dap_chain_u256tostr(
-                                                                    dap_tsd_get_scalar(l_tsd, uint256_t)));
+                                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_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)));
                                 break;
                                 case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID :
                                     dap_string_append_printf(a_str_out,"total_signs_valid: %u\n",
@@ -2743,15 +2743,15 @@ void dap_chain_net_dump_datum(dap_string_t * a_str_out, dap_chain_datum_t * a_da
                                 return;
                             }
                             switch( l_tsd->type){
-                                case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY:
-                                    if ( dap_chain_datum_token_is_old(l_token->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_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)));
-                                    else  // 256
-                                        dap_string_append_printf(a_str_out,"total_supply: %s\n",
-                                                            dap_chain_u256tostr(
-                                                                    dap_tsd_get_scalar(l_tsd, uint256_t)));
                                 break;
                                 case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID :
                                     dap_string_append_printf(a_str_out,"total_signs_valid: %u\n",
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index c85e049e4a..75e348ad4e 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -2493,7 +2493,7 @@ int com_token_update(int a_argc, char ** a_argv, char ** a_str_reply)
     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;
+        l_type = DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE; // 256
     } else {
         dap_chain_node_cli_set_reply_text(a_str_reply, "token_update can't accept type \"%s\"", l_type_str);
         return -22;
@@ -2556,19 +2556,15 @@ int com_token_update(int a_argc, char ** a_argv, char ** a_str_reply)
                         return -10;
                     }
                 } else if ( strcmp( a_argv[l_arg_index],"-total_supply" )==0){ // Total supply
-                    // uint128_t l_param_value = dap_chain_balance_scan(l_arg_param);
-                    // uint256_t l_param_value = GET_256_FROM_128(dap_chain_balance_scan(l_arg_param)); // 256
-                    // dap_tsd_t * l_tsd = dap_tsd_create_scalar(
-                    //                             DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY, l_param_value);
                     dap_tsd_t * l_tsd;
-                    if ( dap_chain_datum_token_is_old(l_type) ) {
-                        uint128_t l_param_value = dap_chain_balance_scan(l_arg_param);
+                    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)); // 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, l_param_value);
+                                                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);
@@ -2658,7 +2654,7 @@ int com_token_update(int a_argc, char ** a_argv, char ** a_str_reply)
 
             // Create new datum token
             l_datum_token_update = DAP_NEW_Z_SIZE(dap_chain_datum_token_t, sizeof(dap_chain_datum_token_t)+l_tsd_total_size ) ;
-            l_datum_token_update->type = DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE;
+            l_datum_token_update->type = DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE; // 256
             dap_snprintf(l_datum_token_update->ticker, sizeof(l_datum_token_update->ticker), "%s", l_ticker);
             l_datum_token_update->header_private_update.tsd_total_size = l_tsd_total_size;
 
@@ -2880,14 +2876,15 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply)
                          l_str_flags++;
                      }
                 } else if ( strcmp( a_argv[l_arg_index],"-total_supply" )==0){ // Total supply
-                    // uint128_t l_param_value = dap_chain_balance_scan(l_arg_param);
                     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, l_param_value);
-                    } else {
+                        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);
+                        l_tsd = dap_tsd_create_scalar(
+                                        DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY, l_param_value);
                     }
                     dap_list_append( l_tsd_list, l_tsd);
                     l_tsd_total_size+= dap_tsd_size( l_tsd);
@@ -2980,11 +2977,16 @@ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply)
                     continue;
                 }
                 switch (l_tsd->type){
-                    case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY: {
+                    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 = l_type == DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_DECL 
-                                        ? dap_chain_u256tostr(dap_tsd_get_scalar(l_tsd, uint256_t))
-                                        : dap_chain_balance_print(dap_tsd_get_scalar(l_tsd, uint128_t));
+                        l_balance = dap_chain_balance_print(dap_tsd_get_scalar(l_tsd, uint128_t));
                         log_it(L_DEBUG,"== TOTAL_SUPPLY: %s", l_balance);
                         DAP_DELETE(l_balance);
                     }
@@ -3423,15 +3425,23 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
         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 emission %s is placed in datum pool", l_emission_hash_str_new);
+                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);
             else
-                str_reply_tmp = dap_strdup_printf("Datum emission %s is placed in datum pool", l_emission_hash_str_base58);
+                str_reply_tmp = dap_strdup_printf("Datum%s emission %s is placed in datum pool",
+                            (l_datum_emission->header.type_id == DAP_CHAIN_DATUM_256_TOKEN_EMISSION ? " 256_t" : ""),
+                            l_emission_hash_str_base58);
         }
         else {
             if(!dap_strcmp(l_hash_out_type,"hex"))
-                dap_chain_node_cli_set_reply_text(a_str_reply, "Datum emission %s is not placed in datum pool", l_emission_hash_str_new);
+                dap_chain_node_cli_set_reply_text(a_str_reply, "Datum%s emission %s is not placed in datum pool",
+                            (l_datum_emission->header.type_id == DAP_CHAIN_DATUM_256_TOKEN_EMISSION ? " 256_t" : ""),
+                            l_emission_hash_str_new);
             else
-                dap_chain_node_cli_set_reply_text(a_str_reply, "Datum emission %s is not placed in datum pool", l_emission_hash_str_base58);
+                dap_chain_node_cli_set_reply_text(a_str_reply, "Datum%s emission %s is not placed in datum pool", 
+                            (l_datum_emission->header.type_id == DAP_CHAIN_DATUM_256_TOKEN_EMISSION ? " 256_t" : ""),
+                            l_emission_hash_str_base58);
             DAP_DEL_Z(l_emission_hash_str_new);
             l_emission_hash_str = NULL;
             DAP_DEL_Z(l_emission_hash_str_base58);
@@ -3518,16 +3528,28 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
     if(dap_chain_global_db_gr_set(dap_strdup(l_tx_hash_str), l_datum_tx, l_datum_tx_size
             , l_gdb_group_mempool_base_tx)) {
         if(!dap_strcmp(l_hash_out_type,"hex"))
-            dap_chain_node_cli_set_reply_text(a_str_reply, "%s\ndatum tx %s is placed in datum pool ", str_reply_tmp, l_tx_hash_str);
+            dap_chain_node_cli_set_reply_text(a_str_reply, "%s\ndatum%s tx %s is placed in datum pool ",
+                            str_reply_tmp,
+                            (l_datum_tx->header.type_id == DAP_CHAIN_DATUM_256_TX ? " 256_t" : ""),
+                            l_tx_hash_str);
         else
-            dap_chain_node_cli_set_reply_text(a_str_reply, "%s\ndatum tx %s is placed in datum pool ", str_reply_tmp, l_tx_hash_str_base58);
+            dap_chain_node_cli_set_reply_text(a_str_reply, "%s\ndatum%s tx %s is placed in datum pool ",
+                            str_reply_tmp,
+                            (l_datum_tx->header.type_id == DAP_CHAIN_DATUM_256_TX ? " 256_t" : ""),
+                            l_tx_hash_str_base58);
         DAP_DEL_Z(l_tx_hash_str);
         DAP_DEL_Z(l_tx_hash_str_base58);
     } else {
         if(!dap_strcmp(l_hash_out_type,"hex"))
-            dap_chain_node_cli_set_reply_text(a_str_reply, "%s\ndatum tx %s is not placed in datum pool ", str_reply_tmp, l_emission_hash_str);
+            dap_chain_node_cli_set_reply_text(a_str_reply, "%s\ndatum%s tx %s is not placed in datum pool ",
+                            str_reply_tmp,
+                            (l_datum_tx->header.type_id == DAP_CHAIN_DATUM_256_TX ? " 256_t" : ""),
+                            l_emission_hash_str);
         else
-            dap_chain_node_cli_set_reply_text(a_str_reply, "%s\ndatum tx %s is not placed in datum pool ", str_reply_tmp, l_tx_hash_str_base58);
+            dap_chain_node_cli_set_reply_text(a_str_reply, "%s\ndatum%s tx %s is not placed in datum pool ",
+                            str_reply_tmp,
+                            (l_datum_tx->header.type_id == DAP_CHAIN_DATUM_256_TX ? " 256_t" : ""),
+                            l_tx_hash_str_base58);
         DAP_DEL_Z(l_tx_hash_str);
         DAP_DEL_Z(l_tx_hash_str_base58);
 
-- 
GitLab