diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c index a7fa58dd6add801fbafe8ace9a87cb7d66e91514..77b79789f4661b0fc874abcac74c42c9fb2d1047 100644 --- a/modules/chain/dap_chain_ledger.c +++ b/modules/chain/dap_chain_ledger.c @@ -570,7 +570,7 @@ void s_ledger_token_cache_update(dap_ledger_t *a_ledger, dap_chain_ledger_token_ uint8_t *l_cache = DAP_NEW_STACK_SIZE(uint8_t, l_cache_size); memcpy(l_cache, &l_token_item->current_supply, sizeof(uint256_t)); memcpy(l_cache + sizeof(uint256_t), l_token_item->datum_token, l_token_item->datum_token_size); - if (!dap_global_db_set(l_gdb_group, l_token_item->ticker, l_cache, l_cache_size, false, NULL, NULL)) { + if (dap_global_db_set(l_gdb_group, l_token_item->ticker, l_cache, l_cache_size, false, NULL, NULL)) { char *l_supply = dap_chain_balance_print(l_token_item->current_supply); log_it(L_WARNING, "Ledger cache mismatch, can't add token [%s] with supply %s", l_token_item->ticker, l_supply); DAP_FREE(l_supply); @@ -2006,7 +2006,7 @@ static void s_ledger_emission_cache_update(dap_ledger_t *a_ledger, dap_chain_led memcpy(l_cache, &a_emission_item->tx_used_out, sizeof(dap_hash_fast_t)); memcpy(l_cache + sizeof(dap_hash_fast_t), a_emission_item->datum_token_emission, a_emission_item->datum_token_emission_size); char *l_hash_str = dap_hash_fast_to_str_new(&a_emission_item->datum_token_emission_hash); - if (!dap_global_db_set(l_gdb_group, l_hash_str, l_cache, l_cache_size, false, NULL, NULL)) { + if (dap_global_db_set(l_gdb_group, l_hash_str, l_cache, l_cache_size, false, NULL, NULL)) { log_it(L_WARNING, "Ledger cache mismatch"); } DAP_DELETE(l_gdb_group); @@ -2173,7 +2173,7 @@ void s_ledger_stake_lock_cache_update(dap_ledger_t *a_ledger, dap_chain_ledger_s { char *l_hash_str = dap_chain_hash_fast_to_str_new(&a_stake_lock_item->tx_for_stake_lock_hash); char *l_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_STAKE_LOCK_STR); - if (!dap_global_db_set(l_group, l_hash_str, &a_stake_lock_item->tx_used_out, sizeof(dap_hash_fast_t), false, NULL, NULL)) + if (dap_global_db_set(l_group, l_hash_str, &a_stake_lock_item->tx_used_out, sizeof(dap_hash_fast_t), false, NULL, NULL)) log_it(L_WARNING, "Ledger cache mismatch"); DAP_DEL_Z(l_hash_str); DAP_DEL_Z(l_group); @@ -3359,7 +3359,7 @@ static int s_balance_cache_update(dap_ledger_t *a_ledger, dap_ledger_wallet_bala { if (PVT(a_ledger)->cached) { char *l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_BALANCES_STR); - if (!dap_global_db_set(l_gdb_group, a_balance->key, &a_balance->balance, sizeof(uint256_t), false, NULL, NULL)) { + if (dap_global_db_set(l_gdb_group, a_balance->key, &a_balance->balance, sizeof(uint256_t), false, NULL, NULL)) { debug_if(s_debug_more, L_WARNING, "Ledger cache mismatch"); return -1; } diff --git a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c index d85b2cbc10618ee3ec4fefc0ddf4641a30025d76..554f953ab4ac7f04eb42a87c3d2c9838eb8937cc 100644 --- a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c +++ b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c @@ -541,16 +541,14 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch , void* a_arg) DAP_DELETE(l_receipt_hash_str); size_t l_success_size; - dap_chain_hash_fast_t *l_tx_in_hash = NULL; if (!l_usage->is_grace) { // Form input transaction dap_chain_addr_t *l_wallet_addr = dap_chain_wallet_get_addr(l_usage->price->wallet, l_usage->net->pub.id); - l_tx_in_hash = dap_chain_mempool_tx_create_cond_input(l_usage->net, &l_usage->tx_cond_hash, l_wallet_addr, - dap_chain_wallet_get_key(l_usage->price->wallet, 0), - l_receipt); - if (l_tx_in_hash) { - l_usage->tx_cond_hash = *l_tx_in_hash; - char *l_tx_in_hash_str = dap_chain_hash_fast_to_str_new(l_tx_in_hash); + char *l_tx_in_hash_str = dap_chain_mempool_tx_create_cond_input(l_usage->net, &l_usage->tx_cond_hash, l_wallet_addr, + dap_chain_wallet_get_key(l_usage->price->wallet, 0), + l_receipt, "hex"); + if (l_tx_in_hash_str) { + dap_chain_hash_fast_from_str(l_tx_in_hash_str, &l_usage->tx_cond_hash); log_it(L_NOTICE, "Formed tx %s for input with active receipt", l_tx_in_hash_str); DAP_DELETE(l_tx_in_hash_str); }else @@ -568,16 +566,13 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch , void* a_arg) l_success->hdr.net_id.uint64 = l_usage->net->pub.id.uint64; l_success->hdr.srv_uid.uint64 = l_usage->service->uid.uint64; - if (l_tx_in_hash) { - memcpy(l_success->custom_data, l_tx_in_hash, sizeof(dap_chain_hash_fast_t)); - DAP_DELETE(l_tx_in_hash); - } - if (l_usage->is_grace) log_it(L_NOTICE, "Receipt is OK, but transaction can't be found. Start the grace period for %d seconds", l_srv->grace_period); - else + else { + memcpy(l_success->custom_data, &l_usage->tx_cond_hash, sizeof(dap_chain_hash_fast_t)); log_it(L_NOTICE, "Receipt with remote client sign is acceptible for. Now start the service's usage"); + } dap_stream_ch_pkt_write_unsafe( a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_SUCCESS , l_success, l_success_size); diff --git a/modules/common/include/dap_chain_datum.h b/modules/common/include/dap_chain_datum.h index 6a61ea4b0eb4a032b7719d42f171dcdf4d336325..0bfecc72ec5e7364d8d7f143a79cbe8373049275 100644 --- a/modules/common/include/dap_chain_datum.h +++ b/modules/common/include/dap_chain_datum.h @@ -146,7 +146,7 @@ typedef void (*dap_chain_datum_callback_iter_delete_t)(dap_chain_datum_iter_t * * @param a_datum * @return */ -static inline size_t dap_chain_datum_size(const dap_chain_datum_t *a_datum) +DAP_STATIC_INLINE size_t dap_chain_datum_size(const dap_chain_datum_t *a_datum) { if (!a_datum) return 0; @@ -156,7 +156,7 @@ static inline size_t dap_chain_datum_size(const dap_chain_datum_t *a_datum) dap_chain_datum_t * dap_chain_datum_create(uint16_t a_type_id, const void * a_data, size_t a_data_size); -static inline const char *dap_chain_datum_type_id_to_str(uint16_t a_type_id) +DAP_STATIC_INLINE const char *dap_chain_datum_type_id_to_str(uint16_t a_type_id) { const char * l_ret; DAP_DATUM_TYPE_STR(a_type_id,l_ret); diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c index 074c3ef6718fe20c60c109cca4e4b6f5dcf827d6..b6cc245028ca446d059e564fe30a3f2953e16741 100644 --- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c +++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c @@ -415,10 +415,10 @@ static void s_poa_round_check_callback_round_clean(dap_global_db_context_t *a_gl uint64_t l_time_diff = dap_nanotime_now() - l_event_round_item->round_info.ts_update; uint64_t l_timeuot = dap_nanotime_from_sec(l_poa_pvt->confirmations_timeout + l_poa_pvt->wait_sync_before_complete + 10); uint64_t l_round_id = ((dap_chain_cs_dag_event_t *)l_event_round_item->event_n_signs)->header.round_id; - if (l_time_diff > l_timeuot && l_round_id <= l_dag->round_completed) { + if (l_time_diff > l_timeuot || l_round_id <= l_dag->round_completed) { dap_global_db_del_unsafe(a_global_db_context, a_group, a_values[i].key); - log_it(L_DEBUG, "DAG-PoA: Remove event %s from round %"DAP_UINT64_FORMAT_U" by timer.", - a_values[i].key, l_round_id); + log_it(L_DEBUG, "DAG-PoA: Remove event %s from round %"DAP_UINT64_FORMAT_U" %s.", + a_values[i].key, l_round_id, l_time_diff > l_timeuot ? "by timer" : "owing to round completion"); } } } @@ -552,7 +552,7 @@ static void s_callback_round_event_to_chain_callback_get_round_item(dap_global_d dap_chain_cs_dag_event_t *l_new_atom = NULL; if (l_chosen_item) { size_t l_event_size = l_chosen_item->event_size; - l_new_atom = dap_chain_cs_dag_event_copy((dap_chain_cs_dag_event_t *)l_chosen_item->event_n_signs, l_event_size); + l_new_atom = DAP_DUP_SIZE(l_chosen_item->event_n_signs, l_event_size); dap_hash_fast_t l_event_hash = {}; dap_hash_fast(l_new_atom, l_event_size, &l_event_hash); char l_event_hash_hex_str[DAP_CHAIN_HASH_FAST_STR_SIZE]; @@ -560,22 +560,21 @@ static void s_callback_round_event_to_chain_callback_get_round_item(dap_global_d dap_chain_atom_verify_res_t l_res = l_dag->chain->callback_atom_add(l_dag->chain, l_new_atom, l_event_size); if (l_res == ATOM_PASS || l_res == ATOM_REJECT) { // Add new atom in chain DAP_DEL_Z(l_new_atom); - log_it(L_NOTICE, "Event %s from round %"DAP_UINT64_FORMAT_U" not added in chain", l_event_hash_hex_str, l_arg->round_id); + log_it(L_DEBUG, "Event %s from round %"DAP_UINT64_FORMAT_U" not added in chain", l_event_hash_hex_str, l_arg->round_id); } else { log_it(L_NOTICE, "Event %s from round %"DAP_UINT64_FORMAT_U" added in %s successfully", l_event_hash_hex_str, l_arg->round_id, l_res == ATOM_ACCEPT ? "chain" : "threshold"); - if (l_res == ATOM_ACCEPT) + if (l_res == ATOM_ACCEPT) { dap_chain_atom_save(l_dag->chain, (dap_chain_atom_ptr_t)l_new_atom, l_event_size, l_dag->chain->cells->id); + pthread_rwlock_wrlock(&l_poa_pvt->rounds_rwlock); + HASH_DEL(l_poa_pvt->active_rounds, l_arg); + pthread_rwlock_unlock(&l_poa_pvt->rounds_rwlock); + s_poa_round_clean(l_dag->chain); + } } } else log_it(L_WARNING, "No round candidates for round ID %"DAP_UINT64_FORMAT_U, l_arg->round_id); - pthread_rwlock_wrlock(&l_poa_pvt->rounds_rwlock); - HASH_DEL(l_poa_pvt->active_rounds, l_arg); - if (!l_new_atom || !l_new_atom->header.round_id) - l_dag->round_completed++; - pthread_rwlock_unlock(&l_poa_pvt->rounds_rwlock); dap_list_free(l_dups_list); - dap_store_obj_free(l_events_round, l_events_round_size); DAP_DELETE(a_arg); } diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c index e03870d6e6d40b8a0bc81450dbf215849b939d0c..bc0b35ef84a0aca25e607a9d5e4a8bd5e04a78f0 100644 --- a/modules/mempool/dap_chain_mempool.c +++ b/modules/mempool/dap_chain_mempool.c @@ -82,7 +82,7 @@ int dap_datum_mempool_init(void) * @param a_datum * @return */ -char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t *a_chain) +char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t *a_chain, const char *a_hash_out_type) { if( a_datum == NULL){ log_it(L_ERROR, "NULL datum trying to add in mempool"); @@ -90,19 +90,37 @@ char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t } dap_chain_hash_fast_t l_key_hash; - dap_hash_fast(a_datum->data, a_datum->header.data_size, &l_key_hash); - char * l_key_str = dap_chain_hash_fast_to_str_new(&l_key_hash); - char * l_gdb_group = dap_chain_net_get_gdb_group_mempool_new(a_chain); - - if (dap_global_db_set(l_gdb_group, l_key_str, a_datum, dap_chain_datum_size(a_datum),true, NULL, NULL )==0) { - log_it(L_NOTICE, "Datum with hash %s was placed in mempool", l_key_str); - } else { - log_it(L_WARNING, "Can't place datum with hash %s in mempool", l_key_str); - DAP_DEL_Z(l_key_str); + char *l_key_str; + if (dap_strcmp(a_hash_out_type, "hex")) + l_key_str = dap_chain_hash_fast_to_str_new(&l_key_hash); + else + l_key_str = dap_enc_base58_encode_hash_to_str(&l_key_hash); + + const char *l_type_str; + switch (a_datum->header.type_id) { + case DAP_CHAIN_DATUM_TOKEN_DECL: + l_type_str = "token"; + break; + case DAP_CHAIN_DATUM_TOKEN_EMISSION: + l_type_str = "emission"; + break; + case DAP_CHAIN_DATUM_TX: + l_type_str = "transaction"; + break; + default: + DAP_DATUM_TYPE_STR(a_datum->header.type_id, l_type_str); } + + char *l_gdb_group = dap_chain_net_get_gdb_group_mempool_new(a_chain); + int l_res = dap_global_db_set(l_gdb_group, l_key_str, a_datum, dap_chain_datum_size(a_datum), true, NULL, NULL); + if (l_res == DAP_GLOBAL_DB_RC_SUCCESS) + log_it(L_NOTICE, "Datum %s with hash %s was placed in mempool group %s", l_type_str, l_key_str, l_gdb_group); + else + log_it(L_WARNING, "Can't place datum %s with hash %s in mempool group %s", l_type_str, l_key_str, l_gdb_group); DAP_DELETE(l_gdb_group); - return l_key_str; + + return (l_res == DAP_GLOBAL_DB_RC_SUCCESS) ? l_key_str : NULL; } /** @@ -110,10 +128,10 @@ char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t * * return 0 Ok, -2 not enough funds to transfer, -1 other Error */ -dap_hash_fast_t* dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_t *a_key_from, +char *dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_t *a_key_from, const dap_chain_addr_t* a_addr_from, const dap_chain_addr_t* a_addr_to, const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX], - uint256_t a_value, uint256_t a_value_fee) + uint256_t a_value, uint256_t a_value_fee, const char *a_hash_out_type) { // check valid param if(!a_chain | !a_key_from || ! a_addr_from || !a_key_from->priv_key_data || !a_key_from->priv_key_data_size || @@ -240,21 +258,13 @@ dap_hash_fast_t* dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_ } size_t l_tx_size = dap_chain_datum_tx_get_size(l_tx); + dap_hash_fast_t l_tx_hash; + dap_hash_fast(l_tx, l_tx_size, &l_tx_hash); dap_chain_datum_t *l_datum = dap_chain_datum_create(DAP_CHAIN_DATUM_TX, l_tx, l_tx_size); - dap_hash_fast_t * l_ret = DAP_NEW_Z(dap_hash_fast_t); - dap_hash_fast(l_tx, l_tx_size, l_ret); DAP_DELETE(l_tx); - char *l_hash_str = dap_chain_mempool_datum_add(l_datum, a_chain); - - DAP_DELETE( l_datum ); - - if (l_hash_str) { - DAP_DELETE(l_hash_str); - return l_ret; - }else{ - DAP_DELETE(l_ret); - return NULL; - } + char *l_ret = dap_chain_mempool_datum_add(l_datum, a_chain, a_hash_out_type); + DAP_DELETE(l_datum); + return l_ret; } /** @@ -264,8 +274,8 @@ dap_hash_fast_t* dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_ */ int dap_chain_mempool_tx_create_massive( dap_chain_t * a_chain, dap_enc_key_t *a_key_from, const dap_chain_addr_t* a_addr_from, const dap_chain_addr_t* a_addr_to, - const char a_token_ticker[10], - uint256_t a_value, uint256_t a_value_fee,size_t a_tx_num) + const char a_token_ticker[10], uint256_t a_value, uint256_t a_value_fee, + size_t a_tx_num) { // check valid param if(!a_chain | !a_key_from || !a_addr_from || !a_key_from->priv_key_data || !a_key_from->priv_key_data_size || @@ -476,9 +486,14 @@ static void s_tx_create_massive_gdb_save_callback(dap_global_db_context_t *a_glo } -dap_chain_datum_t *dap_chain_tx_create_cond_input(dap_chain_net_t * a_net, dap_chain_hash_fast_t *a_tx_prev_hash, - const dap_chain_addr_t* a_addr_to, dap_enc_key_t *a_key_tx_sign, - dap_chain_datum_tx_receipt_t * a_receipt) +/** + * Make transfer transaction & insert to cache + * + * return 0 Ok, -2 not enough funds to transfer, -1 other Error + */ +char *dap_chain_mempool_tx_create_cond_input(dap_chain_net_t *a_net, dap_chain_hash_fast_t *a_tx_prev_hash, + const dap_chain_addr_t *a_addr_to, dap_enc_key_t *a_key_tx_sign, + dap_chain_datum_tx_receipt_t *a_receipt, const char *a_hash_out_type) { dap_ledger_t * l_ledger = a_net ? dap_chain_ledger_by_net_name( a_net->pub.name ) : NULL; if ( ! a_net || ! l_ledger || ! a_addr_to ) @@ -564,43 +579,24 @@ dap_chain_datum_t *dap_chain_tx_create_cond_input(dap_chain_net_t * a_net, dap_c size_t l_tx_size = dap_chain_datum_tx_get_size( l_tx ); dap_chain_datum_t *l_datum = dap_chain_datum_create( DAP_CHAIN_DATUM_TX, l_tx, l_tx_size ); dap_chain_datum_tx_delete(l_tx); - return l_datum; -} - -dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond_input(dap_chain_net_t * a_net, dap_chain_hash_fast_t *a_tx_prev_hash, - const dap_chain_addr_t* a_addr_to, dap_enc_key_t *a_key_tx_sign, - dap_chain_datum_tx_receipt_t * a_receipt) -{ - dap_chain_datum_t *l_datum = dap_chain_tx_create_cond_input(a_net, a_tx_prev_hash, a_addr_to, a_key_tx_sign, a_receipt); - dap_chain_hash_fast_t *l_key_hash = DAP_NEW_Z( dap_chain_hash_fast_t ); - dap_hash_fast(l_datum->data, l_datum->header.data_size, l_key_hash); - - char * l_key_str = dap_chain_hash_fast_to_str_new( l_key_hash ); - - char * l_gdb_group = dap_chain_net_get_gdb_group_mempool_by_chain_type(a_net, CHAIN_TYPE_TX); - - if( dap_global_db_set(l_gdb_group, l_key_str, l_datum, dap_chain_datum_size(l_datum), true, NULL, NULL ) == 0 ) { - log_it(L_NOTICE, "Transaction %s placed in mempool", l_key_str); - DAP_DELETE(l_datum); - } - - DAP_DELETE(l_gdb_group); - DAP_DELETE(l_key_str); - - return l_key_hash; + dap_chain_t *l_chain = dap_chain_net_get_default_chain_by_chain_type(a_net, CHAIN_TYPE_TX); + char *l_ret = dap_chain_mempool_datum_add(l_datum, l_chain, a_hash_out_type); + DAP_DELETE(l_datum); + return l_ret; } - /** * Make transfer transaction * * return dap_chain_datum_t, NULL if Error */ -static dap_chain_datum_t* dap_chain_tx_create_cond(dap_chain_net_t *a_net, +char *dap_chain_mempool_tx_create_cond(dap_chain_net_t *a_net, dap_enc_key_t *a_key_from, dap_pkey_t *a_key_cond, const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX], - uint256_t a_value, uint256_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit, - dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value_fee, const void *a_cond, size_t a_cond_size) + uint256_t a_value, uint256_t a_value_per_unit_max, + dap_chain_net_srv_price_unit_uid_t a_unit, dap_chain_net_srv_uid_t a_srv_uid, + uint256_t a_value_fee, const void *a_cond, + size_t a_cond_size, const char *a_hash_out_type) { dap_ledger_t * l_ledger = a_net ? dap_chain_ledger_by_net_name( a_net->pub.name ) : NULL; // check valid param @@ -689,53 +685,17 @@ static dap_chain_datum_t* dap_chain_tx_create_cond(dap_chain_net_t *a_net, size_t l_tx_size = dap_chain_datum_tx_get_size( l_tx ); dap_chain_datum_t *l_datum = dap_chain_datum_create( DAP_CHAIN_DATUM_TX, l_tx, l_tx_size ); - - return l_datum; -} - - -/** - * Make transfer transaction & insert to cache - * - * return 0 Ok, -2 not enough funds to transfer, -1 other Error - */ -dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond(dap_chain_net_t * a_net, - dap_enc_key_t *a_key_from, dap_pkey_t *a_key_cond, - const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX], - uint256_t a_value, uint256_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit, - dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value_fee, const void *a_cond, size_t a_cond_size) -{ - // Make transfer transaction - dap_chain_datum_t *l_datum = dap_chain_tx_create_cond(a_net, a_key_from, a_key_cond, - a_token_ticker, a_value, a_value_per_unit_max, - a_unit, a_srv_uid, a_value_fee, a_cond, a_cond_size); - - if(!l_datum) - return NULL; - - dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*)&(l_datum->data); - size_t l_tx_size = l_datum->header.data_size;//dap_chain_datum_tx_get_size( l_tx ); - - dap_chain_hash_fast_t *l_key_hash = DAP_NEW_Z( dap_chain_hash_fast_t ); - dap_hash_fast( l_tx, l_tx_size, l_key_hash ); - //DAP_DELETE( l_tx ); - - char * l_key_str = dap_chain_hash_fast_to_str_new( l_key_hash ); - char * l_gdb_group = dap_chain_net_get_gdb_group_mempool_by_chain_type( a_net ,CHAIN_TYPE_TX); - - if( dap_global_db_set(l_gdb_group, l_key_str, l_datum, dap_chain_datum_size(l_datum), true, NULL, NULL ) == 0 ) { - log_it(L_NOTICE, "Transaction %s placed in mempool group %s", l_key_str, l_gdb_group); - } - - DAP_DELETE(l_gdb_group); - DAP_DELETE(l_key_str); - - return l_key_hash; + dap_chain_datum_tx_delete(l_tx); + dap_chain_t *l_chain = dap_chain_net_get_default_chain_by_chain_type(a_net, CHAIN_TYPE_TX); + char *l_ret = dap_chain_mempool_datum_add(l_datum, l_chain, a_hash_out_type); + DAP_DELETE(l_datum); + return l_ret; } -dap_chain_hash_fast_t *dap_chain_mempool_base_tx_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash, - dap_chain_id_t a_emission_chain_id, uint256_t a_emission_value, const char *a_ticker, - dap_chain_addr_t *a_addr_to, dap_cert_t **a_certs, size_t a_certs_count) +char *dap_chain_mempool_base_tx_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash, + dap_chain_id_t a_emission_chain_id, uint256_t a_emission_value, const char *a_ticker, + dap_chain_addr_t *a_addr_to, dap_cert_t **a_certs, size_t a_certs_count, + const char *a_hash_out_type) { char *l_gdb_group_mempool_base_tx = dap_chain_net_get_gdb_group_mempool_new(a_chain); // create first transaction (with tx_token) @@ -771,21 +731,10 @@ dap_chain_hash_fast_t *dap_chain_mempool_base_tx_create(dap_chain_t *a_chain, da // Pack transaction into the datum dap_chain_datum_t * l_datum_tx = dap_chain_datum_create(DAP_CHAIN_DATUM_TX, l_tx, l_tx_size); - size_t l_datum_tx_size = dap_chain_datum_size(l_datum_tx); - DAP_DEL_Z(l_tx); - // calc datum hash - dap_chain_hash_fast_t *l_datum_tx_hash = DAP_NEW(dap_hash_fast_t); - dap_hash_fast(l_datum_tx, l_datum_tx_size, l_datum_tx_hash); - char *l_tx_hash_str = dap_chain_hash_fast_to_str_new(l_datum_tx_hash); - // Add to mempool tx token - bool l_placed = dap_global_db_set(l_gdb_group_mempool_base_tx, l_tx_hash_str, l_datum_tx, - l_datum_tx_size, true, NULL, NULL) == 0; - DAP_DEL_Z(l_tx_hash_str); + dap_chain_datum_tx_delete(l_tx); + char *l_ret = dap_chain_mempool_datum_add(l_datum_tx, a_chain, a_hash_out_type); DAP_DELETE(l_datum_tx); - if (!l_placed) { - return NULL; - } - return l_datum_tx_hash; + return l_ret; } dap_chain_datum_token_emission_t *dap_chain_mempool_emission_get(dap_chain_t *a_chain, const char *a_emission_hash_str) diff --git a/modules/mempool/include/dap_chain_mempool.h b/modules/mempool/include/dap_chain_mempool.h index cdcbdeb4df236e33cd49132cf10e94999ce35fbc..ee5670144bf7ff8728ec57f0375b5d3d621e04b8 100644 --- a/modules/mempool/include/dap_chain_mempool.h +++ b/modules/mempool/include/dap_chain_mempool.h @@ -44,32 +44,32 @@ void dap_datum_mempool_free(dap_datum_mempool_t *datum); void dap_chain_mempool_add_proc(dap_http_t * a_http_server, const char * a_url); -char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t *a_chain); -dap_hash_fast_t* dap_chain_mempool_tx_create(dap_chain_t *a_chain, dap_enc_key_t *a_key_from, +char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t *a_chain, const char *a_hash_out_type); + +char *dap_chain_mempool_tx_create(dap_chain_t *a_chain, dap_enc_key_t *a_key_from, const dap_chain_addr_t *a_addr_from, const dap_chain_addr_t *a_addr_to, const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX], - uint256_t a_value, uint256_t a_value_fee); + uint256_t a_value, uint256_t a_value_fee, const char *a_hash_out_type); // Make transfer transaction & insert to cache -dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond(dap_chain_net_t * a_net, +char *dap_chain_mempool_tx_create_cond(dap_chain_net_t * a_net, dap_enc_key_t *a_key_from, dap_pkey_t *a_key_cond, const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX], uint256_t a_value, uint256_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit, - dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value_fee, const void *a_cond, size_t a_cond_size); + dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value_fee, const void *a_cond, + size_t a_cond_size, const char *a_hash_out_type); -dap_chain_datum_t *dap_chain_tx_create_cond_input(dap_chain_net_t * a_net, dap_chain_hash_fast_t *a_tx_prev_hash, - const dap_chain_addr_t* a_addr_to, dap_enc_key_t *a_key_tx_sign, - dap_chain_datum_tx_receipt_t * a_receipt); -dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond_input(dap_chain_net_t * a_net, dap_chain_hash_fast_t *a_tx_prev_hash, - const dap_chain_addr_t *a_addr_to, dap_enc_key_t *a_key_tx_sign, dap_chain_datum_tx_receipt_t *a_receipt); +char *dap_chain_mempool_tx_create_cond_input(dap_chain_net_t *a_net, dap_chain_hash_fast_t *a_tx_prev_hash, + const dap_chain_addr_t *a_addr_to, dap_enc_key_t *a_key_tx_sign, dap_chain_datum_tx_receipt_t *a_receipt, const char *a_hash_out_type); int dap_chain_mempool_tx_create_massive(dap_chain_t * a_chain, dap_enc_key_t *a_key_from, const dap_chain_addr_t* a_addr_from, const dap_chain_addr_t* a_addr_to, const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX], uint256_t a_value, uint256_t a_value_fee, size_t a_tx_num); -dap_chain_hash_fast_t *dap_chain_mempool_base_tx_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash, - dap_chain_id_t a_emission_chain_id, uint256_t a_emission_value, const char *a_ticker, - dap_chain_addr_t *a_addr_to, dap_cert_t **a_certs, size_t a_certs_count); +char *dap_chain_mempool_base_tx_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash, + dap_chain_id_t a_emission_chain_id, uint256_t a_emission_value, const char *a_ticker, + dap_chain_addr_t *a_addr_to, dap_cert_t **a_certs, size_t a_certs_count, const char *a_hash_out_type); + dap_chain_datum_token_emission_t *dap_chain_mempool_emission_get(dap_chain_t *a_chain, const char *a_emission_hash_str); dap_chain_datum_token_emission_t *dap_chain_mempool_datum_emission_extract(dap_chain_t *a_chain, byte_t *a_data, size_t a_size); diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index daef86b3808c1bb4ff561589b5bc7d0407fc4834..8c905b25104817dd41f2e260fb7d0b7ff207c4c8 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -1967,7 +1967,7 @@ static int s_cli_net(int argc, char **argv, char **a_str_reply) l_ret = dap_global_db_set_sync(l_gdb_group_str, l_hash_hex_str, &c, sizeof(c), false ); DAP_DELETE(l_gdb_group_str); DAP_DELETE(l_hash_hex_str); - if (!l_ret) { + if (l_ret) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't save public key hash %s in database", l_hash_hex_str); return -10; diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 3d0b23899956f9a6f8468280872aa800276e7ff2..ce0d6cc333e5a78141939062d0bb8e1d8b4d8a04 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -240,16 +240,16 @@ static dap_chain_node_info_t* node_info_read_and_reply(dap_chain_net_t * a_net, * @return true * @return false */ -static bool node_info_save_and_reply(dap_chain_net_t * a_net, dap_chain_node_info_t *a_node_info, char **str_reply) +static bool node_info_save_and_reply(dap_chain_net_t * a_net, dap_chain_node_info_t *a_node_info, char **a_str_reply) { if(!a_node_info || !a_node_info->hdr.address.uint64) { - dap_cli_server_cmd_set_reply_text(str_reply, "node addr not found"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "node addr not found"); return false; } char *a_key = dap_chain_node_addr_to_hash_str(&a_node_info->hdr.address); if(!a_key) { - dap_cli_server_cmd_set_reply_text(str_reply, "can't calculate hash for addr"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "can't calculate hash for addr"); return NULL; } //char *a_value = dap_chain_node_info_serialize(node_info, NULL); @@ -307,7 +307,7 @@ static int node_info_add_with_reply(dap_chain_net_t * a_net, dap_chain_node_info // check match addr to cell or no /*dap_chain_node_addr_t *addr = dap_chain_node_gen_addr(&node_info->hdr.cell_id); if(!dap_chain_node_check_addr(&node_info->hdr.address, &node_info->hdr.cell_id)) { - set_reply_text(str_reply, "cell does not match addr"); + set_reply_text(a_str_reply, "cell does not match addr"); return -1; }*/ if(a_alias_str) { @@ -343,23 +343,23 @@ static int node_info_add_with_reply(dap_chain_net_t * a_net, dap_chain_node_info * return 0 Ok, -1 error */ static int node_info_del_with_reply(dap_chain_net_t * a_net, dap_chain_node_info_t *a_node_info, const char *alias_str, - char **str_reply) + char **a_str_reply) { if(!a_node_info->hdr.address.uint64 && !alias_str) { - dap_cli_server_cmd_set_reply_text(str_reply, "addr not found"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "addr not found"); return -1; } // check, current node have this addr or no uint64_t l_cur_addr = dap_chain_net_get_cur_node_addr_gdb_sync(a_net->pub.name); if(l_cur_addr && l_cur_addr == a_node_info->hdr.address.uint64) { - dap_cli_server_cmd_set_reply_text(str_reply, "current node cannot be deleted"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "current node cannot be deleted"); return -1; } // find addr by alias or addr_str dap_chain_node_addr_t *address = s_node_info_get_addr(a_net, &a_node_info->hdr.address, alias_str); if(!address) { - dap_cli_server_cmd_set_reply_text(str_reply, "alias not found"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "alias not found"); return -1; } char *a_key = dap_chain_node_addr_to_hash_str(address); @@ -380,15 +380,15 @@ static int node_info_del_with_reply(dap_chain_net_t * a_net, dap_chain_node_info dap_list_free_full(list_aliases, NULL); } // set text response - dap_cli_server_cmd_set_reply_text(str_reply, "node deleted"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "node deleted"); } else - dap_cli_server_cmd_set_reply_text(str_reply, "node not deleted"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "node not deleted"); DAP_DELETE(a_key); DAP_DELETE(address); return l_res; } - dap_cli_server_cmd_set_reply_text(str_reply, "addr to delete can't be defined"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "addr to delete can't be defined"); DAP_DELETE(address); return -1; } @@ -860,7 +860,6 @@ int com_global_db(int a_argc, char ** a_argv, char **a_str_reply) dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key); dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group); size_t l_value_len = 0; - uint8_t l_flags = 0; bool l_is_pinned = false; dap_nanotime_t l_ts =0; uint8_t *l_value =dap_global_db_get_sync(l_group, l_key, &l_value_len, &l_is_pinned, &l_ts); @@ -880,7 +879,7 @@ int com_global_db(int a_argc, char ** a_argv, char **a_str_reply) l_hash_str = dap_chain_hash_fast_to_str_new(&l_hash); } char *l_value_str = DAP_NEW_Z_SIZE(char, l_value_len * 2 + 2); - size_t ret = dap_bin2hex(l_value_str, l_value, l_value_len); + //size_t ret = dap_bin2hex(l_value_str, l_value, l_value_len); dap_cli_server_cmd_set_reply_text(a_str_reply, "Record found\n" "lenght:\t%u byte\n" "hash:\t%s\n" @@ -1389,7 +1388,7 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply) * @param str_reply * @return int */ -int com_traceroute(int argc, char** argv, char **str_reply) +int com_traceroute(int argc, char** argv, char **a_str_reply) { #ifdef DAP_OS_LINUX const char *addr = NULL; @@ -1399,61 +1398,61 @@ int com_traceroute(int argc, char** argv, char **str_reply) iputils_set_verbose(); int res = (addr) ? traceroute_util(addr, &hops, &time_usec) : -EADDRNOTAVAIL; if(res >= 0) { - dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s hops=%d time=%.1lf ms", addr, hops, + dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s hops=%d time=%.1lf ms", addr, hops, time_usec * 1. / 1000); } else { - if(str_reply) { + if(a_str_reply) { switch (-res) { case EADDRNOTAVAIL: - dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", (addr) ? addr : "", + dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", (addr) ? addr : "", (addr) ? "Name or service not known" : "Host not defined"); break; case 2: - dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, + dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "Unknown traceroute module"); break; case 3: - dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, "first hop out of range"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "first hop out of range"); break; case 4: - dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, + dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "max hops cannot be more than 255"); break; case 5: - dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, + dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "no more than 10 probes per hop"); break; case 6: - dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, + dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "bad wait specifications"); break; case 7: - dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, "too big packetlen "); + dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "too big packetlen "); break; case 8: - dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, + dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "IP version mismatch in addresses specified"); break; case 9: - dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, "bad sendtime"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "bad sendtime"); break; case 10: - dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, "init_ip_options"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "init_ip_options"); break; case 11: - dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, "calloc"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "calloc"); break; case 12: - dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, "parse cmdline"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "parse cmdline"); break; case 13: - dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, + dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "trace method's init failed"); break; default: - dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error(%d) %s", addr, res, + dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error(%d) %s", addr, res, "trace not found"); } } @@ -1461,8 +1460,8 @@ int com_traceroute(int argc, char** argv, char **str_reply) return res; #else UNUSED(argc); - UNUSED(argv); - dap_cli_server_cmd_set_reply_text(str_reply, "Not realized for your platform"); + UNUSED(a_argv); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Not realized for your platform"); return -1; #endif } @@ -1478,7 +1477,7 @@ int com_traceroute(int argc, char** argv, char **str_reply) * @return int * return 0 OK, -1 Err */ -int com_tracepath(int argc, char** argv, char **str_reply) +int com_tracepath(int argc, char** argv, char **a_str_reply) { #ifdef DAP_OS_LINUX const char *addr = NULL; @@ -1488,65 +1487,65 @@ int com_tracepath(int argc, char** argv, char **str_reply) iputils_set_verbose(); int res = (addr) ? tracepath_util(addr, &hops, &time_usec) : -EADDRNOTAVAIL; if(res >= 0) { - if(str_reply) - dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s hops=%d time=%.1lf ms", addr, hops, + if(a_str_reply) + dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s hops=%d time=%.1lf ms", addr, hops, time_usec * 1. / 1000); } else { - if(str_reply) { + if(a_str_reply) { switch (-res) { case EADDRNOTAVAIL: - dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", (addr) ? addr : "", + dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", (addr) ? addr : "", (addr) ? "Name or service not known" : "Host not defined"); break; case ESOCKTNOSUPPORT: - dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr, "Can't create socket"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr, "Can't create socket"); break; case 2: - dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr, + dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr, "Can't setsockopt IPV6_MTU_DISCOVER"); break; case 3: - dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr, + dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr, "Can't setsockopt IPV6_RECVERR"); break; case 4: - dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr, + dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr, "Can't setsockopt IPV6_HOPLIMIT"); break; case 5: - dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr, + dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr, "Can't setsockopt IP_MTU_DISCOVER"); break; case 6: - dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr, + dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr, "Can't setsockopt IP_RECVERR"); break; case 7: - dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr, + dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr, "Can't setsockopt IP_RECVTTL"); break; case 8: - dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr, "malloc"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr, "malloc"); break; case 9: - dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr, + dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr, "Can't setsockopt IPV6_UNICAST_HOPS"); break; case 10: - dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr, "Can't setsockopt IP_TTL"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr, "Can't setsockopt IP_TTL"); break; default: - dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error(%d) %s", addr, res, "trace not found"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error(%d) %s", addr, res, "trace not found"); } } } return res; #else UNUSED(argc); - UNUSED(argv); - dap_cli_server_cmd_set_reply_text(str_reply, "Not realized for your platform"); + UNUSED(a_argv); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Not realized for your platform"); return -1; #endif } @@ -1561,25 +1560,25 @@ int com_tracepath(int argc, char** argv, char **str_reply) * @param str_reply * @return int */ -int com_ping(int argc, char** argv, char **str_reply) +int com_ping(int a_argc, char**a_argv, char **a_str_reply) { #ifdef DAP_OS_LINUX int n = 4; - if(argc < 2) { - dap_cli_server_cmd_set_reply_text(str_reply, "Host not specified"); + if (a_argc < 2) { + dap_cli_server_cmd_set_reply_text(a_str_reply, "Host not specified"); return -1; } const char *n_str = NULL; int argc_host = 1; int argc_start = 1; - argc_start = dap_cli_server_cmd_find_option_val(argv, argc_start, argc, "-n", &n_str); + argc_start = dap_cli_server_cmd_find_option_val(a_argv, argc_start, a_argc, "-n", &n_str); if(argc_start) { argc_host = argc_start + 1; n = (n_str) ? atoi(n_str) : 4; } else { - argc_start = dap_cli_server_cmd_find_option_val(argv, argc_start, argc, "-c", &n_str); + argc_start = dap_cli_server_cmd_find_option_val(a_argv, argc_start, a_argc, "-c", &n_str); if(argc_start) { argc_host = argc_start + 1; n = (n_str) ? atoi(n_str) : 4; @@ -1587,39 +1586,39 @@ int com_ping(int argc, char** argv, char **str_reply) } if(n <= 1) n = 1; - const char *addr = argv[argc_host]; + const char *addr = a_argv[argc_host]; iputils_set_verbose(); ping_handle_t *l_ping_handle = ping_handle_create(); int res = (addr) ? ping_util(l_ping_handle, addr, n) : -EADDRNOTAVAIL; DAP_DELETE(l_ping_handle); if(res >= 0) { - if(str_reply) - dap_cli_server_cmd_set_reply_text(str_reply, "Ping %s time=%.1lf ms", addr, res * 1. / 1000); + if(a_str_reply) + dap_cli_server_cmd_set_reply_text(a_str_reply, "Ping %s time=%.1lf ms", addr, res * 1. / 1000); } else { - if(str_reply) { + if(a_str_reply) { switch (-res) { case EDESTADDRREQ: - dap_cli_server_cmd_set_reply_text(str_reply, "Ping %s error: %s", addr, "Destination address required"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Ping %s error: %s", addr, "Destination address required"); break; case EADDRNOTAVAIL: - dap_cli_server_cmd_set_reply_text(str_reply, "Ping %s error: %s", (addr) ? addr : "", + dap_cli_server_cmd_set_reply_text(a_str_reply, "Ping %s error: %s", (addr) ? addr : "", (addr) ? "Host not found" : "Host not defined"); break; case EPFNOSUPPORT: - dap_cli_server_cmd_set_reply_text(str_reply, "Ping %s error: %s", addr, "Unknown protocol family"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Ping %s error: %s", addr, "Unknown protocol family"); break; default: - dap_cli_server_cmd_set_reply_text(str_reply, "Ping %s error(%d)", addr, -res); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Ping %s error(%d)", addr, -res); } } } return res; #else UNUSED(argc); - UNUSED(argv); - dap_cli_server_cmd_set_reply_text(str_reply, "Not realized for your platform"); + UNUSED(a_argv); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Not realized for your platform"); return -1; #endif } @@ -1632,7 +1631,7 @@ int com_ping(int argc, char** argv, char **str_reply) * @param str_reply * @return */ -int com_version(int argc, char ** argv, char **str_reply) +int com_version(int argc, char ** argv, char **a_str_reply) { (void) argc; (void) argv; @@ -1640,7 +1639,7 @@ int com_version(int argc, char ** argv, char **str_reply) #pragma message "[!WRN!] DAP_VERSION IS NOT DEFINED. Manual override engaged." #define DAP_VERSION 0.9-15 #endif - dap_cli_server_cmd_set_reply_text(str_reply, + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s version %s\n", dap_get_appname(), DAP_VERSION ); return 0; } @@ -1655,16 +1654,16 @@ int com_version(int argc, char ** argv, char **str_reply) * @param str_reply * @return int */ -int com_help(int argc, char ** argv, char **str_reply) +int com_help(int a_argc, char **a_argv, char **a_str_reply) { - if(argc > 1) { - log_it(L_DEBUG, "Help for command %s", argv[1]); - dap_cli_cmd_t *l_cmd = dap_cli_server_cmd_find(argv[1]); + if (a_argc > 1) { + log_it(L_DEBUG, "Help for command %s", a_argv[1]); + dap_cli_cmd_t *l_cmd = dap_cli_server_cmd_find(a_argv[1]); if(l_cmd) { - dap_cli_server_cmd_set_reply_text(str_reply, "%s:\n%s", l_cmd->doc, l_cmd->doc_ex); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s:\n%s", l_cmd->doc, l_cmd->doc_ex); return 0; } else { - dap_cli_server_cmd_set_reply_text(str_reply, "command \"%s\" not recognized", argv[1]); + dap_cli_server_cmd_set_reply_text(a_str_reply, "command \"%s\" not recognized", a_argv[1]); } return -1; } else { @@ -1677,7 +1676,7 @@ int com_help(int argc, char ** argv, char **str_reply) l_cmd->name, l_cmd->doc ? l_cmd->doc : "(undocumented command)"); l_cmd = (dap_cli_cmd_t*) l_cmd->hh.next; } - dap_cli_server_cmd_set_reply_text(str_reply, + dap_cli_server_cmd_set_reply_text(a_str_reply, "Available commands:\n\n%s\n", l_help_list_str->len ? l_help_list_str->str : "NO ANY COMMAND WERE DEFINED"); return 0; @@ -1695,246 +1694,7 @@ int com_help(int argc, char ** argv, char **str_reply) * @param str_reply * @return int */ -#if 0 -int com_tx_wallet(int argc, char ** argv, char **str_reply) -{ -const char *c_wallets_path = dap_chain_wallet_get_path(g_config); -enum { CMD_NONE, CMD_WALLET_NEW, CMD_WALLET_LIST, CMD_WALLET_INFO, CMD_WALLET_ACTIVATE, CMD_WALLET_DEACTIVATE }; -int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; -char l_buf[1024]; - - - // find add parameter ('alias' or 'handshake') - if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "new", NULL)) - cmd_num = CMD_WALLET_NEW; - else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "list", NULL)) - cmd_num = CMD_WALLET_LIST; - else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "info", NULL)) - cmd_num = CMD_WALLET_INFO; - else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "activate", NULL)) - cmd_num = CMD_WALLET_ACTIVATE; - else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "deactivate", NULL)) - cmd_num = CMD_WALLET_DEACTIVATE; - - l_arg_index++; - - if(cmd_num == CMD_NONE) { - dap_cli_server_cmd_set_reply_text(str_reply, - "Format of command: wallet [new -w <wallet_name> | list | info [<-addr <addr>]|[-w <wallet_name> -net <net_name>]"); - return -1; - } - - dap_chain_node_addr_t address; - memset(&address, 0, sizeof(dap_chain_node_addr_t)); - const char *l_addr_str = NULL, *l_wallet_name = NULL, *l_net_name = NULL, *l_sign_type_str = NULL, *l_restore_str = NULL; - // find wallet addr - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-addr", &l_addr_str); - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-w", &l_wallet_name); - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-net", &l_net_name); - - 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 - case CMD_WALLET_NEW: { - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-sign", &l_sign_type_str); - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-restore", &l_restore_str); - // rewrite existing wallet - int l_is_force = dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-force", NULL); - - if(!l_wallet_name) { - dap_cli_server_cmd_set_reply_text(str_reply, "Wallet name option <-w> not defined"); - return -1; - } - // Check if wallet name has only digits and English letter - if (!dap_isstralnum(l_wallet_name)){ - dap_cli_server_cmd_set_reply_text(str_reply, "Wallet name must contains digits and aplhabetical symbols"); - return -1; - } - - // check wallet existence - if (!l_is_force) { - char *l_file_name = dap_strdup_printf("%s/%s.dwallet", c_wallets_path, l_wallet_name); - FILE *l_exists = fopen(l_file_name, "rb"); - DAP_DELETE(l_file_name); - if (l_exists) { - dap_cli_server_cmd_set_reply_text(str_reply, "Wallet %s already exists", l_wallet_name); - fclose(l_exists); - return -1; - } - } - - dap_sign_type_t l_sign_type; - if (!l_sign_type_str) { - l_sign_type.type = SIG_TYPE_DILITHIUM; - l_sign_type_str = dap_sign_type_to_str(l_sign_type); - } else { - l_sign_type = dap_sign_type_from_str(l_sign_type_str); - if (l_sign_type.type == SIG_TYPE_NULL){ - dap_cli_server_cmd_set_reply_text(str_reply, "Unknown signature type"); - return -1; - } - } - - // - // Check unsupported tesla algorithm - // - - if (l_sign_type.type == SIG_TYPE_TESLA) - { - dap_cli_server_cmd_set_reply_text(str_reply, "Tesla algorithm is no longer supported, please, use another variant"); - return -1; - } - - uint8_t *l_seed = NULL; - size_t l_seed_size = 0; - size_t 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(str_reply, "Resrote 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); - dap_chain_addr_t *l_addr = l_net? dap_chain_wallet_get_addr(l_wallet,l_net->pub.id ) : NULL; - if(!l_wallet) { - dap_cli_server_cmd_set_reply_text(str_reply, "Wallet is not created besause of internal error"); - return -1; - } - char *l_addr_str = l_addr? dap_chain_addr_to_str(l_addr) : NULL; - dap_string_append_printf(l_string_ret, "Wallet '%s' (type=%s) successfully created\n", l_wallet->name, l_sign_type_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); - } - break; - // wallet list - case CMD_WALLET_LIST: { - DIR * l_dir = opendir(c_wallets_path); - if(l_dir) { - struct dirent * l_dir_entry; - while((l_dir_entry = readdir(l_dir)) != NULL) { - const char *l_file_name = l_dir_entry->d_name; - size_t l_file_name_len = (l_file_name) ? strlen(l_file_name) : 0; - if((l_file_name_len > 8) && (strcmp(l_file_name + l_file_name_len - 8, ".dwallet") == 0)) { - 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 = 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); - 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); - } - } - closedir(l_dir); - } - } - break; - - // wallet info - case CMD_WALLET_INFO: { - dap_chain_wallet_t *l_wallet = NULL; - dap_chain_addr_t *l_addr = NULL; - - if(l_wallet_name) { - l_wallet = dap_chain_wallet_open(l_wallet_name, c_wallets_path); - if ( l_net ) - l_addr = (dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet, l_net->pub.id ); - } - if(!l_addr && l_addr_str) - l_addr = dap_chain_addr_from_str(l_addr_str); - - dap_ledger_t *l_ledger = dap_chain_ledger_by_net_name((const char *) l_net_name); - if(!l_net_name && !l_addr ) { - dap_cli_server_cmd_set_reply_text(str_reply, "Subcommand info requires parameter '-net'"); - return -1; - } - else if (! l_addr){ - if((l_ledger = dap_chain_ledger_by_net_name(l_net_name)) == NULL) { - dap_cli_server_cmd_set_reply_text(str_reply, "Not found net by name '%s'", l_net_name); - return -1; - } - }else{ - l_net = dap_chain_net_by_id(l_addr->net_id); - if (l_net){ - l_ledger = l_net->pub.ledger; - l_net_name = l_net->pub.name; - }else{ - dap_cli_server_cmd_set_reply_text(str_reply, "Can't find network id 0x%08X from address %s", l_addr->net_id.uint64, - l_addr_str); - return -1; - - } - } - - if(l_addr) { - char *l_addr_str = dap_chain_addr_to_str((dap_chain_addr_t*) l_addr); - if(l_wallet) - dap_string_append_printf(l_string_ret, "wallet: %s\n", l_wallet->name); - dap_string_append_printf(l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-"); - dap_string_append_printf(l_string_ret, "network: %s\n", (l_net_name ) ? l_net_name : "-"); - - size_t l_l_addr_tokens_size = 0; - char **l_l_addr_tokens = NULL; - dap_chain_ledger_addr_get_token_ticker_all(l_ledger, l_addr, &l_l_addr_tokens, &l_l_addr_tokens_size); - if(l_l_addr_tokens_size > 0) - dap_string_append_printf(l_string_ret, "balance:\n"); - else - dap_string_append_printf(l_string_ret, "balance: 0"); - - for(size_t i = 0; i < l_l_addr_tokens_size; i++) { - if(l_l_addr_tokens[i]) { - uint256_t l_balance = dap_chain_ledger_calc_balance(l_ledger, l_addr, l_l_addr_tokens[i]); - char *l_balance_coins = dap_chain_balance_to_coins(l_balance); - char *l_balance_datoshi = dap_chain_balance_print(l_balance); - dap_string_append_printf(l_string_ret, "\t%s (%s) %s\n", l_balance_coins, - l_balance_datoshi, l_l_addr_tokens[i]); - if(i < l_l_addr_tokens_size - 1) - dap_string_append_printf(l_string_ret, "\n"); - DAP_DELETE(l_balance_coins); - DAP_DELETE(l_balance_datoshi); - - } - DAP_DELETE(l_l_addr_tokens[i]); - } - DAP_DELETE(l_l_addr_tokens); - DAP_DELETE(l_addr_str); - if(l_wallet) - dap_chain_wallet_close(l_wallet); - } - else { - if(l_wallet) - dap_chain_wallet_close(l_wallet); - dap_string_free(l_string_ret, true); - dap_cli_server_cmd_set_reply_text(str_reply, "Wallet not found"); - return -1; - } - } - break; - } - - *str_reply = dap_string_free(l_string_ret, false); - return 0; -} -#endif - -int com_tx_wallet(int argc, char ** argv, char **str_reply) +int com_tx_wallet(int a_argc, char **a_argv, char **a_str_reply) { const char *c_wallets_path = dap_chain_wallet_get_path(g_config); enum { CMD_NONE, CMD_WALLET_NEW, CMD_WALLET_LIST, CMD_WALLET_INFO, CMD_WALLET_ACTIVATE, CMD_WALLET_DEACTIVATE }; @@ -1943,21 +1703,21 @@ char l_buf[1024]; // find add parameter ('alias' or 'handshake') - if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "new", NULL)) + if(dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, min(a_argc, l_arg_index + 1), "new", NULL)) cmd_num = CMD_WALLET_NEW; - else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "list", NULL)) + else if(dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, min(a_argc, l_arg_index + 1), "list", NULL)) cmd_num = CMD_WALLET_LIST; - else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "info", NULL)) + else if(dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, min(a_argc, l_arg_index + 1), "info", NULL)) cmd_num = CMD_WALLET_INFO; - else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "activate", NULL)) + else if(dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, min(a_argc, l_arg_index + 1), "activate", NULL)) cmd_num = CMD_WALLET_ACTIVATE; - else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "deactivate", NULL)) + else if(dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, min(a_argc, l_arg_index + 1), "deactivate", NULL)) cmd_num = CMD_WALLET_DEACTIVATE; l_arg_index++; if(cmd_num == CMD_NONE) { - dap_cli_server_cmd_set_reply_text (str_reply, + dap_cli_server_cmd_set_reply_text (a_str_reply, "Format of command: wallet {new -w <wallet_name> | list | info [-addr <addr>]|[-w <wallet_name> -net <net_name>]}"); return -1; } @@ -1966,30 +1726,30 @@ char l_buf[1024]; *l_pass_str = NULL, *l_ttl_str = NULL; // find wallet addr - dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-addr", &l_addr_str); - dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-w", &l_wallet_name); - dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-net", &l_net_name); + dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-addr", &l_addr_str); + dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-w", &l_wallet_name); + dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-net", &l_net_name); 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); + dap_string_t *l_l_string_ret = dap_string_new(NULL); switch (cmd_num) { case CMD_WALLET_ACTIVATE: case CMD_WALLET_DEACTIVATE: - dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-password", &l_pass_str); - dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-ttl", &l_ttl_str); + dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-password", &l_pass_str); + dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-ttl", &l_ttl_str); if( !l_wallet_name ) - return dap_cli_server_cmd_set_reply_text(str_reply, "Wallet name option <-w> not defined"), -EINVAL; + return dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet name option <-w> not defined"), -EINVAL; if( !l_pass_str ) - return dap_cli_server_cmd_set_reply_text(str_reply, "Wallet password option <-password> not defined"), -EINVAL; + return dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet password option <-password> not defined"), -EINVAL; if ( l_ttl_str ) l_rc = strtoul(l_ttl_str, NULL, 10); @@ -2001,7 +1761,7 @@ char l_buf[1024]; else l_rc = dap_chain_wallet_deactivate (l_wallet_name, strlen(l_wallet_name), l_pass_str, strlen(l_pass_str) ); if ( !l_rc ) - dap_string_append_printf(l_string_ret, "Wallet: %s is %sactivated\n", + dap_string_append_printf(l_l_string_ret, "Wallet: %s is %sactivated\n", l_wallet_name, cmd_num == CMD_WALLET_ACTIVATE ? "" : "de"); else { @@ -2021,7 +1781,7 @@ char l_buf[1024]; break; } - dap_string_append_printf(l_string_ret, "Wallet: %s %sactivation error, errno=%d (%s)\n", + dap_string_append_printf(l_l_string_ret, "Wallet: %s %sactivation error, errno=%d (%s)\n", l_wallet_name, cmd_num == CMD_WALLET_ACTIVATE ? "" : "de", l_rc, l_buf ); } @@ -2030,19 +1790,19 @@ char l_buf[1024]; // new wallet case CMD_WALLET_NEW: { - dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-password", &l_pass_str); - dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-sign", &l_sign_type_str); - dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-restore", &l_restore_str); + dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-password", &l_pass_str); + dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-sign", &l_sign_type_str); + dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-restore", &l_restore_str); // rewrite existing wallet - int l_is_force = dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-force", NULL); + int l_is_force = dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-force", NULL); if(!l_wallet_name) { - dap_cli_server_cmd_set_reply_text(str_reply, "Wallet name option <-w> not defined"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet name option <-w> not defined"); return -1; } // Check if wallet name has only digits and English letter if (!dap_isstralnum(l_wallet_name)){ - dap_cli_server_cmd_set_reply_text(str_reply, "Wallet name must contains digits and aplhabetical symbols"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet name must contains digits and aplhabetical symbols"); return -1; } @@ -2052,7 +1812,7 @@ char l_buf[1024]; FILE *l_exists = fopen(l_file_name, "rb"); DAP_DELETE(l_file_name); if (l_exists) { - dap_cli_server_cmd_set_reply_text(str_reply, "Wallet %s already exists", l_wallet_name); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet %s already exists", l_wallet_name); fclose(l_exists); return -1; } @@ -2065,7 +1825,7 @@ char l_buf[1024]; } else { l_sign_type = dap_sign_type_from_str(l_sign_type_str); if (l_sign_type.type == SIG_TYPE_NULL){ - dap_cli_server_cmd_set_reply_text(str_reply, "Unknown signature type"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Unknown signature type"); return -1; } } @@ -2075,7 +1835,7 @@ char l_buf[1024]; // if (l_sign_type.type == SIG_TYPE_TESLA) - return dap_cli_server_cmd_set_reply_text(str_reply, "Tesla algorithm is no longer supported, please, use another variant"), -1; + 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); @@ -2087,7 +1847,7 @@ char l_buf[1024]; DAP_DELETE(l_seed); l_seed = NULL; l_seed_size = 0; - dap_cli_server_cmd_set_reply_text(str_reply, "Restored hash is invalid, wallet is not created"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Restored hash is invalid, wallet is not created"); return -1; } } @@ -2096,14 +1856,14 @@ char l_buf[1024]; l_seed, l_seed_size, l_pass_str); if (!l_wallet) - return dap_cli_server_cmd_set_reply_text(str_reply, "Wallet is not created because of internal error"), -1; + return dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet is not created because of internal error"), -1; dap_chain_addr_t *l_addr = l_net? dap_chain_wallet_get_addr(l_wallet,l_net->pub.id ) : NULL; char *l_addr_str = l_addr? dap_chain_addr_to_str(l_addr) : NULL; - dap_string_append_printf(l_string_ret, "Wallet: %s (type=%s) successfully created\n", l_wallet->name, l_sign_type_str); + dap_string_append_printf(l_l_string_ret, "Wallet: %s (type=%s) successfully created\n", l_wallet->name, l_sign_type_str); if ( l_addr_str ) { - dap_string_append_printf(l_string_ret, "new address %s", l_addr_str); + dap_string_append_printf(l_l_string_ret, "new address %s", l_addr_str); DAP_DELETE(l_addr_str); } dap_chain_wallet_close(l_wallet); @@ -2136,18 +1896,18 @@ char l_buf[1024]; 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, "Wallet: %s%s\n", l_wallet->name, + dap_string_append_printf(l_l_string_ret, "Wallet: %s%s\n", l_wallet->name, (l_wallet->flags & DAP_WALLET$M_FL_ACTIVE) ? " (Active)" : ""); if (l_addr_str) { - dap_string_append_printf(l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-"); + dap_string_append_printf(l_l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-"); DAP_DELETE(l_addr_str); } dap_chain_wallet_close(l_wallet); - } else dap_string_append_printf(l_string_ret, "Wallet: %.*s (non-Active)\n", (int) l_file_name_len - 8, l_file_name); + } else dap_string_append_printf(l_l_string_ret, "Wallet: %.*s (non-Active)\n", (int) l_file_name_len - 8, l_file_name); } } closedir(l_dir); @@ -2170,12 +1930,12 @@ char l_buf[1024]; dap_ledger_t *l_ledger = dap_chain_ledger_by_net_name((const char *) l_net_name); if(!l_net_name && !l_addr ) { - dap_cli_server_cmd_set_reply_text(str_reply, "Subcommand info requires parameter '-net'"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Subcommand info requires parameter '-net'"); return -1; } else if (! l_addr){ if((l_ledger = dap_chain_ledger_by_net_name(l_net_name)) == NULL) { - dap_cli_server_cmd_set_reply_text(str_reply, "Not found net by name '%s'", l_net_name); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Not found net by name '%s'", l_net_name); return -1; } }else{ @@ -2184,7 +1944,7 @@ char l_buf[1024]; l_ledger = l_net->pub.ledger; l_net_name = l_net->pub.name; }else{ - dap_cli_server_cmd_set_reply_text(str_reply, "Can't find network id 0x%08X from address %s", l_addr->net_id.uint64, + dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't find network id 0x%08X from address %s", l_addr->net_id.uint64, l_addr_str); return -1; @@ -2194,27 +1954,27 @@ char l_buf[1024]; if(l_addr) { char *l_addr_str = dap_chain_addr_to_str((dap_chain_addr_t*) l_addr); if(l_wallet) - dap_string_append_printf(l_string_ret, "wallet: %s\n", l_wallet->name); - dap_string_append_printf(l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-"); - dap_string_append_printf(l_string_ret, "network: %s\n", (l_net_name ) ? l_net_name : "-"); + dap_string_append_printf(l_l_string_ret, "wallet: %s\n", l_wallet->name); + dap_string_append_printf(l_l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-"); + dap_string_append_printf(l_l_string_ret, "network: %s\n", (l_net_name ) ? l_net_name : "-"); size_t l_l_addr_tokens_size = 0; char **l_l_addr_tokens = NULL; dap_chain_ledger_addr_get_token_ticker_all(l_ledger, l_addr, &l_l_addr_tokens, &l_l_addr_tokens_size); if(l_l_addr_tokens_size > 0) - dap_string_append_printf(l_string_ret, "balance:\n"); + dap_string_append_printf(l_l_string_ret, "balance:\n"); else - dap_string_append_printf(l_string_ret, "balance: 0"); + dap_string_append_printf(l_l_string_ret, "balance: 0"); for(size_t i = 0; i < l_l_addr_tokens_size; i++) { if(l_l_addr_tokens[i]) { uint256_t l_balance = dap_chain_ledger_calc_balance(l_ledger, l_addr, l_l_addr_tokens[i]); char *l_balance_coins = dap_chain_balance_to_coins(l_balance); char *l_balance_datoshi = dap_chain_balance_print(l_balance); - dap_string_append_printf(l_string_ret, "\t%s (%s) %s\n", l_balance_coins, + dap_string_append_printf(l_l_string_ret, "\t%s (%s) %s\n", l_balance_coins, l_balance_datoshi, l_l_addr_tokens[i]); if(i < l_l_addr_tokens_size - 1) - dap_string_append_printf(l_string_ret, "\n"); + dap_string_append_printf(l_l_string_ret, "\n"); DAP_DELETE(l_balance_coins); DAP_DELETE(l_balance_datoshi); @@ -2230,15 +1990,15 @@ char l_buf[1024]; if(l_wallet) dap_chain_wallet_close(l_wallet); - dap_string_free(l_string_ret, true); - dap_cli_server_cmd_set_reply_text(str_reply, "Wallet not found"); + dap_string_free(l_l_string_ret, true); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet not found"); return -1; } } break; } - *str_reply = dap_string_free(l_string_ret, false); + *a_str_reply = dap_string_free(l_l_string_ret, false); return 0; } @@ -2255,29 +2015,29 @@ char l_buf[1024]; * @param l_net * @return */ -int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int argc, char ** argv, char ** a_str_reply, - dap_chain_t ** a_chain, dap_chain_net_t ** a_net) +int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int a_argc, char **a_argv, char **a_str_reply, + dap_chain_t **a_chain, dap_chain_net_t **a_net) { const char * l_chain_str = NULL; const char * l_net_str = NULL; // Net name if(a_net) - dap_cli_server_cmd_find_option_val(argv, *a_arg_index, argc, "-net", &l_net_str); + dap_cli_server_cmd_find_option_val(a_argv, *a_arg_index, a_argc, "-net", &l_net_str); else return -100; // Select network if(!l_net_str) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter '-net'", argv[0]); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter '-net'", a_argv[0]); return -101; } if((*a_net = dap_chain_net_by_name(l_net_str)) == NULL) { // Can't find such network - dap_cli_server_cmd_set_reply_text(a_str_reply, "%s can't find network \"%s\"", argv[0], l_net_str); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s can't find network \"%s\"", a_argv[0], l_net_str); char l_str_to_reply_chain[500] = {0}; char *l_str_to_reply = NULL; - dap_sprintf(l_str_to_reply_chain, "%s can't find network \"%s\"\n", argv[0], l_net_str); + dap_sprintf(l_str_to_reply_chain, "%s can't find network \"%s\"\n", a_argv[0], l_net_str); l_str_to_reply = dap_strcat2(l_str_to_reply,l_str_to_reply_chain); dap_string_t* l_net_str = dap_cli_list_net(); l_str_to_reply = dap_strcat2(l_str_to_reply,l_net_str->str); @@ -2287,7 +2047,7 @@ int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int argc, ch // Chain name if(a_chain) { - dap_cli_server_cmd_find_option_val(argv, *a_arg_index, argc, "-chain", &l_chain_str); + dap_cli_server_cmd_find_option_val(a_argv, *a_arg_index, a_argc, "-chain", &l_chain_str); // Select chain if(l_chain_str) { @@ -2295,7 +2055,7 @@ int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int argc, ch char l_str_to_reply_chain[500] = {0}; char *l_str_to_reply = NULL; dap_sprintf(l_str_to_reply_chain, "%s requires parameter '-chain' to be valid chain name in chain net %s. Current chain %s is not valid\n", - argv[0], l_net_str, l_chain_str); + a_argv[0], l_net_str, l_chain_str); l_str_to_reply = dap_strcat2(l_str_to_reply,l_str_to_reply_chain); dap_chain_t * l_chain; dap_chain_net_t * l_chain_net = *a_net; @@ -2309,17 +2069,17 @@ int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int argc, ch return -103; } } - else if ( !strcmp(argv[0], "token_decl") - || !strcmp(argv[0], "token_decl_sign")) { + else if ( !strcmp(a_argv[0], "token_decl") + || !strcmp(a_argv[0], "token_decl_sign")) { if ( (*a_chain = dap_chain_net_get_default_chain_by_chain_type(*a_net, CHAIN_TYPE_TOKEN)) == NULL ) { dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter '-chain' or set default datum type in chain configuration file", - argv[0]); + a_argv[0]); return -105; } } else { - dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter '-chain'", argv[0]); + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter '-chain'", a_argv[0]); return -104; } } @@ -2377,12 +2137,12 @@ static dap_chain_datum_token_t * s_sign_cert_in_cycle(dap_cert_t ** l_certs, dap * @param str_reply * @return */ -int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply) +int com_token_decl_sign(int a_argc, char **a_argv, char ** a_str_reply) { int arg_index = 1; const char * l_hash_out_type = NULL; - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-H", &l_hash_out_type); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-H", &l_hash_out_type); if(!l_hash_out_type) l_hash_out_type = "hex"; if(dap_strcmp(l_hash_out_type,"hex") && dap_strcmp(l_hash_out_type,"base58")) { @@ -2392,7 +2152,7 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply) const char * l_datum_hash_str = NULL; // Chain name - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-datum", &l_datum_hash_str); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-datum", &l_datum_hash_str); if(l_datum_hash_str) { char * l_datum_hash_hex_str = NULL; char * l_datum_hash_base58_str = NULL; @@ -2402,7 +2162,7 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply) dap_chain_t * l_chain = NULL; dap_chain_net_t * l_net = NULL; - dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, argc, argv, a_str_reply, &l_chain, &l_net); + dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, a_argc, a_argv, a_str_reply, &l_chain, &l_net); if(!l_net) return -1; else { @@ -2413,7 +2173,7 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply) } // Certificates thats will be used to sign currend datum token - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-certs", &l_certs_str); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-certs", &l_certs_str); // Load certs lists if (l_certs_str) @@ -2676,7 +2436,7 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a * @param str_reply * @return */ -int com_mempool_list(int argc, char ** argv, char ** a_str_reply) +int com_mempool_list(int a_argc, char **a_argv, char **a_str_reply) { int arg_index = 1; dap_chain_t * l_chain = NULL; @@ -2684,9 +2444,9 @@ int com_mempool_list(int argc, char ** argv, char ** a_str_reply) const char *l_addr_base58 = NULL; const char * l_hash_out_type = "hex"; - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-H", &l_hash_out_type); - dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, argc, argv, a_str_reply, &l_chain, &l_net); - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-addr", &l_addr_base58); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-H", &l_hash_out_type); + dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, a_argc, a_argv, a_str_reply, &l_chain, &l_net); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-addr", &l_addr_base58); if(!l_net) return -1; else { @@ -2715,17 +2475,17 @@ int com_mempool_list(int argc, char ** argv, char ** a_str_reply) * @param a_str_reply * @return */ -int com_mempool_delete(int argc, char ** argv, char ** a_str_reply) +int com_mempool_delete(int a_argc, char **a_argv, char **a_str_reply) { int arg_index = 1; dap_chain_t * l_chain = NULL; dap_chain_net_t * l_net = NULL; - if(dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, argc, argv, a_str_reply, &l_chain, &l_net) != 0) { + if(dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, a_argc, a_argv, a_str_reply, &l_chain, &l_net) != 0) { return -1; } const char * l_datum_hash_str = NULL; - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-datum", &l_datum_hash_str); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-datum", &l_datum_hash_str); if (l_datum_hash_str) { char *l_datum_hash_hex_str = NULL; // datum hash may be in hex or base58 format @@ -2746,7 +2506,7 @@ int com_mempool_delete(int argc, char ** argv, char ** a_str_reply) DAP_DELETE(l_data_tmp); DAP_DEL_Z(l_datum_hash_hex_str); } else { - dap_cli_server_cmd_set_reply_text(a_str_reply, "Error! %s requires -datum <datum hash> option", argv[0]); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Error! %s requires -datum <datum hash> option", a_argv[0]); return -3; } } @@ -2759,17 +2519,17 @@ int com_mempool_delete(int argc, char ** argv, char ** a_str_reply) * @param a_str_reply * @return */ -int com_mempool_check(int argc, char ** argv, char ** a_str_reply) +int com_mempool_check(int a_argc, char **a_argv, char ** a_str_reply) { int arg_index = 1; dap_chain_t * l_chain = NULL; dap_chain_net_t * l_net = NULL; - if (dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, argc, argv, a_str_reply, &l_chain, &l_net)) + if (dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, a_argc, a_argv, a_str_reply, &l_chain, &l_net)) return -1; const char * l_datum_hash_str = NULL; - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-datum", &l_datum_hash_str); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-datum", &l_datum_hash_str); if(l_datum_hash_str) { char *l_datum_hash_hex_str = NULL; // datum hash may be in hex or base58 format @@ -2789,7 +2549,7 @@ int com_mempool_check(int argc, char ** argv, char ** a_str_reply) DAP_DELETE(l_data_tmp); DAP_DEL_Z(l_datum_hash_hex_str); } else { - dap_cli_server_cmd_set_reply_text(a_str_reply, "Error! %s requires -datum <datum hash> option", argv[0]); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Error! %s requires -datum <datum hash> option", a_argv[0]); return -3; } } @@ -2803,14 +2563,14 @@ int com_mempool_check(int argc, char ** argv, char ** a_str_reply) * @param a_str_reply * @return */ -int com_mempool_proc(int argc, char ** argv, char ** a_str_reply) +int com_mempool_proc(int a_argc, char **a_argv, char **a_str_reply) { int arg_index = 1; dap_chain_t * l_chain = NULL; dap_chain_net_t * l_net = NULL; const char * l_hash_out_type = NULL; - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-H", &l_hash_out_type); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-H", &l_hash_out_type); if(!l_hash_out_type) l_hash_out_type = "hex"; if(dap_strcmp(l_hash_out_type,"hex") && dap_strcmp(l_hash_out_type,"base58")) { @@ -2818,7 +2578,7 @@ int com_mempool_proc(int argc, char ** argv, char ** a_str_reply) return -1; } - dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, argc, argv, a_str_reply, &l_chain, &l_net); + dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, a_argc, a_argv, a_str_reply, &l_chain, &l_net); if (!l_net || !l_chain) return -1; @@ -2839,7 +2599,7 @@ int com_mempool_proc(int argc, char ** argv, char ** a_str_reply) const char * l_datum_hash_str = NULL; int ret = 0; - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-datum", &l_datum_hash_str); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-datum", &l_datum_hash_str); if(l_datum_hash_str) { char * l_gdb_group_mempool = dap_chain_net_get_gdb_group_mempool_new(l_chain); dap_string_t * l_str_tmp = dap_string_new(NULL); @@ -2911,7 +2671,7 @@ int com_mempool_proc(int argc, char ** argv, char ** a_str_reply) DAP_DELETE(l_datum_hash_hex_str); DAP_DELETE(l_datum_hash_base58_str); } else { - dap_cli_server_cmd_set_reply_text(a_str_reply, "Error! %s requires -datum <datum hash> option", argv[0]); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Error! %s requires -datum <datum hash> option", a_argv[0]); ret = -5; } return ret; @@ -3330,7 +3090,6 @@ static int s_token_decl_check_params(int a_argc, char **a_argv, char **a_str_rep */ int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply) { - int l_arg_index = 1; const char * l_ticker = NULL; uint256_t l_total_supply = {}; // 256 uint16_t l_signs_emission = 0; @@ -3655,7 +3414,7 @@ int com_token_update(int a_argc, char ** a_argv, char ** a_str_reply) return -10; } int l_ret = 0; - bool l_placed = dap_global_db_set_sync(l_gdb_group_mempool, l_key_str, (uint8_t *)l_datum, l_datum_size, false); + bool l_placed = !dap_global_db_set_sync(l_gdb_group_mempool, l_key_str, (uint8_t *)l_datum, l_datum_size, false); dap_cli_server_cmd_set_reply_text(a_str_reply, "Datum %s with 256bit token %s is%s placed in datum pool", l_key_str_out, l_ticker, l_placed ? "" : " not"); //additional checking for incorrect key format @@ -3679,11 +3438,11 @@ int com_token_update(int a_argc, char ** a_argv, char ** a_str_reply) * @param str_reply * @return */ -int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply) +int com_token_emit(int a_argc, char **a_argv, char **a_str_reply) { int arg_index = 1; const char *str_tmp = NULL; - char *str_reply_tmp = NULL; + char *l_str_reply_tmp = NULL; uint256_t l_emission_value = {}; const char * l_ticker = NULL; @@ -3692,7 +3451,7 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply) const char * l_emission_hash_str = NULL; const char * l_emission_hash_str_remove = NULL; - dap_chain_hash_fast_t l_emission_hash, l_datum_emission_hash; + dap_chain_hash_fast_t l_emission_hash; dap_chain_datum_token_emission_t *l_emission = NULL; size_t l_emission_size; @@ -3862,52 +3621,38 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply) l_emission_size); // Delete token emission DAP_DEL_Z(l_emission); - - char *l_gdb_group_mempool_emission = dap_chain_net_get_gdb_group_mempool_new(l_chain_emission); - - size_t l_datum_emission_size = sizeof(l_datum_emission->header) + l_datum_emission->header.data_size; - - // Calc datum emission's hash - dap_hash_fast(l_datum_emission->data, l_datum_emission->header.data_size, - &l_datum_emission_hash); - // return 0 (false) if strings are equivalent - bool l_hex_format = dap_strcmp(l_hash_out_type, "hex") ? false - : true; - l_emission_hash_str = l_hex_format ? dap_chain_hash_fast_to_str_new(&l_datum_emission_hash) - : dap_enc_base58_encode_hash_to_str(&l_datum_emission_hash); - // Add token emission datum to mempool - - bool l_placed = dap_global_db_set_sync( l_gdb_group_mempool_emission, l_emission_hash_str, - l_datum_emission, l_datum_emission_size, true) == 0; - - str_reply_tmp = dap_strdup_printf("Datum %s with emission is%s placed in datum pool", - l_emission_hash_str, l_placed ? "" : " not"); + l_emission_hash_str = dap_chain_mempool_datum_add(l_datum_emission, l_chain_emission, l_hash_out_type); + if (l_emission_hash_str) + l_str_reply_tmp = dap_strdup_printf("Datum %s with 256bit emission is placed in datum pool", l_emission_hash_str); + else + l_str_reply_tmp = dap_strdup("Can't place emission datum in mempool, examine log files"); DAP_DEL_Z(l_emission_hash_str); - if (!l_placed) { - DAP_DEL_Z(l_datum_emission); - DAP_DEL_Z(l_certs); - return -1; - } + DAP_DEL_Z(l_datum_emission); + DAP_DEL_Z(l_certs); + //remove previous emission datum from mempool if have new signed emission datum - if (l_emission_hash_str_remove) + if (l_emission_hash_str_remove) { + char *l_gdb_group_mempool_emission = dap_chain_net_get_gdb_group_mempool_new(l_chain_emission); dap_global_db_del_sync(l_gdb_group_mempool_emission, l_emission_hash_str_remove); + DAP_DEL_Z(l_gdb_group_mempool_emission); + } if(l_chain_base_tx) { - dap_chain_hash_fast_t *l_datum_tx_hash = dap_chain_mempool_base_tx_create(l_chain_base_tx, &l_emission_hash, - l_chain_emission->id, l_emission_value, l_ticker, - l_addr, l_certs, l_certs_size); - char *l_tx_hash_str = l_hex_format ? dap_chain_hash_fast_to_str_new(l_datum_tx_hash) - : dap_enc_base58_encode_hash_to_str(l_datum_tx_hash); - dap_cli_server_cmd_set_reply_text(a_str_reply, "%s\nDatum %s with 256bit TX is%s placed in datum pool", - str_reply_tmp, l_tx_hash_str, l_placed ? "" : " not"); + char *l_tx_hash_str = dap_chain_mempool_base_tx_create(l_chain_base_tx, &l_emission_hash, + l_chain_emission->id, l_emission_value, l_ticker, + l_addr, l_certs, l_certs_size, l_hash_out_type); + if (l_tx_hash_str) + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s\nDatum %s with 256bit TX is placed in datum pool", + l_str_reply_tmp, l_tx_hash_str); + else + dap_cli_server_cmd_set_reply_text(a_str_reply, "%s\nCan't place TX datum in mempool, examine log files", + l_str_reply_tmp); DAP_DEL_Z(l_tx_hash_str); - DAP_DEL_Z(str_reply_tmp); } else{ // if transaction was not specified when emission was added we need output only emission result - dap_cli_server_cmd_set_reply_text(a_str_reply, str_reply_tmp); + dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_reply_tmp); } - DAP_DEL_Z(str_reply_tmp); + DAP_DEL_Z(l_str_reply_tmp); DAP_DEL_Z(l_addr); - DAP_DEL_Z(l_certs); return 0; } @@ -4037,36 +3782,19 @@ int com_tx_cond_create(int a_argc, char ** a_argv, char **a_str_reply) uint256_t l_value_per_unit_max = {}; uint256_t l_value_fee = {}; - dap_chain_hash_fast_t *l_tx_cond_hash = dap_chain_mempool_tx_create_cond(l_net, l_key_from, l_key_cond, l_token_ticker, - l_value_datoshi, l_value_per_unit_max, l_price_unit, l_srv_uid, l_value_fee, NULL, 0); + char *l_hash_str = dap_chain_mempool_tx_create_cond(l_net, l_key_from, l_key_cond, l_token_ticker, + l_value_datoshi, l_value_per_unit_max, l_price_unit, + l_srv_uid, l_value_fee, NULL, 0, l_hash_out_type); dap_chain_wallet_close(l_wallet); DAP_DELETE(l_key_cond); - char *l_hash_str; - if(!dap_strcmp(l_hash_out_type, "hex")) { - l_hash_str = l_tx_cond_hash ? dap_chain_hash_fast_to_str_new(l_tx_cond_hash) : NULL; - } - else { - l_hash_str = l_tx_cond_hash ? dap_enc_base58_encode_hash_to_str(l_tx_cond_hash) : NULL; - } - - /*dap_cli_server_cmd_set_reply_text(str_reply, "cond create=%s\n", - (res == 0) ? "Ok" : (res == -2) ? "False, not enough funds for service fee" : "False"); - return res;*/ - - int l_ret; - // example: cond create succefully hash=0x4AA303EB7C10430C0AAC42F399D265BC7DD09E3983E088E02B8CED38DA22EDA9 - if(l_hash_str){ - dap_cli_server_cmd_set_reply_text(a_str_reply, "cond create succefully hash=%s\n", l_hash_str); - l_ret = 0; - } - else{ - dap_cli_server_cmd_set_reply_text(a_str_reply, "cond can't create\n"); - l_ret = -1; + if (l_hash_str) { + dap_cli_server_cmd_set_reply_text(a_str_reply, "Conditional 256bit TX created succefully, hash=%s\n", l_hash_str); + DAP_DELETE(l_hash_str); + return 0; } - - DAP_DELETE(l_hash_str); - return l_ret; + dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't create conditional 256bit TX\n"); + return -1; } /** @@ -4150,7 +3878,8 @@ int com_mempool_add_ca(int a_argc, char ** a_argv, char ** a_str_reply) } // Finaly add datum to mempool - char *l_hash_str = dap_chain_mempool_datum_add(l_datum,l_chain); + char *l_hash_str = dap_chain_mempool_datum_add(l_datum, l_chain, "hex"); + DAP_DELETE(l_datum); if (l_hash_str) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Datum %s was successfully placed to mempool", l_hash_str); @@ -4159,7 +3888,6 @@ int com_mempool_add_ca(int a_argc, char ** a_argv, char ** a_str_reply) } else { dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't place certificate \"%s\" to mempool", l_ca_name); - DAP_DELETE( l_datum ); return -8; } } @@ -4246,7 +3974,8 @@ int com_chain_ca_pub( int a_argc, char ** a_argv, char ** a_str_reply) } // Finaly add datum to mempool - char *l_hash_str = dap_chain_mempool_datum_add(l_datum,l_chain); + char *l_hash_str = dap_chain_mempool_datum_add(l_datum, l_chain, "hex"); + DAP_DELETE(l_datum); if (l_hash_str) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Datum %s was successfully placed to mempool", l_hash_str); @@ -4255,7 +3984,6 @@ int com_chain_ca_pub( int a_argc, char ** a_argv, char ** a_str_reply) } else { dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't place certificate \"%s\" to mempool", l_ca_name); - DAP_DELETE( l_datum ); return -8; } } @@ -4339,7 +4067,6 @@ static bool s_json_get_srv_uid(struct json_object *a_json, const char *a_key_ser static dap_chain_wallet_t* s_json_get_wallet(struct json_object *a_json, const char *a_key) { - dap_enc_key_t *l_enc_key = NULL; // From wallet const char *l_wallet_str = s_json_get_text(a_json, a_key); if(l_wallet_str) { @@ -4458,7 +4185,7 @@ int com_tx_create_json(int a_argc, char ** a_argv, char **a_str_reply) // Read items from json file struct json_object *l_json_items = json_object_object_get(l_json, "items"); size_t l_items_count = json_object_array_length(l_json_items); - bool a = (l_items_count = json_object_array_length(l_json_items)); + l_items_count = json_object_array_length(l_json_items); if(!l_json_items || !json_object_is_type(l_json_items, json_type_array) || !(l_items_count = json_object_array_length(l_json_items))) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Wrong json format: not found array 'items' or array is empty"); json_object_put(l_json); @@ -4667,7 +4394,7 @@ int com_tx_create_json(int a_argc, char ** a_argv, char **a_str_reply) break; case DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE: { uint256_t l_value = { }; - bool l_is_value = s_json_get_uint256(l_json_item_obj, "value", &l_value); + s_json_get_uint256(l_json_item_obj, "value", &l_value); if(!IS_ZERO_256(l_value)) { dap_chain_tx_out_cond_t *l_out_cond_item = dap_chain_datum_tx_item_out_cond_create_fee(l_value); l_item = (const uint8_t*) l_out_cond_item; @@ -4775,7 +4502,7 @@ int com_tx_create_json(int a_argc, char ** a_argv, char **a_str_reply) dap_chain_hash_fast_t *l_datum_tx_hash = DAP_NEW(dap_hash_fast_t); dap_hash_fast(l_datum_tx->data, l_datum_tx->header.data_size, l_datum_tx_hash);// Calculate datum hash char *l_tx_hash_str = dap_chain_hash_fast_to_str_new(l_datum_tx_hash); - bool l_placed = dap_global_db_set(l_gdb_group_mempool_base_tx,l_tx_hash_str, l_datum_tx, l_datum_tx_size, true, NULL,NULL ); + bool l_placed = !dap_global_db_set(l_gdb_group_mempool_base_tx,l_tx_hash_str, l_datum_tx, l_datum_tx_size, true, NULL, NULL); DAP_DELETE(l_tx_hash_str); DAP_DELETE(l_datum_tx); @@ -4798,7 +4525,7 @@ int com_tx_create_json(int a_argc, char ** a_argv, char **a_str_reply) * @param str_reply * @return int */ -int com_tx_create(int argc, char ** argv, char **str_reply) +int com_tx_create(int a_argc, char **a_argv, char **a_str_reply) { int arg_index = 1; // int cmd_num = 1; @@ -4818,66 +4545,75 @@ int com_tx_create(int argc, char ** argv, char **str_reply) dap_chain_hash_fast_t l_emission_hash = {}; size_t l_tx_num = 0; + const char * l_hash_out_type = NULL; + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-H", &l_hash_out_type); + if(!l_hash_out_type) + l_hash_out_type = "hex"; + if(dap_strcmp(l_hash_out_type,"hex") && dap_strcmp(l_hash_out_type,"base58")) { + dap_cli_server_cmd_set_reply_text(a_str_reply, "Invalid parameter -H, valid values: -H <hex | base58>"); + return -1; + } + uint256_t l_value = {}; uint256_t l_value_fee = {}; - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-from_wallet", &l_from_wallet_name); - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-from_emission", &l_emission_hash_str); - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-emission_chain", &l_emission_chain_name); - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-to_addr", &addr_base58_to); - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-token", &l_token_ticker); - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-net", &l_net_name); - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-chain", &l_chain_name); - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-tx_num", &l_tx_num_str); - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-certs", &l_certs_str); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-from_wallet", &l_from_wallet_name); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-from_emission", &l_emission_hash_str); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-emission_chain", &l_emission_chain_name); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-to_addr", &addr_base58_to); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-token", &l_token_ticker); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-net", &l_net_name); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-chain", &l_chain_name); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-tx_num", &l_tx_num_str); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-certs", &l_certs_str); if(l_tx_num_str) l_tx_num = strtoul(l_tx_num_str, NULL, 10); - if(dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-value", &str_tmp)) + if(dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-value", &str_tmp)) l_value = dap_chain_balance_scan(str_tmp); if(IS_ZERO_256(l_value)) { - dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires parameter '-value' to be valid uint256 value"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-value' to be valid uint256 value"); return -4; } // Validator's fee - if(dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-fee", &str_tmp)) + if(dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-fee", &str_tmp)) l_value_fee = dap_chain_balance_scan(str_tmp); if (IS_ZERO_256(l_value_fee)) { - dap_cli_server_cmd_set_reply_text(str_reply, + dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-fee' to be valid uint256"); return -5; } if(!l_from_wallet_name && !l_emission_hash_str) { - dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires one of parameters '-from_wallet' or '-from_emission'"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires one of parameters '-from_wallet' or '-from_emission'"); return -1; } if(!addr_base58_to) { - dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires parameter '-to_addr'"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-to_addr'"); return -2; } if(!l_net_name) { - dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires parameter '-net'"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-net'"); return -6; } if(!l_token_ticker) { - dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires parameter '-token'"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-token'"); return -6; } dap_chain_net_t * l_net = dap_chain_net_by_name(l_net_name); dap_ledger_t *l_ledger = l_net ? l_net->pub.ledger : NULL; if(l_net == NULL || (l_ledger = dap_chain_ledger_by_net_name(l_net_name)) == NULL) { - dap_cli_server_cmd_set_reply_text(str_reply, "not found net by name '%s'", l_net_name); + dap_cli_server_cmd_set_reply_text(a_str_reply, "not found net by name '%s'", l_net_name); return -7; } dap_chain_t *l_emission_chain = NULL; if (l_emission_hash_str) { if (dap_chain_hash_fast_from_str(l_emission_hash_str, &l_emission_hash)) { - dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires parameter '-from_emission' " + dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-from_emission' " "to be valid string containing hash in hex or base58 format"); return -3; } @@ -4887,17 +4623,17 @@ int com_tx_create(int argc, char ** argv, char **str_reply) l_emission_chain = dap_chain_net_get_default_chain_by_chain_type(l_net,CHAIN_TYPE_EMISSION); } if (!l_emission_chain) { - dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires parameter '-emission_chain' " + dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-emission_chain' " "to be a valid chain name or set default datum type in chain configuration file"); return -9; } if(!l_certs_str) { - dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires parameter '-certs'"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-certs'"); return -4; } dap_cert_parse_str_list(l_certs_str, &l_certs, &l_certs_count); if(!l_certs_count) { - dap_cli_server_cmd_set_reply_text(str_reply, + 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; } @@ -4911,33 +4647,32 @@ int com_tx_create(int argc, char ** argv, char **str_reply) } if(!l_chain) { - dap_cli_server_cmd_set_reply_text(str_reply, "not found chain name '%s', try use parameter '-chain' or set default datum type in chain configuration file", + dap_cli_server_cmd_set_reply_text(a_str_reply, "not found chain name '%s', try use parameter '-chain' or set default datum type in chain configuration file", l_chain_name); return -8; } dap_chain_addr_t *l_addr_to = dap_chain_addr_from_str(addr_base58_to); if(!l_addr_to) { - dap_cli_server_cmd_set_reply_text(str_reply, "destination address is invalid"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "destination address is invalid"); return -11; } - dap_string_t *string_ret = dap_string_new(NULL); + dap_string_t *l_string_ret = dap_string_new(NULL); int res = 0; if (l_emission_hash_str) { - dap_hash_fast_t *l_tx_hash = dap_chain_mempool_base_tx_create(l_chain, &l_emission_hash, l_emission_chain->id, - l_value, l_token_ticker, l_addr_to, l_certs, l_certs_count); - if (l_tx_hash){ - char l_tx_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE]; - dap_chain_hash_fast_to_str(l_tx_hash,l_tx_hash_str,sizeof (l_tx_hash_str)); - dap_string_append_printf(string_ret, "transfer=Ok\ntx_hash=%s\n",l_tx_hash_str); - DAP_DELETE(l_tx_hash); - }else{ - dap_string_append_printf(string_ret, "transfer=False\n"); + 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, l_addr_to, l_certs, + l_certs_count, l_hash_out_type); + if (l_tx_hash_str) { + dap_string_append_printf(l_string_ret, "transfer=Ok\ntx_hash=%s\n", l_tx_hash_str); + DAP_DELETE(l_tx_hash_str); + } else { + dap_string_append_printf(l_string_ret, "transfer=False\n"); res = -15; } - dap_cli_server_cmd_set_reply_text(str_reply, string_ret->str); - dap_string_free(string_ret, false); + dap_cli_server_cmd_set_reply_text(a_str_reply, l_string_ret->str); + dap_string_free(l_string_ret, true); DAP_DELETE(l_addr_to); return res; } @@ -4946,19 +4681,19 @@ int com_tx_create(int argc, char ** argv, char **str_reply) dap_chain_wallet_t * l_wallet = dap_chain_wallet_open(l_from_wallet_name, c_wallets_path); if(!l_wallet) { - dap_cli_server_cmd_set_reply_text(str_reply, "wallet %s does not exist", l_from_wallet_name); + dap_cli_server_cmd_set_reply_text(a_str_reply, "wallet %s does not exist", l_from_wallet_name); return -9; } const dap_chain_addr_t *addr_from = (const dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet, l_net->pub.id); if(!addr_from) { - dap_cli_server_cmd_set_reply_text(str_reply, "source address is invalid"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "source address is invalid"); return -10; } // Check, if network ID is same as ID in destination wallet address. If not - operation is cancelled. if (!dap_chain_addr_is_blank(l_addr_to) && l_addr_to->net_id.uint64 != l_net->pub.id.uint64) { - dap_cli_server_cmd_set_reply_text(str_reply, "destination wallet network ID=0x%llx and network ID=0x%llx is not equal. Please, change network name or wallet address", + dap_cli_server_cmd_set_reply_text(a_str_reply, "destination wallet network ID=0x%llx and network ID=0x%llx is not equal. Please, change network name or wallet address", l_addr_to->net_id.uint64, l_net->pub.id.uint64); return -13; } @@ -4967,25 +4702,21 @@ int com_tx_create(int argc, char ** argv, char **str_reply) res = dap_chain_mempool_tx_create_massive(l_chain, dap_chain_wallet_get_key(l_wallet, 0), addr_from, l_addr_to, l_token_ticker, l_value, l_value_fee, l_tx_num); - dap_string_append_printf(string_ret, "transfer=%s\n", + dap_string_append_printf(l_string_ret, "transfer=%s\n", (res == 0) ? "Ok" : (res == -2) ? "False, not enough funds for transfer" : "False"); }else{ - dap_hash_fast_t * l_tx_hash = dap_chain_mempool_tx_create(l_chain, dap_chain_wallet_get_key(l_wallet, 0), addr_from, l_addr_to, - l_token_ticker, l_value, l_value_fee); - if (l_tx_hash){ - char l_tx_hash_str[80]={[0]='\0'}; - dap_chain_hash_fast_to_str(l_tx_hash,l_tx_hash_str,sizeof (l_tx_hash_str)-1); - dap_string_append_printf(string_ret, "transfer=Ok\ntx_hash=%s\n",l_tx_hash_str); - DAP_DELETE(l_tx_hash); + char *l_tx_hash_str = dap_chain_mempool_tx_create(l_chain, dap_chain_wallet_get_key(l_wallet, 0), addr_from, l_addr_to, + l_token_ticker, l_value, l_value_fee, l_hash_out_type); + if (l_tx_hash_str) { + dap_string_append_printf(l_string_ret, "transfer=Ok\ntx_hash=%s\n",l_tx_hash_str); + DAP_DELETE(l_tx_hash_str); }else{ - dap_string_append_printf(string_ret, "transfer=False\n"); + dap_string_append_printf(l_string_ret, "transfer=False\n"); res = -14; } - } - - dap_cli_server_cmd_set_reply_text(str_reply, string_ret->str); - dap_string_free(string_ret, false); + dap_cli_server_cmd_set_reply_text(a_str_reply, l_string_ret->str); + dap_string_free(l_string_ret, true); DAP_DELETE(l_addr_to); dap_chain_wallet_close(l_wallet); @@ -5193,7 +4924,7 @@ int com_tx_history(int a_argc, char ** a_argv, char **a_str_reply) * @param str_reply * @return int */ -int com_stats(int argc, char ** argv, char **str_reply) +int com_stats(int argc, char **a_argv, char **a_str_reply) { enum { CMD_NONE, CMD_STATS_CPU @@ -5201,41 +4932,41 @@ int com_stats(int argc, char ** argv, char **str_reply) int arg_index = 1; int cmd_num = CMD_NONE; // find add parameter ('cpu') - if (dap_cli_server_cmd_find_option_val(argv, arg_index, min(argc, arg_index + 1), "cpu", NULL)) { + if (dap_cli_server_cmd_find_option_val(a_argv, arg_index, min(argc, arg_index + 1), "cpu", NULL)) { cmd_num = CMD_STATS_CPU; } switch (cmd_num) { case CMD_NONE: default: - dap_cli_server_cmd_set_reply_text(str_reply, "format of command: stats cpu"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "format of command: stats cpu"); return -1; case CMD_STATS_CPU: #if (defined DAP_OS_UNIX) || (defined __WIN32) { dap_cpu_monitor_init(); dap_usleep(500000); - char *str_reply_prev = dap_strdup_printf(""); - char *str_delimiter; + char *l_str_reply_prev = dap_strdup_printf(""); + char *l_str_delimiter; dap_cpu_stats_t s_cpu_stats = dap_cpu_get_stats(); for (uint32_t n_cpu_num = 0; n_cpu_num < s_cpu_stats.cpu_cores_count; n_cpu_num++) { if ((n_cpu_num % 4 == 0) && (n_cpu_num != 0)) { - str_delimiter = dap_strdup_printf("\n"); + l_str_delimiter = dap_strdup_printf("\n"); } else if (n_cpu_num == s_cpu_stats.cpu_cores_count - 1) { - str_delimiter = dap_strdup_printf(""); + l_str_delimiter = dap_strdup_printf(""); } else { - str_delimiter = dap_strdup_printf(" "); + l_str_delimiter = dap_strdup_printf(" "); } - *str_reply = dap_strdup_printf("%sCPU-%d: %f%%%s", str_reply_prev, n_cpu_num, s_cpu_stats.cpus[n_cpu_num].load, str_delimiter); - DAP_DELETE(str_reply_prev); - DAP_DELETE(str_delimiter); - str_reply_prev = *str_reply; + *a_str_reply = dap_strdup_printf("%sCPU-%d: %f%%%s", l_str_reply_prev, n_cpu_num, s_cpu_stats.cpus[n_cpu_num].load, l_str_delimiter); + DAP_DELETE(l_str_reply_prev); + DAP_DELETE(l_str_delimiter); + l_str_reply_prev = *a_str_reply; } - *str_reply = dap_strdup_printf("%s\nTotal: %f%%", str_reply_prev, s_cpu_stats.cpu_summary.load); - DAP_DELETE(str_reply_prev); + *a_str_reply = dap_strdup_printf("%s\nTotal: %f%%", l_str_reply_prev, s_cpu_stats.cpu_summary.load); + DAP_DELETE(l_str_reply_prev); break; } #else - dap_cli_server_cmd_set_reply_text(str_reply, "only Linux or Windows environment supported"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "only Linux or Windows environment supported"); return -1; #endif // DAP_OS_UNIX } @@ -5251,11 +4982,11 @@ int com_stats(int argc, char ** argv, char **str_reply) * @param str_reply * @return int */ -int com_exit(int argc, char ** argv, char **str_reply) +int com_exit(int a_argc, char **a_argv, char **a_str_reply) { - UNUSED(argc); - UNUSED(argv); - UNUSED(str_reply); + UNUSED(a_argc); + UNUSED(a_argv); + UNUSED(a_str_reply); //dap_events_stop_all(); exit(0); return 0; @@ -5271,35 +5002,35 @@ int com_exit(int argc, char ** argv, char **str_reply) * @param str_reply * @return int */ -int com_print_log(int argc, char ** argv, char **str_reply) +int com_print_log(int a_argc, char **a_argv, char **a_str_reply) { int arg_index = 1; const char * l_str_ts_after = NULL; const char * l_str_limit = NULL; int64_t l_ts_after = 0; long l_limit = 0; - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "ts_after", &l_str_ts_after); - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "limit", &l_str_limit); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "ts_after", &l_str_ts_after); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "limit", &l_str_limit); l_ts_after = (l_str_ts_after) ? strtoll(l_str_ts_after, 0, 10) : -1; l_limit = (l_str_limit) ? strtol(l_str_limit, 0, 10) : -1; if(l_ts_after < 0 || !l_str_ts_after) { - dap_cli_server_cmd_set_reply_text(str_reply, "requires valid parameter 'l_ts_after'"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "requires valid parameter 'l_ts_after'"); return -1; } if(!l_limit) { - dap_cli_server_cmd_set_reply_text(str_reply, "requires valid parameter 'limit'"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "requires valid parameter 'limit'"); return -1; } // get logs from list char *l_str_ret = dap_log_get_item(l_ts_after, (int) l_limit); if(!l_str_ret) { - dap_cli_server_cmd_set_reply_text(str_reply, "no logs"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "no logs"); return -1; } - dap_cli_server_cmd_set_reply_text(str_reply, l_str_ret); + dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_ret); DAP_DELETE(l_str_ret); return 0; } @@ -5313,11 +5044,11 @@ int com_print_log(int argc, char ** argv, char **str_reply) * @param a_str_reply * @return */ -int cmd_gdb_export(int argc, char ** argv, char ** a_str_reply) +int cmd_gdb_export(int a_argc, char **a_argv, char **a_str_reply) { int arg_index = 1; const char *l_filename = NULL; - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "filename", &l_filename); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "filename", &l_filename); if (!l_filename) { dap_cli_server_cmd_set_reply_text(a_str_reply, "gdb_export requires parameter 'filename'"); return -1; @@ -5334,7 +5065,7 @@ int cmd_gdb_export(int argc, char ** argv, char ** a_str_reply) dap_snprintf(l_path, sizeof(l_path), "%s/%s.json", l_db_path, l_filename); const char *l_groups_str = NULL; - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-groups", &l_groups_str); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-groups", &l_groups_str); char *l_group_str = NULL, *l_ctx = NULL; dap_list_t *l_parsed_groups_list = NULL; if (l_groups_str) { @@ -5406,11 +5137,11 @@ int cmd_gdb_export(int argc, char ** argv, char ** a_str_reply) * @param a_str_reply * @return */ -int cmd_gdb_import(int argc, char ** argv, char ** a_str_reply) +int cmd_gdb_import(int a_argc, char **a_argv, char ** a_str_reply) { int arg_index = 1; const char *l_filename = NULL; - dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "filename", &l_filename); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "filename", &l_filename); if (!l_filename) { dap_cli_server_cmd_set_reply_text(a_str_reply, "gdb_import requires parameter 'filename'"); return -1; @@ -5487,7 +5218,7 @@ dap_list_t *s_go_all_nets_offline() return l_net_returns; } -int cmd_remove(int argc, char ** argv, char ** a_str_reply) +int cmd_remove(int a_argc, char **a_argv, char ** a_str_reply) { //default init const char *return_message = NULL; @@ -5516,11 +5247,11 @@ int cmd_remove(int argc, char ** argv, char ** a_str_reply) }; //check path's from config file - if (dap_cli_server_cmd_check_option(argv, 1, argc, "-gdb") >= 0 + if (dap_cli_server_cmd_check_option(a_argv, 1, a_argc, "-gdb") >= 0 && (NULL == (l_gdb_path = dap_config_get_item_str(g_config, "resources", "dap_global_db_path")))){ error |= GDB_FAIL_PATH; } - if (dap_cli_server_cmd_check_option(argv, 1, argc, "-chains") >= 0 + if (dap_cli_server_cmd_check_option(a_argv, 1, a_argc, "-chains") >= 0 && (NULL == (l_chains_path = dap_config_get_item_str(g_config, "resources", "dap_chains_path")))) { error |= CHAINS_FAIL_PATH; } @@ -5538,8 +5269,8 @@ int cmd_remove(int argc, char ** argv, char ** a_str_reply) } if (l_chains_path) { - dap_cli_server_cmd_find_option_val(argv, 1, argc, "-net", &l_net_str); - all = dap_cli_server_cmd_check_option(argv, 1, argc, "-all"); + dap_cli_server_cmd_find_option_val(a_argv, 1, a_argc, "-net", &l_net_str); + all = dap_cli_server_cmd_check_option(a_argv, 1, a_argc, "-all"); if (NULL == l_net_str && all >= 0) { if (NULL == l_gdb_path) diff --git a/modules/net/include/dap_chain_node_cli_cmd.h b/modules/net/include/dap_chain_node_cli_cmd.h index bf07fa891ccdc2ff08650e7882ac0f30cc5c4cd8..3fb2307f1e29e71213e2577c8a581e2ead51e391 100644 --- a/modules/net/include/dap_chain_node_cli_cmd.h +++ b/modules/net/include/dap_chain_node_cli_cmd.h @@ -38,63 +38,63 @@ dap_chain_node_addr_t* dap_chain_node_addr_get_by_alias(dap_chain_net_t * a_net, const char *alias); -int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index,int argc, char ** argv, char ** a_str_reply, +int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index,int a_argc, char **a_argv, char ** a_str_reply, dap_chain_t ** a_chain, dap_chain_net_t ** a_net); /** * global_db command */ -int com_global_db(int argc, char ** argv, char **str_reply); +int com_global_db(int a_argc, char **a_argv, char **a_str_reply); /** * Node command */ -int com_node(int argc, char ** argv, char **str_reply); +int com_node(int a_argc, char **a_argv, char **a_str_reply); /** * Traceroute command * * return 0 OK, -1 Err */ -int com_traceroute(int argc, char** argv, char **str_reply); +int com_traceroute(int a_argc, char** argv, char **a_str_reply); /** * Tracepath command * * return 0 OK, -1 Err */ -int com_tracepath(int argc, char** argv, char **str_reply); +int com_tracepath(int a_argc, char** argv, char **a_str_reply); /** * Ping command * * return 0 OK, -1 Err */ -int com_ping(int argc, char** argv, char **str_reply); +int com_ping(int a_argc, char** argv, char **a_str_reply); /** * Help command */ -int com_help(int argc, char ** argv, char **str_reply); +int com_help(int a_argc, char **a_argv, char **a_str_reply); -int com_version(int argc, char ** argv, char **str_reply); +int com_version(int a_argc, char **a_argv, char **a_str_reply); /** * Token declaration */ -int com_token_decl ( int argc, char ** argv, char ** str_reply); +int com_token_decl(int a_argc, char **a_argv, char ** str_reply); -int com_token_update(int argc, char ** argv, char ** a_str_reply); +int com_token_update(int a_argc, char **a_argv, char ** a_str_reply); /** * Token declaration add sign */ -int com_token_decl_sign ( int argc, char ** argv, char ** str_reply); +int com_token_decl_sign ( int a_argc, char **a_argv, char ** str_reply); /** * Token emission */ -int com_token_emit (int argc, char ** argv, char ** str_reply); +int com_token_emit (int a_argc, char **a_argv, char ** str_reply); /** @@ -102,16 +102,16 @@ int com_token_emit (int argc, char ** argv, char ** str_reply); * * Wallet info */ -int com_tx_wallet(int argc, char ** argv, char **str_reply); +int com_tx_wallet(int a_argc, char **a_argv, char **a_str_reply); /** * com_tx_create command * * Create transaction */ -int com_tx_create(int argc, char ** argv, char **str_reply); -int com_tx_create_json(int argc, char ** argv, char **str_reply); -int com_tx_cond_create(int argc, char ** argv, char **str_reply); +int com_tx_create(int a_argc, char **a_argv, char **a_str_reply); +int com_tx_create_json(int a_argc, char **a_argv, char **a_str_reply); +int com_tx_cond_create(int a_argc, char **a_argv, char **a_str_reply); /** * tx_verify command @@ -125,29 +125,29 @@ int com_tx_verify(int a_argc, char ** a_argv, char **a_str_reply); * * Transaction history for an address */ -int com_tx_history(int argc, char ** argv, char **str_reply); +int com_tx_history(int a_argc, char **a_argv, char **a_str_reply); // Print log info -int com_print_log(int argc, char ** argv, char **str_reply); +int com_print_log(int a_argc, char **a_argv, char **a_str_reply); // Print statistics -int com_stats(int argc, char ** argv, char **str_reply); +int com_stats(int a_argc, char **a_argv, char **a_str_reply); -int com_exit(int argc, char ** argv, char **str_reply); +int com_exit(int a_argc, char **a_argv, char **a_str_reply); -int cmd_gdb_import(int argc, char ** argv, char ** a_str_reply); -int cmd_gdb_export(int argc, char ** argv, char ** a_str_reply); +int cmd_gdb_import(int a_argc, char **a_argv, char **a_str_reply); +int cmd_gdb_export(int a_argc, char **a_argv, char **a_str_reply); -int com_mempool_delete(int argc, char ** argv, char ** a_str_reply); -int com_mempool_list(int argc, char ** argv, char ** a_str_reply); -int com_mempool_proc(int argc, char ** argv, char ** a_str_reply); -int com_mempool_check(int argc, char ** argv, char ** a_str_reply); +int com_mempool_delete(int a_argc, char **a_argv, char **a_str_reply); +int com_mempool_list(int a_argc, char **a_argv, char **a_str_reply); +int com_mempool_proc(int a_argc, char **a_argv, char **a_str_reply); +int com_mempool_check(int a_argc, char **a_argv, char **a_str_reply); /** * Place public CA into the mempool */ -int com_mempool_add_ca( int a_argc, char ** a_argv, char ** a_str_reply); -int com_chain_ca_pub( int a_argc, char ** a_argv, char ** a_str_reply); -int com_chain_ca_copy( int a_argc, char ** a_argv, char ** a_str_reply); +int com_mempool_add_ca( int a_argc, char **a_argv, char **a_str_reply); +int com_chain_ca_pub( int a_argc, char **a_argv, char **a_str_reply); +int com_chain_ca_copy( int a_argc, char **a_argv, char **a_str_reply); int com_signer(int a_argc, char **a_argv, char **a_str_reply); //remove func -int cmd_remove(int argc, char ** argv, char ** a_str_reply); +int cmd_remove(int a_argc, char **a_argv, char ** a_str_reply); diff --git a/modules/service/datum/dap_chain_net_srv_datum.c b/modules/service/datum/dap_chain_net_srv_datum.c index e2b79c9b36a1b13ca124257cb825ebd452016fde..65da564e581fa443e3d440b954fbd206b9272e68 100644 --- a/modules/service/datum/dap_chain_net_srv_datum.c +++ b/modules/service/datum/dap_chain_net_srv_datum.c @@ -96,7 +96,7 @@ char* dap_chain_net_srv_datum_custom_add(dap_chain_t * a_chain, const uint8_t *a } // Finaly add datum to mempool - char *l_hash_str = dap_chain_mempool_datum_add(l_datum, a_chain); + char *l_hash_str = dap_chain_mempool_datum_add(l_datum, a_chain, "hex"); return l_hash_str; } diff --git a/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c b/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c index 53eab8f82d2ad55e4b5d430cd9859520378cb4bc..aee53bea2a1cb9d6863af86e0aed1f51207ff9a5 100644 --- a/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c +++ b/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c @@ -74,7 +74,8 @@ enum error_code { BASE_TX_CREATE_ERROR = 37, WRONG_PARAM_SIZE = 38, NOT_ENOUGH_TIME = 39, - REINVEST_ARG_ERROR = 40 + REINVEST_ARG_ERROR = 40, + HASH_TYPE_ARG_ERROR = 41 }; typedef struct dap_chain_ledger_token_emission_for_stake_lock_item { @@ -89,9 +90,9 @@ typedef struct dap_chain_ledger_token_emission_for_stake_lock_item { #define YEAR_INDEX 12 static int s_cli_stake_lock(int a_argc, char **a_argv, char **a_str_reply); -static dap_chain_hash_fast_t *dap_chain_mempool_base_tx_for_stake_lock_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash, +static char *dap_chain_mempool_base_tx_for_stake_lock_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash, dap_chain_id_t a_emission_chain_id, uint256_t a_emission_value, const char *a_ticker, - dap_chain_addr_t *a_addr_to, dap_enc_key_t *a_key_from); + dap_chain_addr_t *a_addr_to, dap_enc_key_t *a_key_from, const char *a_hash_out_type); // Callbacks static void s_callback_decree (dap_chain_net_srv_t * a_srv, dap_chain_net_t *a_net, dap_chain_t * a_chain, dap_chain_datum_decree_t * a_decree, size_t a_decree_size); @@ -191,10 +192,9 @@ static enum error_code s_cli_hold(int a_argc, char **a_argv, int a_arg_index, da char delegate_ticker_str[DAP_CHAIN_TICKER_SIZE_MAX] = {[0] = 'm'}; dap_chain_net_t *l_net = NULL; dap_chain_t *l_chain = NULL; -// dap_chain_t *l_chain_emission = NULL; + dap_hash_fast_t l_tx_cond_hash; dap_cert_t *l_cert = NULL; dap_pkey_t *l_key_cond = NULL; - dap_hash_fast_t *l_base_tx_hash = NULL; dap_chain_net_srv_uid_t l_uid = { .uint64 = DAP_CHAIN_NET_SRV_STAKE_LOCK_ID }; dap_time_t l_time_staking = 0; uint256_t l_reinvest_percent = {}; @@ -203,7 +203,6 @@ static enum error_code s_cli_hold(int a_argc, char **a_argv, int a_arg_index, da uint256_t l_value; dap_ledger_t *l_ledger; char *l_hash_str; - dap_hash_fast_t *l_tx_cond_hash; dap_enc_key_t *l_key_from; dap_chain_wallet_t *l_wallet; dap_chain_addr_t *l_addr_holder; @@ -213,6 +212,13 @@ static enum error_code s_cli_hold(int a_argc, char **a_argv, int a_arg_index, da dap_string_append_printf(output_line, "---> HOLD <---\n"); + const char *l_hash_out_type = NULL; + dap_cli_server_cmd_find_option_val(a_argv, 1, a_argc, "-H", &l_hash_out_type); + if(!l_hash_out_type) + l_hash_out_type = "hex"; + if(dap_strcmp(l_hash_out_type,"hex") && dap_strcmp(l_hash_out_type, "base58")) + return HASH_TYPE_ARG_ERROR; + if (!dap_cli_server_cmd_find_option_val(a_argv, a_arg_index, a_argc, "-net", &l_net_str) || NULL == l_net_str) return NET_ARG_ERROR; @@ -284,14 +290,6 @@ static enum error_code s_cli_hold(int a_argc, char **a_argv, int a_arg_index, da if(!l_chain) return CHAIN_ERROR; -/* if (dap_chain_node_cli_find_option_val(a_argv, a_arg_index, a_argc, "-chain_emission", &l_chain_emission_str) - && l_chain_emission_str) - l_chain_emission = dap_chain_net_get_chain_by_name(l_net, l_chain_str); - else - l_chain_emission = dap_chain_net_get_default_chain_by_chain_type(l_net, CHAIN_TYPE_EMISSION); - if(!l_chain_emission) - return CHAIN_EMISSION_ERROR;*/ - if (!dap_cli_server_cmd_find_option_val(a_argv, a_arg_index, a_argc, "-wallet", &l_wallet_str) || NULL == l_wallet_str) return WALLET_ARG_ERROR; @@ -351,14 +349,15 @@ static enum error_code s_cli_hold(int a_argc, char **a_argv, int a_arg_index, da return CERT_KEY_ERROR; } - l_tx_cond_hash = dap_chain_net_srv_stake_lock_mempool_create(l_net, l_key_from, l_key_cond, + // Make transfer transaction + dap_chain_datum_t *l_datum = dap_chain_net_srv_stake_lock_datum_create(l_net, l_key_from, l_key_cond, l_ticker_str,l_value, l_uid, - l_addr_holder, l_chain, l_time_staking, - l_reinvest_percent, create_base_tx); - + l_time_staking, l_reinvest_percent, create_base_tx); DAP_DEL_Z(l_key_cond); - - l_hash_str = (l_tx_cond_hash) ? dap_chain_hash_fast_to_str_new(l_tx_cond_hash) : NULL; + if (create_base_tx) + dap_hash_fast(l_datum->data, l_datum->header.data_size, &l_tx_cond_hash); + l_hash_str = dap_chain_mempool_datum_add(l_datum, l_chain, l_hash_out_type); + DAP_DEL_Z(l_datum); if (l_hash_str) dap_string_append_printf(output_line, "TX STAKE LOCK CREATED\nSuccessfully hash=%s\nSave to take!\n", l_hash_str); @@ -370,28 +369,23 @@ static enum error_code s_cli_hold(int a_argc, char **a_argv, int a_arg_index, da DAP_DEL_Z(l_hash_str); - if (create_base_tx) { - l_base_tx_hash = dap_chain_mempool_base_tx_for_stake_lock_create(l_chain, l_tx_cond_hash, l_chain->id, - l_value_delegated, delegate_ticker_str, l_addr_holder, l_key_from); - } + if (create_base_tx) + l_hash_str = dap_chain_mempool_base_tx_for_stake_lock_create(l_chain, &l_tx_cond_hash, l_chain->id, + l_value_delegated, delegate_ticker_str, l_addr_holder, + l_key_from, l_hash_out_type); dap_chain_wallet_close(l_wallet); if (create_base_tx) { - l_hash_str = (l_base_tx_hash) ? dap_chain_hash_fast_to_str_new(l_base_tx_hash) : NULL; - if (l_hash_str) dap_string_append_printf(output_line, "BASE_TX_DATUM_HASH=%s\n", l_hash_str); else { DAP_DEL_Z(l_addr_holder); - DAP_DEL_Z(l_tx_cond_hash); return BASE_TX_CREATE_ERROR; } } DAP_DEL_Z(l_addr_holder); - DAP_DEL_Z(l_tx_cond_hash); - DAP_DEL_Z(l_base_tx_hash); DAP_DEL_Z(l_hash_str); return STAKE_NO_ERROR; @@ -427,6 +421,13 @@ static enum error_code s_cli_take(int a_argc, char **a_argv, int a_arg_index, da dap_string_append_printf(output_line, "---> TAKE <---\n"); + const char *l_hash_out_type = NULL; + dap_cli_server_cmd_find_option_val(a_argv, 1, a_argc, "-H", &l_hash_out_type); + if(!l_hash_out_type) + l_hash_out_type = "hex"; + if(dap_strcmp(l_hash_out_type,"hex") && dap_strcmp(l_hash_out_type, "base58")) + return HASH_TYPE_ARG_ERROR; + if (!dap_cli_server_cmd_find_option_val(a_argv, a_arg_index, a_argc, "-net", &l_net_str) || NULL == l_net_str) return NET_ARG_ERROR; @@ -592,7 +593,7 @@ static enum error_code s_cli_take(int a_argc, char **a_argv, int a_arg_index, da dap_chain_datum_tx_delete(l_tx); if (l_tx_out_cond->subtype.srv_stake_lock.flags & DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_CREATE_BASE_TX) { - if (NULL == (l_datum_hash_str = dap_chain_mempool_datum_add(l_datum_burning_tx, l_chain))) { + if (NULL == (l_datum_hash_str = dap_chain_mempool_datum_add(l_datum_burning_tx, l_chain, l_hash_out_type))) { DAP_DEL_Z(l_datum_burning_tx); DAP_DEL_Z(l_datum); return ADD_DATUM_BURNING_TX_ERROR; @@ -604,7 +605,7 @@ static enum error_code s_cli_take(int a_argc, char **a_argv, int a_arg_index, da } // Processing will be made according to autoprocess policy - if (NULL == (l_datum_hash_str = dap_chain_mempool_datum_add(l_datum, l_chain))) { + if (NULL == (l_datum_hash_str = dap_chain_mempool_datum_add(l_datum, l_chain, l_hash_out_type))) { DAP_DEL_Z(l_datum); return ADD_DATUM_TX_TAKE_ERROR; } @@ -1122,11 +1123,11 @@ static bool s_stake_lock_callback_verificator_added(dap_ledger_t *a_ledger, dap_ int l_out_num = 0; dap_chain_tx_out_cond_t *l_cond = dap_chain_datum_tx_out_cond_get(a_tx, DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK, &l_out_num); if (l_cond->subtype.srv_stake_lock.flags & DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_CREATE_BASE_TX) { - dap_chain_hash_fast_t l_key_hash; - dap_hash_fast( a_tx, dap_chain_datum_tx_get_size(a_tx), &l_key_hash); - if (dap_hash_fast_is_blank(&l_key_hash)) + dap_chain_hash_fast_t l_tx_cond_hash; + dap_hash_fast( a_tx, dap_chain_datum_tx_get_size(a_tx), &l_tx_cond_hash); + if (dap_hash_fast_is_blank(&l_tx_cond_hash)) return false; - dap_chain_ledger_emission_for_stake_lock_item_add(a_ledger, &l_key_hash); + dap_chain_ledger_emission_for_stake_lock_item_add(a_ledger, &l_tx_cond_hash); } return true; } @@ -1143,12 +1144,12 @@ static bool s_stake_lock_callback_verificator_added(dap_ledger_t *a_ledger, dap_ * @param a_count_months * @return */ -static dap_chain_datum_t* s_mempool_create(dap_chain_net_t *a_net, +dap_chain_datum_t *dap_chain_net_srv_stake_lock_datum_create(dap_chain_net_t *a_net, dap_enc_key_t *a_key_from, dap_pkey_t *a_key_cond, const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX], uint256_t a_value, dap_chain_net_srv_uid_t a_srv_uid, - dap_chain_addr_t *a_addr_holder, dap_time_t a_time_staking, - uint256_t a_reinvest_percent, bool create_base_tx) + dap_time_t a_time_staking, uint256_t a_reinvest_percent, + bool a_create_base_tx) { dap_ledger_t * l_ledger = a_net ? dap_chain_ledger_by_net_name( a_net->pub.name ) : NULL; // check valid param @@ -1182,7 +1183,7 @@ static dap_chain_datum_t* s_mempool_create(dap_chain_net_t *a_net, // add 'out_cond' and 'out' items { uint256_t l_value_pack = {}; // how much coin add to 'out' items - dap_chain_tx_out_cond_t* l_tx_out_cond = dap_chain_net_srv_stake_lock_create_cond_out(a_key_cond, a_srv_uid, a_value, a_time_staking, a_reinvest_percent, create_base_tx); + dap_chain_tx_out_cond_t* l_tx_out_cond = dap_chain_net_srv_stake_lock_create_cond_out(a_key_cond, a_srv_uid, a_value, a_time_staking, a_reinvest_percent, a_create_base_tx); if(l_tx_out_cond) { SUM_256_256(l_value_pack, a_value, &l_value_pack); dap_chain_datum_tx_add_item(&l_tx, (const uint8_t *)l_tx_out_cond); @@ -1251,53 +1252,6 @@ dap_chain_tx_out_cond_t *dap_chain_net_srv_stake_lock_create_cond_out(dap_pkey_t return l_item; } - -/** - * @brief dap_chain_net_srv_stake_lock_mempool_create - * @param a_net - * @param a_key_from - * @param a_key_cond - * @param a_token_ticker - * @param a_value - * @param a_srv_uid - * @param a_addr_holder - * @param a_time_staking - * @return - */ -dap_chain_hash_fast_t* dap_chain_net_srv_stake_lock_mempool_create(dap_chain_net_t *a_net, - dap_enc_key_t *a_key_from, dap_pkey_t *a_key_cond, - const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX], - uint256_t a_value, dap_chain_net_srv_uid_t a_srv_uid, - dap_chain_addr_t *a_addr_holder, dap_chain_t *a_chain, - uint64_t a_time_staking, uint256_t a_reinvest_percent, - bool create_base_tx) -{ - // Make transfer transaction - dap_chain_datum_t *l_datum = s_mempool_create(a_net, a_key_from, a_key_cond, a_token_ticker, a_value, a_srv_uid, - a_addr_holder, a_time_staking, a_reinvest_percent, create_base_tx); - - if(!l_datum) - return NULL; - - dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*)&(l_datum->data); - size_t l_tx_size = l_datum->header.data_size; - - dap_chain_hash_fast_t *l_key_hash = DAP_NEW_Z( dap_chain_hash_fast_t ); - dap_hash_fast( l_tx, l_tx_size, l_key_hash); - - char * l_key_str = dap_chain_hash_fast_to_str_new( l_key_hash ); - char * l_gdb_group = dap_chain_net_get_gdb_group_mempool_new(a_chain); - - if (dap_global_db_set_sync(l_gdb_group, l_key_str, l_datum, dap_chain_datum_size(l_datum), false) == - DAP_GLOBAL_DB_RC_SUCCESS) - log_it(L_NOTICE, "Transaction %s placed in mempool group %s", l_key_str, l_gdb_group); - - DAP_DELETE(l_gdb_group); - DAP_DELETE(l_key_str); - - return l_key_hash; -} - dap_chain_datum_t *dap_chain_burning_tx_create(dap_chain_t *a_chain, dap_enc_key_t *a_key_from, const dap_chain_addr_t* a_addr_from, const dap_chain_addr_t* a_addr_to, const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX], @@ -1353,28 +1307,12 @@ dap_chain_datum_t *dap_chain_burning_tx_create(dap_chain_t *a_chain, dap_enc_key DAP_DELETE(l_tx); return l_datum; - -// dap_hash_fast_t * l_ret = DAP_NEW_Z(dap_hash_fast_t); -// dap_hash_fast(l_tx, l_tx_size, l_ret); -// DAP_DELETE(l_tx); -// char *l_hash_str = dap_chain_mempool_datum_add(l_datum, a_chain); - -// DAP_DELETE( l_datum ); -// -// if (l_hash_str) { -// DAP_DELETE(l_hash_str); -// return l_ret; -// }else{ -// DAP_DELETE(l_ret); -// return NULL; -// } } -static dap_chain_hash_fast_t *dap_chain_mempool_base_tx_for_stake_lock_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash, +static char *dap_chain_mempool_base_tx_for_stake_lock_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash, dap_chain_id_t a_emission_chain_id, uint256_t a_emission_value, const char *a_ticker, - dap_chain_addr_t *a_addr_to, dap_enc_key_t *a_key_from) + dap_chain_addr_t *a_addr_to, dap_enc_key_t *a_key_from, const char *a_hash_out_type) { - char *l_gdb_group_mempool_base_tx = dap_chain_net_get_gdb_group_mempool_new(a_chain); // create first transaction (with tx_token) dap_chain_datum_tx_t *l_tx = DAP_NEW_Z_SIZE(dap_chain_datum_tx_t, sizeof(dap_chain_datum_tx_t)); l_tx->header.ts_created = time(NULL); @@ -1408,18 +1346,6 @@ static dap_chain_hash_fast_t *dap_chain_mempool_base_tx_for_stake_lock_create(da // Pack transaction into the datum dap_chain_datum_t * l_datum_tx = dap_chain_datum_create(DAP_CHAIN_DATUM_TX, l_tx, l_tx_size); - size_t l_datum_tx_size = dap_chain_datum_size(l_datum_tx); DAP_DEL_Z(l_tx); - // calc datum hash - dap_chain_hash_fast_t *l_datum_tx_hash = DAP_NEW(dap_hash_fast_t); - dap_hash_fast(l_datum_tx->data, l_datum_tx->header.data_size, l_datum_tx_hash); - char *l_tx_hash_str = dap_chain_hash_fast_to_str_new(l_datum_tx_hash); - // Add to mempool tx token - bool l_placed = dap_global_db_set_sync(l_gdb_group_mempool_base_tx, l_tx_hash_str, l_datum_tx, - l_datum_tx_size, false) == DAP_GLOBAL_DB_RC_SUCCESS; - DAP_DEL_Z(l_tx_hash_str); - DAP_DELETE(l_datum_tx); - if (!l_placed) - return NULL; - return l_datum_tx_hash; + return dap_chain_mempool_datum_add(l_datum_tx, a_chain, a_hash_out_type); } diff --git a/modules/service/stake_lock/include/dap_chain_net_srv_stake_lock.h b/modules/service/stake_lock/include/dap_chain_net_srv_stake_lock.h index b7fbb5d2523fcf7089943d260a6a03a93829e986..1f7060fc640be68b4a7e9b02e012012db7421879 100644 --- a/modules/service/stake_lock/include/dap_chain_net_srv_stake_lock.h +++ b/modules/service/stake_lock/include/dap_chain_net_srv_stake_lock.h @@ -54,16 +54,15 @@ void dap_chain_net_srv_stake_lock_deinit(void); dap_chain_tx_out_cond_t *dap_chain_net_srv_stake_lock_create_cond_out(dap_pkey_t *a_key, dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value, uint64_t a_time_staking, uint256_t a_reinvest_percent, bool create_base_tx); -// Create mempool -dap_chain_hash_fast_t *dap_chain_net_srv_stake_lock_mempool_create(dap_chain_net_t *a_net, - dap_enc_key_t* a_key_from, dap_pkey_t* a_key_cond, - const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX], - uint256_t a_value, dap_chain_net_srv_uid_t a_srv_uid, - dap_chain_addr_t *a_addr_holder, dap_chain_t *a_chain, - uint64_t a_time_staking, uint256_t a_reinvest_percent, - bool create_base_tx); +// Create stake lock datum +dap_chain_datum_t *dap_chain_net_srv_stake_lock_datum_create(dap_chain_net_t *a_net, + dap_enc_key_t *a_key_from, dap_pkey_t *a_key_cond, + const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX], + uint256_t a_value, dap_chain_net_srv_uid_t a_srv_uid, + dap_time_t a_time_staking, uint256_t a_reinvest_percent, + bool a_create_base_tx); // Burning_tx_create -dap_chain_datum_t* dap_chain_burning_tx_create(dap_chain_t* a_chain, dap_enc_key_t* a_key_from, +dap_chain_datum_t *dap_chain_burning_tx_create(dap_chain_t* a_chain, dap_enc_key_t* a_key_from, const dap_chain_addr_t* a_addr_from, const dap_chain_addr_t* a_addr_to, const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX], uint256_t a_value); diff --git a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c index 18ff05af79b5d2433869212417d365d58ebc8dcb..4b0b1aa4af21364701c528ce1926800f32920d38 100644 --- a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c +++ b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c @@ -449,7 +449,7 @@ static bool s_stake_tx_put(dap_chain_datum_tx_t *a_tx, dap_chain_net_t *a_net) } // Processing will be made according to autoprocess policy char *l_ret = NULL; - if ((l_ret = dap_chain_mempool_datum_add(l_datum, l_chain)) == NULL) { + if ((l_ret = dap_chain_mempool_datum_add(l_datum, l_chain, "hex")) == NULL) { DAP_DELETE(l_datum); return false; } diff --git a/modules/service/vpn/dap_chain_net_vpn_client.c b/modules/service/vpn/dap_chain_net_vpn_client.c index 72bc6fe573c676a81ec092ac0154ed434b814578..fd71bd40a0cddc4097e557d13cc0405ca11f8551 100644 --- a/modules/service/vpn/dap_chain_net_vpn_client.c +++ b/modules/service/vpn/dap_chain_net_vpn_client.c @@ -328,14 +328,17 @@ static dap_chain_hash_fast_t* dap_chain_net_vpn_client_tx_cond_hash(dap_chain_ne dap_chain_net_srv_uid_t l_srv_uid = { .uint64 = DAP_CHAIN_NET_SRV_VPN_ID }; uint256_t l_value = dap_chain_uint256_from(a_value_datoshi); uint256_t l_zero = {}; - l_tx_cond_hash = dap_chain_mempool_tx_create_cond(a_net, l_enc_key, l_client_key, a_token_ticker, - l_value, l_zero, l_price_unit, l_srv_uid, l_zero, NULL, 0); + char *l_tx_cond_hash_str = dap_chain_mempool_tx_create_cond(a_net, l_enc_key, l_client_key, a_token_ticker, + l_value, l_zero, l_price_unit, l_srv_uid, l_zero, NULL, 0, "hex"); DAP_DELETE(l_addr_from); - if(!l_tx_cond_hash) { + if(!l_tx_cond_hash_str) { log_it(L_ERROR, "Can't create condition for user"); } else { + l_tx_cond_hash = DAP_NEW(dap_hash_fast_t); + dap_chain_hash_fast_from_str(l_tx_cond_hash_str, l_tx_cond_hash); + DAP_DELETE(l_tx_cond_hash_str); // save transaction for login - dap_global_db_set_sync( l_gdb_group,"client_tx_cond_hash", l_tx_cond_hash, sizeof(dap_chain_hash_fast_t), true); + dap_global_db_set_sync(l_gdb_group, "client_tx_cond_hash", l_tx_cond_hash, sizeof(dap_chain_hash_fast_t), true); } DAP_DELETE(l_client_key); } @@ -359,11 +362,11 @@ int dap_chain_net_vpn_client_update(dap_chain_net_t *a_net, const char *a_wallet } char *l_gdb_group = dap_strdup_printf("local.%s", DAP_CHAIN_NET_SRV_VPN_CDB_GDB_PREFIX); - if(!dap_global_db_set_sync(l_gdb_group, "wallet_name", a_wallet_name, -1,true)) + if(dap_global_db_set_sync(l_gdb_group, "wallet_name", a_wallet_name, -1,true)) return -2; - if(!dap_global_db_set_sync(l_gdb_group, "token_name", a_str_token, -1, true)) + if(dap_global_db_set_sync(l_gdb_group, "token_name", a_str_token, -1, true)) return -2; - if(!dap_global_db_set_sync(l_gdb_group, "value_datoshi", &a_value_datoshi, sizeof(a_value_datoshi), true)) + if(dap_global_db_set_sync(l_gdb_group, "value_datoshi", &a_value_datoshi, sizeof(a_value_datoshi), true)) return -2; DAP_DELETE(l_gdb_group); dap_chain_hash_fast_t *l_hash = dap_chain_net_vpn_client_tx_cond_hash(a_net, l_wallet, a_str_token, diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c index d0e5744a2b9fde1e3668c5e4023865bdc06594fa..bc43f524afb9e80d41c58f62895a3ff185663f29 100644 --- a/modules/service/xchange/dap_chain_net_srv_xchange.c +++ b/modules/service/xchange/dap_chain_net_srv_xchange.c @@ -712,20 +712,19 @@ static dap_chain_datum_tx_t *s_xchange_tx_create_exchange(dap_chain_net_srv_xcha -// Put the transaction to mempool or directly to chains & write transaction's hash to the price +// Put the transaction to mempool static bool s_xchange_tx_put(dap_chain_datum_tx_t *a_tx, dap_chain_net_t *a_net) { - // Put the transaction to mempool or directly to chains size_t l_tx_size = dap_chain_datum_tx_get_size(a_tx); dap_chain_datum_t *l_datum = dap_chain_datum_create(DAP_CHAIN_DATUM_TX, a_tx, l_tx_size); DAP_DELETE(a_tx); - dap_chain_t *l_chain = dap_chain_net_get_chain_by_chain_type(a_net, CHAIN_TYPE_TX); + dap_chain_t *l_chain = dap_chain_net_get_default_chain_by_chain_type(a_net, CHAIN_TYPE_TX); if (!l_chain) { DAP_DELETE(l_datum); return false; } // Processing will be made according to autoprocess policy - char *l_ret = dap_chain_mempool_datum_add(l_datum, l_chain); + char *l_ret = dap_chain_mempool_datum_add(l_datum, l_chain, "hex"); DAP_DELETE(l_datum); diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index cfe93722f87d2429da9a08d954f745f3ac8aad46..f5316eea35bc4eda0ff85ddeea2b326528ee3b69 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -185,6 +185,22 @@ static void s_history_callback_round_notify(dap_global_db_context_t *a_context, } } +static void s_dag_rounds_events_iter(dap_global_db_context_t *a_context, + int a_rc, const char *a_group, + const size_t a_values_current, const size_t a_values_count, + dap_store_obj_t *a_values, void *a_arg) +{ + UNUSED(a_group); + UNUSED(a_values_current); + if (a_rc != DAP_GLOBAL_DB_RC_SUCCESS) + return; + for (size_t i = 0; i < a_values_count; i++) { + dap_store_obj_t *l_obj_cur = a_values + i; + l_obj_cur->type = DAP_DB$K_OPTYPE_ADD; + s_history_callback_round_notify(a_context, a_values + i, a_arg); + } +} + /** * @brief dap_chain_cs_dag_new * @param a_chain @@ -283,7 +299,8 @@ int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg) byte_t *l_current_round = dap_global_db_get_sync(l_dag->gdb_group_events_round_new, DAG_ROUND_CURRENT_KEY, NULL, NULL, NULL); l_dag->round_current = l_current_round ? *(uint64_t *)l_current_round : 0; DAP_DELETE(l_current_round); - PVT(l_dag)->mempool_timer = dap_interval_timer_create(5000, (dap_timer_callback_t)dap_chain_node_mempool_process_all, a_chain); + dap_global_db_get_all_raw(l_dag->gdb_group_events_round_new, 0, 0, s_dag_rounds_events_iter, l_dag); + PVT(l_dag)->mempool_timer = dap_interval_timer_create(15000, (dap_timer_callback_t)dap_chain_node_mempool_process_all, a_chain); if (l_dag->is_single_line) log_it (L_NOTICE, "DAG chain initialized (single line)"); else @@ -1335,7 +1352,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) dap_string_append_printf( l_str_ret_tmp, "Event %s verification passed\n", l_objs[i].key); // If not verify only mode we add if ( ! l_verify_only ){ - dap_chain_atom_ptr_t l_new_atom = (dap_chain_atom_ptr_t)dap_chain_cs_dag_event_copy(l_event, l_event_size); // produce deep copy of event; + dap_chain_atom_ptr_t l_new_atom = DAP_DUP_SIZE(l_event, l_event_size); // produce deep copy of event; memcpy(l_new_atom, l_event, l_event_size); if(s_chain_callback_atom_add(l_chain, l_new_atom,l_event_size) < 0) { // Add new atom in chain DAP_DELETE(l_new_atom); diff --git a/modules/type/dag/dap_chain_cs_dag_event.c b/modules/type/dag/dap_chain_cs_dag_event.c index e2ae38fe11c8e8dad3023bd9d44880813e5bf3fa..ee94654a761560067769f36694412596a65adef8 100644 --- a/modules/type/dag/dap_chain_cs_dag_event.c +++ b/modules/type/dag/dap_chain_cs_dag_event.c @@ -92,20 +92,6 @@ dap_chain_cs_dag_event_t *dap_chain_cs_dag_event_new(dap_chain_id_t a_chain_id, return l_event_new; } -/** - * @brief dap_chain_cs_dag_event_deep_copy - * @param a_event_src - * @return - */ -dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_copy(dap_chain_cs_dag_event_t *a_event_src,size_t a_event_size) -{ - if(!a_event_src) - return NULL; - dap_chain_cs_dag_event_t *l_event_new = DAP_NEW_Z_SIZE(dap_chain_cs_dag_event_t, a_event_size); - memcpy(l_event_new, a_event_src, a_event_size); - return l_event_new; -} - /** * @brief dap_chain_cs_dag_event_sign_add * @param a_event