diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c index 21a665550d5fa377c00ad442429ade10acd9aa1a..55763796b9ec381f5a29447cb356cd95d8425944 100644 --- a/modules/net/srv/dap_chain_net_srv_order.c +++ b/modules/net/srv/dap_chain_net_srv_order.c @@ -30,6 +30,7 @@ #include "dap_enc_base58.h" #include "dap_global_db.h" #include "dap_chain_net_srv_countries.h" +#include "dap_chain_net_srv_stake_pos_delegate.h" #define LOG_TAG "dap_chain_net_srv_order" @@ -617,6 +618,22 @@ static void s_srv_order_callback_notify(dap_global_db_context_t *a_context, dap_ log_it(L_ERROR, "Order unverified, err %d", l_verify); dap_global_db_del_unsafe(l_gdb_context, a_obj->group, a_obj->key); } + // Check new order is signs delegated key + for (size_t l_offset = 0; l_offset < l_max_size;) { + dap_sign_t *l_tmp_sign = (dap_sign_t*)(l_sign + l_offset); + l_offset += dap_sign_get_size(l_tmp_sign); + dap_hash_fast_t l_pkey_hash = {0}; + dap_sign_get_pkey_hash(l_sign, &l_pkey_hash); + dap_chain_addr_t l_addr = {0}; + dap_chain_addr_fill(&l_addr, l_tmp_sign->header.type, &l_pkey_hash, l_net->pub.id); + if (!dap_chain_net_srv_stake_key_delegated(&l_addr)) { + char *l_pkey_hash_str = dap_hash_fast_to_str_new(&l_pkey_hash); + log_it(L_ERROR, "Order %s signed by the non-delegated public key %s.", a_obj->key, l_pkey_hash_str); + DAP_DELETE(l_pkey_hash_str); + dap_global_db_del_unsafe(l_gdb_context, a_obj->group, a_obj->key); + break; + } + } /*dap_chain_hash_fast_t l_pkey_hash; if (!dap_sign_get_pkey_hash(l_sign, &l_pkey_hash)) { dap_global_db_gr_del(dap_strdup(a_key), a_group); diff --git a/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h b/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h index 2f940c6e074ddfa5bc332a882f6318dc751a15f8..e54785d97c881dd05b5c34dd5b704da8c909ec49 100644 --- a/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h +++ b/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h @@ -74,3 +74,4 @@ void dap_chain_net_srv_stake_get_fee_validators(dap_chain_net_t *a_net, dap_stri int dap_chain_net_srv_stake_load_cache(dap_chain_net_t *a_net); void dap_chain_net_srv_stake_cache_purge(dap_chain_net_t *a_net); +