From b8111d8b5b65efbe0434e286778af09ba3bb8242 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Mon, 8 Apr 2024 11:15:52 +0300 Subject: [PATCH] Fix setting due_payment in storage phase (#957) Co-authored-by: SpyCheese --- common/global-version.h | 2 +- crypto/block/transaction.cpp | 4 ++++ crypto/block/transaction.h | 1 + validator/impl/validate-query.cpp | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/common/global-version.h b/common/global-version.h index 0a90ab85..a6775ffa 100644 --- a/common/global-version.h +++ b/common/global-version.h @@ -19,6 +19,6 @@ namespace ton { // See doc/GlobalVersions.md -const int SUPPORTED_VERSION = 6; +const int SUPPORTED_VERSION = 7; } diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index 88966179..0fb3a45e 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -898,6 +898,9 @@ bool Transaction::prepare_storage_phase(const StoragePhaseConfig& cfg, bool forc res->fees_collected = to_pay; res->fees_due = td::zero_refint(); balance -= std::move(to_pay); + if (cfg.global_version >= 7) { + due_payment = td::zero_refint(); + } } else if (acc_status == Account::acc_frozen && !force_collect && to_pay < cfg.delete_due_limit) { // do not collect fee res->last_paid_updated = (res->is_special ? 0 : account.last_paid); @@ -3668,6 +3671,7 @@ td::Status FetchConfigParams::fetch_config_params( compute_phase_cfg->mc_gas_prices = std::move(mc_gas_prices); compute_phase_cfg->special_gas_full = config.get_global_version() >= 5; storage_phase_cfg->enable_due_payment = config.get_global_version() >= 4; + storage_phase_cfg->global_version = config.get_global_version(); compute_phase_cfg->block_rand_seed = *rand_seed; compute_phase_cfg->max_vm_data_depth = size_limits.max_vm_data_depth; compute_phase_cfg->global_config = config.get_root_cell(); diff --git a/crypto/block/transaction.h b/crypto/block/transaction.h index 42cd84a8..6d8e8a29 100644 --- a/crypto/block/transaction.h +++ b/crypto/block/transaction.h @@ -82,6 +82,7 @@ struct StoragePhaseConfig { td::RefInt256 freeze_due_limit; td::RefInt256 delete_due_limit; bool enable_due_payment{false}; + int global_version = 0; StoragePhaseConfig() = default; StoragePhaseConfig(const std::vector* _pricing, td::RefInt256 freeze_limit = {}, td::RefInt256 delete_limit = {}) diff --git a/validator/impl/validate-query.cpp b/validator/impl/validate-query.cpp index d925fce6..8b2723c3 100644 --- a/validator/impl/validate-query.cpp +++ b/validator/impl/validate-query.cpp @@ -947,6 +947,7 @@ bool ValidateQuery::fetch_config_params() { compute_phase_cfg_.mc_gas_prices = mc_gas_prices.move_as_ok(); compute_phase_cfg_.special_gas_full = config_->get_global_version() >= 5; storage_phase_cfg_.enable_due_payment = config_->get_global_version() >= 4; + storage_phase_cfg_.global_version = config_->get_global_version(); compute_phase_cfg_.block_rand_seed = rand_seed_; compute_phase_cfg_.libraries = std::make_unique(config_->get_libraries_root(), 256); compute_phase_cfg_.max_vm_data_depth = size_limits.max_vm_data_depth;