@@ -51,6 +51,7 @@ class subjective_billing {
5151 using account_subjective_bill_cache = std::unordered_map<chain::account_name, subjective_billing_info>;
5252
5353 bool _disabled = false ;
54+ bool _disabled_payer_billing = false ;
5455 fc::microseconds _subjective_account_cpu_allowed{config::default_subjective_cpu_us};
5556 trx_cache_index _trx_cache_index;
5657 account_subjective_bill_cache _account_subjective_bill_cache;
@@ -120,6 +121,8 @@ class subjective_billing {
120121 fc::microseconds get_subjective_account_cpu_allowed () const { return _subjective_account_cpu_allowed; }
121122 void set_disabled (bool disable) { _disabled = disable; }
122123 bool is_disabled () const { return _disabled; }
124+ void disable_payer_billing (bool disable) { _disabled_payer_billing = disable; }
125+ bool is_payer_billing_disabled () const { return _disabled_payer_billing; }
123126 void disable_account ( chain::account_name a ) { _disabled_accounts.emplace ( a ); }
124127 bool is_account_disabled (const account_name& a ) const { return _disabled || _disabled_accounts.contains ( a ); }
125128 bool is_any_account_disabled (const action_payers_t & accounts ) const {
@@ -133,10 +136,12 @@ class subjective_billing {
133136 if (_disabled) return ;
134137 if (_trx_cache_index.contains (id)) return ;
135138 account_subjective_cpu_bill_t account_subjective_cpu_bill;
136- for (const auto & [a, b] : accounts_billing) {
137- if (!_disabled_accounts.contains (a)) {
138- account_subjective_cpu_bill[a] = fc::microseconds (b.cpu_usage_us );
139- _account_subjective_bill_cache[a].pending_cpu_us += b.cpu_usage_us ;
139+ if (!_disabled_payer_billing) {
140+ for (const auto & [a, b] : accounts_billing) {
141+ if (!_disabled_accounts.contains (a)) {
142+ account_subjective_cpu_bill[a] = fc::microseconds (b.cpu_usage_us );
143+ _account_subjective_bill_cache[a].pending_cpu_us += b.cpu_usage_us ;
144+ }
140145 }
141146 }
142147 for (const auto & [a, b] : auth_cpu) {
@@ -156,9 +161,11 @@ class subjective_billing {
156161 void subjective_bill_failure ( const accounts_billing_t & accounts_billing, const account_subjective_cpu_bill_t & auth_cpu, const fc::time_point& now ) {
157162 if (_disabled) return ;
158163 const auto time_ordinal = time_ordinal_for (now);
159- for (const auto & [a, b] : accounts_billing) {
160- if (!_disabled_accounts.contains (a)) {
161- _account_subjective_bill_cache[a].expired_accumulator .add (b.cpu_usage_us , time_ordinal, _expired_accumulator_average_window);
164+ if (!_disabled_payer_billing) {
165+ for (const auto & [a, b] : accounts_billing) {
166+ if (!_disabled_accounts.contains (a)) {
167+ _account_subjective_bill_cache[a].expired_accumulator .add (b.cpu_usage_us , time_ordinal, _expired_accumulator_average_window);
168+ }
162169 }
163170 }
164171 for (const auto & [a, b] : auth_cpu) {
0 commit comments