From bd25405a9dc00f56f05ebbf9d0bb9f4fdb1cceca Mon Sep 17 00:00:00 2001 From: "pavel.uhanov" <pavel.uhanov@demlabs.net> Date: Thu, 26 Dec 2024 14:44:25 +0300 Subject: [PATCH] [*] fix errors --- modules/common/dap_chain_datum_decree.c | 9 +++---- .../common/include/dap_chain_datum_decree.h | 10 ++++++-- modules/net/dap_chain_net_decree.c | 6 ++--- .../dap_chain_net_srv_stake_pos_delegate.c | 25 ++++++++++++++++--- 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/modules/common/dap_chain_datum_decree.c b/modules/common/dap_chain_datum_decree.c index 46359e71bb..378cd6d030 100644 --- a/modules/common/dap_chain_datum_decree.c +++ b/modules/common/dap_chain_datum_decree.c @@ -149,14 +149,13 @@ int dap_chain_datum_decree_get_ban_addr(dap_chain_datum_decree_t *a_decree, cons return l_tsd ? ( *a_addr = dap_tsd_get_string_const(l_tsd), !dap_strcmp(*a_addr, DAP_TSD_CORRUPTED_STRING) ) : 1; } -int dap_chain_datum_decree_get_pkey(dap_chain_datum_decree_t *a_decree, dap_pkey_t **a_pkey) +dap_pkey_t *dap_chain_datum_decree_get_pkey(dap_chain_datum_decree_t *a_decree) { - dap_return_val_if_fail(a_decree, -1); + dap_return_val_if_fail(a_decree, NULL); dap_tsd_t *l_tsd = dap_tsd_find(a_decree->data_n_signs, a_decree->header.data_size, DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_PKEY); if (!l_tsd) - return -2; - dap_pkey_t *l_pkey = (dap_pkey_t *)l_tsd->data; - return dap_pkey_get_size(l_pkey) == l_tsd->size ? 0 : 1; + return NULL; + return dap_pkey_get_size((dap_pkey_t *)l_tsd->data) == l_tsd->size ? (dap_pkey_t *)l_tsd->data : NULL; } void dap_chain_datum_decree_dump_json(json_object *a_json_out, dap_chain_datum_decree_t *a_decree, size_t a_decree_size, const char *a_hash_out_type) diff --git a/modules/common/include/dap_chain_datum_decree.h b/modules/common/include/dap_chain_datum_decree.h index 82de683af3..4ff72f6f85 100644 --- a/modules/common/include/dap_chain_datum_decree.h +++ b/modules/common/include/dap_chain_datum_decree.h @@ -75,7 +75,7 @@ DAP_STATIC_INLINE size_t dap_chain_datum_decree_get_size(dap_chain_datum_decree_ #define DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_MAX_WEIGHT 0x000C #define DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_EMERGENCY_VALIDATORS 0x000D #define DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_CHECK_SIGNS_STRUCTURE 0x000E -#define DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_STAKE_UPDATE 0x000F +#define DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_STAKE_PKEY_UPDATE 0x000F // DECREE TSD types #define DAP_CHAIN_DATUM_DECREE_TSD_TYPE_VALUE 0x0100 @@ -125,6 +125,8 @@ DAP_STATIC_INLINE const char *dap_chain_datum_decree_subtype_to_str(uint16_t a_d return "DECREE_COMMON_SUBTYPE_EMERGENCY_VALIDATORS"; case DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_CHECK_SIGNS_STRUCTURE: return "DECREE_COMMON_SUBTYPE_CHECK_SIGNS_STRUCTURE"; + case DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_STAKE_PKEY_UPDATE: + return "DECREE_COMMON_SUBTYPE_STAKE_UPDATE"; default: return "DECREE_SUBTYPE_UNKNOWN"; } @@ -157,6 +159,8 @@ DAP_STATIC_INLINE uint16_t dap_chain_datum_decree_type_from_str(const char *a_de return DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_EMERGENCY_VALIDATORS; } else if (!dap_strcmp(a_decree_type, "check_signs_structure")) { return DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_CHECK_SIGNS_STRUCTURE; + } else if (!dap_strcmp(a_decree_type, "stake_update")) { + return DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_STAKE_PKEY_UPDATE; } else { return 0; } @@ -196,6 +200,8 @@ DAP_STATIC_INLINE const char *dap_chain_datum_decree_tsd_type_to_str(uint16_t a_ return "DAP_CHAIN_DATUM_DECREE_TSD_TYPE_ACTION"; case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_SIGNATURE_TYPE: return "DAP_CHAIN_DATUM_DECREE_TSD_TYPE_SIGNATURE_TYPE"; + case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_PKEY: + return "DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_PKEY"; default: return "DECREE_TSD_TYPE_UNKNOWN"; } @@ -303,7 +309,7 @@ int dap_chain_datum_decree_get_stake_min_signers_count(dap_chain_datum_decree_t int dap_chain_datum_decree_get_action(dap_chain_datum_decree_t *a_decree, uint8_t *a_action); int dap_chain_datum_decree_get_signature_type(dap_chain_datum_decree_t *a_decree, uint32_t *a_signature_type); int dap_chain_datum_decree_get_ban_addr(dap_chain_datum_decree_t *a_decree, const char **a_addr); -int dap_chain_datum_decree_get_pkey(dap_chain_datum_decree_t *a_decree, dap_pkey_t **a_pkey); +dap_pkey_t *dap_chain_datum_decree_get_pkey(dap_chain_datum_decree_t *a_decree); /** * @breif dap_chain_datum_decree_dump Dump information about decree diff --git a/modules/net/dap_chain_net_decree.c b/modules/net/dap_chain_net_decree.c index 3572c92cd7..ff0023527e 100644 --- a/modules/net/dap_chain_net_decree.c +++ b/modules/net/dap_chain_net_decree.c @@ -444,17 +444,17 @@ static int s_common_decree_handler(dap_chain_datum_decree_t *a_decree, dap_chain dap_chain_net_srv_stake_key_delegate(a_net, &l_addr, &l_hash, l_value, &l_node_addr, NULL); break; - case DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_STAKE_UPDATE: + case DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_STAKE_PKEY_UPDATE: if (!a_anchored) break; if (!a_apply) break; dap_pkey_t *l_pkey = NULL; - if (dap_chain_datum_decree_get_pkey(a_decree, &l_pkey)){ + if (! (l_pkey = dap_chain_datum_decree_get_pkey(a_decree)) ){ log_it(L_WARNING,"Can't get pkey from decree."); return -105; } - dap_chain_net_srv_stake_pkey_update(a_net, &l_pkey); + dap_chain_net_srv_stake_pkey_update(a_net, l_pkey); break; case DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_STAKE_INVALIDATE: { if (dap_chain_datum_decree_get_stake_signing_addr(a_decree, &l_addr)){ diff --git a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c index 10ade02f17..497c05e900 100644 --- a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c +++ b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c @@ -1261,7 +1261,7 @@ static dap_chain_datum_decree_t *s_decree_pkey_update(dap_chain_net_t *a_net, da } l_decree->header.common_decree_params.chain_id = l_chain->id; l_decree->header.common_decree_params.cell_id = *dap_chain_net_get_cur_cell(a_net); - l_decree->header.sub_type = DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_STAKE_UPDATE; + l_decree->header.sub_type = DAP_CHAIN_DATUM_DECREE_COMMON_SUBTYPE_STAKE_PKEY_UPDATE; l_decree->header.data_size = l_total_tsd_size; l_decree->header.signs_size = 0; dap_tsd_write((byte_t*)l_decree->data_n_signs, DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_PKEY, a_pkey, dap_pkey_get_size(a_pkey)); @@ -3335,6 +3335,11 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, void **a_str_reply) dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_SRV_STAKE_NET_ERR, "Network %s not found", l_net_str); return DAP_CHAIN_NODE_CLI_SRV_STAKE_NET_ERR; } + dap_chain_net_srv_stake_t *l_srv_stake = s_srv_stake_by_net_id(l_net->pub.id); + if (!l_srv_stake) { + dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_SRV_STAKE_NO_STAKE_IN_NET_ERR, "Specified net have no stake service activated"); + return DAP_CHAIN_NODE_CLI_SRV_STAKE_NO_STAKE_IN_NET_ERR; + } dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-poa_cert", &l_cert_str); if (!l_cert_str) { dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_SRV_STAKE_PARAM_ERR, "Command 'pkey_update' requires parameter -poa_cert"); @@ -3356,15 +3361,27 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, void **a_str_reply) return DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_PARAM_ERR; } dap_pkey_t *l_pkey = dap_pkey_get_from_str(l_pkey_full_str); + dap_hash_fast_t l_pkey_hash = {}; + dap_pkey_get_hash(l_pkey, &l_pkey_hash); + dap_chain_net_srv_stake_item_t *l_stake = NULL; + HASH_FIND(hh, l_srv_stake->itemlist, &l_pkey_hash, sizeof(dap_hash_fast_t), l_stake); + if (!l_stake) { + dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_STAKE_ERR, "Specified pkey hash %s isn't delegated or approved", dap_hash_fast_to_str_static(&l_pkey_hash)); + return DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_STAKE_ERR; + } + if (l_stake->pkey) { + dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_STAKE_ERR, "Specified pkey_full already present"); + return DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_STAKE_ERR; + } dap_chain_datum_decree_t *l_decree = s_decree_pkey_update(l_net, l_cert, l_pkey); DAP_DELETE(l_pkey); char *l_decree_hash_str = NULL; if (!l_decree || !(l_decree_hash_str = s_stake_decree_put(l_decree, l_net))) { - dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_SRV_STAKE_DECREE_ERR, "Approve decree error"); + dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_SRV_STAKE_DECREE_ERR, "pkey update decree error"); return DAP_CHAIN_NODE_CLI_SRV_STAKE_DECREE_ERR; } DAP_DELETE(l_decree); - char *l_approve_str = dap_strdup_printf("Approve decree %s successfully created", l_decree_hash_str); + char *l_approve_str = dap_strdup_printf("pkey update decree %s successfully created", l_decree_hash_str); json_object_array_add(*a_json_arr_reply, json_object_new_string(l_approve_str)); DAP_DEL_MULTY(l_decree_hash_str, l_approve_str); } break; @@ -3420,7 +3437,7 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, void **a_str_reply) } l_stake = dap_chain_net_srv_stake_check_pkey_hash(l_net->pub.id, &l_pkey_hash); if (!l_stake) { - dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_SRV_STAKE_HASH_ERR, "Specified pkey hash isn't delegated nor approved"); + dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_SRV_STAKE_HASH_ERR, "Specified pkey hash isn't delegated or approved"); return DAP_CHAIN_NODE_CLI_SRV_STAKE_HASH_ERR; } } -- GitLab