Skip to content
Snippets Groups Projects
Commit aab7448e authored by Roman Khlopkov's avatar Roman Khlopkov 🔜
Browse files

Merge branch 'features-8422' into 'release-5.2'

features-8422

See merge request !1052
parents a563305d 5e06a54a
No related branches found
No related tags found
1 merge request!1052features-8422
Pipeline #25324 passed with stage
in 9 minutes and 8 seconds
...@@ -469,6 +469,10 @@ static int s_common_decree_handler(dap_chain_datum_decree_t * a_decree, dap_chai ...@@ -469,6 +469,10 @@ static int s_common_decree_handler(dap_chain_datum_decree_t * a_decree, dap_chai
log_it(L_WARNING,"Can't get signer node address from decree."); log_it(L_WARNING,"Can't get signer node address from decree.");
return -105; return -105;
} }
if(dap_chain_net_srv_stake_verify_key_and_node(&l_addr, &l_node_addr)){
log_it(L_WARNING, "Key and node verification error");
return -105;
}
if (!a_apply) if (!a_apply)
break; break;
dap_chain_net_srv_stake_key_delegate(l_net, &l_addr, &l_hash, l_uint256_buffer, &l_node_addr); dap_chain_net_srv_stake_key_delegate(l_net, &l_addr, &l_hash, l_uint256_buffer, &l_node_addr);
......
...@@ -219,6 +219,32 @@ dap_list_t *dap_chain_net_srv_stake_get_validators() ...@@ -219,6 +219,32 @@ dap_list_t *dap_chain_net_srv_stake_get_validators()
return l_ret; return l_ret;
} }
int dap_chain_net_srv_stake_verify_key_and_node(dap_chain_addr_t *a_signing_addr, dap_chain_node_addr_t *a_node_addr)
{
assert(s_srv_stake);
if (!a_signing_addr || !a_node_addr){
log_it(L_WARNING, "Bad arguments.");
return -100;
}
dap_chain_net_srv_stake_item_t *l_stake = NULL, *l_tmp = NULL;
HASH_ITER(hh, s_srv_stake->itemlist, l_stake, l_tmp){
//check key not activated for other node
if(dap_chain_addr_compare(a_signing_addr, &l_stake->signing_addr)){
log_it(L_WARNING, "Key %s already active for node %s", dap_chain_addr_to_str(a_signing_addr), dap_chain_node_addr_to_hash_str(a_node_addr));
return -101;
}
//chek node have not other delegated key
if(a_node_addr->uint64 == l_stake->node_addr.uint64){
log_it(L_WARNING, "Node %s already have active key.", dap_chain_node_addr_to_hash_str(a_node_addr));
return -102;
}
}
return 0;
}
static bool s_stake_cache_check_tx(dap_hash_fast_t *a_tx_hash) static bool s_stake_cache_check_tx(dap_hash_fast_t *a_tx_hash)
{ {
dap_chain_net_srv_stake_cache_item_t *l_stake; dap_chain_net_srv_stake_cache_item_t *l_stake;
...@@ -278,6 +304,8 @@ static dap_chain_datum_tx_t *s_stake_tx_create(dap_chain_net_t * a_net, dap_chai ...@@ -278,6 +304,8 @@ static dap_chain_datum_tx_t *s_stake_tx_create(dap_chain_net_t * a_net, dap_chai
if (!a_net || !a_wallet || IS_ZERO_256(a_value) || !a_signing_addr || !a_node_addr) if (!a_net || !a_wallet || IS_ZERO_256(a_value) || !a_signing_addr || !a_node_addr)
return NULL; return NULL;
const char *l_native_ticker = a_net->pub.native_ticker; const char *l_native_ticker = a_net->pub.native_ticker;
char l_delegated_ticker[DAP_CHAIN_TICKER_SIZE_MAX]; char l_delegated_ticker[DAP_CHAIN_TICKER_SIZE_MAX];
dap_chain_datum_token_get_delegated_ticker(l_delegated_ticker, l_native_ticker); dap_chain_datum_token_get_delegated_ticker(l_delegated_ticker, l_native_ticker);
...@@ -428,6 +456,11 @@ dap_chain_datum_decree_t *dap_chain_net_srv_stake_decree_approve(dap_chain_net_t ...@@ -428,6 +456,11 @@ dap_chain_datum_decree_t *dap_chain_net_srv_stake_decree_approve(dap_chain_net_t
return NULL; return NULL;
} }
if(dap_chain_net_srv_stake_verify_key_and_node(&l_tx_out_cond->subtype.srv_stake_pos_delegate.signing_addr, &l_tx_out_cond->subtype.srv_stake_pos_delegate.signer_node_addr)){
log_it(L_WARNING, "Key and node verification error");
return NULL;
}
// create approve decree // create approve decree
size_t l_total_tsd_size = 0; size_t l_total_tsd_size = 0;
dap_chain_datum_decree_t *l_decree = NULL; dap_chain_datum_decree_t *l_decree = NULL;
...@@ -1246,6 +1279,21 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply) ...@@ -1246,6 +1279,21 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply)
} }
// Create conditional transaction // Create conditional transaction
int ret_val = 0;
if((ret_val = dap_chain_net_srv_stake_verify_key_and_node(&l_signing_addr, &l_node_addr)) != 0){
if (ret_val == -101){
dap_cli_server_cmd_set_reply_text(a_str_reply, "Key %s already active for node %s", dap_chain_addr_to_str(&l_signing_addr), dap_chain_node_addr_to_hash_str(&l_node_addr));
return ret_val;
} else if (ret_val == -102){
dap_cli_server_cmd_set_reply_text(a_str_reply, "Node %s already have active key.", dap_chain_node_addr_to_hash_str(&l_node_addr));
return ret_val;
}else{
dap_cli_server_cmd_set_reply_text(a_str_reply, "Key and node verification error");
return ret_val;
}
}
dap_chain_datum_tx_t *l_tx = s_stake_tx_create(l_net, l_wallet, l_value, l_fee, &l_signing_addr, &l_node_addr); dap_chain_datum_tx_t *l_tx = s_stake_tx_create(l_net, l_wallet, l_value, l_fee, &l_signing_addr, &l_node_addr);
dap_chain_wallet_close(l_wallet); dap_chain_wallet_close(l_wallet);
if (!l_tx || !s_stake_tx_put(l_tx, l_net)) { if (!l_tx || !s_stake_tx_put(l_tx, l_net)) {
......
...@@ -69,6 +69,7 @@ void dap_chain_net_srv_stake_set_allowed_min_value(uint256_t a_value); ...@@ -69,6 +69,7 @@ void dap_chain_net_srv_stake_set_allowed_min_value(uint256_t a_value);
uint256_t dap_chain_net_srv_stake_get_allowed_min_value(); uint256_t dap_chain_net_srv_stake_get_allowed_min_value();
bool dap_chain_net_srv_stake_key_delegated(dap_chain_addr_t *a_addr); bool dap_chain_net_srv_stake_key_delegated(dap_chain_addr_t *a_addr);
int dap_chain_net_srv_stake_verify_key_and_node(dap_chain_addr_t* a_signing_addr, dap_chain_node_addr_t* a_node_addr);
dap_list_t *dap_chain_net_srv_stake_get_validators(); dap_list_t *dap_chain_net_srv_stake_get_validators();
void dap_chain_net_srv_stake_get_fee_validators(dap_chain_net_t *a_net, dap_string_t *a_string); void dap_chain_net_srv_stake_get_fee_validators(dap_chain_net_t *a_net, dap_string_t *a_string);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment