Skip to content

Commit

Permalink
Merge pull request #3901 from jayz22/so
Browse files Browse the repository at this point in the history
Add config flag to override all initial Soroban limits

Reviewed-by: sisuresh
  • Loading branch information
latobarita authored Aug 29, 2023
2 parents a4d6230 + 9e4e311 commit bf43636
Show file tree
Hide file tree
Showing 4 changed files with 159 additions and 19 deletions.
106 changes: 88 additions & 18 deletions src/ledger/NetworkConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,40 +31,55 @@ createConfigSettingEntry(ConfigSettingEntry const& configSetting,
}

ConfigSettingEntry
initialMaxContractSizeEntry()
initialMaxContractSizeEntry(Config const& cfg)
{
ConfigSettingEntry entry(CONFIG_SETTING_CONTRACT_MAX_SIZE_BYTES);

entry.contractMaxSizeBytes() =
InitialSorobanNetworkConfig::MAX_CONTRACT_SIZE;
if (cfg.TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE)
{
entry.contractMaxSizeBytes() =
TestOverrideSorobanNetworkConfig::MAX_CONTRACT_SIZE;
}

return entry;
}

ConfigSettingEntry
initialMaxContractDataKeySizeEntry()
initialMaxContractDataKeySizeEntry(Config const& cfg)
{
ConfigSettingEntry entry(CONFIG_SETTING_CONTRACT_DATA_KEY_SIZE_BYTES);

entry.contractDataKeySizeBytes() =
InitialSorobanNetworkConfig::MAX_CONTRACT_DATA_KEY_SIZE_BYTES;
if (cfg.TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE)
{
entry.contractDataKeySizeBytes() =
TestOverrideSorobanNetworkConfig::MAX_CONTRACT_DATA_KEY_SIZE_BYTES;
}

return entry;
}

ConfigSettingEntry
initialMaxContractDataEntrySizeEntry()
initialMaxContractDataEntrySizeEntry(Config const& cfg)
{
ConfigSettingEntry entry(CONFIG_SETTING_CONTRACT_DATA_ENTRY_SIZE_BYTES);

entry.contractDataEntrySizeBytes() =
InitialSorobanNetworkConfig::MAX_CONTRACT_DATA_ENTRY_SIZE_BYTES;
if (cfg.TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE)
{
entry.contractDataEntrySizeBytes() = TestOverrideSorobanNetworkConfig::
MAX_CONTRACT_DATA_ENTRY_SIZE_BYTES;
}

return entry;
}

ConfigSettingEntry
initialContractComputeSettingsEntry()
initialContractComputeSettingsEntry(Config const& cfg)
{
ConfigSettingEntry entry(CONFIG_SETTING_CONTRACT_COMPUTE_V0);
auto& e = entry.contractCompute();
Expand All @@ -77,11 +92,20 @@ initialContractComputeSettingsEntry()
InitialSorobanNetworkConfig::FEE_RATE_PER_INSTRUCTIONS_INCREMENT;
e.txMemoryLimit = InitialSorobanNetworkConfig::MEMORY_LIMIT;

if (cfg.TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE)
{
e.ledgerMaxInstructions =
TestOverrideSorobanNetworkConfig::LEDGER_MAX_INSTRUCTIONS;
e.txMaxInstructions =
TestOverrideSorobanNetworkConfig::TX_MAX_INSTRUCTIONS;
e.txMemoryLimit = TestOverrideSorobanNetworkConfig::MEMORY_LIMIT;
}

return entry;
}

ConfigSettingEntry
initialContractLedgerAccessSettingsEntry()
initialContractLedgerAccessSettingsEntry(Config const& cfg)
{
ConfigSettingEntry entry(CONFIG_SETTING_CONTRACT_LEDGER_COST_V0);
auto& e = entry.contractLedgerCost();
Expand Down Expand Up @@ -114,6 +138,25 @@ initialContractLedgerAccessSettingsEntry()
e.bucketListWriteFeeGrowthFactor =
InitialSorobanNetworkConfig::BUCKET_LIST_WRITE_FEE_GROWTH_FACTOR;

if (cfg.TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE)
{
e.ledgerMaxReadLedgerEntries =
TestOverrideSorobanNetworkConfig::LEDGER_MAX_READ_LEDGER_ENTRIES;
e.ledgerMaxReadBytes =
TestOverrideSorobanNetworkConfig::LEDGER_MAX_READ_BYTES;
e.ledgerMaxWriteLedgerEntries =
TestOverrideSorobanNetworkConfig::LEDGER_MAX_WRITE_LEDGER_ENTRIES;
e.ledgerMaxWriteBytes =
TestOverrideSorobanNetworkConfig::LEDGER_MAX_WRITE_BYTES;
e.txMaxReadLedgerEntries =
TestOverrideSorobanNetworkConfig::TX_MAX_READ_LEDGER_ENTRIES;
e.txMaxReadBytes = TestOverrideSorobanNetworkConfig::TX_MAX_READ_BYTES;
e.txMaxWriteLedgerEntries =
TestOverrideSorobanNetworkConfig::TX_MAX_WRITE_LEDGER_ENTRIES;
e.txMaxWriteBytes =
TestOverrideSorobanNetworkConfig::TX_MAX_WRITE_BYTES;
}

return entry;
}

Expand All @@ -129,7 +172,7 @@ initialContractHistoricalDataSettingsEntry()
}

ConfigSettingEntry
initialContractEventsSettingsEntry()
initialContractEventsSettingsEntry(Config const& cfg)
{
ConfigSettingEntry entry(CONFIG_SETTING_CONTRACT_EVENTS_V0);
auto& e = entry.contractEvents();
Expand All @@ -139,11 +182,16 @@ initialContractEventsSettingsEntry()
e.feeContractEvents1KB =
InitialSorobanNetworkConfig::FEE_CONTRACT_EVENTS_SIZE_1KB;

if (cfg.TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE)
{
e.txMaxContractEventsSizeBytes =
TestOverrideSorobanNetworkConfig::TX_MAX_CONTRACT_EVENTS_SIZE_BYTES;
}
return entry;
}

ConfigSettingEntry
initialContractBandwidthSettingsEntry()
initialContractBandwidthSettingsEntry(Config const& cfg)
{
ConfigSettingEntry entry(CONFIG_SETTING_CONTRACT_BANDWIDTH_V0);
auto& e = entry.contractBandwidth();
Expand All @@ -154,15 +202,29 @@ initialContractBandwidthSettingsEntry()

e.feeTxSize1KB = InitialSorobanNetworkConfig::FEE_TRANSACTION_SIZE_1KB;

if (cfg.TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE)
{
e.ledgerMaxTxsSizeBytes = TestOverrideSorobanNetworkConfig::
LEDGER_MAX_TRANSACTION_SIZES_BYTES;
e.txMaxSizeBytes = TestOverrideSorobanNetworkConfig::TX_MAX_SIZE_BYTES;
}

return entry;
}

ConfigSettingEntry
initialContractExecutionLanesSettingsEntry()
initialContractExecutionLanesSettingsEntry(Config const& cfg)
{
ConfigSettingEntry entry(CONFIG_SETTING_CONTRACT_EXECUTION_LANES);
auto& e = entry.contractExecutionLanes();
e.ledgerMaxTxCount = InitialSorobanNetworkConfig::LEDGER_MAX_TX_COUNT;

if (cfg.TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE)
{
e.ledgerMaxTxCount =
TestOverrideSorobanNetworkConfig::LEDGER_MAX_TX_COUNT;
}

return entry;
}

Expand Down Expand Up @@ -309,6 +371,12 @@ initialStateExpirationSettings(Config const& cfg)
InitialSorobanNetworkConfig::PERSISTENT_RENT_RATE_DENOMINATOR;
entry.stateExpirationSettings().tempRentRateDenominator =
InitialSorobanNetworkConfig::TEMP_RENT_RATE_DENOMINATOR;

if (cfg.TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE)
{
entry.stateExpirationSettings().maxEntryExpiration =
TestOverrideSorobanNetworkConfig::MAXIMUM_ENTRY_LIFETIME;
}
return entry;
}

Expand Down Expand Up @@ -590,19 +658,21 @@ SorobanNetworkConfig::createLedgerEntriesForV20(AbstractLedgerTxn& ltx,
Application& app)
{
#ifdef ENABLE_NEXT_PROTOCOL_VERSION_UNSAFE_FOR_PRODUCTION
createConfigSettingEntry(initialMaxContractSizeEntry(), ltx);
createConfigSettingEntry(initialMaxContractDataKeySizeEntry(), ltx);
createConfigSettingEntry(initialMaxContractDataEntrySizeEntry(), ltx);
createConfigSettingEntry(initialContractComputeSettingsEntry(), ltx);
createConfigSettingEntry(initialContractLedgerAccessSettingsEntry(), ltx);
auto const& cfg = app.getConfig();
createConfigSettingEntry(initialMaxContractSizeEntry(cfg), ltx);
createConfigSettingEntry(initialMaxContractDataKeySizeEntry(cfg), ltx);
createConfigSettingEntry(initialMaxContractDataEntrySizeEntry(cfg), ltx);
createConfigSettingEntry(initialContractComputeSettingsEntry(cfg), ltx);
createConfigSettingEntry(initialContractLedgerAccessSettingsEntry(cfg),
ltx);
createConfigSettingEntry(initialContractHistoricalDataSettingsEntry(), ltx);
createConfigSettingEntry(initialContractEventsSettingsEntry(), ltx);
createConfigSettingEntry(initialContractBandwidthSettingsEntry(), ltx);
createConfigSettingEntry(initialContractExecutionLanesSettingsEntry(), ltx);
createConfigSettingEntry(initialContractEventsSettingsEntry(cfg), ltx);
createConfigSettingEntry(initialContractBandwidthSettingsEntry(cfg), ltx);
createConfigSettingEntry(initialContractExecutionLanesSettingsEntry(cfg),
ltx);
createConfigSettingEntry(initialCpuCostParamsEntry(), ltx);
createConfigSettingEntry(initialMemCostParamsEntry(), ltx);
createConfigSettingEntry(initialStateExpirationSettings(app.getConfig()),
ltx);
createConfigSettingEntry(initialStateExpirationSettings(cfg), ltx);
createConfigSettingEntry(initialBucketListSizeWindow(app), ltx);
createConfigSettingEntry(initialEvictionIterator(), ltx);
#endif
Expand Down
57 changes: 56 additions & 1 deletion src/ledger/NetworkConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ struct InitialSorobanNetworkConfig
static constexpr uint32_t TX_MAX_SIZE_BYTES =
MinimumSorobanNetworkConfig::TX_MAX_SIZE_BYTES;
static constexpr uint32_t LEDGER_MAX_TRANSACTION_SIZES_BYTES =
MinimumSorobanNetworkConfig::TX_MAX_SIZE_BYTES;
TX_MAX_SIZE_BYTES;
static constexpr int64_t FEE_TRANSACTION_SIZE_1KB = 2'000;

// Contract events settings
Expand Down Expand Up @@ -143,6 +143,61 @@ struct InitialSorobanNetworkConfig
static constexpr uint32_t LEDGER_MAX_TX_COUNT = 1;
};

// Defines the subset of the `InitialSorobanNetworkConfig` to be overridden for
// testing, enabled by `Config::TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE`.
struct TestOverrideSorobanNetworkConfig
{
// Contract size settings
static constexpr uint32_t MAX_CONTRACT_SIZE =
InitialSorobanNetworkConfig::MAX_CONTRACT_SIZE * 32;

// Contract data settings
static constexpr uint32_t MAX_CONTRACT_DATA_KEY_SIZE_BYTES =
InitialSorobanNetworkConfig::MAX_CONTRACT_DATA_KEY_SIZE_BYTES * 10;
static constexpr uint32_t MAX_CONTRACT_DATA_ENTRY_SIZE_BYTES =
InitialSorobanNetworkConfig::MAX_CONTRACT_DATA_ENTRY_SIZE_BYTES * 10;

// Compute settings
static constexpr int64_t TX_MAX_INSTRUCTIONS =
InitialSorobanNetworkConfig::TX_MAX_INSTRUCTIONS * 50;
static constexpr int64_t LEDGER_MAX_INSTRUCTIONS = TX_MAX_INSTRUCTIONS;
static constexpr uint32_t MEMORY_LIMIT =
InitialSorobanNetworkConfig::MEMORY_LIMIT * 10;

// Ledger access settings
static constexpr uint32_t TX_MAX_READ_LEDGER_ENTRIES =
InitialSorobanNetworkConfig::TX_MAX_READ_LEDGER_ENTRIES * 10;
static constexpr uint32_t TX_MAX_READ_BYTES =
InitialSorobanNetworkConfig::TX_MAX_READ_BYTES * 10;
static constexpr uint32_t TX_MAX_WRITE_LEDGER_ENTRIES =
InitialSorobanNetworkConfig::TX_MAX_WRITE_LEDGER_ENTRIES * 10;
static constexpr uint32_t TX_MAX_WRITE_BYTES =
InitialSorobanNetworkConfig::TX_MAX_WRITE_BYTES * 10;
static constexpr uint32_t LEDGER_MAX_READ_LEDGER_ENTRIES =
TX_MAX_READ_LEDGER_ENTRIES;
static constexpr uint32_t LEDGER_MAX_READ_BYTES = TX_MAX_READ_BYTES;
static constexpr uint32_t LEDGER_MAX_WRITE_LEDGER_ENTRIES =
TX_MAX_WRITE_LEDGER_ENTRIES;
static constexpr uint32_t LEDGER_MAX_WRITE_BYTES = TX_MAX_WRITE_BYTES;

// Bandwidth settings
static constexpr uint32_t TX_MAX_SIZE_BYTES =
InitialSorobanNetworkConfig::TX_MAX_SIZE_BYTES * 5;
static constexpr uint32_t LEDGER_MAX_TRANSACTION_SIZES_BYTES =
TX_MAX_SIZE_BYTES;

// Contract events settings
static constexpr uint32_t TX_MAX_CONTRACT_EVENTS_SIZE_BYTES =
InitialSorobanNetworkConfig::TX_MAX_CONTRACT_EVENTS_SIZE_BYTES * 20;

// State expiration settings
static constexpr uint32_t MAXIMUM_ENTRY_LIFETIME = 6307200; // 1 year

// General execution settings
static constexpr uint32_t LEDGER_MAX_TX_COUNT =
InitialSorobanNetworkConfig::LEDGER_MAX_TX_COUNT * 5;
};

// Wrapper for the contract-related network configuration.
class SorobanNetworkConfig
{
Expand Down
12 changes: 12 additions & 0 deletions src/main/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,7 @@ Config::Config() : NODE_SEED(SecretKey::random())
#ifdef ENABLE_NEXT_PROTOCOL_VERSION_UNSAFE_FOR_PRODUCTION
ENABLE_SOROBAN_DIAGNOSTIC_EVENTS = false;
TESTING_MINIMUM_PERSISTENT_ENTRY_LIFETIME = 0;
TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE = false;
#endif

#ifdef BUILD_TESTS
Expand Down Expand Up @@ -1473,6 +1474,17 @@ Config::processConfig(std::shared_ptr<cpptoml::table> t)
"Overriding MINIMUM_PERSISTENT_ENTRY_LIFETIME to {}",
TESTING_MINIMUM_PERSISTENT_ENTRY_LIFETIME);
}
else if (item.first == "TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE")
{
TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE = readBool(item);

if (TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE)
{
LOG_WARNING(DEFAULT_LOG,
"Overriding Soroban limits with "
"TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE");
}
}
#endif
else if (item.first == "ARTIFICIALLY_SLEEP_MAIN_THREAD_FOR_TESTING")
{
Expand Down
3 changes: 3 additions & 0 deletions src/main/Config.h
Original file line number Diff line number Diff line change
Expand Up @@ -576,6 +576,9 @@ class Config : public std::enable_shared_from_this<Config>
// Override the initial hardcoded MINIMUM_PERSISTENT_ENTRY_LIFETIME
// for testing.
uint32_t TESTING_MINIMUM_PERSISTENT_ENTRY_LIFETIME;

// Increase all initial max limits to higher values for testing
bool TESTING_SOROBAN_HIGH_LIMIT_OVERRIDE;
#endif

#ifdef BUILD_TESTS
Expand Down

0 comments on commit bf43636

Please sign in to comment.