From fc07c46dedf197950edeb58259ad7d5be2498e90 Mon Sep 17 00:00:00 2001
From: "roman.khlopkov" <roman.khlopkov@demlabs.net>
Date: Thu, 22 Aug 2024 23:11:16 +0300
Subject: [PATCH] [*] Balances convergence

---
 dap-sdk                                              | 2 +-
 modules/common/dap_chain_datum_tx_receipt.c          | 6 ++++--
 modules/common/include/dap_chain_datum_tx_receipt.h  | 3 ++-
 modules/service/stake/dap_chain_net_srv_stake_lock.c | 2 +-
 4 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/dap-sdk b/dap-sdk
index 76bb290ca9..e97dc15096 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 27b0bdda72..ef1618beeb 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 e5f1e92d7f..5210c4fff5 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 ab4876cdce..53a2166075 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))
-- 
GitLab