diff --git a/dap-sdk b/dap-sdk index 8ea60824482c12c9d9a6902d3d1c56319dc1c18d..7657c7a60781691c97a0f9affd59926eb9129a6a 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 8ea60824482c12c9d9a6902d3d1c56319dc1c18d +Subproject commit 7657c7a60781691c97a0f9affd59926eb9129a6a 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 283f78856f8622a16833a82f823d5e8b57d281d1..2a277be1934a1a96d06c67c1ed5d065dbc3165ca 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 @@ -144,7 +144,7 @@ int dap_chain_net_srv_stake_pos_delegate_init() "srv_stake order remove -net <net_name> -order <order_hash>\n" "\tRemove order with specified hash\n" "\t\t === Commands for work with stake delegate ===\n" - "srv_stake delegate {-cert <pub_cert_name> -value <datoshi> | " + "srv_stake delegate {[-cert <pub_cert_name> | -pkey <pkey> -sign_type <sign_type>] -value <datoshi> | " "-order <order_hash> {[-tax_addr <wallet_addr_for_tax_collecting>] | " "-cert <priv_cert_name> [-node_addr <for_validator_node>]}}" " -net <net_name> -w <wallet_name> -fee <value>\n" @@ -1997,6 +1997,8 @@ typedef enum s_cli_srv_stake_delegate_err{ DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_WALLET_ERR, DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_NO_CERT_ERR, DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_WRONG_CERT_ERR, + DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_WRONG_SIGN_ERR, + DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_INVALID_PKEY_ERR, DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_UNRECOGNIZED_ADDR_ERR, DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_NO_ORDER_ERR, DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_INVALID_ORDER_ERR, @@ -2026,6 +2028,8 @@ static int s_cli_srv_stake_delegate(int a_argc, char **a_argv, int a_arg_index, const char *l_net_str = NULL, *l_wallet_str = NULL, *l_cert_str = NULL, + *l_pkey_str = NULL, + *l_sign_type_str = NULL, *l_value_str = NULL, *l_fee_str = NULL, *l_node_addr_str = NULL, @@ -2057,9 +2061,16 @@ static int s_cli_srv_stake_delegate(int a_argc, char **a_argv, int a_arg_index, dap_chain_addr_t l_signing_addr, l_sovereign_addr = {}; uint256_t l_sovereign_tax = uint256_0; dap_cli_server_cmd_find_option_val(a_argv, a_arg_index, a_argc, "-cert", &l_cert_str); + dap_cli_server_cmd_find_option_val(a_argv, a_arg_index, a_argc, "-pkey", &l_pkey_str); + dap_cli_server_cmd_find_option_val(a_argv, a_arg_index, a_argc, "-sign_type", &l_sign_type_str); dap_cli_server_cmd_find_option_val(a_argv, a_arg_index, a_argc, "-order", &l_order_hash_str); - if (!l_cert_str && !l_order_hash_str) { - dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_PARAM_ERR, "Command 'delegate' requires parameter -cert and/or -order"); + if (!l_cert_str && !l_order_hash_str && !l_pkey_str) { + dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_PARAM_ERR, "Command 'delegate' requires parameter -cert and/or -order and/or -pkey"); + dap_enc_key_delete(l_enc_key); + return -13; + } + if (l_pkey_str && !l_sign_type_str) { + dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_PARAM_ERR, "Command 'delegate' requires parameter -sign_type for pkey"); dap_enc_key_delete(l_enc_key); return DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_PARAM_ERR; } @@ -2093,6 +2104,21 @@ static int s_cli_srv_stake_delegate(int a_argc, char **a_argv, int a_arg_index, return DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_WRONG_CERT_ERR; } dap_cli_server_cmd_find_option_val(a_argv, a_arg_index, a_argc, "-node_addr", &l_node_addr_str); + } else if (l_pkey_str) { + dap_chain_hash_fast_t l_hash_public_key = {0}; + dap_sign_type_t l_type = dap_sign_type_from_str(l_sign_type_str); + if (l_type.type == SIG_TYPE_NULL) { + dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_WRONG_SIGN_ERR, "Wrong sign type"); + dap_enc_key_delete(l_enc_key); + return DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_WRONG_SIGN_ERR; + } + if (dap_chain_hash_fast_from_str(l_pkey_str, &l_hash_public_key)) { + dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_INVALID_PKEY_ERR, "Invalid pkey hash format"); + dap_enc_key_delete(l_enc_key); + return DAP_CHAIN_NODE_CLI_SRV_STAKE_DELEGATE_INVALID_PKEY_ERR; + } + dap_chain_addr_fill(&l_signing_addr, l_type, &l_hash_public_key, l_net->pub.id); + dap_cli_server_cmd_find_option_val(a_argv, a_arg_index, a_argc, "-node_addr", &l_node_addr_str); } dap_chain_node_addr_t l_node_addr = g_node_addr; if (l_node_addr_str) { @@ -2294,7 +2320,8 @@ static int s_cli_srv_stake_delegate(int a_argc, char **a_argv, int a_arg_index, DAP_DELETE(l_tx); json_object* l_json_obj_deligate = json_object_new_object(); json_object_object_add(l_json_obj_deligate, "status", json_object_new_string("success")); - json_object_object_add(l_json_obj_deligate, "sign", json_object_new_string(l_sign_str)); + if (dap_strcmp(l_sign_str, "")) + json_object_object_add(l_json_obj_deligate, "sign", json_object_new_string(l_sign_str)); // deprecated signs error json_object_object_add(l_json_obj_deligate, "tx_hash", json_object_new_string(l_tx_hash_str)); json_object_array_add(*a_json_arr_reply, l_json_obj_deligate); DAP_DELETE(l_tx_hash_str);