Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • cellframe/cellframe-sdk
  • MIKA83/cellframe-sdk
2 results
Show changes
Commits on Source (14)
Subproject commit 7c49451ccc299d61ab8d1b15e2c6fc9336cd2d44
Subproject commit ad7b842d9ef33155311e8f2e5691df082b72d0b7
......@@ -685,7 +685,13 @@ ssize_t dap_chain_atom_save(dap_chain_t *a_chain, const uint8_t *a_atom, size_t
return -7;
}
}
ssize_t l_res = dap_chain_cell_file_append(l_cell, a_atom, a_atom_size);
ssize_t l_res = dap_chain_cell_file_append(l_cell, a_atom, a_atom_size);
if (a_chain->atom_notifiers) {
for (dap_list_t *it = a_chain->atom_notifiers; it; it = it->next) {
dap_chain_atom_notifier_t *l_notifier = (dap_chain_atom_notifier_t *)it->data;
l_notifier->callback(l_notifier->arg, a_chain, l_cell->id, (void *)a_atom, a_atom_size);
}
}
if (a_chain->callback_atom_add_from_treshold) {
dap_chain_atom_ptr_t l_atom_treshold;
do {
......
......@@ -277,12 +277,6 @@ static ssize_t s_file_atom_add(dap_chain_cell_t *a_cell, dap_chain_atom_ptr_t a_
a_cell->file_storage_path);
return -3;
}
if(a_cell->chain && a_cell->chain->atom_notifiers ){
for( dap_list_t * l_iter = a_cell->chain->atom_notifiers;l_iter; l_iter = dap_list_next(l_iter) ){
dap_chain_atom_notifier_t * i = (dap_chain_atom_notifier_t *) l_iter->data;
i->callback(i->arg, a_cell->chain, a_cell->id, (void *)a_atom, a_atom_size);
}
}
return a_atom_size + sizeof(a_atom_size);
}
......
......@@ -108,7 +108,7 @@ typedef size_t (*dap_chain_callback_add_datums_t)(dap_chain_t * , dap_chain_datu
typedef dap_chain_atom_ptr_t (*dap_chain_callback_atom_iter_get_next_t)(dap_chain_atom_iter_t * ,size_t*);
typedef void (*dap_chain_callback_atom_iter_delete_t)(dap_chain_atom_iter_t *);
typedef void (*dap_chain_callback_notify_t)(void * a_arg, dap_chain_t *a_chain, dap_chain_cell_id_t a_id, void* a_atom, size_t a_atom_size); //change in chain happened
typedef void (*dap_chain_callback_notify_t)(void *a_arg, dap_chain_t *a_chain, dap_chain_cell_id_t a_id, void *a_atom, size_t a_atom_size); //change in chain happened
typedef size_t(*dap_chain_callback_get_count)(dap_chain_t *a_chain);
typedef dap_list_t *(*dap_chain_callback_get_list)(dap_chain_t *a_chain, size_t a_count, size_t a_page, bool a_reverse);
......
......@@ -1299,6 +1299,7 @@ static void s_check_db_callback_fee_collect (UNUSED_ARG dap_global_db_context_t
dap_chain_block_cache_t *l_block_cache = NULL;
dap_chain_cs_blocks_t *l_blocks = DAP_CHAIN_CS_BLOCKS(l_chain);
dap_list_t *l_block_list = NULL;
log_it(L_MSG, "Fee collector start work");
l_block_cache = dap_chain_block_cs_cache_get_by_hash(l_blocks, &l_arg->block_hash);
if(!l_block_cache)
{
......@@ -1441,7 +1442,7 @@ static void s_session_round_finish(dap_chain_esbocs_session_t *a_session, dap_ch
tmp->chain = l_chain;
tmp->value_fee = PVT(a_session->esbocs)->minimum_fee;
tmp->fee_need_cfg = PVT(a_session->esbocs)->fee_coll_set;
tmp->key_from = a_session->blocks_sign_key;
tmp->key_from = PVT(a_session->esbocs)->blocks_sign_key;
dap_global_db_get_all(s_block_fee_group,0,s_check_db_callback_fee_collect,tmp);
}
......@@ -1725,11 +1726,10 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
s_session_sync_queue_add(l_session, l_message, a_data_size);
goto session_unlock;
}
} else if (l_message->hdr.round_id != l_session->cur_round.id ||
l_message->hdr.attempt_num < l_session->cur_round.attempt_num) {
} else if (l_message->hdr.round_id != l_session->cur_round.id) {
// round check
debug_if(l_cs_debug, L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu."
" Message rejected: round or attempt in message does not match",
" Message rejected: round number doesn't match",
l_session->chain->net_name, l_session->chain->name,
l_session->cur_round.id, l_session->cur_round.attempt_num);
goto session_unlock;
......@@ -1745,6 +1745,7 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
l_session->cur_round.id, l_message->hdr.attempt_num);
goto session_unlock;
}
dap_chain_addr_fill_from_sign(&l_signing_addr, l_sign, l_session->chain->net_id);
// check messages chain
dap_chain_esbocs_message_item_t *l_chain_message, *l_chain_message_tmp;
HASH_ITER(hh, l_round->message_items, l_chain_message, l_chain_message_tmp) {
......@@ -1770,12 +1771,11 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
}
}
}
dap_chain_addr_fill_from_sign(&l_signing_addr, l_sign, l_session->chain->net_id);
s_message_chain_add(l_session, l_message, a_data_size, a_data_hash, &l_signing_addr);
}
} else
dap_chain_addr_fill_from_sign(&l_signing_addr, l_sign, l_session->chain->net_id);
// Process local & network messages
dap_chain_addr_fill_from_sign(&l_signing_addr, l_sign, l_session->chain->net_id);
if (l_cs_debug)
l_validator_addr_str = dap_chain_addr_to_str(&l_signing_addr);
bool l_not_in_list = false;
......@@ -1802,7 +1802,7 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
}
if (l_not_in_list) {
debug_if(l_cs_debug, L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu."
" Message rejected: validator addr:%s not in the current validators list",
" Message rejected: validator addr:%s not in the current validators list or not synced yet",
l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id,
l_message->hdr.attempt_num, l_validator_addr_str);
goto session_unlock;
......
......@@ -168,7 +168,6 @@ typedef struct dap_chain_esbocs_session {
dap_chain_esbocs_sync_item_t *sync_items;
dap_timerfd_t *sync_timer;
dap_enc_key_t *blocks_sign_key;
dap_chain_addr_t my_signing_addr;
dap_chain_esbocs_penalty_item_t *penalty;
......
......@@ -329,12 +329,13 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
"decree create service -net <net_name> [-chain <chain_name>] -decree_chain <chain_name> -srv_id <service_id> -certs <certs list> -<Subtype param name> <Subtype param Value>\n"
"decree sign -net <net_name> [-chain <chain_name>] -datum <datum_hash> -certs <certs_list>\n"
"decree anchor -net <net_name> -chain <chain_name> -datum <datum_hash> -certs <certs_list>\n"
"decree find -net <net_name> -hash <decree_hash>. Find decree by hash and show it's status (apllied or not)"
"==Subtype Params==\n"
"\t -fee <value>: sets fee for tx in net\n"
"\t -to_addr <wallet_addr>: sets wallet addr for network fee\n"
"\t -new_certs <certs_list>: sets new owners set for net\n"
"\t -signs_verify <value>: sets minimum number of owners needed to sign decree\n");
"decree find -net <net_name> -hash <decree_hash>. Find decree by hash and show it's status (apllied or not)\n"
"\t==Subtype Params==\n"
"\t\t -fee <value>: sets fee for tx in net\n"
"\t\t -to_addr <wallet_addr>: sets wallet addr for network fee\n"
"\t\t -new_certs <certs_list>: sets new owners set for net\n"
"\t\t -signs_verify <value>: sets minimum number of owners needed to sign decree\n"
"decree info -net <net_name>. Displays information about the parameters of the decrees in the network.\n");
// Exit - always last!
dap_cli_server_cmd_add ("exit", com_exit, "Stop application and exit",
......
......@@ -1974,23 +1974,9 @@ char l_buf[1024];
if (l_sign_type.type == SIG_TYPE_TESLA)
return dap_cli_server_cmd_set_reply_text(a_str_reply, "Tesla algorithm is no longer supported, please, use another variant"), -1;
uint8_t *l_seed = NULL;
size_t l_seed_size = 0, l_restore_str_size = dap_strlen(l_restore_str);
if(l_restore_str && l_restore_str_size > 2 && !dap_strncmp(l_restore_str, "0x", 2)) {
l_seed_size = (l_restore_str_size - 2) / 2;
l_seed = DAP_NEW_SIZE(uint8_t, l_seed_size);
if(!dap_hex2bin(l_seed, l_restore_str + 2, l_restore_str_size - 2)){
DAP_DELETE(l_seed);
l_seed = NULL;
l_seed_size = 0;
dap_cli_server_cmd_set_reply_text(a_str_reply, "Restored hash is invalid, wallet is not created");
return -1;
}
}
// Creates new wallet
dap_chain_wallet_t *l_wallet = dap_chain_wallet_create_with_seed(l_wallet_name, c_wallets_path, l_sign_type,
l_seed, l_seed_size, l_pass_str);
l_restore_str, dap_strlen(l_restore_str), l_pass_str);
if (!l_wallet)
return dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet is not created because of internal error"), -1;
......@@ -5231,23 +5217,33 @@ int com_tx_create(int a_argc, char **a_argv, char **a_str_reply)
const char *l_native_ticker = l_net->pub.native_ticker;
bool not_native = dap_strcmp(l_token_ticker, l_native_ticker);
if (!l_wallet_fee_name) {
l_wallet_fee = dap_chain_wallet_open(l_wallet_fee_name, c_wallets_path);
if((!l_wallet_fee)&&(not_native)) {
dap_cli_server_cmd_set_reply_text(a_str_reply, "wallet %s does not exist", l_wallet_fee_name);
if (not_native) {
if (l_wallet_fee_name){
l_wallet_fee = dap_chain_wallet_open(l_wallet_fee_name, c_wallets_path);
if (!l_wallet_fee) {
dap_cli_server_cmd_set_reply_text(a_str_reply, "wallet %s does not exist", l_wallet_fee_name);
return -12;
}
} else {
dap_cli_server_cmd_set_reply_text(a_str_reply, "To create a basic transaction with a "
"non-native ticker, you must specify the '-wallet_fee' "
"parameter. It is required to pay a commission for the "
"transaction.");
return -11;
}
}
else if (l_certs_str) {
dap_cert_parse_str_list(l_certs_str, &l_certs, &l_certs_count);
if(!l_certs_count) {
} else {
if (l_certs_str) {
dap_cert_parse_str_list(l_certs_str, &l_certs, &l_certs_count);
if (!l_certs_count) {
dap_cli_server_cmd_set_reply_text(a_str_reply,
"tx_create requires at least one valid certificate to sign the basic transaction of emission");
return -5;
}
} else {
dap_cli_server_cmd_set_reply_text(a_str_reply,
"tx_create requires at least one valid certificate to sign the basic transaction of emission");
return -5;
"tx_create requires parameter '-certs' for create base tx for emission in native token");
return -10;
}
} else {
dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-wallet_fee' to be a valid wallet name or '-certs'");
return -10;
}
}
......@@ -5273,9 +5269,17 @@ int com_tx_create(int a_argc, char **a_argv, char **a_str_reply)
dap_string_t *l_string_ret = dap_string_new(NULL);
int res = 0;
if (l_emission_hash_str) {
char *l_tx_hash_str = dap_chain_mempool_base_tx_create(l_chain, &l_emission_hash, l_emission_chain->id,
l_value, l_token_ticker,dap_chain_wallet_get_key(l_wallet_fee, 0), l_addr_to, l_certs,
l_certs_count, l_hash_out_type,l_value_fee);
bool not_native = dap_strcmp(l_token_ticker, l_net->pub.native_ticker);
char *l_tx_hash_str = NULL;
if (not_native) {
l_tx_hash_str = dap_chain_mempool_base_tx_create(l_chain, &l_emission_hash, l_emission_chain->id,
l_value, l_token_ticker,dap_chain_wallet_get_key(l_wallet_fee, 0), l_addr_to, NULL,
0, l_hash_out_type,l_value_fee);
} else {
l_tx_hash_str = dap_chain_mempool_base_tx_create(l_chain, &l_emission_hash, l_emission_chain->id,
l_value, l_token_ticker,NULL, l_addr_to, l_certs,
l_certs_count, l_hash_out_type,l_value_fee);
}
if (l_tx_hash_str) {
dap_string_append_printf(l_string_ret, "\nDatum %s with 256bit TX is placed in datum pool\n", l_tx_hash_str);
DAP_DELETE(l_tx_hash_str);
......
......@@ -1176,7 +1176,7 @@ static dap_chain_datum_anchor_t * s_sign_anchor_in_cycle(dap_cert_t ** a_certs,
// Decree commands handlers
int cmd_decree(int a_argc, char **a_argv, char ** a_str_reply)
{
enum { CMD_NONE=0, CMD_CREATE, CMD_SIGN, CMD_ANCHOR, CMD_FIND };
enum { CMD_NONE=0, CMD_CREATE, CMD_SIGN, CMD_ANCHOR, CMD_FIND, CMD_INFO };
enum { TYPE_NONE=0, TYPE_COMMON, TYPE_SERVICE};
enum { SUBTYPE_NONE=0, SUBTYPE_FEE, SUBTYPE_OWNERS, SUBTYPE_MIN_OWNERS};
int arg_index = 1;
......@@ -1221,8 +1221,10 @@ int cmd_decree(int a_argc, char **a_argv, char ** a_str_reply)
l_cmd = CMD_ANCHOR;
else if (dap_cli_server_cmd_find_option_val(a_argv, 1, 2, "find", NULL))
l_cmd = CMD_FIND;
else if (dap_cli_server_cmd_find_option_val(a_argv, 1, 2, "info", NULL))
l_cmd = CMD_INFO;
if (l_cmd != CMD_FIND) {
if (l_cmd != CMD_FIND && l_cmd != CMD_INFO) {
// Public certifiacte of condition owner
dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-certs", &l_certs_str);
if (!l_certs_str) {
......@@ -1671,6 +1673,28 @@ int cmd_decree(int a_argc, char **a_argv, char ** a_str_reply)
dap_cli_server_cmd_set_reply_text(a_str_reply, "Specified decree is %s in decrees hash-table",
l_decree ? (l_applied ? "applied" : "not applied") : "not found");
} break;
case CMD_INFO: {
dap_string_t *l_str_owner_pkey = dap_string_new("");
int i = 1;
for (dap_list_t *l_current_pkey = l_net->pub.decree->pkeys; l_current_pkey; l_current_pkey = l_current_pkey->next){
dap_pkey_t *l_pkey = (dap_pkey_t*)(l_current_pkey->data);
dap_hash_fast_t l_pkey_hash = {0};
dap_pkey_get_hash(l_pkey, &l_pkey_hash);
char *l_pkey_hash_str = dap_hash_fast_to_str_new(&l_pkey_hash);
dap_string_append_printf(l_str_owner_pkey, "\t%d) %s\n", i, l_pkey_hash_str);
i++;
DAP_DELETE(l_pkey_hash_str);
}
dap_cli_server_cmd_set_reply_text(a_str_reply, "Decree info:\n"
"\tOwners: %d\n"
"\t=====================================================================\n"
"%s"
"\t=====================================================================\n"
"\tMin owners for apply decree: %d\n",
l_net->pub.decree->num_of_owners, l_str_owner_pkey->str,
l_net->pub.decree->min_num_of_owners);
dap_string_free(l_str_owner_pkey, true);
} break;
default:
dap_cli_server_cmd_set_reply_text(a_str_reply, "Not found decree action. Use create, sign, anchor or find parameter");
return -1;
......
......@@ -1730,11 +1730,10 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply)
dap_hash_fast_t *l_final_tx_hash = NULL;
if (l_tx_hash_str) {
dap_hash_fast_t l_tx_hash = {};
dap_chain_hash_fast_from_str(l_tx_hash_str, &l_tx_hash);
l_final_tx_hash = dap_chain_ledger_get_final_chain_tx_hash(l_net->pub.ledger, DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE, &l_tx_hash);
if (!l_final_tx_hash) {
dap_cli_server_cmd_set_reply_text(a_str_reply, "Transaction %s is not found or already used", l_tx_hash_str);
l_final_tx_hash = DAP_NEW(dap_hash_fast_t);
dap_chain_hash_fast_from_str(l_tx_hash_str, l_final_tx_hash);
if(!dap_chain_ledger_tx_find_by_hash(l_net->pub.ledger, l_final_tx_hash)) {
dap_cli_server_cmd_set_reply_text(a_str_reply, "Transaction %s is not found.", l_tx_hash_str);
return -20;
}
} else {
......@@ -1773,6 +1772,9 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply)
return -18;
}
dap_chain_datum_tx_t *l_tx = s_stake_tx_invalidate(l_net, l_final_tx_hash, l_fee, dap_chain_wallet_get_key(l_wallet, 0));
if (l_tx_hash_str) {
DAP_DELETE(l_final_tx_hash);
}
dap_chain_wallet_close(l_wallet);
char *l_decree_hash_str = NULL;
if (l_tx && (l_decree_hash_str = s_stake_tx_put(l_tx, l_net))) {
......