diff --git a/modules/common/dap_chain_datum.c b/modules/common/dap_chain_datum.c index 8394a83ea5872759fe1a25480b7602c486bfc783..3587a86f450529fa9cc03d9fcb7bb386adfe9eab 100644 --- a/modules/common/dap_chain_datum.c +++ b/modules/common/dap_chain_datum.c @@ -150,7 +150,7 @@ void dap_datum_token_dump_tsd_to_json(json_object * json_obj_out, dap_chain_datu DAP_DEL_Z(balance); }continue; case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_DATUM_TYPE_ALLOWED_ADD : - json_object_object_add(json_obj_out, "datum_type_allowed_add", json_object_new_string(dap_tsd_get_string_const(l_tsd))); + json_object_object_add(json_obj_out, "datum_type_allowed_add", json_object_new_string(dap_tsd_get_string_const(l_tsd))); continue; case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_DATUM_TYPE_ALLOWED_REMOVE : json_object_object_add(json_obj_out, "datum_type_allowed_remove", json_object_new_string(dap_tsd_get_string_const(l_tsd))); @@ -161,30 +161,38 @@ void dap_datum_token_dump_tsd_to_json(json_object * json_obj_out, dap_chain_datu case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_DATUM_TYPE_BLOCKED_REMOVE: json_object_object_add(json_obj_out, "datum_type_blocked_remove", json_object_new_string(dap_tsd_get_string_const(l_tsd))); continue; - case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_ADD: - json_object_object_add(json_obj_out, "tx_sender_allowed_add", json_object_new_string(dap_tsd_get_string_const(l_tsd))); - continue; - case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_REMOVE: - json_object_object_add(json_obj_out, "tx_sender_allowed_remove", json_object_new_string(dap_tsd_get_string_const(l_tsd))); - continue; - case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_ADD: - json_object_object_add(json_obj_out, "tx_sender_blocked_add", json_object_new_string(dap_tsd_get_string_const(l_tsd))); - continue; - case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_REMOVE: - json_object_object_add(json_obj_out, "tx_sender_blocked_remove", json_object_new_string(dap_tsd_get_string_const(l_tsd))); - continue; - case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_ADD: - json_object_object_add(json_obj_out, "tx_receiver_allowed_add", json_object_new_string(dap_tsd_get_string_const(l_tsd))); - continue; - case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_REMOVE: - json_object_object_add(json_obj_out, "tx_receiver_allowed", json_object_new_string(dap_tsd_get_string_const(l_tsd))); - continue; - case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_BLOCKED_ADD: - json_object_object_add(json_obj_out, "tx_receiver_blocked_add", json_object_new_string(dap_tsd_get_string_const(l_tsd))); - continue; - case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_BLOCKED_REMOVE: - json_object_object_add(json_obj_out, "tx_receiver_blocked_remove", json_object_new_string(dap_tsd_get_string_const(l_tsd))); - continue; + case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_ADD: { + dap_chain_addr_t *l_addr = dap_tsd_get_object(l_tsd, dap_chain_addr_t); + json_object_object_add(json_obj_out, "tx_sender_allowed_add", json_object_new_string(dap_chain_addr_to_str_static(l_addr))); + } continue; + case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_REMOVE:{ + dap_chain_addr_t *l_addr = dap_tsd_get_object(l_tsd, dap_chain_addr_t); + json_object_object_add(json_obj_out, "tx_sender_allowed_remove", json_object_new_string(dap_chain_addr_to_str_static(l_addr))); + } continue; + case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_ADD: { + dap_chain_addr_t *l_addr = dap_tsd_get_object(l_tsd, dap_chain_addr_t); + json_object_object_add(json_obj_out, "tx_sender_blocked_add", json_object_new_string(dap_chain_addr_to_str_static(l_addr))); + } continue; + case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_REMOVE: { + dap_chain_addr_t *l_addr = dap_tsd_get_object(l_tsd, dap_chain_addr_t); + json_object_object_add(json_obj_out, "tx_sender_blocked_remove", json_object_new_string(dap_chain_addr_to_str_static(l_addr))); + } continue; + case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_ADD: { + dap_chain_addr_t *l_addr = dap_tsd_get_object(l_tsd, dap_chain_addr_t); + json_object_object_add(json_obj_out, "tx_receiver_allowed_add", json_object_new_string(dap_chain_addr_to_str_static(l_addr))); + } continue; + case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_REMOVE: { + dap_chain_addr_t *l_addr = dap_tsd_get_object(l_tsd, dap_chain_addr_t); + json_object_object_add(json_obj_out, "tx_receiver_allowed", json_object_new_string(dap_chain_addr_to_str_static(l_addr))); + } continue; + case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_BLOCKED_ADD: { + dap_chain_addr_t *l_addr = dap_tsd_get_object(l_tsd, dap_chain_addr_t); + json_object_object_add(json_obj_out, "tx_receiver_blocked_add", json_object_new_string(dap_chain_addr_to_str_static(l_addr))); + } continue; + case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_BLOCKED_REMOVE: { + dap_chain_addr_t *l_addr = dap_tsd_get_object(l_tsd, dap_chain_addr_t); + json_object_object_add(json_obj_out, "tx_receiver_blocked_remove", json_object_new_string(dap_chain_addr_to_str_static(l_addr))); + } continue; case DAP_CHAIN_DATUM_TOKEN_TSD_TOKEN_DESCRIPTION: json_object_object_add(json_obj_out, "description", json_object_new_string(dap_tsd_get_string_const(l_tsd))); continue; diff --git a/modules/common/include/dap_chain_datum_token.h b/modules/common/include/dap_chain_datum_token.h index 53c5ec4b30ceb0c0003cc12ba1baa598acec9364..8cbd69b20fa7d35b9a9eecc6eeabbed1c85d517a 100644 --- a/modules/common/include/dap_chain_datum_token.h +++ b/modules/common/include/dap_chain_datum_token.h @@ -33,6 +33,7 @@ #include "json_object.h" +#define DAP_CHAIN_DATUM_NONCE_SIZE 64 // Token declaration typedef struct dap_chain_datum_token_old { uint16_t type; @@ -124,8 +125,9 @@ typedef struct dap_chain_datum_token { uint256_t premine_supply; dap_chain_addr_t premine_address; } DAP_ALIGN_PACKED header_public; - byte_t header[256]; // For future changes + byte_t header[192]; // For future changes }; + uint8_t nonce[DAP_CHAIN_DATUM_NONCE_SIZE]; byte_t tsd_n_signs[]; // Signs and/or types-size-data sections } DAP_ALIGN_PACKED dap_chain_datum_token_t; @@ -293,7 +295,6 @@ uint32_t dap_chain_datum_token_flag_from_str(const char *a_str); #define DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_REMOVE 0x0024 #define DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_CLEAR 0x0025 -#define DAP_CHAIN_DATUM_NONCE_SIZE 64 // Get delegated ticker DAP_STATIC_INLINE int dap_chain_datum_token_get_delegated_ticker(char *a_buf, const char *a_ticker) diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c index 4a1ca060763335d1f787054fd9c3935dc0ed2e28..9a0fa30d6976c2fa0bbf546ac55db24bddc4e4b2 100644 --- a/modules/net/dap_chain_ledger.c +++ b/modules/net/dap_chain_ledger.c @@ -2145,7 +2145,39 @@ json_object *s_token_item_to_json(dap_ledger_token_item_t *a_token_item) json_object_object_add(l_json_obj_out, "bytes", json_object_new_int(a_token_item->auth_pkeys[i]->header.size)); json_object_array_add(l_json_arr_pkeys, l_json_obj_out); } + json_object *l_json_arr_tx_recv_allow = json_object_new_array(); + for (size_t i = 0; i < a_token_item->tx_recv_allow_size; i++) { + dap_chain_addr_t l_addr = a_token_item->tx_recv_allow[i]; + const char *l_addr_str = dap_chain_addr_to_str_static(&l_addr); + json_object_array_add(l_json_arr_tx_recv_allow, json_object_new_string(l_addr_str)); + } + json_object *l_json_arr_tx_recv_block = json_object_new_array(); + for (size_t i = 0; i < a_token_item->tx_recv_block_size; i++) { + dap_chain_addr_t l_addr = a_token_item->tx_recv_block[i]; + const char *l_addr_str = dap_chain_addr_to_str_static(&l_addr); + json_object_array_add(l_json_arr_tx_recv_block, json_object_new_string(l_addr_str)); + } + json_object *l_json_arr_tx_send_allow = json_object_new_array(); + for (size_t i = 0; i < a_token_item->tx_send_allow_size; i++) { + dap_chain_addr_t l_addr = a_token_item->tx_send_allow[i]; + const char *l_addr_str = dap_chain_addr_to_str_static(&l_addr); + json_object_array_add(l_json_arr_tx_send_allow, json_object_new_string(l_addr_str)); + } + json_object *l_json_arr_tx_send_block = json_object_new_array(); + for (size_t i = 0; i < a_token_item->tx_send_block_size; i++) { + dap_chain_addr_t l_addr = a_token_item->tx_send_block[i]; + const char *l_addr_str = dap_chain_addr_to_str_static(&l_addr); + json_object_array_add(l_json_arr_tx_send_block, json_object_new_string(l_addr_str)); + } json_object_object_add(json_obj_datum, "Signatures public keys", l_json_arr_pkeys); + a_token_item->tx_recv_allow_size ? json_object_object_add(json_obj_datum, "tx_recv_allow", l_json_arr_tx_recv_allow) : + json_object_put(l_json_arr_tx_recv_allow); + a_token_item->tx_recv_block_size ? json_object_object_add(json_obj_datum, "tx_recv_block", l_json_arr_tx_recv_block) : + json_object_put(l_json_arr_tx_recv_block); + a_token_item->tx_send_allow_size ? json_object_object_add(json_obj_datum, "tx_send_allow", l_json_arr_tx_send_allow) : + json_object_put(l_json_arr_tx_send_allow); + a_token_item->tx_send_block_size ? json_object_object_add(json_obj_datum, "tx_send_block", l_json_arr_tx_send_block) : + json_object_put(l_json_arr_tx_send_block); json_object_object_add(json_obj_datum, "Total emissions", json_object_new_int(HASH_COUNT(a_token_item->token_emissions))); return json_obj_datum; } diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index ecd031bae9adcb64b94fa534ac6f296437413b84..42b92f8642adfc10cdbbefc3cd766aeff290df9f 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -4050,7 +4050,6 @@ typedef struct _dap_cli_token_additional_params { uint16_t parsed_flags; size_t tsd_total_size; byte_t *parsed_tsd; - size_t parsed_tsd_size; } dap_cli_token_additional_params; typedef struct _dap_sdk_cli_params { @@ -4204,7 +4203,6 @@ static int s_parse_additional_token_decl_arg(int a_argc, char ** a_argv, void ** size_t l_tsd_total_size = 0; uint16_t l_flags = 0; char ** l_str_flags = NULL; - a_params->ext.parsed_tsd_size = 0; if (!a_update_token) { if (a_params->ext.flags){ // Flags @@ -4219,7 +4217,6 @@ static int s_parse_additional_token_decl_arg(int a_argc, char ** a_argv, void ** l_str_flags++; } } - a_params->ext.parsed_flags = l_flags; } else { const char *l_set_flags = NULL; const char *l_unset_flags = NULL; @@ -4240,7 +4237,6 @@ static int s_parse_additional_token_decl_arg(int a_argc, char ** a_argv, void ** l_flags = 0; l_tsd_list = dap_list_append(l_tsd_list, l_flag_set_tsd); l_tsd_total_size += dap_tsd_size(l_flag_set_tsd); - a_params->ext.parsed_tsd_size += dap_tsd_size(l_flag_set_tsd); } if (l_unset_flags) { l_str_flags = dap_strsplit(l_unset_flags,",",0xffff ); @@ -4257,10 +4253,41 @@ static int s_parse_additional_token_decl_arg(int a_argc, char ** a_argv, void ** l_flags = 0; l_tsd_list = dap_list_append(l_tsd_list, l_flag_unset_tsd); l_tsd_total_size += dap_tsd_size(l_flag_unset_tsd); - a_params->ext.parsed_tsd_size += dap_tsd_size(l_flag_unset_tsd); } } + if (a_params->ext.total_signs_valid){ // Signs valid + uint16_t l_param_value = (uint16_t)atoi(a_params->ext.total_signs_valid); + dap_tsd_t * l_tsd = dap_tsd_create_scalar( + DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID, l_param_value); + l_tsd_list = dap_list_append(l_tsd_list, l_tsd); + l_tsd_total_size+= dap_tsd_size(l_tsd); + } + if (a_params->ext.datum_type_allowed){ + dap_tsd_t * l_tsd = dap_tsd_create_string( + DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_DATUM_TYPE_ALLOWED_ADD, a_params->ext.datum_type_allowed); + l_tsd_list = dap_list_append(l_tsd_list, l_tsd); + l_tsd_total_size+= dap_tsd_size(l_tsd); + } + if (a_params->ext.datum_type_blocked){ + dap_tsd_t * l_tsd = dap_tsd_create_string( + DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_DATUM_TYPE_BLOCKED_ADD, a_params->ext.datum_type_blocked); + l_tsd_list = dap_list_append(l_tsd_list, l_tsd); + l_tsd_total_size+= dap_tsd_size(l_tsd); + } + if (a_params->ext.tx_receiver_allowed) + l_tsd_list = s_parse_wallet_addresses(a_params->ext.tx_receiver_allowed, l_tsd_list, &l_tsd_total_size, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_ADD); + + if (a_params->ext.tx_receiver_blocked) + l_tsd_list = s_parse_wallet_addresses(a_params->ext.tx_receiver_blocked, l_tsd_list, &l_tsd_total_size, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_BLOCKED_ADD); + + if (a_params->ext.tx_sender_allowed) + l_tsd_list = s_parse_wallet_addresses(a_params->ext.tx_sender_allowed, l_tsd_list, &l_tsd_total_size, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_ADD); + + if (a_params->ext.tx_sender_blocked) + l_tsd_list = s_parse_wallet_addresses(a_params->ext.tx_sender_blocked, l_tsd_list, &l_tsd_total_size, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_ADD); + + const char* l_new_certs_str = NULL; const char* l_remove_signs = NULL; dap_cli_server_cmd_find_option_val(a_argv, 0, a_argc, "-new_certs", &l_new_certs_str); @@ -4310,7 +4337,6 @@ static int s_parse_additional_token_decl_arg(int a_argc, char ** a_argv, void ** dap_tsd_t *l_desc_token = dap_tsd_create_string(DAP_CHAIN_DATUM_TOKEN_TSD_TOKEN_DESCRIPTION, l_description); l_tsd_list = dap_list_append(l_tsd_list, l_desc_token); l_tsd_total_size += dap_tsd_size(l_desc_token); - a_params->ext.parsed_tsd_size += dap_tsd_size(l_desc_token); } size_t l_tsd_offset = 0; a_params->ext.parsed_tsd = DAP_NEW_SIZE(byte_t, l_tsd_total_size); @@ -4487,24 +4513,9 @@ int com_token_decl(int a_argc, char ** a_argv, void **a_str_reply) case DAP_CHAIN_DATUM_TOKEN_SUBTYPE_NATIVE: { // 256 dap_list_t *l_tsd_list = NULL; - size_t l_tsd_total_size = 0; - uint16_t l_flags = 0; - char ** l_str_flags = NULL; - - if (l_params->ext.flags){ // Flags - l_str_flags = dap_strsplit(l_params->ext.flags,",",0xffff ); - while (l_str_flags && *l_str_flags){ - uint16_t l_flag = dap_chain_datum_token_flag_from_str(*l_str_flags); - if (l_flag == DAP_CHAIN_DATUM_TOKEN_FLAG_UNDEFINED ){ - dap_cli_server_cmd_set_reply_text(a_str_reply, "Flag can't be \"%s\"",*l_str_flags); - DAP_DEL_Z(l_params); - return -20; - } - l_flags |= l_flag; // if we have multiple flags - l_str_flags++; - } - } - if (l_params->ext.delegated_token_from){ + size_t l_tsd_local_list_size = 0; + + if (l_params->ext.delegated_token_from){ dap_chain_datum_token_t *l_delegated_token_from; if (NULL == (l_delegated_token_from = dap_ledger_token_ticker_check(l_net->pub.ledger, l_params->ext.delegated_token_from))) { dap_cli_server_cmd_set_reply_text(a_str_reply,"To create a delegated token %s, can't find token by ticket %s", l_ticker, l_params->ext.delegated_token_from); @@ -4524,42 +4535,19 @@ int com_token_decl(int a_argc, char ** a_argv, void **a_str_reply) dap_tsd_t * l_tsd = dap_tsd_create_scalar( DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_DELEGATE_EMISSION_FROM_STAKE_LOCK, l_tsd_section); l_tsd_list = dap_list_append(l_tsd_list, l_tsd); - l_tsd_total_size+= dap_tsd_size(l_tsd); + l_tsd_local_list_size += dap_tsd_size(l_tsd); } - if (l_params->ext.total_signs_valid){ // Signs valid - uint16_t l_param_value = (uint16_t)atoi(l_params->ext.total_signs_valid); - l_signs_total = l_param_value; - dap_tsd_t * l_tsd = dap_tsd_create_scalar( - DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID, l_param_value); - l_tsd_list = dap_list_append(l_tsd_list, l_tsd); - l_tsd_total_size+= dap_tsd_size(l_tsd); - } - if (l_params->ext.datum_type_allowed){ - dap_tsd_t * l_tsd = dap_tsd_create_string( - DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_DATUM_TYPE_ALLOWED_ADD, l_params->ext.datum_type_allowed); - l_tsd_list = dap_list_append(l_tsd_list, l_tsd); - l_tsd_total_size+= dap_tsd_size(l_tsd); - } - if (l_params->ext.datum_type_blocked){ - dap_tsd_t * l_tsd = dap_tsd_create_string( - DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_DATUM_TYPE_BLOCKED_ADD, l_params->ext.datum_type_blocked); - l_tsd_list = dap_list_append(l_tsd_list, l_tsd); - l_tsd_total_size+= dap_tsd_size(l_tsd); + + if (l_params->ext.total_signs_valid) { + l_signs_total = (uint16_t)atoi(l_params->ext.total_signs_valid); } - if (l_params->ext.tx_receiver_allowed) - l_tsd_list = s_parse_wallet_addresses(l_params->ext.tx_receiver_allowed, l_tsd_list, &l_tsd_total_size, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_ADD); - if (l_params->ext.tx_receiver_blocked) - l_tsd_list = s_parse_wallet_addresses(l_params->ext.tx_receiver_blocked, l_tsd_list, &l_tsd_total_size, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_BLOCKED_ADD); - if (l_params->ext.tx_sender_allowed) - l_tsd_list = s_parse_wallet_addresses(l_params->ext.tx_sender_allowed, l_tsd_list, &l_tsd_total_size, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_ADD); + size_t l_tsd_total_size = l_tsd_local_list_size + l_params->ext.tsd_total_size; - if (l_params->ext.tx_sender_blocked) - l_tsd_list = s_parse_wallet_addresses(l_params->ext.tx_sender_blocked, l_tsd_list, &l_tsd_total_size, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_ADD); - if (l_params->ext.parsed_tsd) - l_tsd_total_size += l_params->ext.parsed_tsd_size; + // if (l_params->ext.parsed_tsd) + // l_tsd_total_size += l_params->ext.parsed_tsd_size; // Create new datum token @@ -4579,7 +4567,7 @@ int com_token_decl(int a_argc, char ** a_argv, void **a_str_reply) l_datum_token->header_private_decl.flags = l_params->ext.parsed_flags; l_datum_token->total_supply = l_total_supply; l_datum_token->signs_valid = l_signs_emission; - l_datum_token->header_private_decl.tsd_total_size = l_tsd_total_size; + l_datum_token->header_private_decl.tsd_total_size = l_tsd_local_list_size + l_params->ext.tsd_total_size; l_datum_token->header_private_decl.decimals = atoi(l_params->decimals_str); } else { //DAP_CHAIN_DATUM_TOKEN_TYPE_NATIVE_DECL log_it(L_DEBUG,"Prepared TSD sections for CF20 token on %zd total size", l_tsd_total_size); @@ -4676,6 +4664,7 @@ int com_token_decl(int a_argc, char ** a_argv, void **a_str_reply) DAP_DEL_Z(l_params); return -8; } + dap_uuid_generate_nonce(&l_datum_token->nonce, DAP_CHAIN_DATUM_NONCE_SIZE); // If we have more certs than we need signs - use only first part of the list if(l_certs_count > l_signs_total) l_certs_count = l_signs_total; @@ -4856,7 +4845,7 @@ int com_token_update(int a_argc, char ** a_argv, void **a_str_reply) // Add TSD sections in the end // Add TSD sections in the end if (l_params->ext.tsd_total_size) { - memcpy(l_datum_token->tsd_n_signs, l_params->ext.parsed_tsd, l_params->ext.parsed_tsd_size); + memcpy(l_datum_token->tsd_n_signs, l_params->ext.parsed_tsd, l_params->ext.tsd_total_size); DAP_DELETE(l_params->ext.parsed_tsd); } log_it(L_DEBUG, "%s token declaration update '%s' initialized", ( l_params->subtype == DAP_CHAIN_DATUM_TOKEN_SUBTYPE_PRIVATE) ? @@ -4882,6 +4871,7 @@ int com_token_update(int a_argc, char ** a_argv, void **a_str_reply) "Unknown token type"); return -8; } + dap_uuid_generate_nonce(&l_datum_token->nonce, DAP_CHAIN_DATUM_NONCE_SIZE); // If we have more certs than we need signs - use only first part of the list if(l_certs_count > l_signs_total) l_certs_count = l_signs_total;