diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c index 07118fbc49bf6453f03deb45853990b6c51e645e..ea631e9f33865dfbd683b6b033135861fdd19297 100644 --- a/modules/common/dap_chain_datum_token.c +++ b/modules/common/dap_chain_datum_token.c @@ -219,6 +219,31 @@ void dap_chain_datum_token_flags_dump(dap_string_t * a_str_out, uint16_t a_flags } } +/** + * @brief dap_chain_datum_token_flags_dump_to_json + * @param json_obj_out + * @param a_flags + */ +void dap_chain_datum_token_flags_dump_to_json(json_object * json_obj_out, uint16_t a_flags) +{ + if(!a_flags){ + json_object_object_add(json_obj_out, "flags:", json_object_new_string(c_dap_chain_datum_token_flag_str[DAP_CHAIN_DATUM_TOKEN_FLAG_NONE])); + + return; + } + bool is_first = true; + for ( uint16_t i = 0; BIT(i) <= DAP_CHAIN_DATUM_TOKEN_FLAG_MAX; i++){ + if( a_flags & (1 << i) ){ + if(is_first) + is_first = false; + + json_object_object_add(json_obj_out, "flags:", json_object_new_string(c_dap_chain_datum_token_flag_str[BIT(i)])); + + } + } +} + + /** * @brief dap_chain_datum_token_certs_dump @@ -267,6 +292,58 @@ void dap_chain_datum_token_certs_dump(dap_string_t * a_str_out, byte_t * a_data_ } } +/** + * @brief dap_chain_datum_token_certs_dump_to_json + * @param a_json_obj_out + * @param a_data_n_tsd + * @param a_certs_size + */ +void dap_chain_datum_token_certs_dump_to_json(json_object *a_json_obj_out, byte_t * a_data_n_tsd, size_t a_certs_size, const char *a_hash_out_type) +{ + json_object_object_add(a_json_obj_out, "Signatures", json_object_new_string("")); + if (!a_certs_size) { + json_object_object_add(a_json_obj_out, "status", json_object_new_string("<NONE>")); + return; + } + + size_t l_offset = 0; + json_object * json_arr_seg = json_object_new_array(); + for (int i = 1; l_offset < (a_certs_size); i++) { + json_object * l_json_obj_out = json_object_new_object(); + dap_sign_t *l_sign = (dap_sign_t *) (a_data_n_tsd + l_offset); + l_offset += dap_sign_get_size(l_sign); + if (l_sign->header.sign_size == 0) { + json_object_object_add(l_json_obj_out, "status", json_object_new_string("<CORRUPTED - 0 size signature>")); + break; + } + + if (l_sign->header.sign_size > a_certs_size) + { + json_object_object_add(l_json_obj_out, "status", json_object_new_string("<CORRUPTED - signature size is greater than a_certs_size>")); + continue; + } + + dap_chain_hash_fast_t l_pkey_hash = {0}; + if (dap_sign_get_pkey_hash(l_sign, &l_pkey_hash) == false) { + json_object_object_add(l_json_obj_out, "status", json_object_new_string("<CORRUPTED - can't calc hash>")); + continue; + } + + char *l_hash_str = dap_strcmp(a_hash_out_type, "hex") + ? dap_enc_base58_encode_hash_to_str(&l_pkey_hash) + : dap_chain_hash_fast_to_str_new(&l_pkey_hash); + + json_object_object_add(l_json_obj_out, "line", json_object_new_int(i)); + json_object_object_add(l_json_obj_out, "hash", json_object_new_string(l_hash_str)); + json_object_object_add(l_json_obj_out, "sign_type", json_object_new_string(dap_sign_type_to_str(l_sign->header.type))); + json_object_object_add(l_json_obj_out, "bytes", json_object_new_int(l_sign->header.sign_size)); + json_object_array_add(json_arr_seg, l_json_obj_out); + DAP_DEL_Z(l_hash_str); + } + json_object_object_add(a_json_obj_out, "status", json_arr_seg); +} + + dap_sign_t ** dap_chain_datum_token_signs_parse(dap_chain_datum_token_t * a_datum_token, size_t a_datum_token_size, size_t *a_signs_total, size_t * a_signs_valid) { assert(a_datum_token_size); diff --git a/modules/common/include/dap_chain_datum_token.h b/modules/common/include/dap_chain_datum_token.h index ebd68caa261e26d5b10f55c2a119cd2bbd267724..4fb52984e1bc6c68a1e32c84da0434cdd57fa4d9 100644 --- a/modules/common/include/dap_chain_datum_token.h +++ b/modules/common/include/dap_chain_datum_token.h @@ -505,7 +505,9 @@ extern const char *c_dap_chain_datum_token_emission_type_str[]; /// TDS op funcs dap_tsd_t* dap_chain_datum_token_tsd_get(dap_chain_datum_token_t * a_token, size_t a_token_size); void dap_chain_datum_token_flags_dump(dap_string_t * a_str_out, uint16_t a_flags); +void dap_chain_datum_token_flags_dump_to_json(json_object * json_obj_out, uint16_t a_flags); void dap_chain_datum_token_certs_dump(dap_string_t * a_str_out, byte_t * a_data_n_tsd, size_t a_certs_size, const char *a_hash_out_type); +void dap_chain_datum_token_certs_dump_to_json(json_object *a_json_obj_out, byte_t * a_data_n_tsd, size_t a_certs_size, const char *a_hash_out_type); dap_sign_t ** dap_chain_datum_token_signs_parse(dap_chain_datum_token_t * a_datum_token, size_t a_datum_token_size, size_t *a_signs_count, size_t * a_signs_valid); dap_chain_datum_token_t *dap_chain_datum_token_read(const byte_t *a_token_serial, size_t *a_token_size); diff --git a/modules/common/include/dap_chain_datum_tx.h b/modules/common/include/dap_chain_datum_tx.h index 33d37f51425d481dc73bd713c704941cc6390eb8..cba9ffe2e64400d9def5ff00e245709cb4e90a16 100644 --- a/modules/common/include/dap_chain_datum_tx.h +++ b/modules/common/include/dap_chain_datum_tx.h @@ -153,6 +153,6 @@ dap_sign_t *dap_chain_datum_tx_get_sign(dap_chain_datum_tx_t *a_tx, int a_sign_n */ int dap_chain_datum_tx_verify_sign(dap_chain_datum_tx_t *a_tx); -json_object *dap_chain_datum_tx_to_json(dap_chain_datum_tx_t *a_tx); +//json_object *dap_chain_datum_tx_to_json(dap_chain_datum_tx_t *a_tx); int dap_chain_datum_tx_get_fee_value (dap_chain_datum_tx_t *a_tx, uint256_t *a_value); diff --git a/modules/json_rpc/common/dap_json_rpc_chain_datum_tx.c b/modules/json_rpc/common/dap_json_rpc_chain_datum_tx.c index 043b57b2519d415eb37d79a995c7f3adeead627c..b6377c825eaf4566d31a5d4d17008acd68712b0e 100644 --- a/modules/json_rpc/common/dap_json_rpc_chain_datum_tx.c +++ b/modules/json_rpc/common/dap_json_rpc_chain_datum_tx.c @@ -14,7 +14,7 @@ -json_object *dap_chain_datum_tx_to_json(dap_chain_datum_tx_t *a_tx){ +json_object *dap_chain_datum_tx_to_json(dap_chain_datum_tx_t *a_tx,dap_chain_net_id_t *a_net_id){ json_object *l_obj_items = json_object_new_array(); if (!l_obj_items) { dap_json_rpc_allocation_error; diff --git a/modules/json_rpc/common/include/dap_json_rpc_chain_datum_tx.h b/modules/json_rpc/common/include/dap_json_rpc_chain_datum_tx.h index 3c41a9bf0cac21379d8b2de2a6b96fda7c9cc65e..ef472df5f6e70ab8d560df2d15746eb30d6383f3 100644 --- a/modules/json_rpc/common/include/dap_json_rpc_chain_datum_tx.h +++ b/modules/json_rpc/common/include/dap_json_rpc_chain_datum_tx.h @@ -28,4 +28,4 @@ #include "dap_chain_datum_tx.h" #include "dap_json_rpc_errors.h" -json_object *dap_chain_datum_tx_to_json(dap_chain_datum_tx_t *a_tx, dap_chain_net_id_t *a_net_id); +json_object * dap_chain_datum_tx_to_json(dap_chain_datum_tx_t *a_tx, dap_chain_net_id_t *a_net_id); diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c index 5dade069dcd2e2378f9712c8f93a4da2ad0a11db..687321a91a56413c1b7e56ca3344d0df8310cb2a 100644 --- a/modules/net/dap_chain_node_cli_cmd_tx.c +++ b/modules/net/dap_chain_node_cli_cmd_tx.c @@ -100,15 +100,16 @@ static bool s_dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum, { dap_time_t l_ts_create = (dap_time_t)a_datum->header.ts_created; char l_tx_hash_str[70]={0}; - char l_tmp_buf[70]; + char l_tmp_buf[DAP_TIME_STR_SIZE]; const char *l_ticker = a_ledger ? dap_ledger_tx_get_token_ticker_by_hash(a_ledger, a_tx_hash) : NULL; if (!l_ticker) return false; + dap_time_to_str_rfc822(l_tmp_buf, DAP_TIME_STR_SIZE, l_ts_create); dap_chain_hash_fast_to_str(a_tx_hash,l_tx_hash_str,sizeof(l_tx_hash_str)); json_object_object_add(json_obj_out, "Datum_tx_hash", json_object_new_string(l_tx_hash_str)); - json_object_object_add(json_obj_out, "TS_Created", json_object_new_string(dap_ctime_r(&l_ts_create, l_tmp_buf))); + json_object_object_add(json_obj_out, "TS_Created", json_object_new_string(l_tmp_buf)); json_object_object_add(json_obj_out, "Token_ticker", json_object_new_string(l_ticker)); json_object* datum_tx = dap_chain_datum_tx_to_json(a_datum,&a_ledger->net->pub.id); json_object_object_add(json_obj_out, "Datum_tx", datum_tx);