diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c index 8279ac1fb4669f47693562f0d2b8f698cdf00088..a4a682dae1acbdf4927e772366acfac01dbc5a47 100644 --- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c +++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c @@ -235,7 +235,7 @@ static int s_callback_created(dap_chain_t *a_chain, dap_config_t *a_chain_net_cf dap_chain_esbocs_t *l_esbocs = DAP_CHAIN_ESBOCS(l_blocks); dap_chain_esbocs_pvt_t *l_esbocs_pvt = PVT(l_esbocs); - l_esbocs_pvt->minimum_fee = dap_chain_coins_to_balance(dap_config_get_item_str_default(a_chain_net_cfg, "esbocs", "minimum_fee", "0.05")); +// l_esbocs_pvt->minimum_fee = dap_chain_coins_to_balance(dap_config_get_item_str_default(a_chain_net_cfg, "esbocs", "minimum_fee", "0.05")); l_esbocs_pvt->fee_addr = dap_chain_addr_from_str(dap_config_get_item_str(a_chain_net_cfg, "esbocs", "fee_addr")); l_esbocs_pvt->fee_coll_set = dap_chain_coins_to_balance(dap_config_get_item_str_default(a_chain_net_cfg, "esbocs", "set_collect_fee", "10.05")); @@ -244,24 +244,56 @@ static int s_callback_created(dap_chain_t *a_chain, dap_config_t *a_chain_net_cf dap_cert_t *l_sign_cert = dap_cert_find_by_name(l_sign_cert_str); if (l_sign_cert == NULL) { log_it(L_ERROR, "Can't load sign certificate, name \"%s\" is wrong", l_sign_cert_str); - return 0; + return -1; } else if (l_sign_cert->enc_key->priv_key_data) { l_esbocs_pvt->blocks_sign_key = l_sign_cert->enc_key; log_it(L_INFO, "Loaded \"%s\" certificate for net %s to sign ESBOCS blocks", l_sign_cert_str, a_chain->net_name); } else { log_it(L_ERROR, "Certificate \"%s\" has no private key", l_sign_cert_str); - return 0; + return -2; } } else { log_it(L_NOTICE, "No sign certificate provided for net %s, can't sign any blocks. This node can't be a consensus validator", a_chain->net_name); - return 0; + return -3; } + size_t l_esbocs_sign_pub_key_size = 0; + uint8_t *l_esbocs_sign_pub_key = dap_enc_key_serialize_pub_key(l_esbocs_pvt->blocks_sign_key, &l_esbocs_sign_pub_key_size); + //Find order minimum fee dap_chain_net_t *l_net = dap_chain_net_by_id(a_chain->net_id); + char * l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group(l_net); + size_t l_orders_count = 0; + dap_global_db_obj_t * l_orders = dap_global_db_get_all_sync(l_gdb_group_str, &l_orders_count); + dap_chain_net_srv_order_t *l_order_service = NULL; + for (size_t i = 0; i < l_orders_count; i++) { + dap_chain_net_srv_order_t *l_order = (dap_chain_net_srv_order_t *)l_orders[i].value; + if (l_order->srv_uid.uint64 != DAP_CHAIN_NET_SRV_STAKE_POS_DELEGATE_ID) + continue; + dap_sign_t *l_order_sign = (dap_sign_t*)(l_order->ext_n_sign + l_order->ext_size); + uint8_t *l_order_sign_pkey = dap_sign_get_pkey(l_order_sign, NULL); + if (memcmp(l_esbocs_sign_pub_key, l_order_sign_pkey, l_esbocs_sign_pub_key_size) != 0) + continue; + if (l_order_service) { + if (l_order_service->ts_created < l_order->ts_created) + l_order_service = l_order; + } else { + l_order_service = l_order; + } + } + dap_global_db_objs_delete(l_orders, l_orders_count); + DAP_DELETE(l_gdb_group_str); + if (l_order_service) { + l_esbocs_pvt->minimum_fee = l_order_service->price; + } else { + l_esbocs_pvt->minimum_fee = dap_chain_coins_to_balance(dap_config_get_item_str_default(a_chain_net_cfg, "esbocs", "minimum_fee", "0.05")); + log_it(L_ERROR, "An order was not found that was signed by the signature of this validator. Operation of the " + "transaction service is not possible."); + } + dap_chain_node_role_t l_role = dap_chain_net_get_role(l_net); if (l_role.enums > NODE_ROLE_MASTER) { log_it(L_NOTICE, "Node role is lower than master role, so this node can't be a consensus validator"); - return 0; + return -5; } dap_chain_addr_t l_my_signing_addr; @@ -269,12 +301,12 @@ static int s_callback_created(dap_chain_t *a_chain, dap_config_t *a_chain_net_cf if (!l_esbocs_pvt->poa_mode) { if (!dap_chain_net_srv_stake_key_delegated(&l_my_signing_addr)) { log_it(L_WARNING, "Signing key is not delegated by stake service. Switch off validator mode"); - return 0; + return -6; } } else { if (!s_validator_check(&l_my_signing_addr, l_esbocs_pvt->poa_validators)) { log_it(L_WARNING, "Signing key is not present in PoA certs list. Switch off validator mode"); - return 0; + return -7; } }