diff --git a/dap_chain_net.c b/dap_chain_net.c index f67f435c1ea390f827cfa133f3eeada5ca293e53..b87c97b62e17d6eab4831edb0ccf75034d86997a 100644 --- a/dap_chain_net.c +++ b/dap_chain_net.c @@ -630,6 +630,7 @@ lb_proc_state: } } break; + default: log_it (L_DEBUG, "Unprocessed state"); } pthread_mutex_unlock(&PVT(l_net)->state_mutex ); return ret; diff --git a/dap_chain_net.h b/dap_chain_net.h index 05d9e73f13bd4e687299c83e89e91d342501908a..953a3d99905f402cf2d3100bbc39687a9c82efbc 100644 --- a/dap_chain_net.h +++ b/dap_chain_net.h @@ -1,27 +1,28 @@ /* - * Authors: - * Dmitriy A. Gearasimov <gerasimov.dmitriy@demlabs.net> - * Alexander Lysikov <alexander.lysikov@demlabs.net> - * DeM Labs Inc. https://demlabs.net - * Kelvin Project https://github.com/kelvinblockchain - * Copyright (c) 2017-2019 - * All rights reserved. - - This file is part of DAP (Deus Applications Prototypes) the open source project - - DAP (Deus Applicaions Prototypes) is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - DAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with any DAP based project. If not, see <http://www.gnu.org/licenses/>. +* Authors: +* Dmitriy Gerasimov <naeper@demlabs.net> +* Aleksandr Lysikov <alexander.lysikov@demlabs.net> +* Cellframe https://cellframe.net +* DeM Labs Inc. https://demlabs.net +* Copyright (c) 2017-2019 +* All rights reserved. + +This file is part of CellFrame SDK the open source project + +CellFrame SDK is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +CellFrame SDK is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with any CellFrame SDK based project. If not, see <http://www.gnu.org/licenses/>. */ + #pragma once #ifndef _WIN32 diff --git a/dap_chain_node.c b/dap_chain_node.c index 68436d22441b736aeefc2a47cee8b17486fff6ef..1fb9ae970c2cd5b2eda0b3bc9e9e4cfe6385f54c 100644 --- a/dap_chain_node.c +++ b/dap_chain_node.c @@ -86,12 +86,12 @@ bool dap_chain_node_check_addr(dap_chain_net_t * a_net,dap_chain_node_addr_t *ad */ bool dap_chain_node_alias_register(dap_chain_net_t * a_net,const char *alias, dap_chain_node_addr_t *addr) { - const char *a_key = alias; + char *a_key = strdup(alias); // char a_value[2 * sizeof(dap_chain_node_addr_t) + 1]; // if(bin2hex(a_value, (const unsigned char *) addr, sizeof(dap_chain_node_addr_t)) == -1) // return false; // a_value[2 * sizeof(dap_chain_node_addr_t)] = '\0'; - bool res = dap_chain_global_db_gr_set(a_key, (const uint8_t*) addr, sizeof(dap_chain_node_addr_t) + bool res = dap_chain_global_db_gr_set(a_key, addr, sizeof(dap_chain_node_addr_t) , a_net->pub.gdb_nodes_aliases); return res; } @@ -114,7 +114,7 @@ dap_chain_node_addr_t * dap_chain_node_alias_find(dap_chain_net_t * a_net,const */ bool dap_chain_node_alias_delete(dap_chain_net_t * a_net,const char *a_alias) { - const char *a_key = a_alias; + char *a_key = strdup(a_alias); bool res = dap_chain_global_db_gr_del(a_key, a_net->pub.gdb_nodes_aliases); return res; } @@ -153,7 +153,7 @@ int dap_chain_node_info_save(dap_chain_net_t * a_net, dap_chain_node_info_t *nod } //char *a_value = dap_chain_node_info_serialize(node_info, NULL); size_t node_info_size = dap_chain_node_info_get_size(node_info); - bool res = dap_chain_global_db_gr_set(l_key, (const uint8_t *) node_info, node_info_size, a_net->pub.gdb_nodes); + bool res = dap_chain_global_db_gr_set(l_key, node_info, node_info_size, a_net->pub.gdb_nodes); DAP_DELETE(l_key); //DAP_DELETE(a_value); return res?0:-3; diff --git a/dap_chain_node_cli_cmd.c b/dap_chain_node_cli_cmd.c index 416898cac5a0cc05cc2e75976e9d2ae6ba4429b1..8ae4d435ec1287844df1348ff3611867331300a7 100644 --- a/dap_chain_node_cli_cmd.c +++ b/dap_chain_node_cli_cmd.c @@ -63,7 +63,7 @@ #include "dap_strfuncs.h" #include "dap_list.h" #include "dap_string.h" -#include "dap_chain_cert.h" +#include "dap_cert.h" #include "dap_chain_wallet.h" #include "dap_chain_node.h" #include "dap_chain_global_db.h" @@ -1580,6 +1580,8 @@ int com_tx_wallet(int argc, char ** argv, char **str_reply) dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-w", &wallet_name); dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-net", &l_net_name); // for + dap_chain_net_t * l_net = l_net_name ? dap_chain_net_by_name( l_net_name) : NULL; + dap_string_t *l_string_ret = dap_string_new(NULL); switch (cmd_num) { // new wallet @@ -1589,18 +1591,18 @@ int com_tx_wallet(int argc, char ** argv, char **str_reply) "wallet name option <-w> not defined"); return -1; } - dap_chain_sign_type_t l_sign_type = { SIG_TYPE_BLISS }; - dap_chain_net_id_t l_net_id = { 0x1 }; + dap_sign_type_t l_sign_type = { SIG_TYPE_BLISS }; // Creates new wallet - dap_chain_wallet_t *l_wallet = dap_chain_wallet_create(wallet_name, c_wallets_path, l_net_id, l_sign_type); - dap_chain_addr_t *l_addr = (dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet); - if(!l_wallet || !l_addr) { + dap_chain_wallet_t *l_wallet = dap_chain_wallet_create(wallet_name, c_wallets_path, l_sign_type); + dap_chain_addr_t *l_addr = l_net? dap_chain_wallet_get_addr(l_wallet,l_net->pub.id ) : NULL; + if(!l_wallet ) { dap_chain_node_cli_set_reply_text(str_reply, "wallet is not created"); return -1; } - char *l_addr_str = dap_chain_addr_to_str(l_addr); + char *l_addr_str = l_addr? dap_chain_addr_to_str(l_addr) : NULL; dap_string_append_printf(l_string_ret, "wallet '%s' successfully created\n", l_wallet->name); - dap_string_append_printf(l_string_ret, "new address %s", l_addr_str); + if ( l_addr_str ) + dap_string_append_printf(l_string_ret, "new address %s", l_addr_str); DAP_DELETE(l_addr_str); dap_chain_wallet_close(l_wallet); } @@ -1617,11 +1619,13 @@ int com_tx_wallet(int argc, char ** argv, char **str_reply) char *l_file_path_tmp = dap_strdup_printf("%s/%s", c_wallets_path, l_file_name); dap_chain_wallet_t *l_wallet = dap_chain_wallet_open_file(l_file_path_tmp); if(l_wallet) { - dap_chain_addr_t *l_addr = dap_chain_wallet_get_addr(l_wallet); + dap_chain_addr_t *l_addr = l_net? dap_chain_wallet_get_addr(l_wallet, l_net->pub.id) : NULL; char *l_addr_str = dap_chain_addr_to_str(l_addr); dap_string_append_printf(l_string_ret, "\nwallet: %s\n", l_wallet->name); - dap_string_append_printf(l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-"); - DAP_DELETE(l_addr_str); + if ( l_addr_str){ + dap_string_append_printf(l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-"); + DAP_DELETE(l_addr_str); + } dap_chain_wallet_close(l_wallet); } DAP_DELETE(l_file_path_tmp); @@ -1639,7 +1643,8 @@ int com_tx_wallet(int argc, char ** argv, char **str_reply) if(wallet_name) { l_wallet = dap_chain_wallet_open(wallet_name, c_wallets_path); - l_addr = (dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet); + if ( l_net ) + l_addr = (dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet, l_net->pub.id ); } if(!l_addr && addr_str) l_addr = dap_chain_addr_from_str(addr_str); @@ -1779,7 +1784,7 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply) if(l_datum_hash_str) { const char * l_certs_str = NULL; - dap_chain_cert_t ** l_certs = NULL; + dap_cert_t ** l_certs = NULL; size_t l_certs_count = 0; dap_chain_t * l_chain; @@ -1800,7 +1805,7 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply) // Load certs lists if (l_certs_str) - dap_chain_cert_parse_str_list(l_certs_str, &l_certs, &l_certs_count); + dap_cert_parse_str_list(l_certs_str, &l_certs, &l_certs_count); if(!l_certs_count) { dap_chain_node_cli_set_reply_text(a_str_reply, @@ -1831,9 +1836,9 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply) size_t l_signs_count = 0; for(size_t l_offset = 0; l_offset < l_signs_size; l_signs_count++) { - dap_chain_sign_t * l_sign = (dap_chain_sign_t *) l_datum_token->signs + l_offset; - l_offset += dap_chain_sign_get_size(l_sign); - if( dap_chain_sign_verify(l_sign, l_datum_token, sizeof(l_datum_token->header)) != 1) { + dap_sign_t * l_sign = (dap_sign_t *) l_datum_token->signs + l_offset; + l_offset += dap_sign_get_size(l_sign); + if( dap_sign_verify(l_sign, l_datum_token, sizeof(l_datum_token->header)) != 1) { log_it(L_WARNING, "Wrong signature %u for datum_token with key %s in mempool!", l_signs_count, l_datum_hash_str); dap_chain_node_cli_set_reply_text(a_str_reply, "Datum %s with datum token has wrong signature %u, break process and exit", @@ -1870,10 +1875,10 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply) else if(l_datum_token->header.signs_total >= l_signs_count + l_certs_count) { size_t l_offset = 0; for(size_t i = 0; i < l_certs_count; i++) { - dap_chain_sign_t * l_sign = dap_chain_sign_create(l_certs[i]->enc_key, + dap_sign_t * l_sign = dap_sign_create(l_certs[i]->enc_key, l_datum_token, sizeof(l_datum_token->header), 0); - size_t l_sign_size = dap_chain_sign_get_size(l_sign); + size_t l_sign_size = dap_sign_get_size(l_sign); l_signs_size+= l_sign_size; @@ -1899,14 +1904,15 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply) // Recalc hash, string and place new datum // Calc datum's hash - dap_chain_hash_fast_t l_key_hash; - dap_hash_fast(l_datum, l_datum_size, (uint8_t*) &l_key_hash); + dap_chain_hash_fast_t l_key_hash={0}; + dap_hash_fast(l_datum, l_datum_size, &l_key_hash); char * l_key_str = dap_chain_hash_fast_to_str_new(&l_key_hash); // Add datum to mempool with datum_token hash as a key if(dap_chain_global_db_gr_set(l_key_str, (uint8_t *) l_datum, l_datum_size, l_gdb_group_mempool)) { + char* l_hash_str = strdup(l_datum_hash_str); // Remove old datum from pool - if(dap_chain_global_db_gr_del(l_datum_hash_str, l_gdb_group_mempool)) { + if(dap_chain_global_db_gr_del( l_hash_str, l_gdb_group_mempool)) { dap_chain_node_cli_set_reply_text(a_str_reply, "datum %s produced from %s is replacing the %s in datum pool", l_key_str, l_datum_hash_str, l_datum_hash_str); @@ -1924,6 +1930,7 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply) DAP_DELETE(l_gdb_group_mempool); return 1; } + DAP_DELETE(l_hash_str); } else { @@ -2061,12 +2068,15 @@ int com_mempool_delete(int argc, char ** argv, char ** a_str_reply) const char * l_datum_hash_str = NULL; dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-datum", &l_datum_hash_str); if(l_datum_hash_str) { + char * l_datum_hash_str2 = strdup(l_datum_hash_str); char * l_gdb_group_mempool = dap_chain_net_get_gdb_group_mempool(l_chain); - if(dap_chain_global_db_gr_del(l_datum_hash_str, l_gdb_group_mempool)) { + if(dap_chain_global_db_gr_del(l_datum_hash_str2, l_gdb_group_mempool)) { dap_chain_node_cli_set_reply_text(a_str_reply, "Datum %s deleted", l_datum_hash_str); + DAP_DELETE( l_datum_hash_str2); return 0; } else { dap_chain_node_cli_set_reply_text(a_str_reply, "Error! Can't find datum %s", l_datum_hash_str); + DAP_DELETE( l_datum_hash_str2); return -4; } } else { @@ -2192,7 +2202,7 @@ int com_token_decl(int argc, char ** argv, char ** a_str_reply) const char * l_certs_str = NULL; - dap_chain_cert_t ** l_certs = NULL; + dap_cert_t ** l_certs = NULL; size_t l_certs_size = 0; dap_chain_t * l_chain = NULL; @@ -2274,7 +2284,7 @@ int com_token_decl(int argc, char ** argv, char ** a_str_reply) } // Load certs lists - dap_chain_cert_parse_str_list(l_certs_str, &l_certs, &l_certs_size); + dap_cert_parse_str_list(l_certs_str, &l_certs, &l_certs_size); if(!l_certs_size) { dap_chain_node_cli_set_reply_text(a_str_reply, "token_create command requres at least one valid certificate to sign the basic transaction of emission"); @@ -2297,11 +2307,11 @@ int com_token_decl(int argc, char ** argv, char ** a_str_reply) // Sign header with all certificates in the list and add signs to the end of ticker declaration // Important: for(size_t i = 0; i < l_certs_size; i++) { - dap_chain_sign_t * l_sign = dap_chain_cert_sign(l_certs[i], + dap_sign_t * l_sign = dap_cert_sign(l_certs[i], l_datum_token, sizeof(l_datum_token->header), 0); - size_t l_sign_size = dap_chain_sign_get_size(l_sign); + size_t l_sign_size = dap_sign_get_size(l_sign); l_datum_token = DAP_REALLOC(l_datum_token, sizeof(l_datum_token->header) + l_signs_offset + l_sign_size); memcpy(l_datum_token->signs + l_signs_offset, l_sign, l_sign_size); l_signs_offset += l_sign_size; @@ -2313,7 +2323,7 @@ int com_token_decl(int argc, char ** argv, char ** a_str_reply) // Calc datum's hash dap_chain_hash_fast_t l_key_hash; - dap_hash_fast(l_datum, l_datum_size, (uint8_t*) &l_key_hash); + dap_hash_fast(l_datum, l_datum_size, &l_key_hash); char * l_key_str = dap_chain_hash_fast_to_str_new(&l_key_hash); // Add datum to mempool with datum_token hash as a key @@ -2363,7 +2373,7 @@ int com_token_emit(int argc, char ** argv, char ** str_reply) const char * l_certs_str = NULL; - dap_chain_cert_t ** l_certs = NULL; + dap_cert_t ** l_certs = NULL; size_t l_certs_size = 0; const char * l_chain_emission_str = NULL; @@ -2410,7 +2420,7 @@ int com_token_emit(int argc, char ** argv, char ** str_reply) } // Load certs - dap_chain_cert_parse_str_list(l_certs_str, &l_certs, &l_certs_size); + dap_cert_parse_str_list(l_certs_str, &l_certs, &l_certs_size); if(!l_certs_size) { dap_chain_node_cli_set_reply_text(str_reply, @@ -2506,9 +2516,9 @@ int com_token_emit(int argc, char ** argv, char ** str_reply) // Then add signs size_t l_offset = 0; for(size_t i = 0; i < l_certs_size; i++) { - dap_chain_sign_t * l_sign = dap_chain_cert_sign(l_certs[i], &l_token_emission->hdr, + dap_sign_t * l_sign = dap_cert_sign(l_certs[i], &l_token_emission->hdr, sizeof(l_token_emission->hdr), 0); - size_t l_sign_size = dap_chain_sign_get_size(l_sign); + size_t l_sign_size = dap_sign_get_size(l_sign); l_token_emission_size += l_sign_size; l_token_emission = DAP_REALLOC(l_token_emission, l_token_emission_size); memcpy(l_token_emission->data.type_auth.signs + l_offset, l_sign, l_sign_size); @@ -2524,7 +2534,7 @@ int com_token_emit(int argc, char ** argv, char ** str_reply) // Calc token's hash dap_chain_hash_fast_t l_token_emission_hash; - dap_hash_fast(l_token_emission, l_token_emission_size, (uint8_t*) &l_token_emission_hash); + dap_hash_fast(l_token_emission, l_token_emission_size, &l_token_emission_hash); char * l_key_str = dap_chain_hash_fast_to_str_new(&l_token_emission_hash); // Delete token emission @@ -2585,12 +2595,12 @@ int com_token_emit(int argc, char ** argv, char ** str_reply) //dap_hash_fast(l_tx, l_tx_size, &l_key_hash); //dap_hash_fast(l_datum_tx, l_datum_tx_size, &l_key_hash); // calc datum hash dap_chain_hash_fast_t l_datum_tx_hash; - dap_hash_fast(l_datum_tx, l_datum_tx_size, (uint8_t*) &l_datum_tx_hash); + dap_hash_fast(l_datum_tx, l_datum_tx_size, &l_datum_tx_hash); l_key_str = dap_chain_hash_fast_to_str_new(&l_datum_tx_hash); DAP_DELETE(l_tx); // Add to mempool tx token - if(dap_chain_global_db_gr_set(l_key_str, (uint8_t *) l_datum_tx, l_datum_tx_size + if(dap_chain_global_db_gr_set(l_key_str, l_datum_tx, l_datum_tx_size , l_gdb_group_mempool_base_tx)) { dap_chain_node_cli_set_reply_text(str_reply, "%s\ndatum tx %s is placed in datum pool ", str_reply_tmp, l_key_str); @@ -2616,19 +2626,12 @@ int com_tx_cond_create(int argc, char ** argv, char **str_reply) { (void) argc; // test + /* const char * l_token_ticker = NULL; const char *c_wallets_path = dap_chain_wallet_get_path(g_config); const char *c_wallet_name_from = "w_tesla"; // where to take coins for service const char *c_wallet_name_cond = "w_picnic"; // who will be use service, usually the same address (addr_from) -// const char *c_net_name = "kelvin-testnet"; uint64_t l_value = 50; - //debug - { -// dap_chain_wallet_t * l_wallet_tesla = dap_chain_wallet_open("w_picnic", c_wallets_path); -// const dap_chain_addr_t *l_addr_tesla = dap_chain_wallet_get_addr(l_wallet_tesla); - // char *addr = dap_chain_addr_to_str(l_addr_tesla); -// addr = 0; - } dap_chain_wallet_t *l_wallet_from = dap_chain_wallet_open(c_wallet_name_from, c_wallets_path); dap_enc_key_t *l_key = dap_chain_wallet_get_key(l_wallet_from, 0); @@ -2653,6 +2656,8 @@ int com_tx_cond_create(int argc, char ** argv, char **str_reply) dap_chain_node_cli_set_reply_text(str_reply, "cond create=%s\n", (res == 0) ? "Ok" : (res == -2) ? "False, not enough funds for service fee" : "False"); return res; + */ + return -1; } /** @@ -2745,7 +2750,7 @@ int com_tx_create(int argc, char ** argv, char **str_reply) dap_chain_node_cli_set_reply_text(str_reply, "wallet %s does not exist", l_from_wallet_name); return -1; } - const dap_chain_addr_t *addr_from = (const dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet); + const dap_chain_addr_t *addr_from = (const dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet, l_net->pub.id); dap_chain_addr_t *addr_to = dap_chain_addr_from_str(addr_base58_to); dap_chain_addr_t *addr_fee = dap_chain_addr_from_str(addr_base58_fee); @@ -2875,7 +2880,7 @@ int com_tx_history(int argc, char ** argv, char **str_reply) const char *c_wallets_path = dap_chain_wallet_get_path(g_config); dap_chain_wallet_t * l_wallet = dap_chain_wallet_open(l_wallet_name, c_wallets_path); if(l_wallet) { - dap_chain_addr_t *l_addr_tmp = (dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet); + dap_chain_addr_t *l_addr_tmp = (dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet, l_net->pub.id); l_addr = DAP_NEW_SIZE(dap_chain_addr_t, sizeof(dap_chain_addr_t)); memcpy(l_addr, l_addr_tmp, sizeof(dap_chain_addr_t)); dap_chain_wallet_close(l_wallet);