From 1bd9372aa17c7a0e9a0403cdd1618aacfb1a3900 Mon Sep 17 00:00:00 2001 From: "roman.khlopkov" <roman.khlopkov@demlabs.net> Date: Wed, 30 Oct 2024 18:46:02 +0300 Subject: [PATCH] [*] OUT_COND sizing fix & other --- modules/chain/include/dap_chain_common.h | 2 +- .../include/dap_chain_datum_tx_out_cond.h | 2 -- .../include/dap_chain_datum_tx_receipt.h | 2 -- modules/net-srv/dap_chain_net_srv.c | 17 ++++++---- .../net-srv/include/dap_chain_net_srv_order.h | 5 +-- modules/node-cli/dap_chain_node_cli_cmd.c | 34 ++++++++----------- 6 files changed, 27 insertions(+), 35 deletions(-) diff --git a/modules/chain/include/dap_chain_common.h b/modules/chain/include/dap_chain_common.h index edd061b252..ab2cf1b055 100644 --- a/modules/chain/include/dap_chain_common.h +++ b/modules/chain/include/dap_chain_common.h @@ -129,7 +129,7 @@ typedef union { uint8_t raw[8]; uint64_t raw_ui64; uint64_t uint64; -} dap_chain_srv_uid_t; +} DAP_ALIGN_PACKED dap_chain_srv_uid_t; extern const dap_chain_srv_uid_t c_dap_chain_srv_uid_null; extern const dap_chain_cell_id_t c_dap_chain_cell_id_null; 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 dfe9d5d967..c3e7b9922b 100644 --- a/modules/datum/include/dap_chain_datum_tx_out_cond.h +++ b/modules/datum/include/dap_chain_datum_tx_out_cond.h @@ -83,9 +83,7 @@ typedef struct dap_chain_tx_out_cond { dap_time_t ts_expires; /// Service uid that only could be used for this out dap_chain_srv_uid_t srv_uid; -#if DAP_CHAIN_NET_SRV_UID_SIZE == 8 byte_t padding[8]; -#endif } DAP_ALIGN_PACKED header; union { /// Structure with specific for service pay condition subtype diff --git a/modules/datum/include/dap_chain_datum_tx_receipt.h b/modules/datum/include/dap_chain_datum_tx_receipt.h index 4975a9c9b7..6ab5d94fd8 100644 --- a/modules/datum/include/dap_chain_datum_tx_receipt.h +++ b/modules/datum/include/dap_chain_datum_tx_receipt.h @@ -29,9 +29,7 @@ typedef struct dap_chain_receipt_info { dap_chain_srv_uid_t srv_uid; // Service UID -#if DAP_CHAIN_NET_SRV_UID_SIZE == 8 uint64_t addition; -#endif dap_chain_net_srv_price_unit_uid_t units_type; byte_t version; byte_t padding[3]; diff --git a/modules/net-srv/dap_chain_net_srv.c b/modules/net-srv/dap_chain_net_srv.c index 900babd5f2..fd149f2ed8 100644 --- a/modules/net-srv/dap_chain_net_srv.c +++ b/modules/net-srv/dap_chain_net_srv.c @@ -314,11 +314,12 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply) return -18; } } - - if (l_srv_uid_str && dap_id_uint64_parse(l_srv_uid_str ,&l_srv_uid.uint64)) { + uint64_t l_64 = 0; + if (l_srv_uid_str && dap_id_uint64_parse(l_srv_uid_str, &l_64)) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't recognize '%s' string as 64-bit id, hex or dec.", l_srv_uid_str); return -21; } + l_srv_uid.uint64 = l_64; if ( l_price_min_str ) l_price_min = dap_chain_balance_scan(l_price_min_str); @@ -431,13 +432,15 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply) if (l_expires_str) l_expires = (dap_time_t ) atoll( l_expires_str); - if (l_srv_uid_str && dap_id_uint64_parse(l_srv_uid_str ,&l_srv_uid.uint64)) { + uint64_t l_64 = 0; + if (l_srv_uid_str && dap_id_uint64_parse(l_srv_uid_str, &l_64)) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't recognize '%s' string as 64-bit id, hex or dec.", l_srv_uid_str); return -21; - }else if (!l_srv_uid_str){ + } else if (!l_srv_uid_str){ dap_cli_server_cmd_set_reply_text(a_str_reply, "Parameter -srv_uid is required."); return -22; } + l_srv_uid.uint64 = l_64; if (l_node_addr_str){ if (dap_chain_node_addr_str_check(l_node_addr_str)) { dap_chain_node_addr_from_str( &l_node_addr, l_node_addr_str ); @@ -543,8 +546,8 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply) return -16; } - dap_chain_srv_uid_t l_srv_uid={{0}}; - if (l_srv_uid_str && dap_id_uint64_parse(l_srv_uid_str ,&l_srv_uid.uint64)) { + uint64_t l_64 = 0; + if (l_srv_uid_str && dap_id_uint64_parse(l_srv_uid_str, &l_64)) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't recognize '%s' string as 64-bit id, hex or dec.", l_srv_uid_str); dap_string_free(l_string_ret, true); return -21; @@ -553,7 +556,7 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply) dap_string_free(l_string_ret, true); return -22; } - + dap_chain_srv_uid_t l_srv_uid= { .uint64 = l_64}; dap_chain_net_srv_ch_remain_service_store_t *l_remain_service = NULL; size_t l_remain_service_size = 0; char *l_remain_limits_gdb_group = dap_strdup_printf( "local.%s.0x%016"DAP_UINT64_FORMAT_x".remain_limits.%s", 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 aabedab8fb..de6eae0917 100644 --- a/modules/net-srv/include/dap_chain_net_srv_order.h +++ b/modules/net-srv/include/dap_chain_net_srv_order.h @@ -29,13 +29,10 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/lic #include "dap_chain_common.h" #include "dap_chain_net_srv.h" -typedef struct dap_chain_net_srv_order -{ +typedef struct dap_chain_net_srv_order { uint16_t version; dap_chain_srv_uid_t srv_uid; // Service UID -#if DAP_CHAIN_NET_SRV_UID_SIZE == 8 byte_t padding[8]; -#endif dap_chain_net_srv_order_direction_t direction; // Order direction - SELL or PURCHASE byte_t padding_dir[3]; dap_chain_node_addr_t node_addr; // Node address that servs the order (if present) diff --git a/modules/node-cli/dap_chain_node_cli_cmd.c b/modules/node-cli/dap_chain_node_cli_cmd.c index 60d70207a2..c3d3e8c564 100644 --- a/modules/node-cli/dap_chain_node_cli_cmd.c +++ b/modules/node-cli/dap_chain_node_cli_cmd.c @@ -6384,12 +6384,10 @@ int s_json_rpc_tx_parse_json(dap_chain_net_t *a_net, dap_chain_t *a_chain, json_ log_it(L_ERROR, "Json TX: bad price_unit in OUT_COND_SUBTYPE_SRV_PAY"); break; } - dap_chain_srv_uid_t l_srv_uid; - if(!s_json_get_srv_uid(l_json_item_obj, "service_id", "service", &l_srv_uid.uint64)){ - // Default service DAP_CHAIN_NET_SRV_VPN_ID - l_srv_uid.uint64 = 0x0000000000000001; - } - + // Default service DAP_CHAIN_NET_SRV_VPN_ID + uint64_t l_64 = 0x0000000000000001; + s_json_get_srv_uid(l_json_item_obj, "service_id", "service", &l_64); + dap_chain_srv_uid_t l_srv_uid = { .uint64 = l_64}; // From "wallet" or "cert" dap_pkey_t *l_pkey = s_json_get_pkey(l_json_item_obj); if(!l_pkey) { @@ -6415,12 +6413,10 @@ int s_json_rpc_tx_parse_json(dap_chain_net_t *a_net, dap_chain_t *a_chain, json_ } break; case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE: { - - dap_chain_srv_uid_t l_srv_uid; - if(!s_json_get_srv_uid(l_json_item_obj, "service_id", "service", &l_srv_uid.uint64)) { - // Default service DAP_CHAIN_NET_SRV_XCHANGE_ID - l_srv_uid.uint64 = 0x2; - } + // Default service DAP_CHAIN_NET_SRV_XCHANGE_ID + uint64_t l_64 = 0x0000000000000002; + s_json_get_srv_uid(l_json_item_obj, "service_id", "service", &l_64); + dap_chain_srv_uid_t l_srv_uid = { .uint64 = l_64}; dap_chain_net_t *l_net = dap_chain_net_by_name(s_json_get_text(l_json_item_obj, "net")); if(!l_net) { log_it(L_ERROR, "Json TX: bad net in OUT_COND_SUBTYPE_SRV_XCHANGE"); @@ -6453,11 +6449,10 @@ int s_json_rpc_tx_parse_json(dap_chain_net_t *a_net, dap_chain_t *a_chain, json_ } break; case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE:{ - dap_chain_srv_uid_t l_srv_uid; - if(!s_json_get_srv_uid(l_json_item_obj, "service_id", "service", &l_srv_uid.uint64)) { - // Default service DAP_CHAIN_NET_SRV_STAKE_ID - l_srv_uid.uint64 = 0x13; - } + // Default service DAP_CHAIN_NET_SRV_STAKE_ID + uint64_t l_64 = 0x0000000000000013; + s_json_get_srv_uid(l_json_item_obj, "service_id", "service", &l_64); + dap_chain_srv_uid_t l_srv_uid = { .uint64 = l_64}; uint256_t l_value = { }; if(!s_json_get_uint256(l_json_item_obj, "value", &l_value) || IS_ZERO_256(l_value)) { log_it(L_ERROR, "Json TX: bad value in OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE"); @@ -6535,11 +6530,12 @@ int s_json_rpc_tx_parse_json(dap_chain_net_t *a_net, dap_chain_t *a_chain, json_ } break; case TX_ITEM_TYPE_RECEIPT: { - dap_chain_srv_uid_t l_srv_uid; - if(!s_json_get_srv_uid(l_json_item_obj, "service_id", "service", &l_srv_uid.uint64)) { + uint64_t l_64 = 0; + if (!s_json_get_srv_uid(l_json_item_obj, "service_id", "service", &l_64)) { log_it(L_ERROR, "Json TX: bad service_id in TYPE_RECEIPT"); break; } + dap_chain_srv_uid_t l_srv_uid = { .uint64 = l_64 }; dap_chain_net_srv_price_unit_uid_t l_price_unit; if(!s_json_get_unit(l_json_item_obj, "price_unit", &l_price_unit)) { log_it(L_ERROR, "Json TX: bad price_unit in TYPE_RECEIPT"); -- GitLab