diff --git a/cellframe-sdk.pro b/cellframe-sdk.pro index 3e1b5e1eaf9b031230e2263a0825adb993fa12a8..1ea62f57224282ef718f78e2a0dd9a40c8ad46e8 100644 --- a/cellframe-sdk.pro +++ b/cellframe-sdk.pro @@ -9,9 +9,8 @@ linux: !android { win32 { - CONFIG(release, debug | release): sdk_build.commands = "$$shell_path($$PWD/../cellframe-sdk/prod_build/build.sh)" --target windows release -DINSTALL_SDK=1 -DCMAKE_INSTALL_PREFIX=/ -DCELLFRAME_NO_OPTIMIZATION=1 - CONFIG(debug, debug | release): sdk_build.commands = "$$shell_path($$PWD/../cellframe-sdk/prod_build/build.sh)" --target windows rwd -DINSTALL_SDK=1 -DCMAKE_INSTALL_PREFIX=/ -DCELLFRAME_NO_OPTIMIZATION=1 - + CONFIG(release, debug | release): sdk_build.commands = "$$PWD/../cellframe-sdk/prod_build/build.sh" --target windows release -DINSTALL_SDK=1 -DCMAKE_INSTALL_PREFIX=/ -DCELLFRAME_NO_OPTIMIZATION=1 + CONFIG(debug, debug | release): sdk_build.commands = "$$PWD/../cellframe-sdk/prod_build/build.sh" --target windows rwd -DINSTALL_SDK=1 -DCMAKE_INSTALL_PREFIX=/ -DCELLFRAME_NO_OPTIMIZATION=1 } android { diff --git a/dap-sdk b/dap-sdk index d10f992466df726f9981fbc23eefe70b02dd22e4..ac9549ef63a6e90a681cdfa684c0c22e2ac0be3e 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit d10f992466df726f9981fbc23eefe70b02dd22e4 +Subproject commit ac9549ef63a6e90a681cdfa684c0c22e2ac0be3e diff --git a/modules/datum/include/dap_chain_datum.h b/modules/datum/include/dap_chain_datum.h index dd4fb4d3ddfee6deeb2803554fbd5f5b6f61d875..693fc5e991fa8b866c6fc6efc61a0d0e8d69a9a4 100644 --- a/modules/datum/include/dap_chain_datum.h +++ b/modules/datum/include/dap_chain_datum.h @@ -131,6 +131,10 @@ typedef struct dap_chain_datum{ byte_t data[]; /// Stored datum body } DAP_ALIGN_PACKED dap_chain_datum_t; +#ifdef __cplusplus +extern "C" { +#endif + /** * @brief dap_chain_datum_size * @param a_datum @@ -170,3 +174,7 @@ bool dap_chain_datum_dump_tx_json(json_object* a_json_arr_reply, dap_chain_net_id_t a_net_id); json_object * dap_chain_datum_to_json(dap_chain_datum_t* a_datum); void dap_chain_datum_dump_json(json_object* a_json_arr_reply,json_object *a_obj_out, dap_chain_datum_t *a_datum, const char *a_hash_out_type, dap_chain_net_id_t a_net_id, bool a_verbose); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/datum/include/dap_chain_datum_anchor.h b/modules/datum/include/dap_chain_datum_anchor.h index 79a0c48102707bb2f9b4acd0975e0c9411f45ced..6e20b057279f7563d6da53f5960510086396fd66 100644 --- a/modules/datum/include/dap_chain_datum_anchor.h +++ b/modules/datum/include/dap_chain_datum_anchor.h @@ -43,6 +43,11 @@ typedef struct dap_chain_datum_anchor{ // ANCHOR TSD types #define DAP_CHAIN_DATUM_ANCHOR_TSD_TYPE_DECREE_HASH 0x0001 + +#ifdef __cplusplus +extern "C" { +#endif + DAP_STATIC_INLINE size_t dap_chain_datum_anchor_get_size(dap_chain_datum_anchor_t *a_datum_anchor) { return sizeof(*a_datum_anchor) + a_datum_anchor->header.data_size + a_datum_anchor->header.signs_size; @@ -53,3 +58,7 @@ void dap_chain_datum_anchor_certs_dump(dap_string_t * a_str_out, byte_t * a_sign size_t a_certs_size, const char *a_hash_out_type); void dap_chain_datum_anchor_certs_dump_json(json_object * a_json_out, byte_t * a_signs, size_t a_certs_size, const char *a_hash_out_type); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/datum/include/dap_chain_datum_decree.h b/modules/datum/include/dap_chain_datum_decree.h index 9cb2ddda2942eb6d772dec69c76b27b14a8531c6..940dab87ad6b6f868015525ea9ee4ddaa6ad1adb 100644 --- a/modules/datum/include/dap_chain_datum_decree.h +++ b/modules/datum/include/dap_chain_datum_decree.h @@ -98,6 +98,12 @@ DAP_STATIC_INLINE size_t dap_chain_datum_decree_get_size(dap_chain_datum_decree_ #define DAP_CHAIN_DATUM_DECREE_TSD_TYPE_BLOCK_NUM 0x010C #define DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_PKEY 0x010D + +#ifdef __cplusplus +extern "C" { +#endif + + DAP_STATIC_INLINE const char *dap_chain_datum_decree_subtype_to_str(uint16_t a_decree_subtype) { switch(a_decree_subtype) { @@ -362,3 +368,8 @@ void dap_chain_datum_decree_certs_dump_json(json_object * a_json_out, byte_t * a */ dap_chain_datum_decree_t* dap_chain_datum_decree_sign_in_cycle(dap_cert_t ** a_certs, dap_chain_datum_decree_t *a_datum_decree, size_t a_certs_count, size_t *a_total_sign_count); + + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/datum/include/dap_chain_datum_token.h b/modules/datum/include/dap_chain_datum_token.h index 4553659447d45d60ed751ea29b77e5cf574ca50c..a36b5ee5acece83ca9f1d7d6fef133c230add795 100644 --- a/modules/datum/include/dap_chain_datum_token.h +++ b/modules/datum/include/dap_chain_datum_token.h @@ -212,30 +212,6 @@ typedef struct dap_chain_datum_token_tsd_delegate_from_stake_lock { #define DAP_CHAIN_DATUM_TOKEN_FLAG_UNDEFINED 0xffff -DAP_STATIC_INLINE const char *dap_chain_datum_token_flag_to_str(uint32_t a_flag) -{ - switch (a_flag) { - case DAP_CHAIN_DATUM_TOKEN_FLAG_NONE: return "NONE"; - case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_SENDER_BLOCKED: return "ALL_SENDER_BLOCKED"; - case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_SENDER_ALLOWED: return "ALL_SENDER_ALLOWED"; - case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_SENDER_FROZEN: return "ALL_SENDER_FROZEN"; - case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_SENDER_UNFROZEN: return "ALL_SENDER_UNFROZEN"; - case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_RECEIVER_BLOCKED: return "ALL_RECEIVER_BLOCKED"; - case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_RECEIVER_ALLOWED: return "ALL_RECEIVER_ALLOWED"; - case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_RECEIVER_FROZEN: return "ALL_RECEIVER_FROZEN"; - case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_RECEIVER_UNFROZEN: return "ALL_RECEIVER_UNFROZEN"; - case DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_ALL: return "STATIC_ALL"; - case DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_FLAGS: return "STATIC_FLAGS"; - case DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_PERMISSIONS_ALL: return "STATIC_PERMISSIONS_ALL"; - case DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_PERMISSIONS_DATUM_TYPE: return "STATIC_PERMISSIONS_DATUM_TYPE"; - case DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_PERMISSIONS_TX_SENDER: return "TATIC_PERMISSIONS_TX_SENDER"; - case DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_PERMISSIONS_TX_RECEIVER: return "STATIC_PERMISSIONS_TX_RECEIVER"; - default: return "UNKNOWN FLAG OR FLAGS GROUP"; - } -} - -uint32_t dap_chain_datum_token_flag_from_str(const char *a_str); - /// -------- General tsd types ---- // Flags set/unsed #define DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_SET_FLAGS 0x0001 @@ -294,36 +270,6 @@ uint32_t dap_chain_datum_token_flag_from_str(const char *a_str); #define DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_CLEAR 0x0025 -// Get delegated ticker -DAP_STATIC_INLINE int dap_chain_datum_token_get_delegated_ticker(char *a_buf, const char *a_ticker) -{ - if (!a_buf || !a_ticker) - return -1; - *a_buf = 'm'; - dap_strncpy(a_buf + 1, a_ticker, DAP_CHAIN_TICKER_SIZE_MAX - 1); - return 0; -} - -DAP_STATIC_INLINE bool dap_chain_datum_token_is_old(uint8_t a_type) -{ - return a_type == DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_SIMPLE - || a_type == DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PRIVATE_DECL - || a_type == DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PRIVATE_UPDATE - || a_type == DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_NATIVE_DECL - || a_type == DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_NATIVE_UPDATE - || a_type == DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PUBLIC; -} - -DAP_STATIC_INLINE bool dap_chain_datum_token_check_ticker(const char *a_ticker) -{ - const char *c = a_ticker; - for (int i = 0; i < DAP_CHAIN_TICKER_SIZE_MAX; i++, c++) - if (*c == '\0') - return true; - return false; -} - - /* Token emission section */ struct DAP_ALIGN_PACKED dap_chain_emission_header_v0 { @@ -415,6 +361,63 @@ typedef struct dap_chain_datum_token_emission { #define DAP_CHAIN_DATUM_TOKEN_EMISSION_SOURCE_SUBTYPE_BRIDGE_CROSSCHAIN "CROSSCHAIN" #define DAP_CHAIN_DATUM_TOKEN_EMISSION_SOURCE_SUBTYPE_BRIDGE_OUT "OUT" +#ifdef __cplusplus +extern "C" { +#endif + +DAP_STATIC_INLINE const char *dap_chain_datum_token_flag_to_str(uint32_t a_flag) +{ + switch (a_flag) { + case DAP_CHAIN_DATUM_TOKEN_FLAG_NONE: return "NONE"; + case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_SENDER_BLOCKED: return "ALL_SENDER_BLOCKED"; + case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_SENDER_ALLOWED: return "ALL_SENDER_ALLOWED"; + case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_SENDER_FROZEN: return "ALL_SENDER_FROZEN"; + case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_SENDER_UNFROZEN: return "ALL_SENDER_UNFROZEN"; + case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_RECEIVER_BLOCKED: return "ALL_RECEIVER_BLOCKED"; + case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_RECEIVER_ALLOWED: return "ALL_RECEIVER_ALLOWED"; + case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_RECEIVER_FROZEN: return "ALL_RECEIVER_FROZEN"; + case DAP_CHAIN_DATUM_TOKEN_FLAG_ALL_RECEIVER_UNFROZEN: return "ALL_RECEIVER_UNFROZEN"; + case DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_ALL: return "STATIC_ALL"; + case DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_FLAGS: return "STATIC_FLAGS"; + case DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_PERMISSIONS_ALL: return "STATIC_PERMISSIONS_ALL"; + case DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_PERMISSIONS_DATUM_TYPE: return "STATIC_PERMISSIONS_DATUM_TYPE"; + case DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_PERMISSIONS_TX_SENDER: return "TATIC_PERMISSIONS_TX_SENDER"; + case DAP_CHAIN_DATUM_TOKEN_FLAG_STATIC_PERMISSIONS_TX_RECEIVER: return "STATIC_PERMISSIONS_TX_RECEIVER"; + default: return "UNKNOWN FLAG OR FLAGS GROUP"; + } +} + +uint32_t dap_chain_datum_token_flag_from_str(const char *a_str); + +// Get delegated ticker +DAP_STATIC_INLINE int dap_chain_datum_token_get_delegated_ticker(char *a_buf, const char *a_ticker) +{ + if (!a_buf || !a_ticker) + return -1; + *a_buf = 'm'; + dap_strncpy(a_buf + 1, a_ticker, DAP_CHAIN_TICKER_SIZE_MAX - 1); + return 0; +} + +DAP_STATIC_INLINE bool dap_chain_datum_token_is_old(uint8_t a_type) +{ + return a_type == DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_SIMPLE + || a_type == DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PRIVATE_DECL + || a_type == DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PRIVATE_UPDATE + || a_type == DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_NATIVE_DECL + || a_type == DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_NATIVE_UPDATE + || a_type == DAP_CHAIN_DATUM_TOKEN_TYPE_OLD_PUBLIC; +} + +DAP_STATIC_INLINE bool dap_chain_datum_token_check_ticker(const char *a_ticker) +{ + const char *c = a_ticker; + for (int i = 0; i < DAP_CHAIN_TICKER_SIZE_MAX; i++, c++) + if (*c == '\0') + return true; + return false; +} + DAP_STATIC_INLINE const char *dap_chain_datum_emission_type_str(uint8_t a_type) { switch (a_type) { @@ -445,3 +448,7 @@ dap_chain_datum_token_emission_t *dap_chain_datum_emission_append_sign(dap_sign_ dap_sign_t *dap_chain_datum_emission_get_signs(dap_chain_datum_token_emission_t *a_emission, size_t *a_signs_count); // 256 TYPE bool dap_chain_datum_token_is_old(uint8_t a_type); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/datum/include/dap_chain_datum_tx.h b/modules/datum/include/dap_chain_datum_tx.h index f0b617b4fcef004ad58701d239f91d6ba9b0c193..460d27641b08b1ac9c302a0c8baedb219915cebf 100644 --- a/modules/datum/include/dap_chain_datum_tx.h +++ b/modules/datum/include/dap_chain_datum_tx.h @@ -92,6 +92,10 @@ typedef struct dap_chain_datum_tx_item_groups { } dap_chain_datum_tx_item_groups_t; +#ifdef __cplusplus +extern "C" { +#endif + bool dap_chain_datum_tx_group_items(dap_chain_datum_tx_t *a_tx, dap_chain_datum_tx_item_groups_t *a_res_group); void dap_chain_datum_tx_group_items_free( dap_chain_datum_tx_item_groups_t *a_group); @@ -243,3 +247,7 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_out_cond_get(dap_chain_datum_tx_t *a dap_chain_datum_tx_item_get_nth(a_tx, TX_ITEM_TYPE_OUT_ALL, a_out_num); dap_chain_tx_tsd_t *dap_chain_datum_tx_item_get_tsd_by_type(dap_chain_datum_tx_t *a_tx, int a_type); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/datum/include/dap_chain_datum_tx_items.h b/modules/datum/include/dap_chain_datum_tx_items.h index d5866d5c00eb23dff77d737d38cdaa6f2fa854fc..34d7a5afdcd2a99e489e85c25d08f64cec1b85b4 100644 --- a/modules/datum/include/dap_chain_datum_tx_items.h +++ b/modules/datum/include/dap_chain_datum_tx_items.h @@ -44,6 +44,11 @@ typedef struct dap_chain_datum_tx dap_chain_datum_tx_t; + +#ifdef __cplusplus +extern "C" { +#endif + /** * Get item name by item type * @@ -210,3 +215,8 @@ dap_sign_t *dap_chain_datum_tx_item_sign_get_sig(dap_chain_tx_sig_t *a_tx_sig); byte_t *dap_chain_datum_tx_item_get_data(dap_chain_tx_tsd_t *a_tx_tsd, int *a_type, size_t *a_size); dap_chain_tx_tsd_t *dap_chain_datum_tx_item_get_tsd_by_type(dap_chain_datum_tx_t *a_tx, int a_type); + + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/datum/include/dap_chain_datum_tx_out_cond.h b/modules/datum/include/dap_chain_datum_tx_out_cond.h index e743afd559f710946ff73fe4ad8f0b1eecf057c0..a15e582664de1c43161e2cc1b4fa75b3101b4b22 100644 --- a/modules/datum/include/dap_chain_datum_tx_out_cond.h +++ b/modules/datum/include/dap_chain_datum_tx_out_cond.h @@ -42,19 +42,6 @@ enum dap_chain_tx_out_cond_subtype { }; typedef byte_t dap_chain_tx_out_cond_subtype_t; -DAP_STATIC_INLINE const char *dap_chain_tx_out_cond_subtype_to_str(dap_chain_tx_out_cond_subtype_t a_subtype){ - switch (a_subtype) { - case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY"; - case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE"; - case DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE"; - case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE"; - case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK"; - case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_EMIT_DELEGATE: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_EMIT_DELEGATE"; - default: {} - } - return "UNDEFINED"; -} - // Stake lock base flags // Lock by time #define DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_BY_TIME 0x00000008 @@ -134,3 +121,25 @@ typedef struct dap_chain_tx_out_cond { uint32_t tsd_size; // Condition parameters size uint8_t tsd[]; // condition parameters, pkey, hash or smth like this } DAP_ALIGN_PACKED dap_chain_tx_out_cond_t; + + +#ifdef __cplusplus +extern "C" { +#endif + +DAP_STATIC_INLINE const char *dap_chain_tx_out_cond_subtype_to_str(dap_chain_tx_out_cond_subtype_t a_subtype){ + switch (a_subtype) { + case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY"; + case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE"; + case DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE"; + case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE"; + case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK"; + case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_EMIT_DELEGATE: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_EMIT_DELEGATE"; + default: {} + } + return "UNDEFINED"; +} + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/datum/include/dap_chain_datum_tx_voting.h b/modules/datum/include/dap_chain_datum_tx_voting.h index c66eca792365b5ca3ec9d356589e313f54eead51..e2376921e2ac87055fb54bb0af4b7df1146353fa 100644 --- a/modules/datum/include/dap_chain_datum_tx_voting.h +++ b/modules/datum/include/dap_chain_datum_tx_voting.h @@ -66,6 +66,10 @@ typedef struct dap_chain_datum_tx_voting_params { bool vote_changing_allowed; } dap_chain_datum_tx_voting_params_t; +#ifdef __cplusplus +extern "C" { +#endif + dap_chain_datum_tx_voting_params_t *dap_chain_datum_tx_voting_parse_tsd(dap_chain_datum_tx_t* a_tx); void dap_chain_datum_tx_voting_params_delete(dap_chain_datum_tx_voting_params_t *a_params); @@ -84,3 +88,7 @@ json_object *dap_chain_datum_tx_item_voting_tsd_to_json(dap_chain_datum_tx_t* a_ dap_chain_tx_vote_t *dap_chain_datum_tx_item_vote_create(dap_chain_hash_fast_t *a_voting_hash, uint64_t *a_answer_idx); json_object *dap_chain_datum_tx_item_vote_to_json(dap_chain_tx_vote_t *a_vote); char *dap_chain_datum_tx_voting_get_answer_text_by_idx(dap_chain_datum_tx_t *a_tx, uint64_t a_idx); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/ledger/include/dap_chain_ledger.h b/modules/ledger/include/dap_chain_ledger.h index 0814bb03189efb30e8821db20ec5e4091deb5bf1..4ebf36ffd58529b49fa66e9d1a9b37af3f762392 100644 --- a/modules/ledger/include/dap_chain_ledger.h +++ b/modules/ledger/include/dap_chain_ledger.h @@ -134,67 +134,6 @@ typedef enum dap_ledger_check_error { DAP_LEDGER_TX_CHECK_MULTIPLE_OUTS_TO_OTHER_NET } dap_ledger_check_error_t; -DAP_STATIC_INLINE const char *dap_ledger_check_error_str(dap_ledger_check_error_t a_error) -{ - switch (a_error) { - case DAP_LEDGER_CHECK_OK: return "No error"; - case DAP_LEDGER_CHECK_INVALID_ARGS: return "Invalid arguments"; - case DAP_LEDGER_CHECK_INVALID_SIZE: return "Incorrect size of datum or datum's content"; - case DAP_LEDGER_CHECK_ALREADY_CACHED: return "Datum already cached in ledger"; - case DAP_LEDGER_CHECK_PARSE_ERROR: return "Incorrect datum interrnal structure, can't pasre it"; - case DAP_LEDGER_CHECK_APPLY_ERROR: return "Datum can't be applied"; - case DAP_LEDGER_CHECK_NOT_ENOUGH_MEMORY: return "Not enough memory"; - case DAP_LEDGER_CHECK_INTEGER_OVERFLOW: return "Incorrect datum values relationship lead to integer overflow, can't process"; - case DAP_LEDGER_CHECK_NOT_ENOUGH_VALID_SIGNS: return "No enough valid signatures in datum"; - case DAP_LEDGER_CHECK_TICKER_NOT_FOUND: return "Can't find specified token ticker"; - case DAP_LEDGER_CHECK_INVALID_TICKER: return "Specified token ticker is invalid"; - case DAP_LEDGER_CHECK_ZERO_VALUE: return "Unacceptable zero value"; - case DAP_LEDGER_CHECK_ADDR_FORBIDDEN: return "Specified address is forbidden"; - case DAP_LEDGER_CHECK_WHITELISTED: return "Datum is in hard accept list"; - /* TX check return codes */ - case DAP_LEDGER_TX_CHECK_IN_EMS_ALREADY_USED: return "Double spend attempt for emission"; - case DAP_LEDGER_TX_CHECK_STAKE_LOCK_IN_EMS_ALREADY_USED: return "Double spend attempt for stake-lock emission"; - case DAP_LEDGER_TX_CHECK_EMISSION_NOT_FOUND: return "Specified emission not found in ledger"; - case DAP_LEDGER_TX_CHECK_TX_NO_VALID_INPUTS: return "Transaction has no valid inputs, can't process"; - case DAP_LEDGER_TX_CHECK_STAKE_LOCK_INVALID_TOKEN: return "Incorrect deledated token specified in stake-lock transaction"; - case DAP_LEDGER_TX_CHECK_STAKE_LOCK_NO_OUT_COND_FOR_IN_EMS: return "Condtional output for stake-lock emission not found"; - case DAP_LEDGER_TX_CHECK_NO_OUT_EXT_FOR_GIRDLED_IN_EMS: return "Tokenized output for stake-lock girdled emission not found"; - case DAP_LEDGER_TX_CHECK_NO_OUT_ITEMS_FOR_BASE_TX: return "Output for basic transaction not found"; - case DAP_LEDGER_TX_CHECK_STAKE_LOCK_UNEXPECTED_VALUE: return "Incorrect value for stake-lock emission, should be stake * rate"; - case DAP_LEDGER_TX_CHECK_STAKE_LOCK_OTHER_TICKER_EXPECTED: return "Incorrect token ticker for stake-lock emission"; - case DAP_LEDGER_TX_CHECK_OUT_ITEM_ALREADY_USED: return "Double spend attempt for transaction output"; - case DAP_LEDGER_TX_CHECK_PREV_TX_NOT_FOUND: return "No previous transaction found"; - case DAP_LEDGER_TX_CHECK_PREV_OUT_ITEM_NOT_FOUND: return "Specified output number not found in previous transaction"; - case DAP_LEDGER_TX_CHECK_PREV_OUT_ITEM_MISSTYPED: return "Previuos transaction output has unknown type, possible ledger corruption"; - case DAP_LEDGER_TX_CHECK_PKEY_HASHES_DONT_MATCH: return "Trying to spend transaction output from wrongful wallet"; - case DAP_LEDGER_TX_CHECK_PREV_OUT_ALREADY_USED_IN_CURRENT_TX: return "Double spend attempt within single transaction"; - case DAP_LEDGER_TX_CHECK_NO_VERIFICATOR_SET: return "No verificator found for specified conditional ipnput"; - case DAP_LEDGER_TX_CHECK_VERIFICATOR_CHECK_FAILURE: return "Verificator check return error"; - case DAP_LEDGER_TX_CHECK_SUM_INS_NOT_EQUAL_SUM_OUTS: return "Sum of transaction outputs isn't equal to sum of its inputs"; - case DAP_LEDGER_TX_CHECK_REWARD_ITEM_ALREADY_USED: return "Double spend attempt for reward"; - case DAP_LEDGER_TX_CHECK_REWARD_ITEM_ILLEGAL: return "Wrongful reward item in transaction"; - case DAP_LEDGER_TX_CHECK_NO_MAIN_TICKER: return "Can't calculate main ticker found for transaction"; - case DAP_LEDGER_TX_CHECK_UNEXPECTED_TOKENIZED_OUT: return "Tokenized out is forbidden for single-channel trandactions"; - case DAP_LEDGER_TX_CHECK_NOT_ENOUGH_FEE: return "Not enough network fee for transaction processing"; - case DAP_LEDGER_TX_CHECK_NOT_ENOUGH_TAX: return "Not enough sovereign tax provided with current transaction"; - case DAP_LEDGER_TX_CHECK_FOR_REMOVING_CANT_FIND_TX: return "Can't find tx in ledger for removing."; - case DAP_LEDGER_TX_CHECK_MULTIPLE_OUTS_TO_OTHER_NET: return "The transaction was rejected because it contains multiple outputs to other networks."; - /* Emisssion check return codes */ - case DAP_LEDGER_EMISSION_CHECK_VALUE_EXCEEDS_CURRENT_SUPPLY: return "Value of emission execeeds current token supply"; - case DAP_LEDGER_EMISSION_CHECK_LEGACY_FORBIDDEN: return "Legacy type of emissions are present for old chains comliance only"; - /* Token declaration/update return codes */ - case DAP_LEDGER_TOKEN_ADD_CHECK_NOT_ENOUGH_UNIQUE_SIGNS: return "Not all token signs is unique"; - case DAP_LEDGER_TOKEN_ADD_CHECK_LEGACY_FORBIDDEN: return "Legacy type of tokens are present for old chains comliance only"; - case DAP_LEDGER_TOKEN_ADD_CHECK_TSD_INVALID_SUPPLY: return "Specified supply must be greater than current one"; - case DAP_LEDGER_TOKEN_ADD_CHECK_TSD_INVALID_ADDR: return "Specified address has invalid format"; - case DAP_LEDGER_TOKEN_ADD_CHECK_TSD_ADDR_MISMATCH: return "Specified address can't be processed cause double (for adding) or absent (for removing)"; - case DAP_LEDGER_TOKEN_ADD_CHECK_TSD_PKEY_MISMATCH: return "Specified public key or its hash can't be processed cause double (for adding) or absent (for removing)"; - case DAP_LEDGER_TOKEN_ADD_CHECK_TSD_FORBIDDEN: return "Specified TSD section type is not allowed in datum token of specified type"; - case DAP_LEDGER_TOKEN_ADD_CHECK_TSD_OTHER_TICKER_EXPECTED: return "Incorrect token ticker for delegated token"; - default: return "Unknown error"; - } -} - typedef enum dap_ledger_notify_opcodes { DAP_LEDGER_NOTIFY_OPCODE_ADDED = 'a', // 0x61 DAP_LEDGER_NOTIFY_OPCODE_DELETED = 'd', // 0x64 @@ -236,21 +175,6 @@ typedef struct dap_ledger_datum_iter_data { dap_chain_srv_uid_t uid; } dap_ledger_datum_iter_data_t; -typedef int (*dap_ledger_cond_in_verify_callback_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx_in, dap_hash_fast_t *a_tx_in_hash, dap_chain_tx_out_cond_t *a_prev_cond, bool a_owner); -typedef int (*dap_ledger_cond_out_verify_callback_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx_out, dap_hash_fast_t *a_tx_out_hash, dap_chain_tx_out_cond_t *a_cond); -typedef void (*dap_ledger_cond_in_add_callback_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx_in, dap_hash_fast_t *a_tx_in_hash, dap_chain_tx_out_cond_t *a_prev_cond); -typedef void (*dap_ledger_cond_out_add_callback_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx_out, dap_hash_fast_t *a_tx_out_hash, dap_chain_tx_out_cond_t *a_cond); -typedef void (*dap_ledger_cond_in_delete_callback_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx_in, dap_hash_fast_t *a_tx_in_hash, dap_chain_tx_out_cond_t *a_prev_cond); -typedef void (*dap_ledger_cond_out_delete_callback_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx_out, dap_hash_fast_t *a_tx_out_hash, dap_chain_tx_out_cond_t *a_cond); -typedef void (* dap_ledger_tx_add_notify_t)(void *a_arg, dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_ledger_notify_opcodes_t a_opcode); -typedef void (* dap_ledger_bridged_tx_notify_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_hash_fast_t *a_tx_hash, void *a_arg, dap_ledger_notify_opcodes_t a_opcode); -typedef bool (*dap_ledger_cache_tx_check_callback_t)(dap_ledger_t *a_ledger, dap_hash_fast_t *a_tx_hash); -typedef int (*dap_ledger_voting_callback_t)(dap_ledger_t *a_ledger, dap_chain_tx_item_type_t a_type, dap_chain_datum_tx_t *a_tx, dap_hash_fast_t *a_tx_hash, bool a_apply); -typedef bool (*dap_ledger_voting_delete_callback_t)(dap_ledger_t *a_ledger, dap_chain_tx_item_type_t a_type, dap_chain_datum_tx_t *a_tx, dap_hash_fast_t *a_tx_hash); -typedef dap_time_t (*dap_ledger_voting_expire_callback_t)(dap_ledger_t *a_ledger, dap_hash_fast_t *a_voting_hash); -typedef bool (*dap_ledger_tag_check_callback_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_chain_datum_tx_item_groups_t *a_items_grp, dap_chain_tx_tag_action_type_t *a_action); -typedef bool (*dap_ledger_tax_callback_t)(dap_chain_net_id_t a_net_id, dap_hash_fast_t *a_signer_pkey_hash, dap_chain_addr_t *a_tax_addr, uint256_t *a_tax_value); - //Change this UUID to automatically reload ledger cache on next node startup #define DAP_LEDGER_CACHE_RELOAD_ONCE_UUID "0c92b759-a565-448f-b8bd-99103dacf7fc" @@ -285,9 +209,90 @@ typedef bool (*dap_ledger_tax_callback_t)(dap_chain_net_id_t a_net_id, dap_hash_ #define DAP_LEDGER_SPENT_TXS_STR "spent_txs" #define DAP_LEDGER_BALANCES_STR "balances" +#ifdef __cplusplus +extern "C" { +#endif + int dap_ledger_init(); void dap_ledger_deinit(); +DAP_STATIC_INLINE const char *dap_ledger_check_error_str(dap_ledger_check_error_t a_error) +{ + switch (a_error) { + case DAP_LEDGER_CHECK_OK: return "No error"; + case DAP_LEDGER_CHECK_INVALID_ARGS: return "Invalid arguments"; + case DAP_LEDGER_CHECK_INVALID_SIZE: return "Incorrect size of datum or datum's content"; + case DAP_LEDGER_CHECK_ALREADY_CACHED: return "Datum already cached in ledger"; + case DAP_LEDGER_CHECK_PARSE_ERROR: return "Incorrect datum interrnal structure, can't pasre it"; + case DAP_LEDGER_CHECK_APPLY_ERROR: return "Datum can't be applied"; + case DAP_LEDGER_CHECK_NOT_ENOUGH_MEMORY: return "Not enough memory"; + case DAP_LEDGER_CHECK_INTEGER_OVERFLOW: return "Incorrect datum values relationship lead to integer overflow, can't process"; + case DAP_LEDGER_CHECK_NOT_ENOUGH_VALID_SIGNS: return "No enough valid signatures in datum"; + case DAP_LEDGER_CHECK_TICKER_NOT_FOUND: return "Can't find specified token ticker"; + case DAP_LEDGER_CHECK_INVALID_TICKER: return "Specified token ticker is invalid"; + case DAP_LEDGER_CHECK_ZERO_VALUE: return "Unacceptable zero value"; + case DAP_LEDGER_CHECK_ADDR_FORBIDDEN: return "Specified address is forbidden"; + case DAP_LEDGER_CHECK_WHITELISTED: return "Datum is in hard accept list"; + /* TX check return codes */ + case DAP_LEDGER_TX_CHECK_IN_EMS_ALREADY_USED: return "Double spend attempt for emission"; + case DAP_LEDGER_TX_CHECK_STAKE_LOCK_IN_EMS_ALREADY_USED: return "Double spend attempt for stake-lock emission"; + case DAP_LEDGER_TX_CHECK_EMISSION_NOT_FOUND: return "Specified emission not found in ledger"; + case DAP_LEDGER_TX_CHECK_TX_NO_VALID_INPUTS: return "Transaction has no valid inputs, can't process"; + case DAP_LEDGER_TX_CHECK_STAKE_LOCK_INVALID_TOKEN: return "Incorrect deledated token specified in stake-lock transaction"; + case DAP_LEDGER_TX_CHECK_STAKE_LOCK_NO_OUT_COND_FOR_IN_EMS: return "Condtional output for stake-lock emission not found"; + case DAP_LEDGER_TX_CHECK_NO_OUT_EXT_FOR_GIRDLED_IN_EMS: return "Tokenized output for stake-lock girdled emission not found"; + case DAP_LEDGER_TX_CHECK_NO_OUT_ITEMS_FOR_BASE_TX: return "Output for basic transaction not found"; + case DAP_LEDGER_TX_CHECK_STAKE_LOCK_UNEXPECTED_VALUE: return "Incorrect value for stake-lock emission, should be stake * rate"; + case DAP_LEDGER_TX_CHECK_STAKE_LOCK_OTHER_TICKER_EXPECTED: return "Incorrect token ticker for stake-lock emission"; + case DAP_LEDGER_TX_CHECK_OUT_ITEM_ALREADY_USED: return "Double spend attempt for transaction output"; + case DAP_LEDGER_TX_CHECK_PREV_TX_NOT_FOUND: return "No previous transaction found"; + case DAP_LEDGER_TX_CHECK_PREV_OUT_ITEM_NOT_FOUND: return "Specified output number not found in previous transaction"; + case DAP_LEDGER_TX_CHECK_PREV_OUT_ITEM_MISSTYPED: return "Previuos transaction output has unknown type, possible ledger corruption"; + case DAP_LEDGER_TX_CHECK_PKEY_HASHES_DONT_MATCH: return "Trying to spend transaction output from wrongful wallet"; + case DAP_LEDGER_TX_CHECK_PREV_OUT_ALREADY_USED_IN_CURRENT_TX: return "Double spend attempt within single transaction"; + case DAP_LEDGER_TX_CHECK_NO_VERIFICATOR_SET: return "No verificator found for specified conditional ipnput"; + case DAP_LEDGER_TX_CHECK_VERIFICATOR_CHECK_FAILURE: return "Verificator check return error"; + case DAP_LEDGER_TX_CHECK_SUM_INS_NOT_EQUAL_SUM_OUTS: return "Sum of transaction outputs isn't equal to sum of its inputs"; + case DAP_LEDGER_TX_CHECK_REWARD_ITEM_ALREADY_USED: return "Double spend attempt for reward"; + case DAP_LEDGER_TX_CHECK_REWARD_ITEM_ILLEGAL: return "Wrongful reward item in transaction"; + case DAP_LEDGER_TX_CHECK_NO_MAIN_TICKER: return "Can't calculate main ticker found for transaction"; + case DAP_LEDGER_TX_CHECK_UNEXPECTED_TOKENIZED_OUT: return "Tokenized out is forbidden for single-channel trandactions"; + case DAP_LEDGER_TX_CHECK_NOT_ENOUGH_FEE: return "Not enough network fee for transaction processing"; + case DAP_LEDGER_TX_CHECK_NOT_ENOUGH_TAX: return "Not enough sovereign tax provided with current transaction"; + case DAP_LEDGER_TX_CHECK_FOR_REMOVING_CANT_FIND_TX: return "Can't find tx in ledger for removing."; + case DAP_LEDGER_TX_CHECK_MULTIPLE_OUTS_TO_OTHER_NET: return "The transaction was rejected because it contains multiple outputs to other networks."; + /* Emisssion check return codes */ + case DAP_LEDGER_EMISSION_CHECK_VALUE_EXCEEDS_CURRENT_SUPPLY: return "Value of emission execeeds current token supply"; + case DAP_LEDGER_EMISSION_CHECK_LEGACY_FORBIDDEN: return "Legacy type of emissions are present for old chains comliance only"; + /* Token declaration/update return codes */ + case DAP_LEDGER_TOKEN_ADD_CHECK_NOT_ENOUGH_UNIQUE_SIGNS: return "Not all token signs is unique"; + case DAP_LEDGER_TOKEN_ADD_CHECK_LEGACY_FORBIDDEN: return "Legacy type of tokens are present for old chains comliance only"; + case DAP_LEDGER_TOKEN_ADD_CHECK_TSD_INVALID_SUPPLY: return "Specified supply must be greater than current one"; + case DAP_LEDGER_TOKEN_ADD_CHECK_TSD_INVALID_ADDR: return "Specified address has invalid format"; + case DAP_LEDGER_TOKEN_ADD_CHECK_TSD_ADDR_MISMATCH: return "Specified address can't be processed cause double (for adding) or absent (for removing)"; + case DAP_LEDGER_TOKEN_ADD_CHECK_TSD_PKEY_MISMATCH: return "Specified public key or its hash can't be processed cause double (for adding) or absent (for removing)"; + case DAP_LEDGER_TOKEN_ADD_CHECK_TSD_FORBIDDEN: return "Specified TSD section type is not allowed in datum token of specified type"; + case DAP_LEDGER_TOKEN_ADD_CHECK_TSD_OTHER_TICKER_EXPECTED: return "Incorrect token ticker for delegated token"; + default: return "Unknown error"; + } +} + +typedef int (*dap_ledger_cond_in_verify_callback_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx_in, dap_hash_fast_t *a_tx_in_hash, dap_chain_tx_out_cond_t *a_prev_cond, bool a_owner); +typedef int (*dap_ledger_cond_out_verify_callback_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx_out, dap_hash_fast_t *a_tx_out_hash, dap_chain_tx_out_cond_t *a_cond); +typedef void (*dap_ledger_cond_in_add_callback_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx_in, dap_hash_fast_t *a_tx_in_hash, dap_chain_tx_out_cond_t *a_prev_cond); +typedef void (*dap_ledger_cond_out_add_callback_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx_out, dap_hash_fast_t *a_tx_out_hash, dap_chain_tx_out_cond_t *a_cond); +typedef void (*dap_ledger_cond_in_delete_callback_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx_in, dap_hash_fast_t *a_tx_in_hash, dap_chain_tx_out_cond_t *a_prev_cond); +typedef void (*dap_ledger_cond_out_delete_callback_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx_out, dap_hash_fast_t *a_tx_out_hash, dap_chain_tx_out_cond_t *a_cond); +typedef void (* dap_ledger_tx_add_notify_t)(void *a_arg, dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_ledger_notify_opcodes_t a_opcode); +typedef void (* dap_ledger_bridged_tx_notify_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_hash_fast_t *a_tx_hash, void *a_arg, dap_ledger_notify_opcodes_t a_opcode); +typedef bool (*dap_ledger_cache_tx_check_callback_t)(dap_ledger_t *a_ledger, dap_hash_fast_t *a_tx_hash); +typedef int (*dap_ledger_voting_callback_t)(dap_ledger_t *a_ledger, dap_chain_tx_item_type_t a_type, dap_chain_datum_tx_t *a_tx, dap_hash_fast_t *a_tx_hash, bool a_apply); +typedef bool (*dap_ledger_voting_delete_callback_t)(dap_ledger_t *a_ledger, dap_chain_tx_item_type_t a_type, dap_chain_datum_tx_t *a_tx, dap_hash_fast_t *a_tx_hash); +typedef dap_time_t (*dap_ledger_voting_expire_callback_t)(dap_ledger_t *a_ledger, dap_hash_fast_t *a_voting_hash); +typedef bool (*dap_ledger_tag_check_callback_t)(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_chain_datum_tx_item_groups_t *a_items_grp, dap_chain_tx_tag_action_type_t *a_action); +typedef bool (*dap_ledger_tax_callback_t)(dap_chain_net_id_t a_net_id, dap_hash_fast_t *a_signer_pkey_hash, dap_chain_addr_t *a_tax_addr, uint256_t *a_tax_value); + + dap_ledger_t *dap_ledger_create(dap_chain_net_t *a_net, uint16_t a_flags); // Clear & remove dap_ledger_t structure @@ -509,3 +514,7 @@ dap_ledger_hardfork_anchors_t *dap_ledger_anchors_aggregate(dap_ledger_t *a_ledg uint256_t dap_ledger_coin_get_uncoloured_value(dap_ledger_t *a_ledger, dap_hash_fast_t *a_voting_hash, dap_hash_fast_t *a_tx_prev_hash, int a_out_idx); void dap_ledger_tx_clear_colour(dap_ledger_t *a_ledger, dap_hash_fast_t *a_tx_hash); dap_pkey_t *dap_ledger_find_pkey_by_hash(dap_ledger_t *a_ledger, dap_chain_hash_fast_t *a_pkey_hash); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c index 020fbf15e067e96dcf352d8cc43082b1736c4239..2b0c0524848de65ebaee8f4b9db52a0c0644a050 100644 --- a/modules/mempool/dap_chain_mempool.c +++ b/modules/mempool/dap_chain_mempool.c @@ -884,11 +884,12 @@ char* dap_chain_mempool_tx_create_cond_input(dap_chain_net_t *a_net, dap_chain_h uint256_t l_new_val = {}; uint256_t l_value_cond = l_out_cond->header.value; SUBTRACT_256_256(l_out_cond->header.value, l_value_send, &l_new_val); - //if (!!IS_ZERO_256(l_new_val)){ - l_out_cond->header.value = l_new_val; // Use old conditinal output to form the new one - dap_chain_datum_tx_add_item(&l_tx, (const uint8_t *)l_out_cond); - l_out_cond->header.value = l_value_cond; // Restore original value - //} + if (!IS_ZERO_256(l_new_val)){ + dap_chain_tx_out_cond_t *l_new_out_cond = DAP_DUP_SIZE(l_out_cond, sizeof(dap_chain_tx_out_cond_t) + l_out_cond->tsd_size); + l_new_out_cond->header.value = l_new_val; + dap_chain_datum_tx_add_item(&l_tx, (const uint8_t *)l_new_out_cond); + DAP_DELETE(l_new_out_cond); + } // add 'sign' item if(dap_chain_datum_tx_add_sign_item(&l_tx, a_key_tx_sign) != 1) { dap_chain_datum_tx_delete(l_tx); diff --git a/modules/net-srv/include/dap_chain_net_srv.h b/modules/net-srv/include/dap_chain_net_srv.h index 20a15570af43a696ae6ca30d6e943a06660dcc84..96419afec90657805df3a9157c285e2df89c8dba 100755 --- a/modules/net-srv/include/dap_chain_net_srv.h +++ b/modules/net-srv/include/dap_chain_net_srv.h @@ -94,14 +94,6 @@ typedef struct dap_chain_net_srv_client_remote { struct dap_chain_net_srv_client_remote *next; } dap_chain_net_srv_client_remote_t; -// Common service callback -typedef int (*dap_chain_net_srv_callback_data_t)(dap_chain_net_srv_t *a_srv, uint32_t a_usage_id, dap_chain_net_srv_client_remote_t *a_srv_client, const void *a_custom_data, size_t a_custom_data_size); -// Custom service callback -typedef void * (*dap_chain_net_srv_callback_custom_data_t)(dap_chain_net_srv_t *a_srv, dap_chain_net_srv_usage_t *a_usage, const void *a_custom_data, size_t a_sustom_data_size, size_t *a_out_data_size);\ -// Store limits sevice callbacks -typedef dap_chain_net_srv_ch_remain_service_store_t * (*dap_chain_net_srv_callback_get_remain_service_t)(dap_chain_net_srv_t *a_srv, uint32_t a_usage_id, dap_chain_net_srv_client_remote_t *a_srv_client); -typedef int (*dap_chain_net_srv_callback_save_remain_service_t)(dap_chain_net_srv_t *a_srv, uint32_t a_usage_id, dap_chain_net_srv_client_remote_t *a_srv_client); - typedef struct dap_chain_net_srv_banlist_item { dap_chain_hash_fast_t client_pkey_hash; pthread_mutex_t *ht_mutex; @@ -109,6 +101,14 @@ typedef struct dap_chain_net_srv_banlist_item { UT_hash_handle hh; } dap_chain_net_srv_banlist_item_t; + +// Common service callback +typedef int (*dap_chain_net_srv_callback_data_t)(dap_chain_net_srv_t *a_srv, uint32_t a_usage_id, dap_chain_net_srv_client_remote_t *a_srv_client, const void *a_custom_data, size_t a_custom_data_size); +// Custom service callback +typedef void * (*dap_chain_net_srv_callback_custom_data_t)(dap_chain_net_srv_t *a_srv, dap_chain_net_srv_usage_t *a_usage, const void *a_custom_data, size_t a_sustom_data_size, size_t *a_out_data_size);\ +// Store limits sevice callbacks +typedef dap_chain_net_srv_ch_remain_service_store_t * (*dap_chain_net_srv_callback_get_remain_service_t)(dap_chain_net_srv_t *a_srv, uint32_t a_usage_id, dap_chain_net_srv_client_remote_t *a_srv_client); +typedef int (*dap_chain_net_srv_callback_save_remain_service_t)(dap_chain_net_srv_t *a_srv, uint32_t a_usage_id, dap_chain_net_srv_client_remote_t *a_srv_client); typedef struct dap_chain_net_srv_callbacks { // Request for usage dap_chain_net_srv_callback_data_t requested; @@ -154,6 +154,11 @@ typedef struct dap_chain_net_srv { void *_inheritor; } dap_chain_net_srv_t; +#ifdef __cplusplus +extern "C" { +#endif + + int dap_chain_net_srv_init(); void dap_chain_net_srv_deinit(void); @@ -200,3 +205,7 @@ DAP_STATIC_INLINE bool dap_chain_net_srv_uid_compare_scalar(const dap_chain_srv_ { return a_uid1.uint64 == a_id; } + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/net-srv/include/dap_chain_net_srv_ch.h b/modules/net-srv/include/dap_chain_net_srv_ch.h index 1cf05ebd445f9eaf2b253f4071b6af326178d627..f422c4e1aa3ee8c38724738e6e0bd0b945309e8b 100644 --- a/modules/net-srv/include/dap_chain_net_srv_ch.h +++ b/modules/net-srv/include/dap_chain_net_srv_ch.h @@ -45,7 +45,16 @@ typedef struct dap_chain_net_srv_ch { #define DAP_CHAIN_NET_SRV_CH(a) ((dap_chain_net_srv_ch_t *) ((a)->internal) ) #define DAP_CHAIN_NET_SRV_CH_ID 'R' +#ifdef __cplusplus +extern "C" { +#endif + int dap_chain_net_srv_ch_init(); int dap_chain_net_srv_ch_grace_control(dap_chain_net_srv_t *a_net_srv, dap_hash_fast_t *a_tx_hash); char *dap_chain_net_srv_ch_create_statistic_report(); + + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/net-srv/include/dap_chain_net_srv_ch_pkt.h b/modules/net-srv/include/dap_chain_net_srv_ch_pkt.h index c56925508994fab6cd65f041d49225883d93f617..9ae7cab0a04627fbf29a3b8376032cb2e1642526 100644 --- a/modules/net-srv/include/dap_chain_net_srv_ch_pkt.h +++ b/modules/net-srv/include/dap_chain_net_srv_ch_pkt.h @@ -144,6 +144,9 @@ typedef struct dap_chain_net_srv_ch_pkt_test { uint8_t data[]; } DAP_ALIGN_PACKED dap_chain_net_srv_ch_pkt_test_t; +#ifdef __cplusplus +extern "C" { +#endif size_t dap_chain_net_srv_ch_pkt_data_write(dap_stream_ch_t *a_ch, dap_chain_srv_uid_t a_srv_uid, uint32_t a_usage_id , const void * a_data, size_t a_data_size); @@ -153,3 +156,6 @@ DAP_PRINTF_ATTR(4, 5) size_t dap_chain_net_srv_ch_pkt_data_write_f(dap_stream_ch uint32_t a_usage_id, const char *a_str, ...); +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/net-srv/include/dap_chain_net_srv_client.h b/modules/net-srv/include/dap_chain_net_srv_client.h index 8fafbdf1e23c12a6155628b412e311d80887f24e..22256e21263108419c250779d934490af3d782e6 100644 --- a/modules/net-srv/include/dap_chain_net_srv_client.h +++ b/modules/net-srv/include/dap_chain_net_srv_client.h @@ -61,6 +61,10 @@ typedef struct dap_chain_net_srv_client { void *_inheritor; } dap_chain_net_srv_client_t; +#ifdef __cplusplus +extern "C" { +#endif + dap_chain_net_srv_client_t *dap_chain_net_srv_client_create_n_connect(dap_chain_net_t *a_net, char *a_addr, uint16_t a_port, dap_chain_net_srv_client_callbacks_t *a_callbacks, void *a_callbacks_arg); @@ -68,3 +72,6 @@ dap_chain_net_srv_client_t *dap_chain_net_srv_client_create_n_connect(dap_chain_ void dap_chain_net_srv_client_close(dap_chain_net_srv_client_t *a_client); ssize_t dap_chain_net_srv_client_write(dap_chain_net_srv_client_t *a_client, uint8_t a_type, void *a_pkt_data, size_t a_pkt_data_size); +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/net-srv/include/dap_chain_net_srv_order.h b/modules/net-srv/include/dap_chain_net_srv_order.h index 5c5995896853c7131ce4c2ae33ff7c62c503fe69..0a30d212e3ea01eff2b3a4c2bef14fd0e99b3eb3 100644 --- a/modules/net-srv/include/dap_chain_net_srv_order.h +++ b/modules/net-srv/include/dap_chain_net_srv_order.h @@ -48,6 +48,10 @@ typedef struct dap_chain_net_srv_order { uint8_t ext_n_sign[]; } DAP_ALIGN_PACKED dap_chain_net_srv_order_t; +#ifdef __cplusplus +extern "C" { +#endif + // Init/deinit should be call only if private int dap_chain_net_srv_order_init(); void dap_chain_net_srv_order_deinit(void); @@ -157,3 +161,7 @@ DAP_STATIC_INLINE char *dap_chain_net_srv_order_get_common_group(dap_chain_net_t { return a_net ? dap_strdup_printf("%s.orders", a_net->pub.gdb_groups_prefix) : NULL; } + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/net-srv/include/dap_chain_net_srv_stream_session.h b/modules/net-srv/include/dap_chain_net_srv_stream_session.h index 6f3f460647056cdc9d35c36b9f9167b7487b84b8..8ab3842e644a1f4785fad46fe243f7f86db74836 100644 --- a/modules/net-srv/include/dap_chain_net_srv_stream_session.h +++ b/modules/net-srv/include/dap_chain_net_srv_stream_session.h @@ -98,6 +98,11 @@ typedef struct dap_chain_net_srv_stream_session { #define DAP_CHAIN_NET_SRV_STREAM_SESSION(a) ((dap_chain_net_srv_stream_session_t *) (a)->_inheritor ) + +#ifdef __cplusplus +extern "C" { +#endif + dap_chain_net_srv_stream_session_t * dap_chain_net_srv_stream_session_create( dap_stream_session_t * a_session); void dap_chain_net_srv_stream_session_delete( dap_stream_session_t * a_session); dap_chain_net_srv_usage_t* dap_chain_net_srv_usage_add (dap_chain_net_srv_stream_session_t * a_srv_session, @@ -105,3 +110,7 @@ dap_chain_net_srv_usage_t* dap_chain_net_srv_usage_add (dap_chain_net_srv_stream void dap_chain_net_srv_usage_delete (dap_chain_net_srv_stream_session_t * a_srv_session); dap_chain_net_srv_usage_t* dap_chain_net_srv_usage_find_unsafe (dap_chain_net_srv_stream_session_t * a_srv_session, uint32_t a_usage_id); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/net/dap_chain_net_tx.c b/modules/net/dap_chain_net_tx.c index b153d5b86af6b78bf5e82bb1807e3ee41255d58d..26157f5c55a5212ad442b8e4924764da84031646 100644 --- a/modules/net/dap_chain_net_tx.c +++ b/modules/net/dap_chain_net_tx.c @@ -1204,68 +1204,46 @@ int dap_chain_net_tx_create_by_json(json_object *a_tx_json, dap_chain_net_t *a_n } } break; - case TX_ITEM_TYPE_SIG:{ - const char *l_sign_type_str = s_json_get_text(l_json_item_obj, "sig_type"); - if (l_sign_type_str) { - dap_sign_type_t l_sign_type = dap_sign_type_from_str(l_sign_type_str); - if (l_sign_type.type == SIG_TYPE_NULL) { - json_object *l_jobj_err = json_object_new_string("Can't define sign type"); - json_object_array_add(l_jobj_errors, l_jobj_err); - log_it(L_ERROR, "Json TX: Can't define sign type \"%s\"", l_sign_type_str); - break; - } - int64_t l_pkey_size, l_sig_size, l_hash_type = 0; - - s_json_get_int64(l_json_item_obj, "hash_type", &l_hash_type); - s_json_get_int64(l_json_item_obj, "pub_key_size", &l_pkey_size); - s_json_get_int64(l_json_item_obj, "sig_size", &l_sig_size); - debug_if(!l_pkey_size || !l_sig_size, L_WARNING, - "\"pub_key_size\" or \"sig_size\" not provided! Will be calculated automatically"); - - json_object *l_jobj_pub_key = json_object_object_get(l_json_item_obj, "pub_key_b64"), - *l_jobj_sign = json_object_object_get(l_json_item_obj, "sig_b64"); - if (!l_jobj_pub_key || !l_jobj_sign) { - json_object *l_jobj_err = json_object_new_string("Can't get base64-encoded sign or pkey!"); - json_object_array_add(l_jobj_errors, l_jobj_err); - log_it(L_ERROR, "Json TX: Can't get base64-encoded sign or pkey!"); - break; + case TX_ITEM_TYPE_SIG: { + json_object *l_jobj_sign = json_object_object_get(l_json_item_obj, "sig_b64"); + if (!l_jobj_sign) { + l_sign_list = dap_list_append(l_sign_list, l_json_item_obj); + break; + } + const char *l_sign_b64_str = json_object_get_string(l_json_item_obj); + if ( !l_sign_b64_str ) { + json_object_array_add(l_jobj_errors, json_object_new_string("Can't get base64-encoded sign")); + log_it(L_ERROR, "Json TX: Can't get base64-encoded sign!"); + break; + } + int64_t l_sign_size = 0, l_sign_b64_strlen = json_object_get_string_len(l_json_item_obj), + l_sign_decoded_size = DAP_ENC_BASE64_DECODE_SIZE(l_sign_b64_strlen); + if ( !s_json_get_int64(l_json_item_obj, "sig_size", &l_sign_size) ) + log_it(L_NOTICE, "Json TX: \"sig_size\" unspecified, will be calculated automatically"); + + dap_chain_tx_sig_t *l_tx_sig = DAP_NEW_Z_SIZE(dap_chain_tx_sig_t, sizeof(dap_chain_tx_sig_t) + l_sign_decoded_size); + *l_tx_sig = (dap_chain_tx_sig_t) { + .header = { + .type = TX_ITEM_TYPE_SIG, .version = 1, + .sig_size = dap_enc_base64_decode(l_sign_b64_str, l_sign_b64_strlen, l_tx_sig->sig, DAP_ENC_DATA_TYPE_B64_URLSAFE) } - const char *l_pub_key_str = json_object_get_string(l_jobj_pub_key), - *l_sign_str = json_object_get_string(l_jobj_sign); - int64_t l_pkey_decoded_size = DAP_ENC_BASE64_DECODE_SIZE(strlen(l_pub_key_str)), - l_sign_decoded_size = DAP_ENC_BASE64_DECODE_SIZE(strlen(l_sign_str)); - - dap_sign_t *l_sign = DAP_NEW_SIZE(dap_sign_t, sizeof(dap_sign_t) + l_pkey_decoded_size + l_sign_decoded_size); - *l_sign = (dap_sign_t) { - .header.type = l_sign_type, - .header.hash_type = (uint8_t)l_hash_type, - }; - l_pkey_decoded_size = dap_enc_base64_decode(l_pub_key_str, strlen(l_pub_key_str), - l_sign->pkey_n_sign, DAP_ENC_DATA_TYPE_B64_URLSAFE); - debug_if(l_pkey_size != l_pkey_decoded_size, L_ERROR, "Json TX: pkey size mismatch, %zu != %zu", - l_pkey_size, l_pkey_decoded_size); - - l_sign_decoded_size = dap_enc_base64_decode(l_sign_str, strlen(l_sign_str), - l_sign->pkey_n_sign + l_pkey_decoded_size, DAP_ENC_DATA_TYPE_B64_URLSAFE); - debug_if(l_sig_size != l_sign_decoded_size, L_ERROR, "Json TX: sign size mismatch, %zu != %zu", - l_sig_size, l_sign_decoded_size); - - l_sign->header.sign_size = l_sign_decoded_size; - l_sign->header.sign_pkey_size = l_pkey_decoded_size; - size_t l_sign_full_size = dap_sign_get_size(l_sign); - - dap_chain_tx_sig_t *l_tx_sig = DAP_NEW_Z_SIZE(dap_chain_tx_sig_t, sizeof(dap_chain_tx_sig_t) + l_sign_full_size); - l_tx_sig->header.type = TX_ITEM_TYPE_SIG; - l_tx_sig->header.version = 1; - l_tx_sig->header.sig_size = (uint32_t)l_sign_full_size; - memcpy(l_tx_sig->sig, l_sign, l_sign_full_size); - l_item = (const uint8_t*)l_tx_sig; - DAP_DELETE(l_sign); + }; + + debug_if(l_sign_size && l_tx_sig->header.sig_size != l_sign_size, L_ERROR, + "Json TX: sign size mismatch, %zu != %u!", l_sign_size, l_tx_sig->header.sig_size); + /* But who cares?... */ + size_t l_tx_size = dap_chain_datum_tx_get_size(l_tx), l_tx_items_size = l_tx->header.tx_items_size; + l_tx->header.tx_items_size = 0; + if ( dap_sign_verify_all((dap_sign_t*)l_tx_sig->sig, l_tx_sig->header.sig_size, (byte_t*)l_tx, l_tx_size) ) { + json_object_array_add(l_jobj_errors, json_object_new_string("Sign verification failed!")); + log_it(L_ERROR, "Json TX: sign verification failed!"); break; - } else - l_sign_list = dap_list_append(l_sign_list,l_json_item_obj); - } - break; + // TODO: delete the datum and return + } else { + l_tx->header.tx_items_size = l_tx_items_size; + l_item = (const uint8_t*)l_tx_sig; + } + } break; case TX_ITEM_TYPE_RECEIPT: { dap_chain_srv_uid_t l_srv_uid; uint64_t l_srv_id_ui64 = 0; @@ -1584,23 +1562,13 @@ int dap_chain_net_tx_to_json(dap_chain_datum_tx_t *a_tx, json_object *a_out_json } break; case TX_ITEM_TYPE_SIG: { dap_sign_t *l_sign = dap_chain_datum_tx_item_sign_get_sig((dap_chain_tx_sig_t*)item); - json_object_object_add(json_obj_item,"type", json_object_new_string("sign")); - dap_chain_hash_fast_t l_hash_pkey; - json_object_object_add(json_obj_item,"sig_type",json_object_new_string(dap_sign_type_to_str(l_sign->header.type))); - json_object_object_add(json_obj_item,"pub_key_size",json_object_new_uint64(l_sign->header.sign_pkey_size)); - json_object_object_add(json_obj_item,"sig_size",json_object_new_uint64(l_sign->header.sign_size)); - json_object_object_add(json_obj_item,"hash_type",json_object_new_uint64(l_sign->header.hash_type)); - - char l_pkey_base64[DAP_ENC_BASE64_ENCODE_SIZE(l_sign->header.sign_pkey_size) + 1]; - size_t l_pkey_base64_size = dap_enc_base64_encode(l_sign->pkey_n_sign, l_sign->header.sign_pkey_size, l_pkey_base64, DAP_ENC_DATA_TYPE_B64_URLSAFE); - l_pkey_base64[l_pkey_base64_size] = '\0'; - json_object_object_add(json_obj_item,"pub_key_b64", json_object_new_string(l_pkey_base64)); - - char l_sign_base64[DAP_ENC_BASE64_ENCODE_SIZE(l_sign->header.sign_size) + 1]; - size_t l_sign_base64_size = dap_enc_base64_encode(l_sign->pkey_n_sign + l_sign->header.sign_pkey_size, l_sign->header.sign_size, l_sign_base64, DAP_ENC_DATA_TYPE_B64_URLSAFE); - l_sign_base64[l_sign_base64_size] = '\0'; - json_object_object_add(json_obj_item,"sig_b64", json_object_new_string(l_sign_base64)); + char *l_sign_b64 = DAP_NEW_Z_SIZE(char, DAP_ENC_BASE64_ENCODE_SIZE(dap_sign_get_size(l_sign)) + 1); + size_t l_sign_size = dap_sign_get_size(l_sign); + dap_enc_base64_encode(l_sign, l_sign_size, l_sign_b64, DAP_ENC_DATA_TYPE_B64_URLSAFE); + json_object_object_add(json_obj_item, "type", json_object_new_string("sign")); + json_object_object_add(json_obj_item, "sig_size", json_object_new_uint64(l_sign_size)); + json_object_object_add(json_obj_item, "sig_b64", json_object_new_string(l_sign_b64)); } break; case TX_ITEM_TYPE_TSD: { json_object_object_add(json_obj_item,"type", json_object_new_string("data")); diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h index 9cd99062a7e2ef74a0f84cbd215686b57781ed08..1a0b3594fc7f1e6e65981e76d7e5786c13e5db7c 100644 --- a/modules/net/include/dap_chain_net.h +++ b/modules/net/include/dap_chain_net.h @@ -76,6 +76,38 @@ typedef struct dap_chain_net { uint8_t pvt[]; } dap_chain_net_t; +enum dap_chain_net_json_rpc_error_list{ + DAP_CHAIN_NET_JSON_RPC_OK, + DAP_CHAIN_NET_JSON_RPC_INVALID_PARAMETER_HASH = DAP_JSON_RPC_ERR_CODE_METHOD_ERR_START, + DAP_CHAIN_NET_JSON_RPC_CAN_NOT_PARAMETER_NET_REQUIRE, + DAP_CHAIN_NET_JSON_RPC_WRONG_NET, + DAP_CHAIN_NET_JSON_RPC_MANY_ARGUMENT_FOR_COMMAND_NET_LIST, + DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETER_COMMAND_STATS, + DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETER_COMMAND_GO, + DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETER_ADDR_COMMAND_INFO, + DAP_CHAIN_NET_JSON_RPC_CANT_CALCULATE_HASH_FOR_ADDR, + DAP_CHAIN_NET_JSON_RPC_CAN_NOT_GET_CLUSTER, + DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETERS_COMMAND_LINK, + DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETERS_COMMAND_SYNC, + DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETERS_CA_ADD, + DAP_CHAIN_NET_JSON_RPC_CAN_NOT_FIND_CERT_CA_ADD, + DAP_CHAIN_NET_JSON_RPC_CAN_NOT_KEY_IN_CERT_CA_ADD, + DAP_CHAIN_NET_JSON_RPC_CAN_SERIALIZE_PUBLIC_KEY_CERT_CA_ADD, + DAP_CHAIN_NET_JSON_RPC_DATABASE_ACL_GROUP_NOT_DEFINED_FOR_THIS_NETWORK_CA_ADD, + DAP_CHAIN_NET_JSON_RPC_CAN_NOT_SAVE_PUBLIC_KEY_IN_DATABASE, + DAP_CHAIN_NET_JSON_RPC_DATABASE_ACL_GROUP_NOT_DEFINED_FOR_THIS_NETWORK_CA_LIST, + DAP_CHAIN_NET_JSON_RPC_UNKNOWN_HASH_CA_DEL, + DAP_CHAIN_NET_JSON_RPC_DATABASE_ACL_GROUP_NOT_DEFINED_FOR_THIS_NETWORK_CA_DEL, + DAP_CHAIN_NET_JSON_RPC_CAN_NOT_FIND_CERT_CA_DEL, + DAP_CHAIN_NET_JSON_RPC_INVALID_PARAMETER_COMMAND_CA, + DAP_CHAIN_NET_JSON_RPC_NO_POA_CERTS_FOUND_POA_CERTS, + DAP_CHAIN_NET_JSON_RPC_UNKNOWN_SUBCOMMANDS +}; + +#ifdef __cplusplus +extern "C" { +#endif + DAP_STATIC_INLINE int dap_chain_net_id_parse(const char *a_id_str, dap_chain_net_id_t *a_id) { uint64_t l_id; @@ -185,30 +217,7 @@ struct json_object *dap_chain_net_states_json_collect(dap_chain_net_t * l_net); struct json_object *dap_chain_net_list_json_collect(); struct json_object *dap_chain_nets_info_json_collect(); -enum dap_chain_net_json_rpc_error_list{ - DAP_CHAIN_NET_JSON_RPC_OK, - DAP_CHAIN_NET_JSON_RPC_INVALID_PARAMETER_HASH = DAP_JSON_RPC_ERR_CODE_METHOD_ERR_START, - DAP_CHAIN_NET_JSON_RPC_CAN_NOT_PARAMETER_NET_REQUIRE, - DAP_CHAIN_NET_JSON_RPC_WRONG_NET, - DAP_CHAIN_NET_JSON_RPC_MANY_ARGUMENT_FOR_COMMAND_NET_LIST, - DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETER_COMMAND_STATS, - DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETER_COMMAND_GO, - DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETER_ADDR_COMMAND_INFO, - DAP_CHAIN_NET_JSON_RPC_CANT_CALCULATE_HASH_FOR_ADDR, - DAP_CHAIN_NET_JSON_RPC_CAN_NOT_GET_CLUSTER, - DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETERS_COMMAND_LINK, - DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETERS_COMMAND_SYNC, - DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETERS_CA_ADD, - DAP_CHAIN_NET_JSON_RPC_CAN_NOT_FIND_CERT_CA_ADD, - DAP_CHAIN_NET_JSON_RPC_CAN_NOT_KEY_IN_CERT_CA_ADD, - DAP_CHAIN_NET_JSON_RPC_CAN_SERIALIZE_PUBLIC_KEY_CERT_CA_ADD, - DAP_CHAIN_NET_JSON_RPC_DATABASE_ACL_GROUP_NOT_DEFINED_FOR_THIS_NETWORK_CA_ADD, - DAP_CHAIN_NET_JSON_RPC_CAN_NOT_SAVE_PUBLIC_KEY_IN_DATABASE, - DAP_CHAIN_NET_JSON_RPC_DATABASE_ACL_GROUP_NOT_DEFINED_FOR_THIS_NETWORK_CA_LIST, - DAP_CHAIN_NET_JSON_RPC_UNKNOWN_HASH_CA_DEL, - DAP_CHAIN_NET_JSON_RPC_DATABASE_ACL_GROUP_NOT_DEFINED_FOR_THIS_NETWORK_CA_DEL, - DAP_CHAIN_NET_JSON_RPC_CAN_NOT_FIND_CERT_CA_DEL, - DAP_CHAIN_NET_JSON_RPC_INVALID_PARAMETER_COMMAND_CA, - DAP_CHAIN_NET_JSON_RPC_NO_POA_CERTS_FOUND_POA_CERTS, - DAP_CHAIN_NET_JSON_RPC_UNKNOWN_SUBCOMMANDS -}; + +#ifdef __cplusplus +} +#endif diff --git a/modules/net/include/dap_chain_net_balancer.h b/modules/net/include/dap_chain_net_balancer.h index cfef8633e966a985f37ad6c4ec512b00094f7521..a691a177ab910fe79291ab916bc327ca4a2b2846 100644 --- a/modules/net/include/dap_chain_net_balancer.h +++ b/modules/net/include/dap_chain_net_balancer.h @@ -47,6 +47,11 @@ typedef struct dap_balancer_link_request { dap_balancer_type_t type; } dap_balancer_link_request_t; + +#ifdef __cplusplus +extern "C" { +#endif + DAP_STATIC_INLINE const char *dap_chain_net_balancer_type_to_str(dap_balancer_type_t a_type) { switch (a_type) { @@ -62,3 +67,7 @@ dap_link_info_t *dap_chain_net_balancer_dns_issue_link(const char *a_net_name); int dap_chain_net_balancer_handshake(dap_chain_node_info_t *a_node_info, dap_chain_net_t * a_net); dap_string_t *dap_chain_net_balancer_get_node_str(dap_chain_net_t *a_net); void dap_chain_net_balancer_request(void *a_arg); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/net/include/dap_chain_net_ch.h b/modules/net/include/dap_chain_net_ch.h index 3a94ea70d81ffe5b25323929d78008bd3d4bb3ca..5f58e41ce14eb2592922984f7002778fd7fc0931 100644 --- a/modules/net/include/dap_chain_net_ch.h +++ b/modules/net/include/dap_chain_net_ch.h @@ -64,7 +64,16 @@ typedef struct dap_chain_ch_validator_test{ #define DAP_CHAIN_NET_CH_ID 'N' #define DAP_STREAM_CH_CHAIN_NET(a) ((dap_chain_net_ch_t *) ((a)->internal) ) + +#ifdef __cplusplus +extern "C" { +#endif + dap_chain_node_addr_t dap_chain_net_ch_from_session_data_extract_node_addr(uint32_t a_session_id); int dap_chain_net_ch_init(); void dap_chain_net_ch_deinit(); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/net/include/dap_chain_net_ch_pkt.h b/modules/net/include/dap_chain_net_ch_pkt.h index 2ec1d8900c672f6751da3bf7374d8184d2175fa9..8680802e992633449f56fd93a1f758e9c1f03a54 100644 --- a/modules/net/include/dap_chain_net_ch_pkt.h +++ b/modules/net/include/dap_chain_net_ch_pkt.h @@ -59,6 +59,13 @@ typedef struct dap_chain_net_ch_pkt{ uint8_t data[]; } DAP_ALIGN_PACKED dap_chain_net_ch_pkt_t; + +#ifdef __cplusplus +extern "C" { +#endif size_t dap_chain_net_ch_pkt_write(dap_stream_ch_t *a_ch, uint8_t a_type, dap_chain_net_id_t a_net_id, const void * a_data, size_t a_data_size); DAP_PRINTF_ATTR(4, 5) size_t dap_chain_net_ch_pkt_write_f(dap_stream_ch_t *a_ch, uint8_t a_type, dap_chain_net_id_t a_net_id, const char *a_str, ...); +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/net/include/dap_chain_net_node_list.h b/modules/net/include/dap_chain_net_node_list.h index 8fe6dd6b1b62ef57f0f31f2885210b454b1fa54c..0ce6badf63ac3bac9c76ab39b4690a4dd1b69bbe 100644 --- a/modules/net/include/dap_chain_net_node_list.h +++ b/modules/net/include/dap_chain_net_node_list.h @@ -42,6 +42,12 @@ struct node_link_request { int response; }; + +#ifdef __cplusplus +extern "C" { +#endif + + /** * @brief dap_chain_net_node_list_get_gdb_group * @param a_net @@ -55,3 +61,7 @@ DAP_STATIC_INLINE char* dap_chain_net_node_list_get_gdb_group(dap_chain_net_t * void dap_chain_net_node_check_http_issue_link(dap_http_simple_t *a_http_simple, void *a_arg); int dap_chain_net_node_list_request(dap_chain_net_t *a_net, uint16_t a_port, bool a_sync, char a_cmd); int dap_chain_net_node_list_init(); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/net/include/dap_chain_net_tx.h b/modules/net/include/dap_chain_net_tx.h index a0ab8d8e52a0c0a9b9960613eeedc44adbab7c65..ee2d91560cb7108d7fbd65a5facbb0927d3e7bb7 100644 --- a/modules/net/include/dap_chain_net_tx.h +++ b/modules/net/include/dap_chain_net_tx.h @@ -81,6 +81,9 @@ typedef struct dap_chain_datum_tx_spends_items{ } dap_chain_datum_tx_spends_items_t; typedef void (dap_chain_net_tx_hash_callback_t)(dap_chain_net_t* a_net, dap_chain_datum_tx_t *a_tx, dap_hash_fast_t *a_tx_hash, void *a_arg); +#ifdef __cplusplus +extern "C" { +#endif // TX functions dap_chain_datum_tx_t * dap_chain_net_get_tx_by_hash(dap_chain_net_t * a_net, dap_chain_hash_fast_t * a_tx_hash, @@ -134,3 +137,7 @@ int dap_chain_net_tx_create_by_json(json_object *a_tx_json, dap_chain_net_t *a_n * @return s_com_tx_create_json_err_t status code */ int dap_chain_net_tx_to_json(dap_chain_datum_tx_t *a_tx, json_object *a_out_json); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/net/include/dap_chain_node.h b/modules/net/include/dap_chain_node.h index 2b25fbc6c27a74fdb7473e82d2d6eadb2f701709..2aad02832df30b382416dabae6ca40d5e7ee1b86 100644 --- a/modules/net/include/dap_chain_node.h +++ b/modules/net/include/dap_chain_node.h @@ -85,6 +85,11 @@ typedef enum dap_chain_node_cli_cmd_values_parse_net_chain_err_to_json { DAP_CHAIN_NODE_CLI_CMD_VALUES_PARSE_NET_CHAIN_ERR_PARAMS_MUST_BE_UNSIGNED } dap_chain_node_cli_cmd_values_parse_net_chain_err_to_json; +#ifdef __cplusplus +extern "C" { +#endif + + /** * Calculate size of struct dap_chain_node_info_t */ @@ -117,3 +122,7 @@ int dap_chain_node_cli_cmd_values_parse_net_chain_for_json(json_object* a_json_a char **a_argv, dap_chain_t **a_chain, dap_chain_net_t **a_net, dap_chain_type_t a_default_chain_type); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/net/include/dap_chain_node_client.h b/modules/net/include/dap_chain_node_client.h index 291dda9af2f38eb0b7ac6fe3b6f9e51f3bf041e7..6d43fd02774a9a84c67b1072853c4f026aa64453 100644 --- a/modules/net/include/dap_chain_node_client.h +++ b/modules/net/include/dap_chain_node_client.h @@ -106,6 +106,11 @@ typedef struct dap_chain_node_client { #define DAP_CHAIN_NODE_CLIENT(a) (a ? (dap_chain_node_client_t *) (a)->_inheritor : NULL) + +#ifdef __cplusplus +extern "C" { +#endif + int dap_chain_node_client_init(); void dap_chain_node_client_deinit(void); @@ -171,3 +176,7 @@ static inline const char * dap_chain_node_client_state_to_str( dap_chain_node_cl } } + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/node-cli/dap_chain_node_cli_cmd.c b/modules/node-cli/dap_chain_node_cli_cmd.c index 8d41e5883fc3d963c4ff9081bb5c60f5276494da..0e97e22308d7b8b50023988ce69beccc2746b098 100644 --- a/modules/node-cli/dap_chain_node_cli_cmd.c +++ b/modules/node-cli/dap_chain_node_cli_cmd.c @@ -86,6 +86,9 @@ #include "dap_notify_srv.h" #include "dap_chain_wallet_cache.h" + +#include "dap_chain_net_tx.h" + #define LOG_TAG "chain_node_cli_cmd" int _cmd_mempool_add_ca(dap_chain_net_t *a_net, dap_chain_t *a_chain, dap_cert_t *a_cert, void **a_str_reply); @@ -1722,6 +1725,12 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; break; } case CMD_WALLET_OUTPUTS: { + if(!l_net) { + dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_COM_TX_WALLET_NET_PARAM_ERR, + "Subcommand info requires parameter '-net'"); + json_object_put(json_arr_out); + return DAP_CHAIN_NODE_CLI_COM_TX_WALLET_NET_PARAM_ERR; + } if ((l_wallet_name && l_addr_str) || (!l_wallet_name && !l_addr_str)) { dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_COM_TX_WALLET_NAME_ERR, "You should use either the -w or -addr option for the wallet info command."); @@ -1729,12 +1738,6 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; return DAP_CHAIN_NODE_CLI_COM_TX_WALLET_NAME_ERR; } if(l_wallet_name) { - if(!l_net) { - dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_COM_TX_WALLET_NET_PARAM_ERR, - "Subcommand info requires parameter '-net'"); - json_object_put(json_arr_out); - return DAP_CHAIN_NODE_CLI_COM_TX_WALLET_NET_PARAM_ERR; - } l_wallet = dap_chain_wallet_open(l_wallet_name, c_wallets_path, NULL); if (!l_wallet){ dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_COM_TX_WALLET_NET_PARAM_ERR, diff --git a/modules/node-cli/include/dap_chain_node_cli.h b/modules/node-cli/include/dap_chain_node_cli.h index 14b52dc90be74173df11b54054ac930e0b2156b1..c3a9e62c7f081813166b2e8c087d1833c4f1eec3 100644 --- a/modules/node-cli/include/dap_chain_node_cli.h +++ b/modules/node-cli/include/dap_chain_node_cli.h @@ -32,6 +32,11 @@ #include "dap_cli_server.h" + +#ifdef __cplusplus +extern "C" { +#endif + /** * Initialization of the server side of the interaction * with the console kelvin-node-cli @@ -42,3 +47,7 @@ int dap_chain_node_cli_init(dap_config_t * g_config); * Deinitialization of the server side */ void dap_chain_node_cli_delete(void); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/node-cli/include/dap_chain_node_cli_cmd.h b/modules/node-cli/include/dap_chain_node_cli_cmd.h index ecbac225873d2890dfa3301d0e0a1461472df2aa..f3b9edff8112d25b0e1bdab203746313a6812427 100644 --- a/modules/node-cli/include/dap_chain_node_cli_cmd.h +++ b/modules/node-cli/include/dap_chain_node_cli_cmd.h @@ -31,9 +31,6 @@ #include "dap_chain_node_cli.h" #include "json.h" -int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int a_argc, char **a_argv, void **a_str_reply, - dap_chain_t ** a_chain, dap_chain_net_t ** a_net, dap_chain_type_t a_default_chain_type); - typedef enum s_com_parse_net_chain_err{ DAP_CHAIN_NODE_CLI_COM_PARSE_NET_NET_STR_ERR = 100, DAP_CHAIN_NODE_CLI_COM_PARSE_NET_NET_PARAM_ERR, @@ -45,11 +42,6 @@ typedef enum s_com_parse_net_chain_err{ DAP_CHAIN_NODE_CLI_COM_PARSE_NET_UNKNOWN /* MAX */ } s_com_parse_net_chain_err_t; - -/** - * global_db command - */ -int com_global_db(int a_argc, char **a_argv, void **a_str_reply); typedef enum s_com_global_db_json_err { DAP_CHAIN_NODE_CLI_COM_GLOBAL_DB_JSON_OK = 0, @@ -82,62 +74,6 @@ typedef enum s_com_global_db_json_err { DAP_CHAIN_NODE_CLI_COM_GLOBAL_DB_JSON_CAN_NOT_ADD_TRANSACTION_TO_MEMPOOL }s_com_global_db_json_err_t; -/** - * Node command - */ -int com_node(int a_argc, char **a_argv, void **a_str_reply); - -#ifndef DAP_OS_ANDROID -/** - * Traceroute command - * - * return 0 OK, -1 Err - */ -int com_traceroute(int a_argc, char** argv, void **a_str_reply); - -/** - * Tracepath command - * - * return 0 OK, -1 Err - */ -int com_tracepath(int a_argc, char** argv, void **a_str_reply); - -/** - * Ping command - * - * return 0 OK, -1 Err - */ -int com_ping(int a_argc, char** argv, void **a_str_reply); -#endif -/** - * Help command - */ -int com_help(int a_argc, char **a_argv, void **a_str_reply); - -int com_version(int a_argc, char **a_argv, void **a_str_reply); - -/** - * Token declaration - */ -int com_token_decl(int a_argc, char **a_argv, void **a_str_reply); - -int com_token_update(int a_argc, char **a_argv, void **a_str_reply); - -/** - * Token declaration add sign - */ -int com_token_decl_sign ( int a_argc, char **a_argv, void **a_str_reply); - -/* - * Token update sign - */ -int com_token_update_sign(int argc, char ** argv, void **a_str_reply); - -/** - * Token emission - */ -int com_token_emit (int a_argc, char **a_argv, void **a_str_reply); - typedef enum s_com_tx_wallet_err{ DAP_CHAIN_NODE_CLI_COM_TX_WALLET_MEMORY_ERR, DAP_CHAIN_NODE_CLI_COM_TX_WALLET_PARAM_ERR, @@ -166,13 +102,6 @@ typedef enum s_com_tx_wallet_err{ DAP_CHAIN_NODE_CLI_COM_TX_UNKNOWN /* MAX */ } s_com_tx_wallet_err_t; -/** - * com_tx_create command - * - * Wallet info - */ -int com_tx_wallet(int a_argc, char **a_argv, void **a_str_reply); - /** * com_tx_create command * @@ -204,9 +133,6 @@ typedef enum s_com_tx_create_err{ DAP_CHAIN_NODE_CLI_COM_TX_CREATE_CAN_NOT_CREATE_TRANSACTION, DAP_CHAIN_NODE_CLI_COM_TX_CREATE_EQ_SOURCE_DESTINATION_ADDRESS }s_com_tx_create_err_t; -int com_tx_create(int a_argc, char **a_argv, void **a_str_reply); -void json_rpc_tx_create(json_object *a_param, json_object *a_reply); -int com_tx_create_json(int a_argc, char **a_argv, void **reply); typedef enum s_com_tx_cond_create{ DAP_CHAIN_NODE_CLI_COM_TX_COND_CREATE_OK = 0, DAP_CHAIN_NODE_CLI_COM_TX_COND_CREATE_INVALID_PARAMETER_HEX = DAP_JSON_RPC_ERR_CODE_METHOD_ERR_START, @@ -228,7 +154,6 @@ typedef enum s_com_tx_cond_create{ DAP_CHAIN_NODE_CLI_COM_TX_COND_CREATE_CERT_DOES_NOT_CONATIN_VALID_PUBLIC_KEY, DAP_CHAIN_NODE_CLI_COM_TX_COND_CREATE_CAN_NOT_CONDITIONAL_TX_CREATE }s_com_tx_cond_create_t; -int com_tx_cond_create(int a_argc, char **a_argv, void **reply); typedef enum s_com_tx_cond_remove{ DAP_CHAIN_NODE_CLI_COM_TX_COND_REMOVE_OK = 0, DAP_CHAIN_NODE_CLI_COM_TX_COND_REMOVE_INVALID_PARAMETER_HEX = DAP_JSON_RPC_ERR_CODE_METHOD_ERR_START, @@ -341,8 +266,6 @@ typedef enum s_com_print_log_err{ DAP_CHAIN_NODE_CLI_COM_PRINT_LOG_REQUIRES_PARAMETER_LIMIT, DAP_CHAIN_NODE_CLI_COM_PRINT_LOG_NO_LOGS }s_com_print_log_err_t; - -int com_tx_cond_remove(int a_argc, char **a_argv, void **reply); typedef enum s_com_tx_cond_unspent_find{ DAP_CHAIN_NODE_CLI_COM_TX_COND_UNSPEND_FIND_OK = 0, DAP_CHAIN_NODE_CLI_COM_TX_COND_UNSPEND_FIND_INVALID_PARAMETER_HEX = DAP_JSON_RPC_ERR_CODE_METHOD_ERR_START, @@ -355,8 +278,6 @@ typedef enum s_com_tx_cond_unspent_find{ DAP_CHAIN_NODE_CLI_COM_TX_COND_UNSPEND_FIND_CAN_NOT_FIND_NATIVE_TICKER_IN_NET, DAP_CHAIN_NODE_CLI_COM_TX_COND_UNSPEND_FIND_CAN_NOT_FIND_LEDGER_FOR_NET, }s_com_tx_cond_unspent_find_t; -int com_tx_cond_unspent_find(int a_argc, char **a_argv, void **reply); - typedef enum s_com_tx_verify{ DAP_CHAIN_NODE_CLI_COM_TX_VERIFY_OK = 0, DAP_CHAIN_NODE_CLI_COM_TX_VERIFY_REQUIRE_PARAMETER_TX = DAP_JSON_RPC_ERR_CODE_METHOD_ERR_START, @@ -366,14 +287,6 @@ typedef enum s_com_tx_verify{ DAP_CHAIN_NODE_CLI_COM_TX_VERIFY_HASH_IS_NOT_TX_HASH, DAP_CHAIN_NODE_CLI_COM_TX_VERIFY_TX_NOT_VERIFY }s_com_tx_verify_t; -/** - * tx_verify command - * - * Verifing transaction - */ - -int com_tx_verify(int a_argc, char ** a_argv, void **a_str_reply); - typedef enum s_com_tx_history_err{ DAP_CHAIN_NODE_CLI_COM_TX_HISTORY_OK = 0, DAP_CHAIN_NODE_CLI_COM_TX_HISTORY_MEMORY_ERR, @@ -395,6 +308,131 @@ typedef enum s_com_tx_history_err{ //DAP_CHAIN_NODE_CLI_COM_TX_UNKNOWN /* MAX */ } s_com_tx_history_err_t; +typedef enum cmd_mempool_list_err{ + DAP_CHAIN_NODE_CLI_COM_MEMPOOL_LIST_OK = 0, + DAP_CHAIN_NODE_CLI_COM_MEMPOOL_LIST_CAN_NOT_READ_EMISSION, + DAP_CHAIN_NODE_CLI_COM_MEMPOOL_LIST_CHAIN_NOT_FOUND, + DAP_CHAIN_NODE_CLI_COM_MEMPOOL_LIST_CAN_NOT_GET_MEMPOOL_GROUP, + /* add custom codes here */ + + DAP_CHAIN_NODE_CLI_COM_MEMPOOL_LIST_UNKNOWN /* MAX */ +} cmd_mempool_list_err_t; +typedef enum cmd_find_list_err { + DAP_CHAIN_NODE_CLI_FIND_OK = 0, + DAP_CHAIN_NODE_CLI_FIND_ERR_PARSE_HASH = DAP_JSON_RPC_ERR_CODE_METHOD_ERR_START, + DAP_CHAIN_NODE_CLI_FUND_ERR_UNKNOWN_SUBCMD, + DAP_CHAIN_NODE_CLI_FIND_ERR_HASH_IS_NOT_SPECIFIED, + DAP_CHAIN_NODE_CLI_FIND_ERR_UNKNOWN_SUBTYPE_DECREE, + DAP_CHIAN_NODE_CLI_FIND_ERR_SUBTYPE_DECREE_IS_NOT_SPECIFIED, + DAP_CHAIN_NODE_CLI_FIND_ERR_UNKNOWN_PARAMETR_WHERE, +}cmd_find_list_err_t; + +typedef enum s_com_file_err{ + DAP_CHAIN_NODE_CLI_COM_FILE_OK = 0, + DAP_CHAIN_NODE_CLI_COM_FILE_MEMORY_ERR, + DAP_CHAIN_NODE_CLI_COM_FILE_PARAM_ERR, + DAP_CHAIN_NODE_CLI_COM_FILE_SOURCE_FILE_ERR, + DAP_CHAIN_NODE_CLI_COM_FILE_DEST_FILE_ERR, + DAP_CHAIN_NODE_CLI_COM_FILE_NUM_ERR + + +} s_com_file_err_t; + +#ifdef __cplusplus +extern "C" { +#endif + +int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int a_argc, char **a_argv, void **a_str_reply, + dap_chain_t ** a_chain, dap_chain_net_t ** a_net, dap_chain_type_t a_default_chain_type); + + +/** + * global_db command + */ +int com_global_db(int a_argc, char **a_argv, void **a_str_reply); + +/** + * Node command + */ +int com_node(int a_argc, char **a_argv, void **a_str_reply); + +#ifndef DAP_OS_ANDROID +/** + * Traceroute command + * + * return 0 OK, -1 Err + */ +int com_traceroute(int a_argc, char** argv, void **a_str_reply); + +/** + * Tracepath command + * + * return 0 OK, -1 Err + */ +int com_tracepath(int a_argc, char** argv, void **a_str_reply); + +/** + * Ping command + * + * return 0 OK, -1 Err + */ +int com_ping(int a_argc, char** argv, void **a_str_reply); +#endif +/** + * Help command + */ +int com_help(int a_argc, char **a_argv, void **a_str_reply); + +int com_version(int a_argc, char **a_argv, void **a_str_reply); + +/** + * Token declaration + */ +int com_token_decl(int a_argc, char **a_argv, void **a_str_reply); + +int com_token_update(int a_argc, char **a_argv, void **a_str_reply); + +/** + * Token declaration add sign + */ +int com_token_decl_sign ( int a_argc, char **a_argv, void **a_str_reply); + +/* + * Token update sign + */ +int com_token_update_sign(int argc, char ** argv, void **a_str_reply); + +/** + * Token emission + */ +int com_token_emit (int a_argc, char **a_argv, void **a_str_reply); + +/** + * com_tx_create command + * + * Wallet info + */ +int com_tx_wallet(int a_argc, char **a_argv, void **a_str_reply); + + +int com_tx_create(int a_argc, char **a_argv, void **a_str_reply); +void json_rpc_tx_create(json_object *a_param, json_object *a_reply); +int com_tx_create_json(int a_argc, char **a_argv, void **reply); + +int com_tx_cond_create(int a_argc, char **a_argv, void **reply); + +int com_tx_cond_remove(int a_argc, char **a_argv, void **reply); + +int com_tx_cond_unspent_find(int a_argc, char **a_argv, void **reply); + + +/** + * tx_verify command + * + * Verifing transaction + */ + +int com_tx_verify(int a_argc, char ** a_argv, void **a_str_reply); char *dap_chain_node_cli_com_tx_history_err(int a_code); @@ -412,16 +450,6 @@ int com_exit(int a_argc, char **a_argv, void **a_str_reply); int cmd_gdb_import(int a_argc, char **a_argv, void **a_str_reply); int cmd_gdb_export(int a_argc, char **a_argv, void **a_str_reply); - -typedef enum cmd_mempool_list_err{ - DAP_CHAIN_NODE_CLI_COM_MEMPOOL_LIST_OK = 0, - DAP_CHAIN_NODE_CLI_COM_MEMPOOL_LIST_CAN_NOT_READ_EMISSION, - DAP_CHAIN_NODE_CLI_COM_MEMPOOL_LIST_CHAIN_NOT_FOUND, - DAP_CHAIN_NODE_CLI_COM_MEMPOOL_LIST_CAN_NOT_GET_MEMPOOL_GROUP, - /* add custom codes here */ - - DAP_CHAIN_NODE_CLI_COM_MEMPOOL_LIST_UNKNOWN /* MAX */ -} cmd_mempool_list_err_t; int com_mempool(int a_argc, char **a_argv, void **a_str_reply); /** * Place public CA into the mempool @@ -432,15 +460,6 @@ int com_signer(int a_argc, char **a_argv, void **a_str_reply); //remove func int cmd_remove(int a_argc, char **a_argv, void **a_str_reply); -typedef enum cmd_find_list_err { - DAP_CHAIN_NODE_CLI_FIND_OK = 0, - DAP_CHAIN_NODE_CLI_FIND_ERR_PARSE_HASH = DAP_JSON_RPC_ERR_CODE_METHOD_ERR_START, - DAP_CHAIN_NODE_CLI_FUND_ERR_UNKNOWN_SUBCMD, - DAP_CHAIN_NODE_CLI_FIND_ERR_HASH_IS_NOT_SPECIFIED, - DAP_CHAIN_NODE_CLI_FIND_ERR_UNKNOWN_SUBTYPE_DECREE, - DAP_CHIAN_NODE_CLI_FIND_ERR_SUBTYPE_DECREE_IS_NOT_SPECIFIED, - DAP_CHAIN_NODE_CLI_FIND_ERR_UNKNOWN_PARAMETR_WHERE, -}cmd_find_list_err_t; /** * Handler coomand find * @param a_argc @@ -454,15 +473,8 @@ void dap_notify_new_client_send_info(dap_events_socket_t *a_es, void *a_arg); int com_exec_cmd(int argc, char **argv, void **reply); - -typedef enum s_com_file_err{ - DAP_CHAIN_NODE_CLI_COM_FILE_OK = 0, - DAP_CHAIN_NODE_CLI_COM_FILE_MEMORY_ERR, - DAP_CHAIN_NODE_CLI_COM_FILE_PARAM_ERR, - DAP_CHAIN_NODE_CLI_COM_FILE_SOURCE_FILE_ERR, - DAP_CHAIN_NODE_CLI_COM_FILE_DEST_FILE_ERR, - DAP_CHAIN_NODE_CLI_COM_FILE_NUM_ERR - - -} s_com_file_err_t; int com_file(int a_argc, char ** a_argv, void **a_str_reply); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/node-cli/include/dap_chain_node_cli_cmd_tx.h b/modules/node-cli/include/dap_chain_node_cli_cmd_tx.h index 442f895e7edd3ad5173681ecfd8903cb0741744b..82b7c1b13ab404916a36d2a28e1f369591b43c0e 100644 --- a/modules/node-cli/include/dap_chain_node_cli_cmd_tx.h +++ b/modules/node-cli/include/dap_chain_node_cli_cmd_tx.h @@ -34,6 +34,40 @@ typedef struct dap_chain_tx_hash_processed_ht{ UT_hash_handle hh; }dap_chain_tx_hash_processed_ht_t; +typedef enum s_com_ledger_err{ + DAP_CHAIN_NODE_CLI_COM_LEDGER_OK = 0, + DAP_CHAIN_NODE_CLI_COM_LEDGER_PARAM_ERR, + DAP_CHAIN_NODE_CLI_COM_LEDGER_HASH_ERR, + DAP_CHAIN_NODE_CLI_COM_LEDGER_NET_PARAM_ERR, + DAP_CHAIN_NODE_CLI_COM_LEDGER_INCOMPATIBLE_PARAMS_ERR, + DAP_CHAIN_NODE_CLI_COM_LEDGER_WALLET_ADDR_ERR, + DAP_CHAIN_NODE_CLI_COM_LEDGER_TRESHOLD_ERR, + DAP_CHAIN_NODE_CLI_COM_LEDGER_LACK_ERR, + DAP_CHAIN_NODE_CLI_COM_LEDGER_NET_FIND_ERR, + DAP_CHAIN_NODE_CLI_COM_LEDGER_ID_NET_ADDR_DIF_ERR, + DAP_CHAIN_NODE_CLI_COM_LEDGER_HASH_GET_ERR, + DAP_CHAIN_NODE_CLI_COM_LEDGER_TX_HASH_ERR, + + /* add custom codes here */ + + DAP_CHAIN_NODE_CLI_COM_LEDGER_UNKNOWN /* MAX */ +} s_com_ledger_err_t; + +typedef enum s_com_token_err{ + DAP_CHAIN_NODE_CLI_COM_TOKEN_OK = 0, + DAP_CHAIN_NODE_CLI_COM_TOKEN_PARAM_ERR, + DAP_CHAIN_NODE_CLI_COM_TOKEN_HASH_ERR, + DAP_CHAIN_NODE_CLI_COM_TOKEN_FOUND_ERR, + + /* add custom codes here */ + + DAP_CHAIN_NODE_CLI_COM_TOKEN_UNKNOWN /* MAX */ +} s_com_token_err_t; + +#ifdef __cplusplus +extern "C" { +#endif + void s_dap_chain_tx_hash_processed_ht_free(dap_chain_tx_hash_processed_ht_t **l_hash_processed); /** @@ -75,43 +109,18 @@ bool s_dap_chain_datum_tx_out_data(json_object* a_json_arr_reply, */ int com_ledger(int a_argc, char ** a_argv, void **a_str_reply); -typedef enum s_com_ledger_err{ - DAP_CHAIN_NODE_CLI_COM_LEDGER_OK = 0, - DAP_CHAIN_NODE_CLI_COM_LEDGER_PARAM_ERR, - DAP_CHAIN_NODE_CLI_COM_LEDGER_HASH_ERR, - DAP_CHAIN_NODE_CLI_COM_LEDGER_NET_PARAM_ERR, - DAP_CHAIN_NODE_CLI_COM_LEDGER_INCOMPATIBLE_PARAMS_ERR, - DAP_CHAIN_NODE_CLI_COM_LEDGER_WALLET_ADDR_ERR, - DAP_CHAIN_NODE_CLI_COM_LEDGER_TRESHOLD_ERR, - DAP_CHAIN_NODE_CLI_COM_LEDGER_LACK_ERR, - DAP_CHAIN_NODE_CLI_COM_LEDGER_NET_FIND_ERR, - DAP_CHAIN_NODE_CLI_COM_LEDGER_ID_NET_ADDR_DIF_ERR, - DAP_CHAIN_NODE_CLI_COM_LEDGER_HASH_GET_ERR, - DAP_CHAIN_NODE_CLI_COM_LEDGER_TX_HASH_ERR, - - /* add custom codes here */ - - DAP_CHAIN_NODE_CLI_COM_LEDGER_UNKNOWN /* MAX */ -} s_com_ledger_err_t; /** * token command * */ int com_token(int a_argc, char ** a_argv, void **a_str_reply); -typedef enum s_com_token_err{ - DAP_CHAIN_NODE_CLI_COM_TOKEN_OK = 0, - DAP_CHAIN_NODE_CLI_COM_TOKEN_PARAM_ERR, - DAP_CHAIN_NODE_CLI_COM_TOKEN_HASH_ERR, - DAP_CHAIN_NODE_CLI_COM_TOKEN_FOUND_ERR, - - /* add custom codes here */ - - DAP_CHAIN_NODE_CLI_COM_TOKEN_UNKNOWN /* MAX */ -} s_com_token_err_t; /** * decree command * */ int cmd_decree(int a_argc, char **a_argv, void **a_str_reply); +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/wallet/include/dap_chain_wallet.h b/modules/wallet/include/dap_chain_wallet.h index 73c18b418c575b1e76d02ccbdba3cd1adb7f70a9..ddee0312dbedd1fae5893d8425e1e2b4b27425e5 100644 --- a/modules/wallet/include/dap_chain_wallet.h +++ b/modules/wallet/include/dap_chain_wallet.h @@ -43,6 +43,11 @@ typedef struct dap_chain_wallet{ void *_inheritor; } dap_chain_wallet_t; + +#ifdef __cplusplus +extern "C" { +#endif + typedef void (*dap_chain_wallet_opened_callback_t)(dap_chain_wallet_t *a_wallet, void *a_arg); int dap_chain_wallet_init(); @@ -101,3 +106,7 @@ int dap_chain_wallet_get_pkey_hash(dap_chain_wallet_t *a_wallet, dap_hash_fast_t char *dap_chain_wallet_get_pkey_str(dap_chain_wallet_t *a_wallet, const char *a_str_type); dap_list_t* dap_chain_wallet_get_local_addr(); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/wallet/include/dap_chain_wallet_cache.h b/modules/wallet/include/dap_chain_wallet_cache.h index 779ec76d99e0f345b80290eb269f6455001dcada..4b05719a0c301e1beab0f2755bdf9390b38f354b 100644 --- a/modules/wallet/include/dap_chain_wallet_cache.h +++ b/modules/wallet/include/dap_chain_wallet_cache.h @@ -45,6 +45,10 @@ typedef struct dap_chain_wallet_cache_iter { void *cur_addr_cache; } dap_chain_wallet_cache_iter_t; +#ifdef __cplusplus +extern "C" { +#endif + int dap_chain_wallet_cache_init(); int dap_chain_wallet_cache_deinit(); @@ -101,4 +105,9 @@ int dap_chain_wallet_cache_tx_find_outs(dap_chain_net_t *a_net, const char *a_to dap_chain_wallet_cache_iter_t *dap_chain_wallet_cache_iter_create(dap_chain_addr_t a_addr); void dap_chain_wallet_cache_iter_delete(dap_chain_wallet_cache_iter_t *a_iter); -dap_chain_datum_tx_t *dap_chain_wallet_cache_iter_get(dap_chain_wallet_cache_iter_t *a_iter, dap_chain_wallet_getting_type_t a_type); \ No newline at end of file +dap_chain_datum_tx_t *dap_chain_wallet_cache_iter_get(dap_chain_wallet_cache_iter_t *a_iter, dap_chain_wallet_getting_type_t a_type); + + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/modules/wallet/include/dap_chain_wallet_ops.h b/modules/wallet/include/dap_chain_wallet_ops.h index 90f610a1e837fb4213e57b59cbb15c7bb89abd6f..4e818c217c140eb3700c2ec39baaebaf48e4af3b 100644 --- a/modules/wallet/include/dap_chain_wallet_ops.h +++ b/modules/wallet/include/dap_chain_wallet_ops.h @@ -3,6 +3,14 @@ #include "dap_chain.h" #include "dap_chain_wallet.h" + +#ifdef __cplusplus +extern "C" { +#endif void dap_chain_wallet_op_tx_request(dap_chain_wallet_t * a_wallet, uint32_t a_wallet_key_idx, /// Sender's wallet and key index in it dap_chain_t * a_chain_source, uint64_t a_value, /// Token source and daptoshi's value dap_chain_t * a_chain_tx_request, dap_chain_addr_t a_destination ); /// TX blockchain where to create new block + +#ifdef __cplusplus +} +#endif \ No newline at end of file