diff --git a/modules/common/dap_chain_datum.c b/modules/common/dap_chain_datum.c index 7cd147dee2503cc39b68cd5f73ce1477831c261a..da5b9e9d81bd476a6556a0edd34a50fda5610771 100644 --- a/modules/common/dap_chain_datum.c +++ b/modules/common/dap_chain_datum.c @@ -887,7 +887,7 @@ void dap_chain_datum_dump_json(json_object *a_obj_out, dap_chain_datum_t *a_dat json_object_object_add(json_obj_datum,"auth signs total",json_object_new_uint64(l_token->signs_total)); json_object_object_add(json_obj_datum,"total_supply",json_object_new_string(dap_uint256_to_char(l_token->total_supply, NULL))); - dap_chain_datum_token_flags_dump_to_json(json_obj_datum,l_token->header_private_update.flags); + dap_chain_datum_token_flags_dump_to_json(json_obj_datum,l_token->header_private_decl.flags); dap_datum_token_dump_tsd_to_json(json_obj_datum,l_token, l_token_size, a_hash_out_type); size_t l_certs_field_size = l_token_size - sizeof(*l_token) - l_token->header_private_update.tsd_total_size; dap_chain_datum_token_certs_dump_to_json(json_obj_datum,l_token->tsd_n_signs + l_token->header_private_update.tsd_total_size, @@ -926,7 +926,6 @@ void dap_chain_datum_dump_json(json_object *a_obj_out, dap_chain_datum_t *a_dat json_object_object_add(json_obj_datum,"auth signs total",json_object_new_uint64(l_token->signs_total)); json_object_object_add(json_obj_datum,"total_supply",json_object_new_string(dap_uint256_to_char(l_token->total_supply, NULL))); - dap_chain_datum_token_flags_dump_to_json(json_obj_datum, l_token->header_private_update.flags); dap_datum_token_dump_tsd_to_json(json_obj_datum, l_token, l_token_size, a_hash_out_type); size_t l_certs_field_size = l_token_size - sizeof(*l_token) - l_token->header_private_update.tsd_total_size; dap_chain_datum_token_certs_dump_to_json(json_obj_datum, l_token->tsd_n_signs + l_token->header_private_update.tsd_total_size, @@ -939,7 +938,6 @@ void dap_chain_datum_dump_json(json_object *a_obj_out, dap_chain_datum_t *a_dat json_object_object_add(json_obj_datum,"auth signs total",json_object_new_uint64(l_token->signs_total)); json_object_object_add(json_obj_datum,"total_supply",json_object_new_string(dap_uint256_to_char(l_token->total_supply, NULL))); - dap_chain_datum_token_flags_dump_to_json(json_obj_datum, l_token->header_native_update.flags); dap_datum_token_dump_tsd_to_json(json_obj_datum, l_token, l_token_size, a_hash_out_type); size_t l_certs_field_size = l_token_size - sizeof(*l_token) - l_token->header_native_update.tsd_total_size; dap_chain_datum_token_certs_dump_to_json(json_obj_datum, l_token->tsd_n_signs + l_token->header_native_update.tsd_total_size, diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c index 3dbb112d9375e75e874d9daa728cf622fc907a9d..30a7eccab318c9d17f95c5b733ddc152cc7ac322 100644 --- a/modules/common/dap_chain_datum_token.c +++ b/modules/common/dap_chain_datum_token.c @@ -113,7 +113,6 @@ dap_chain_datum_token_t *dap_chain_datum_token_read(const byte_t *a_token_serial *l_token = (dap_chain_datum_token_t) { .type = DAP_CHAIN_DATUM_TOKEN_TYPE_UPDATE, .subtype = DAP_CHAIN_DATUM_TOKEN_SUBTYPE_PRIVATE, - .header_private_update.flags = l_token_old->header_private_update.flags, .header_private_update.tsd_total_size = l_token_old->header_private_update.tsd_total_size, .header_private_update.decimals = l_token_old->header_private_update.decimals }; @@ -133,7 +132,6 @@ dap_chain_datum_token_t *dap_chain_datum_token_read(const byte_t *a_token_serial *l_token = (dap_chain_datum_token_t) { .type = DAP_CHAIN_DATUM_TOKEN_TYPE_UPDATE, .subtype = DAP_CHAIN_DATUM_TOKEN_SUBTYPE_NATIVE, - .header_native_update.flags = l_token_old->header_native_update.flags, .header_native_update.tsd_total_size = l_token_old->header_native_update.tsd_total_size, .header_native_update.decimals = l_token_old->header_native_update.decimals }; diff --git a/modules/common/include/dap_chain_datum_token.h b/modules/common/include/dap_chain_datum_token.h index 0ca591b61e41fca0575a5ce2451d86c6ae9fa7da..fbd34ed4db77ed1dbaa60977c7121170eedcedd0 100644 --- a/modules/common/include/dap_chain_datum_token.h +++ b/modules/common/include/dap_chain_datum_token.h @@ -108,13 +108,13 @@ typedef struct dap_chain_datum_token { } DAP_ALIGN_PACKED header_native_decl; // Private token update struct { - uint16_t flags; // Token declaration flags + uint16_t padding; // OLD token declaration flags uint64_t tsd_total_size; // Data size section with values in key-length-value list trailing the signs section uint16_t decimals; } DAP_ALIGN_PACKED header_private_update; // native token update struct { - uint16_t flags; // Token declaration flags + uint16_t padding; // OLD Token declaration flags uint64_t tsd_total_size; // Data size section with values in key-length-value list trailing the signs section uint16_t decimals; } DAP_ALIGN_PACKED header_native_update; diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 2f80da55f3bd3943a1a03295dc3dd14fc76b3d49..a1777fa114e544b8e024d44d1963faa7dccb5b5d 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -4119,7 +4119,7 @@ static int s_parse_common_token_decl_arg(int a_argc, char ** a_argv, void **a_st return 0; } -static int s_parse_additional_token_decl_arg(int a_argc, char ** a_argv, void **a_str_reply, dap_sdk_cli_params* a_params) +static int s_parse_additional_token_decl_arg(int a_argc, char ** a_argv, void **a_str_reply, dap_sdk_cli_params* a_params, bool a_update_token) { dap_cli_server_cmd_find_option_val(a_argv, 0, a_argc, "-flags", &a_params->ext.flags); dap_cli_server_cmd_find_option_val(a_argv, 0, a_argc, "-total_signs_valid", &a_params->ext.total_signs_valid); @@ -4141,19 +4141,58 @@ static int s_parse_additional_token_decl_arg(int a_argc, char ** a_argv, void ** char ** l_str_flags = NULL; a_params->ext.parsed_tsd_size = 0; - if (a_params->ext.flags){ // Flags - l_str_flags = dap_strsplit(a_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); - return -20; - } - l_flags |= l_flag; // if we have multiple flags - l_str_flags++; + if (!a_update_token) { + if (a_params->ext.flags){ // Flags + l_str_flags = dap_strsplit(a_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); + return -20; + } + l_flags |= l_flag; // if we have multiple flags + l_str_flags++; + } + } + a_params->ext.parsed_flags = l_flags; + } else { + const char *l_set_flags = NULL; + const char *l_unset_flags = NULL; + dap_cli_server_cmd_find_option_val(a_argv, 0, a_argc, "-flag_set", &l_set_flags); + dap_cli_server_cmd_find_option_val(a_argv, 0, a_argc, "-flag_unset", &l_unset_flags); + if (l_set_flags) { + l_str_flags = dap_strsplit(l_set_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); + return -20; + } + l_flags |= l_flag; // if we have multiple flags + l_str_flags++; + } + dap_tsd_t *l_flag_set_tsd = dap_tsd_create_scalar(DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_SET_FLAGS, l_flags); + 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); + } + if (l_unset_flags) { + l_str_flags = dap_strsplit(l_unset_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); + return -20; + } + l_flags |= l_flag; // if we have multiple flags + l_str_flags++; + } + dap_tsd_t *l_flag_unset_tsd = dap_tsd_create_scalar(DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_UNSET_FLAGS, l_flags); + 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_flags = l_flags; const char* l_new_certs_str = NULL; const char* l_remove_signs = NULL; @@ -4233,7 +4272,7 @@ static int s_token_decl_check_params(int a_argc, char **a_argv, void **a_str_rep if (l_parse_params) return l_parse_params; - l_parse_params = s_parse_additional_token_decl_arg(a_argc,a_argv,a_str_reply,a_params); + l_parse_params = s_parse_additional_token_decl_arg(a_argc,a_argv,a_str_reply,a_params, a_update_token); if (l_parse_params) return l_parse_params; @@ -4730,7 +4769,7 @@ int com_token_update(int a_argc, char ** a_argv, void **a_str_reply) if (l_params->subtype == DAP_CHAIN_DATUM_TOKEN_SUBTYPE_NATIVE) { log_it(L_DEBUG,"Prepared TSD sections for CF20 token on %zd total size", l_params->ext.tsd_total_size); snprintf(l_datum_token->ticker, sizeof(l_datum_token->ticker), "%s", l_ticker); - l_datum_token->header_native_update.flags = l_params->ext.parsed_flags; + // l_datum_token->header_native_update.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_native_update.tsd_total_size = l_params->ext.tsd_total_size; @@ -4739,7 +4778,7 @@ int com_token_update(int a_argc, char ** a_argv, void **a_str_reply) } else { // if (l_params->type == DAP_CHAIN_DATUM_TOKEN_TYPE_PRIVATE_UPDATE) { log_it(L_DEBUG,"Prepared TSD sections for private token on %zd total size", l_params->ext.tsd_total_size); snprintf(l_datum_token->ticker, sizeof(l_datum_token->ticker), "%s", l_ticker); - l_datum_token->header_private_update.flags = l_params->ext.parsed_flags; + // l_datum_token->header_private_update.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_update.tsd_total_size = l_params->ext.tsd_total_size;