Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions contracts/sysio.bios/sysio.bios.abi
Original file line number Diff line number Diff line change
Expand Up @@ -90,10 +90,6 @@
"name": "max_transaction_net_usage",
"type": "uint32"
},
{
"name": "base_per_transaction_net_usage",
"type": "uint32"
},
{
"name": "net_usage_leeway",
"type": "uint32"
Expand Down
Binary file modified contracts/sysio.bios/sysio.bios.wasm
Binary file not shown.
41 changes: 20 additions & 21 deletions contracts/sysio.system/src/sysio.system.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ namespace sysiosystem {
#ifndef SYSTEM_BLOCKCHAIN_PARAMETERS
set_blockchain_parameters( params );
#else
constexpr size_t param_count = 20;
constexpr size_t param_count = 19;
// an upper bound on the serialized size
char buf[1 + sizeof(params) + param_count];
datastream<char*> stream(buf, sizeof(buf));
Expand All @@ -61,26 +61,25 @@ namespace sysiosystem {
stream << uint8_t(0) << params.max_block_net_usage
<< uint8_t(1) << params.target_block_net_usage_pct
<< uint8_t(2) << params.max_transaction_net_usage
<< uint8_t(3) << params.base_per_transaction_net_usage
<< uint8_t(4) << params.net_usage_leeway
<< uint8_t(5) << params.context_free_discount_net_usage_num
<< uint8_t(6) << params.context_free_discount_net_usage_den

<< uint8_t(7) << params.max_block_cpu_usage
<< uint8_t(8) << params.target_block_cpu_usage_pct
<< uint8_t(9) << params.max_transaction_cpu_usage
<< uint8_t(10) << params.min_transaction_cpu_usage

<< uint8_t(11) << params.max_transaction_lifetime
<< uint8_t(12) << params.max_transaction_delay
<< uint8_t(13) << params.max_inline_action_size
<< uint8_t(14) << params.max_inline_action_depth
<< uint8_t(15) << params.max_authority_depth

<< uint8_t(16) << params.max_action_return_value_size
<< uint8_t(17) << params.max_kv_key_size
<< uint8_t(18) << params.max_kv_value_size
<< uint8_t(19) << params.max_kv_secondary_key_size;
<< uint8_t(3) << params.net_usage_leeway
<< uint8_t(4) << params.context_free_discount_net_usage_num
<< uint8_t(5) << params.context_free_discount_net_usage_den

<< uint8_t(6) << params.max_block_cpu_usage
<< uint8_t(7) << params.target_block_cpu_usage_pct
<< uint8_t(8) << params.max_transaction_cpu_usage
<< uint8_t(9) << params.min_transaction_cpu_usage

<< uint8_t(10) << params.max_transaction_lifetime
<< uint8_t(11) << params.max_transaction_delay
<< uint8_t(12) << params.max_inline_action_size
<< uint8_t(13) << params.max_inline_action_depth
<< uint8_t(14) << params.max_authority_depth

<< uint8_t(15) << params.max_action_return_value_size
<< uint8_t(16) << params.max_kv_key_size
<< uint8_t(17) << params.max_kv_value_size
<< uint8_t(18) << params.max_kv_secondary_key_size;

set_parameters_packed(buf, stream.tellp());
#endif
Expand Down
4 changes: 0 additions & 4 deletions contracts/sysio.system/sysio.system.abi
Original file line number Diff line number Diff line change
Expand Up @@ -204,10 +204,6 @@
"name": "max_transaction_net_usage",
"type": "uint32"
},
{
"name": "base_per_transaction_net_usage",
"type": "uint32"
},
{
"name": "net_usage_leeway",
"type": "uint32"
Expand Down
Binary file modified contracts/sysio.system/sysio.system.wasm
Binary file not shown.
1 change: 0 additions & 1 deletion contracts/tests/sysio.system_tester.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,6 @@ class sysio_system_tester : public TESTER {
("max_block_net_usage", 10000000 + n )
("target_block_net_usage_pct", 10 + n )
("max_transaction_net_usage", 1000000 + n )
("base_per_transaction_net_usage", 100 + n)
("net_usage_leeway", 500 + n )
("context_free_discount_net_usage_num", 1 + n )
("context_free_discount_net_usage_den", 100 + n )
Expand Down
1 change: 0 additions & 1 deletion contracts/tests/sysio.system_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,6 @@ fc::mutable_variant_object config_to_variant( const sysio::chain::chain_config&
( "max_block_net_usage", config.max_block_net_usage )
( "target_block_net_usage_pct", config.target_block_net_usage_pct )
( "max_transaction_net_usage", config.max_transaction_net_usage )
( "base_per_transaction_net_usage", config.base_per_transaction_net_usage )
( "context_free_discount_net_usage_num", config.context_free_discount_net_usage_num )
( "context_free_discount_net_usage_den", config.context_free_discount_net_usage_den )
( "max_block_cpu_usage", config.max_block_cpu_usage )
Expand Down
10 changes: 4 additions & 6 deletions libraries/chain/chain_config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,10 @@ namespace sysio { namespace chain {
SYS_ASSERT( max_transaction_cpu_usage < max_block_cpu_usage, action_validate_exception,
"max transaction cpu usage must be less than max block cpu usage" );

SYS_ASSERT( base_per_transaction_net_usage < max_transaction_net_usage, action_validate_exception,
"base net usage per transaction must be less than the max transaction net usage" );
SYS_ASSERT( (max_transaction_net_usage - base_per_transaction_net_usage) >= config::min_net_usage_delta_between_base_and_max_for_trx,
action_validate_exception,
"max transaction net usage must be at least {} bytes larger than base net usage per transaction",
config::min_net_usage_delta_between_base_and_max_for_trx );
SYS_ASSERT( max_transaction_net_usage >= config::min_max_transaction_net_usage, action_validate_exception,
"max transaction net usage must be at least {} bytes",
config::min_max_transaction_net_usage );

SYS_ASSERT( context_free_discount_net_usage_den > 0, action_validate_exception,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Preserve a minimum transaction NET limit

Removing the base field also removes the only lower-bound validation for max_transaction_net_usage. A value of zero now passes validation whenever max_block_net_usage is positive. transaction_context then caps every non-read-only transaction at this value and rejects every billable action—including a corrective setparams transaction—leaving the chain recoverable only by hard fork. Please preserve a base-independent minimum transaction NET limit and add rejection tests for zero and undersized values.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 2603982: validate() now enforces a base-independent floor, config::min_max_transaction_net_usage = 10 KiB (matching the old effective bound from the delta check), with the recovery rationale documented on the constant. system_host_tests covers zero and floor-1 (both rejected) and the floor value (accepted).

"net usage discount ratio for context free data cannot have a 0 denominator" );
SYS_ASSERT( context_free_discount_net_usage_num <= context_free_discount_net_usage_den, action_validate_exception,
Expand Down
13 changes: 1 addition & 12 deletions libraries/chain/include/sysio/chain/chain_config.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ struct chain_config_v0 {
max_block_net_usage_id,
target_block_net_usage_pct_id,
max_transaction_net_usage_id,
base_per_transaction_net_usage_id,
net_usage_leeway_id,
context_free_discount_net_usage_num_id,
context_free_discount_net_usage_den_id,
Expand All @@ -43,7 +42,6 @@ struct chain_config_v0 {
uint64_t max_block_net_usage; ///< the maxiumum net usage in instructions for a block
uint32_t target_block_net_usage_pct; ///< the target percent (1% == 100, 100%= 10,000) of maximum net usage; exceeding this triggers congestion handling
uint32_t max_transaction_net_usage; ///< the maximum objectively measured net usage that the chain will allow regardless of account limits
uint32_t base_per_transaction_net_usage; ///< the base amount of net usage billed for a transaction to cover incidentals
uint32_t net_usage_leeway;
uint32_t context_free_discount_net_usage_num; ///< the numerator for the discount on net usage of context-free data
uint32_t context_free_discount_net_usage_den; ///< the denominator for the discount on net usage of context-free data
Expand Down Expand Up @@ -79,7 +77,6 @@ struct chain_config_v0 {
return std::tie( lhs.max_block_net_usage,
lhs.target_block_net_usage_pct,
lhs.max_transaction_net_usage,
lhs.base_per_transaction_net_usage,
lhs.net_usage_leeway,
lhs.context_free_discount_net_usage_num,
lhs.context_free_discount_net_usage_den,
Expand All @@ -101,7 +98,6 @@ struct chain_config_v0 {
std::tie( rhs.max_block_net_usage,
rhs.target_block_net_usage_pct,
rhs.max_transaction_net_usage,
rhs.base_per_transaction_net_usage,
rhs.net_usage_leeway,
rhs.context_free_discount_net_usage_num,
rhs.context_free_discount_net_usage_den,
Expand Down Expand Up @@ -129,7 +125,6 @@ struct chain_config_v0 {
return out << "Max Block Net Usage: " << max_block_net_usage << ", "
<< "Target Block Net Usage Percent: " << ((double)target_block_net_usage_pct / (double)config::percent_1) << "%, "
<< "Max Transaction Net Usage: " << max_transaction_net_usage << ", "
<< "Base Per-Transaction Net Usage: " << base_per_transaction_net_usage << ", "
<< "Net Usage Leeway: " << net_usage_leeway << ", "
<< "Context-Free Data Net Usage Discount: " << (double)context_free_discount_net_usage_num * 100.0 / (double)context_free_discount_net_usage_den << "% , "

Expand Down Expand Up @@ -167,7 +162,7 @@ using config_range = data_range<chain_config, config_entry_validator>;

FC_REFLECT(sysio::chain::chain_config_v0,
(max_block_net_usage)(target_block_net_usage_pct)
(max_transaction_net_usage)(base_per_transaction_net_usage)(net_usage_leeway)
(max_transaction_net_usage)(net_usage_leeway)
(context_free_discount_net_usage_num)(context_free_discount_net_usage_den)

(max_block_cpu_usage)(target_block_cpu_usage_pct)
Expand Down Expand Up @@ -207,9 +202,6 @@ inline DataStream &operator<<(DataStream &s, const sysio::chain::data_entry<sysi
case chain_config_v0::max_transaction_net_usage_id:
fc::raw::pack(s, entry.config.max_transaction_net_usage);
break;
case chain_config_v0::base_per_transaction_net_usage_id:
fc::raw::pack(s, entry.config.base_per_transaction_net_usage);
break;
case chain_config_v0::net_usage_leeway_id:
fc::raw::pack(s, entry.config.net_usage_leeway);
break;
Expand Down Expand Up @@ -287,9 +279,6 @@ inline DataStream &operator>>(DataStream &s, sysio::chain::data_entry<sysio::cha
case chain_config_v0::max_transaction_net_usage_id:
fc::raw::unpack(s, entry.config.max_transaction_net_usage);
break;
case chain_config_v0::base_per_transaction_net_usage_id:
fc::raw::unpack(s, entry.config.base_per_transaction_net_usage);
break;
case chain_config_v0::net_usage_leeway_id:
fc::raw::unpack(s, entry.config.net_usage_leeway);
break;
Expand Down
9 changes: 5 additions & 4 deletions libraries/chain/include/sysio/chain/config.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ namespace sysio::chain::config {
static constexpr uint32_t default_max_block_net_usage = 1024 * 1024; /// at 500ms blocks and 200byte trx, this enables ~10,000 TPS burst
static constexpr uint32_t default_target_block_net_usage_pct = 10 * percent_1; /// we target 1000 TPS
static constexpr uint32_t default_max_transaction_net_usage = default_max_block_net_usage / 2;
static constexpr uint32_t default_base_per_transaction_net_usage = 12; // retained for chain_config compat; no longer used in billing (see billable_net_per_action_overhead)
static constexpr uint32_t default_net_usage_leeway = 500; // bytes of NET leeway for transactions
static constexpr uint32_t default_context_free_discount_net_usage_num = 0; // Wire does not support discount of context free data
static constexpr uint32_t default_context_free_discount_net_usage_den = 1; // Wire does not support discount of context free data
Expand Down Expand Up @@ -100,9 +99,11 @@ namespace sysio::chain::config {
static constexpr uint32_t default_max_wasm_pages = 528;
static constexpr uint32_t default_max_wasm_call_depth = 251;

static constexpr uint32_t min_net_usage_delta_between_base_and_max_for_trx = 10*1024;
// Should be large enough to allow recovery from badly set blockchain parameters without a hard fork
// (unless net_usage_leeway is set to 0 and so are the net limits of all accounts that can help with resetting blockchain parameters).
static constexpr uint32_t min_max_transaction_net_usage = 10*1024;
// Lower bound enforced on max_transaction_net_usage by chain_config::validate(). Should be large
// enough that a corrective setparams transaction always fits, allowing recovery from badly set
// blockchain parameters without a hard fork (unless net_usage_leeway is set to 0 and so are the
// net limits of all accounts that can help with resetting blockchain parameters).

static constexpr uint32_t fixed_net_overhead_of_packed_trx = 16; // fixed NET overhead per packed_transaction (sigs, extensions, header)

Expand Down
1 change: 0 additions & 1 deletion libraries/chain/include/sysio/chain/genesis_state.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ struct genesis_state {
.max_block_net_usage = config::default_max_block_net_usage,
.target_block_net_usage_pct = config::default_target_block_net_usage_pct,
.max_transaction_net_usage = config::default_max_transaction_net_usage,
.base_per_transaction_net_usage = config::default_base_per_transaction_net_usage,
.net_usage_leeway = config::default_net_usage_leeway,
.context_free_discount_net_usage_num = config::default_context_free_discount_net_usage_num,
.context_free_discount_net_usage_den = config::default_context_free_discount_net_usage_den,
Expand Down
1 change: 0 additions & 1 deletion libraries/state_history/abi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,6 @@ extern const char* const state_history_plugin_abi = R"({
{ "type": "uint64", "name": "max_block_net_usage" },
{ "type": "uint32", "name": "target_block_net_usage_pct" },
{ "type": "uint32", "name": "max_transaction_net_usage" },
{ "type": "uint32", "name": "base_per_transaction_net_usage" },
{ "type": "uint32", "name": "net_usage_leeway" },
{ "type": "uint32", "name": "context_free_discount_net_usage_num" },
{ "type": "uint32", "name": "context_free_discount_net_usage_den" },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,6 @@ datastream<ST>& operator<<(datastream<ST>& ds, const history_serial_wrapper_stat
fc::raw::pack(ds, as_type<uint64_t>(obj.obj.max_block_net_usage));
fc::raw::pack(ds, as_type<uint32_t>(obj.obj.target_block_net_usage_pct));
fc::raw::pack(ds, as_type<uint32_t>(obj.obj.max_transaction_net_usage));
fc::raw::pack(ds, as_type<uint32_t>(obj.obj.base_per_transaction_net_usage));
fc::raw::pack(ds, as_type<uint32_t>(obj.obj.net_usage_leeway));
fc::raw::pack(ds, as_type<uint32_t>(obj.obj.context_free_discount_net_usage_num));
fc::raw::pack(ds, as_type<uint32_t>(obj.obj.context_free_discount_net_usage_den));
Expand Down
1 change: 0 additions & 1 deletion tests/PerformanceHarness/genesis.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
"max_block_net_usage": 41943040,
"target_block_net_usage_pct": 1000,
"max_transaction_net_usage": 524288,
"base_per_transaction_net_usage": 12,
"net_usage_leeway": 500,
"context_free_discount_net_usage_num": 20,
"context_free_discount_net_usage_den": 100,
Expand Down
1 change: 0 additions & 1 deletion tests/TestHarness/launcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,6 @@ def init_genesis(self):
'max_block_net_usage': 1048576,
'target_block_net_usage_pct': 10000,
'max_transaction_net_usage': 524288,
'base_per_transaction_net_usage': 12,
'net_usage_leeway': 500,
'context_free_discount_net_usage_num': 0,
'context_free_discount_net_usage_den': 1,
Expand Down
1 change: 0 additions & 1 deletion tests/chain_plugin_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,6 @@ BOOST_AUTO_TEST_CASE( get_consensus_parameters ) try {
BOOST_TEST(v0config.max_block_cpu_usage == t.control->get_global_properties().configuration.max_block_cpu_usage);
BOOST_TEST(v0config.target_block_net_usage_pct == t.control->get_global_properties().configuration.target_block_net_usage_pct);
BOOST_TEST(v0config.max_transaction_net_usage == t.control->get_global_properties().configuration.max_transaction_net_usage);
BOOST_TEST(v0config.base_per_transaction_net_usage == t.control->get_global_properties().configuration.base_per_transaction_net_usage);
BOOST_TEST(v0config.net_usage_leeway == t.control->get_global_properties().configuration.net_usage_leeway);
BOOST_TEST(v0config.context_free_discount_net_usage_num == t.control->get_global_properties().configuration.context_free_discount_net_usage_num);
BOOST_TEST(v0config.context_free_discount_net_usage_den == t.control->get_global_properties().configuration.context_free_discount_net_usage_den);
Expand Down
4 changes: 2 additions & 2 deletions tests/sysio_util_snapshot_info_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
"file": "unittests/snapshots/snap_v1.bin.gz",
"result": {
"version": 1,
"chain_id": "144035215e20fd016e2b4b065349c959a1070fcbb0dc3f4784f3130685e774fc",
"head_block_id": "0000001d2f21ed6dcb47cd64fbb2745d92b4ed06f31e29349f0ee4b3b287d4d3",
"chain_id": "087244f65e31c0106a58554b8f855e30ae657efb98c6c40348bb14db8bdb3f8e",
"head_block_id": "0000001dd8ac497760f09f90d77e2eb78afbdfe5ff7bae0bb19b10c5b717042f",
"head_block_num": 29,
"head_block_time": "2025-01-01T00:00:14.000"
}
Expand Down
1 change: 0 additions & 1 deletion tutorials/bios-boot-tutorial/genesis.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
"max_block_net_usage": 1048576,
"target_block_net_usage_pct": 1000,
"max_transaction_net_usage": 524288,
"base_per_transaction_net_usage": 12,
"net_usage_leeway": 500,
"context_free_discount_net_usage_num": 20,
"context_free_discount_net_usage_den": 100,
Expand Down
354 changes: 177 additions & 177 deletions unittests/deep-mind/deep-mind.log

Large diffs are not rendered by default.

Binary file modified unittests/snapshots/blocks.index
Binary file not shown.
Binary file modified unittests/snapshots/blocks.log
Binary file not shown.
Binary file modified unittests/snapshots/snap_v1.bin.gz
Binary file not shown.
Binary file modified unittests/snapshots/snap_v1.bin.json.gz
Binary file not shown.
Binary file modified unittests/snapshots/snap_v1.json.gz
Binary file not shown.
1 change: 0 additions & 1 deletion unittests/sysio_system_tester.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@ class sysio_system_tester : public validating_tester {
("max_block_net_usage", 10000000 + n )
("target_block_net_usage_pct", 10 + n )
("max_transaction_net_usage", 1000000 + n )
("base_per_transaction_net_usage", 100 + n)
("net_usage_leeway", 500 + n )
("context_free_discount_net_usage_num", 1 + n )
("context_free_discount_net_usage_den", 100 + n )
Expand Down
Loading
Loading