From a09f2567b78b967bc298ae335d52f8c4093ea4d4 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Mon, 4 Sep 2023 22:49:52 +0000 Subject: [PATCH] Add -datacarriercost option to adjust policy vsize of datacarrier bytes --- src/init.cpp | 5 +++++ src/policy/policy.h | 2 ++ src/policy/settings.cpp | 1 + src/policy/settings.h | 1 + 4 files changed, 9 insertions(+) diff --git a/src/init.cpp b/src/init.cpp index f528ca85d2..9974c4fec7 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -583,6 +583,7 @@ void SetupServerArgs(ArgsManager& argsman) argsman.AddArg("-bytespersigop", strprintf("Equivalent bytes per sigop in transactions for relay and mining (default: %u)", DEFAULT_BYTES_PER_SIGOP), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); argsman.AddArg("-bytespersigopstrict", strprintf("Minimum bytes per sigop in transactions we relay and mine (default: %u)", DEFAULT_BYTES_PER_SIGOP_STRICT), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); argsman.AddArg("-datacarrier", strprintf("Relay and mine data carrier transactions (default: %u)", DEFAULT_ACCEPT_DATACARRIER), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); + argsman.AddArg("-datacarriercost", strprintf("Treat extra data in transactions as at least N vbytes per actual byte (default: %s)", DEFAULT_WEIGHT_PER_DATA_BYTE / 4.0), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); argsman.AddArg("-datacarrierfullcount", strprintf("Apply datacarriersize limit to all known datacarrier methods (default: %s)", DEFAULT_DATACARRIER_FULLCOUNT), ArgsManager::ALLOW_ANY | (DEFAULT_DATACARRIER_FULLCOUNT ? uint32_t{ArgsManager::DEBUG_ONLY} : 0), OptionsCategory::NODE_RELAY); argsman.AddArg("-datacarriersize", strprintf("Maximum size of data in data carrier transactions we relay and mine (default: %u)", MAX_OP_RETURN_RELAY), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); argsman.AddArg("-mempoolfullrbf", strprintf("Accept transaction replace-by-fee without requiring replaceability signaling (default: %u)", DEFAULT_MEMPOOL_FULL_RBF), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY); @@ -968,6 +969,10 @@ bool AppInitParameterInteraction(const ArgsManager& args, bool use_syscall_sandb } } + if (auto parsed = args.GetFixedPointArg("-datacarriercost", 2)) { + g_weight_per_data_byte = ((*parsed * WITNESS_SCALE_FACTOR) + 99) / 100; + } + nBytesPerSigOp = args.GetIntArg("-bytespersigop", nBytesPerSigOp); nBytesPerSigOpStrict = args.GetIntArg("-bytespersigopstrict", nBytesPerSigOpStrict); diff --git a/src/policy/policy.h b/src/policy/policy.h index cdb0eabcb2..b653064595 100644 --- a/src/policy/policy.h +++ b/src/policy/policy.h @@ -45,6 +45,8 @@ static constexpr unsigned int DEFAULT_INCREMENTAL_RELAY_FEE{1000}; static constexpr unsigned int DEFAULT_BYTES_PER_SIGOP{20}; /** Default for -bytespersigopstrict */ static constexpr unsigned int DEFAULT_BYTES_PER_SIGOP_STRICT{20}; +/** Default for -datacarriercost (multiplied by WITNESS_SCALE_FACTOR) */ +static constexpr unsigned int DEFAULT_WEIGHT_PER_DATA_BYTE{1}; /** Default for -permitbaremultisig */ static constexpr bool DEFAULT_PERMIT_BAREMULTISIG{true}; /** The maximum number of witness stack items in a standard P2WSH script */ diff --git a/src/policy/settings.cpp b/src/policy/settings.cpp index 6200b4bd30..a202a9495c 100644 --- a/src/policy/settings.cpp +++ b/src/policy/settings.cpp @@ -9,3 +9,4 @@ unsigned int nBytesPerSigOp = DEFAULT_BYTES_PER_SIGOP; unsigned int nBytesPerSigOpStrict = DEFAULT_BYTES_PER_SIGOP_STRICT; +unsigned int g_weight_per_data_byte = DEFAULT_WEIGHT_PER_DATA_BYTE; diff --git a/src/policy/settings.h b/src/policy/settings.h index 14fb9b769b..47ea346283 100644 --- a/src/policy/settings.h +++ b/src/policy/settings.h @@ -8,5 +8,6 @@ extern unsigned int nBytesPerSigOp; extern unsigned int nBytesPerSigOpStrict; +extern unsigned int g_weight_per_data_byte; #endif // BITCOIN_POLICY_SETTINGS_H