This updates the sampleconfig package to make use of Go's embed
functionality introduced in Go 1.16 which is acceptable since the
containing module requires Go 1.19.
Embedded files are preferable because they bring the benefits of both
external files in the repository that are easier to work with for
external tools and the ability to access their content programmatically
without having to deal with the various issues typically brought about
by programmatically accessing external files.
Also, when this was last updated to change the exported variable for
dcrd's sample config file over to a function (so it can't be mutated and
the implementation details can be changed if needed), the case for
dcrctl was missed. Moreover, the existence of both configs makes the
func name FileContents ambiguous.
Unfortunately, those things can't be changed now without causing a major
module version bump to the main dcrd module which we really want to
avoid.
So, in order to address those things without needing a major module
version bump, this deprecates the FileContents func and
DcrctlSampleConfig variable and introduces two new functions named Dcrd
and Dcrctl that return the respective embedded sample configs.
Now that the old low-fee/free tx relay policy has been removed, there is
no longer any need to consider a block priority size for block templates
since the option only applied to handling prioritization of low-fee/free
transactions.
Consequently, this deprecates the --blockprioritysize CLI option and
removes the associated code that propagates the configuration option to
the block template generator code.
Now that the old low-fee/free tx relay policy has been removed, there is
no longer any need to consider a minimum block size for block templates
since the option only applied to handling low-fee/free transactions.
Consequently, this deprecates the --blockminsize CLI option and removes
the associated code that changes behavior based on the option.
This deprecates the --limitfreerelay CLI option and removes the
associated code that changes behavior based on the option.
This is part of the overall removal of the low-fee/free tx relay policy
and associated rate limiting.
Prior to the introduction of child-pays-for-parent (CPFP), it was
possible for transactions to essentially become stuck forever if they
didn't pay a high enough fee for miners to include them in a block.
In order to prevent this, a policy was introduced to allow relaying of
low-fee/free transactions based on a priority that is calculated based
on the fee as well as the age of coins being spent. This means that the
priority slowly increases over time as the coins age to ensure such
transactions would eventually be relayed and mined. Further, in order
to prevent abuse the behavior could otherwise allow, this policy
includes additional rate-limiting of these types of transactions.
While the policy served its purpose in the past, there are some
downsides such as:
- A confusing UX where transactions that don't pay enough fees and also
aren't old enough to meet the dynamically changing priority
requirements are rejected due to having insufficient priority instead
of not paying enough fees as the user might expect
- The priority requirements dynamically change over time which leads to
non-deterministic behavior and thus ultimately results in what appear
to be intermittent/transient failures to users
Since the policy is no longer necessary given said transactions can now
simply use CPFP to increase the overall fee of the entire transaction
chain thereby ensuring they are mined, this is the first of a series of
commits to remove the aforementioned policy along with associated rate
limiting from the mempool and transaction relay.
Specifically, it deprecates the --norelaypriority CLI option and removes
the associated code that changes behavior based on the option.
This removes support for the address index which also entails removal of
the --addrindex and --dropaddrindex flags as well as all related
indexing infrastructure.
The legacy index is now automatically dropped if it exists to ensure
clients that are upgrading are not left with unneeded data in their
databases.
This is part of the overall removal of the deprecated address index.
This updates the sample config definition to replace the deprecated
nodnsseed argument that existed for the old DNS seeding method to the
new noseeders option that is used with HTTPS seeding instead.
This adds the three currently missing config values related to logging
to the "Debug" section of the sample config, and renames the section
to "Logging" instead.
The description of the debuglevel option is also modified to describe
it as configuring the log verbosity, since it is not only related to
enabling debug logs.
This adds a utxocachemaxsize configuration option which represents the
maximum size in MiB of the utxo cache. The default value is 150 MiB,
the minimum value is 25 MiB, and the maximum value is 32768 MiB
(32 GiB).
This updates the installation and updating section of the README.md
files in the various packages to call out the module they are a part of
and instruct the consumer to use the standard go tooling instead of the
old, and no longer correct, package-based 'go get -u' instructions.
This modifies the sampleconfig package to contain a single function
named FileContents instead of a constant.
This is being done because changing a constant is technically a major
semver breaking change while changing the contents returned by a
function is not and the goal is to ultimately make the root module
semver compliant.
This adds --peeridletimeout config option and updates the peer
connection to enforce idle timeouts using the connection's read
deadline. Associated testsand documentation have also been updated.
This introduces a new flag named allowunsyncedmining which allows checks
that prevent unsynchonrized mining to be disabled on testnet. This is
an advanced option and should not be used unless you understand exactly
why it exists and what it implications it carries.
The current max orphan transaction size causes problems with dependent
transaction relay due to its artificially small size in relation to the
max standard transaction size.
Consequently, this modifies the orphan transaction policy by increasing
the max size of each orphan to the same value allowed for standard
non-orphan transactions and reducing the default max allowed number of
orphans to 100.
From a memory usage standpoint, the worst case max mem usage prior to
this change was 5MB plus structure and tracking overhead (1000 max
orphans * 5KB max each). With this, that is raised to 10MB (100 max
orphans * 100KB max each) in the worst case.
It is important to note that the values were originally implemented as a
naive means to control the size of the orphan pool before several of the
recent enhancements which more aggressively remove orphans from the
orphan pool were added, so they needed to be evaluated again.
For a very long time prior to recent changes, the orphan pool would
quickly reach the max allowed worst-case usage and effectively stay
there forever whereas with more recent changes, the actual run-time
orphan pool usage is usually much smaller.
Finally, as another point in favor of this change, as the network has
evolved, nodes have generally become better about orphan management and
as such missing ancestors will typically either be broadcast or mined
fairly quickly resulting in fewer overall orphans.
Electron 6 has dropped support to the P-521 curve, so in order to
upgrade Decrediton dcrd needs to support generating curve P-256.
This adds a --tlscurve parameter similar to what exists in dcrwallet to
select which curve to use when generating the RPC certificates.
This lowers the default minimum relay fee to 0.0001 DCR/Kb from its
previous value of 0.001 DCR/Kb and increases the high fee multiplier to
keep the same default high fee threshold of 1 DCR/kB.
In order to keep the comments accurate, it also updates the comments in
the isDust function and the sample config file to match the new default
relay fee as it's nice to have the most recent values as a reference in
the comments.
Finally, it updates the tests for the expected new values as a result of
the reduced default relay fee and adds add a couple of dust tests just
below and above the dust point for the new reduced default relay fee.
It should be noted that this is only a default node policy change and as
such does not affect the consensus rules in any way.
This fixes the behavior of expanding ~ on Windows and macOS, as well
as adding support for ~otheruser to expand to the home directory of
otheruser.
Modify the default sample config to reflect the change in the meaning
of ~ on Windows, and the unintended meaning of ~ on macOS. Include
defaults for all 3 of the major operating system classes since
uncommenting the default Unix option on macOS or Windows would change
the blockchain data directory to a non-default location.
This renames the mempool.Config.RelayNonStd option to AcceptNonStd which
more accurately describes its behavior since the mempool was refactored
into a separate package.
The reasoning for this change is that the mempool is not responsible for
relaying transactions (nor should it be). Its job is to maintain a pool
of unmined transactions that are validated according to consensus and
policy configuration options which are then used to provide a source of
transactions that need to be mined.
Instead, it is the server that is responsible for relaying transactions.
While it is true that the current server code currently only relays txns
that were accepted to the mempool, this does not necessarily have to
be the case. It would be entirely possible (and perhaps even a good
idea as something do in the future), to separate the relay policy from
the mempool acceptance policy (and thus indirectly the mining policy).
This updates the minimum relay fee in the sample config file to match
the actual default. Note that it's commented anyways, so this does not
result in any logical change. However, the file aims to have the
defaults commented out by default, so it makes sense to update the
value accordingly.
This adds a readme and doc.go for the sampleconfig package so it is
consistent with all of the other packages.
While here, it also changes the exported value to a constant and removes
the unused sampleConfigFilename constant.