diff --git a/dap-sdk b/dap-sdk index 76bb290ca9d93e5adac3a56a32d42bc94ad354c5..e97dc15096ffa39761dc8f6c68f9ce8fe53bc49d 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 76bb290ca9d93e5adac3a56a32d42bc94ad354c5 +Subproject commit e97dc15096ffa39761dc8f6c68f9ce8fe53bc49d diff --git a/modules/common/dap_chain_datum_tx_receipt.c b/modules/common/dap_chain_datum_tx_receipt.c index 27b0bdda72c8a5ed2725154886854cbcfdf8fdc1..ef1618beebc9f92daec607b3398e528dd3af66b6 100644 --- a/modules/common/dap_chain_datum_tx_receipt.c +++ b/modules/common/dap_chain_datum_tx_receipt.c @@ -53,6 +53,7 @@ dap_chain_datum_tx_receipt_t * dap_chain_datum_tx_receipt_create( dap_chain_net_ l_ret->receipt_info.srv_uid = a_srv_uid; l_ret->receipt_info.units = a_units; l_ret->receipt_info.value_datoshi = a_value_datoshi; + l_ret->receipt_info.version = 1; l_ret->size = sizeof(dap_chain_datum_tx_receipt_t) + a_ext_size; if (a_ext_size && a_ext) { @@ -108,7 +109,7 @@ dap_sign_t *dap_chain_datum_tx_receipt_sign_get(dap_chain_datum_tx_receipt_t *a_ return NULL; dap_sign_t *l_sign = NULL; for (uint16_t l_sign_position = a_sign_position + 1; l_sign_position; l_sign_position--) { - dap_sign_t *l_sign = (dap_sign_t *)(a_receipt->exts_n_signs + l_offset); + l_sign = (dap_sign_t *)(a_receipt->exts_n_signs + l_offset); uint64_t l_sign_size = dap_sign_get_size(l_sign); l_offset += l_sign_size; if (l_offset > l_total_signs_size) @@ -177,5 +178,6 @@ int dap_chain_datum_tx_receipt_check_size(dap_chain_datum_tx_receipt_t *a_receip l_sign = (dap_sign_t *)((byte_t *)l_sign + l_sign_size); } size_t l_sign_offset = (byte_t *)l_sign - (byte_t *)a_receipt; - return l_sign_offset == a_control_size ? 0 : -4; // Receipt is lagrer that two signs need + // Receipt is lagrer that two signs need + return l_sign_offset == a_control_size ? 0 : (a_receipt->receipt_info.version ? -4 : 0); } diff --git a/modules/common/include/dap_chain_datum_tx_receipt.h b/modules/common/include/dap_chain_datum_tx_receipt.h index e5f1e92d7ff48f9b77fc091906bf8cae078c0022..5210c4fff5a322515ed52fcb96b6f376ecd5da0f 100644 --- a/modules/common/include/dap_chain_datum_tx_receipt.h +++ b/modules/common/include/dap_chain_datum_tx_receipt.h @@ -33,7 +33,8 @@ typedef struct dap_chain_receipt_info { uint64_t addition; #endif dap_chain_net_srv_price_unit_uid_t units_type; - byte_t padding[4]; + byte_t version; + byte_t padding[3]; uint64_t units; // Unit of service (seconds, megabytes, etc.) Only for SERV_CLASS_PERMANENT uint256_t value_datoshi; // Receipt value } DAP_ALIGN_PACKED dap_chain_receipt_info_t; diff --git a/modules/service/stake/dap_chain_net_srv_stake_lock.c b/modules/service/stake/dap_chain_net_srv_stake_lock.c index ab4876cdcee1bc7435738b3549f81e33e8f19e2f..53a216607537db1cbf3f2d8f92c4b1ea1852b6d6 100644 --- a/modules/service/stake/dap_chain_net_srv_stake_lock.c +++ b/modules/service/stake/dap_chain_net_srv_stake_lock.c @@ -1034,7 +1034,7 @@ static int s_stake_lock_callback_verificator(dap_ledger_t *a_ledger, dap_chain_t return -13; if (!dap_chain_net_srv_uid_compare_scalar(l_receipt->receipt_info.srv_uid, DAP_CHAIN_NET_SRV_STAKE_LOCK_ID)) return -7; - if (l_receipt->exts_size != sizeof(dap_hash_fast_t)) + if (l_receipt->exts_size < sizeof(dap_hash_fast_t)) return -8; l_burning_tx_hash = *(dap_hash_fast_t*)l_receipt->exts_n_signs; if (dap_hash_fast_is_blank(&l_burning_tx_hash))