Skip to content

Commit

Permalink
merge: next-costs into next (#2956)
Browse files Browse the repository at this point in the history
* fix: some spot fixes for obtaining epoch and block limit from clarity connection, adding evaluated epoch to block receipt

* fix unit test errors, remove panics from net paths, use /v2/info to get current burn height in integration test

* fix: use UnitTest versions of Burnstate and Headers dbs, which return sane-ish block height. Explicit special case for genesis block in get_epoch_of. Use Clarity epoch for read only connections

* use drop_unconfirmed_state directly rather than begin_unconfirmed->rollback_unconfirmed

* Fix: single line in sortdb for each db config version

* feat: use serialized_size() aggregation for cost inputs of linear functions, #2871

* chore: remove unused CostInputHandle struct

* chore: prepare changelog for release

* chore: fix merge artifacts in unit tests

* test: start of testing for #2913. adds a mined_block event to the dispatcher

* fix: issue raised in #2913

* docs: add reference for the event dispatcher changes

* fix: make burnchain test framework set the epoch marker in block-commits

* chore: improve documentation for getting the parent block snapshot and block commit

* feat: add has_microblock_parent() method to StacksBlockHeader and StacksBlock

* fix: implement #2904 -- make it so that if an anchored block straddles an epoch boundary, it must not have a microblock parent.  It will be invalid if it does.

* feat: make it so the stacks anchored block miner will *not* confirm a microblock stream if the block it produces has a parent anchored block in a different epoch. Also, add unit tests to both the miner and consensus rules to make sure that the miner behaves this way, and a block that violates this new rule will be rejected

* feat: add a variant for processing a tenure in the test framework that is allowed to fail

* test: fix the assertion in runtime_overflow_unconfirmed_microblocks_integration_test to match new expected behavior

* ci: add new test to github workflow

* feat: update costs-2 with latest benchmark results, expand unit test coverage in vm::tests::costs

* test: expand coverage for analysis costs in 2.05

* chore: refactoring with new API

* fix: remember which blocks actually execute the epoch transition, so that when we process a child of that block, we can determine whether or not the child confirmed any microblocks of that epoch-transition block (it shouldn't)

* fix: add a new table for stacks block IDs in which an epoch transition takes place, and add the schema migration code to apply it

* fix: update the miner test to verify that both the validate_anchor_block_burnchain() method and the append_block() method correctly reject blocks whose parents encountered an epoch transaction and who confirmed microblocks

* fix: test code refactoring to always restore sortdb and node in the test node when processing an epoch that could fail

* chore: store network epoch in stacks epoch

* chore: use network epoch in stacks epoch

* chore: use network epoch in stacks epoch

* chore: use network epoch in stacks epoch

* chore: use network epoch in stacks epoch

* feat: require the last byte of peer_version to indicate the epoch of the node (0x05 now)

* feat: require a preamble's peer_version's epoch marker to be at least as high as the local node's epoch marker, or if it isn't, require that it is at least as high as the current epoch's epoch marker

* refactor: pass along epochs

* refactor: pass along epochs to peer network

* refactor: add network_epoch to stacks epoch

* refactor: add network_epoch to stacks epoch

* refactor: add network_epoch to stacks epoch

* refactor: add network_epoch to stacks epoch

* refactor: pass epochs along to peer network

* refactor: pass along epochs to peer network

* refactor: add network_epoch to stacks epoch

* refactor: add network epoch to stacks epoch

* chore: test-debug output for rejecting peers based on their peer_version epoch

* feat: e2e test to verify that nodes in different epochs can't talk to each other

* chore: cargo fmt

* fix: log the right hashes

* fix: add epoch_205 test to verify that the new code that tracks which blocks contained epoch transitions works end-to-end

* feat: update costs-2, fixing the matching between various paired methods

* feat: match nft transfer/burn/mint/get-owner

* Stacks 2.05: Allow epochs to be specified in Toml for Testnet (#2910)

* added debug and serialize to the burnchainconfig

* can  supply epochs in toml, only use if not mainnet

* add enough Debug to print ConfigFile

* revert src/main

* reduced some comments

* info to debug

* changed a few comments

* removed the serialize's

* fixed the doc

* removed some Debug's

* panicking earlier

* chore: split testnet and mainnet costs

* chore: select 2.05 xenon testnet start height, dead code elimination

* fix: 2.0/1.0 epoch heights in testnet

* chore: #2878 set 2.05 mainnet burn height

* test: fix some test flakiness in epoch_205::exact

* test: add assertion that the epoch switch is applied

* chore: cargo fmt

* fix: attempt #2 on testnet block height - 2104380

* test: add some comments for test changes

* fix: include network_epoch

* fix: add back in network_epoch

* fix typo (#2929)

* fix: insert epochs on migration in SortitionDB::connect, error in SortitionDB::open

* smooth similar runtimes to same value, bump cost_principal_of to hash160(32)

* Stacks 2.05: Add Epoch to Cost Estimate Key (#2923)

* added bunch of things

* moving the stuff

* test compiles

* added a test

* fixed typo

* added two tests

* updated code/tests in stacks-node

* replaced indexed conn with unindexed one

* address PR feedback

* add comment to validate_and_insert_epochs

* fix: invoke connect early to avoid race-to-connect

* fix: move connect_dbs to *after* initial burnchain sync

* Ci/fix codecov (#2932)

* ci: update codecov upload method

* ci: give codecov git info

* ci: codecov for stacks-node tests

* ci: give codecov git access

* ci: build binary and fix path

* feat: add methods to directly query database version information from a path, so we can determine if the database is up to date with the current epoch

* feat: add top-level method to check the sortition and chainstate database versions against the current epoch, to verify if they are consistent

* chore: test for verifying that the database version check code works if the databases don't exist, if they do exist, and if they do exist in different epochs

* chore: refactor the code for creating directories in the stacks chain state and for generating the various paths to its database files, and use the new refactored code to make it possible to query the chainstate database version directly from a path.

* chore: document find_epoch()

* feat: add get_stacks_epochs() trait implementation

* feat: add get_stacks_epochs trait implementation

* feat: require a burnchain controller to be able to determine the sequence of stacks epochs it supports

* feat: check the chainstate database versions (if they exist), and abort the node if the versions are incompatible with the current epoch

* fix: only return neighbors supported by the current epoch

* fix: when querying neighbors, consider the peer version's epoch marker, and only return neighbors with epoch markers equal or higher

* chore: api sync

* chore: add helper method to get the current epoch from the peer network

* chore: refactor /v2/neighbors to pass the current epoch marker

* Ci/next costs coverage (#2934)

* Ci/fix codecov (#2932)

* ci: update codecov upload method

* ci: give codecov git info

* ci: codecov for stacks-node tests

* ci: give codecov git access

* ci: build binary and fix path

* ci: code coverage for bitcoind_integration_test

* ci: fix bin path

* ci: cargo test first then build

* ci: syntax

* ci: name each code cov upload

* ci: adjust source dir

* switch cost tests to use mainnet as well as testnet

* chore: add CHANGELOG.md entry for 2.05

* fix: use indexer's get_stacks_epochs()

* chore: use testnet chain ID constant

* mainnet tests are failing

* chore: sync costs-2.clar with sip-012

* still not passing

* all but two tests passing

* fix run-on sentence

* ok

* changing the contract to be variable

* test_cost_contract_short_circuits passing for mainnet

* had to comment two things to get test to pass

* Revert "had to comment two things to get test to pass"

This reverts commit 4974ea9.

* mainnet doesn't clone

* add libclariy

* revert test_cost_voting_integration being rstest

* Revert "mainnet doesn't clone"

This reverts commit 15a3b6e.

* remove rstest dependency

* rolling back rstest dependencies

* remove clone again

* remove extra arguments for OE:new

* refactor the "analysis" cost tests

* added test

* ok

* chore: refactor LimitedCostTracker into Free and Limited variants

* use "Stacks boot address"

* removed some ??

* small fixes

* fixing double declares

* removed more duplicate includes/defs

* removed more dpulicates

* cleaning up test code

* fixed the epochs

* fixed the epochs

* clarityinstance::New

* compiler errors

* replace versions

* added some limits

* removed blocklimit from ClarityInstance

* clarity version hardcode

* eval_all fix

* tenure_with_txs

* error[E0592]: duplicate definitions with name `unit_test`

* error[E0063]: missing field `epochs` in initializer of `BitcoinIndexerConfig`

* iremove duplicate calls to StacksChainState::process_epoch_transition

* add arg to type_check

* back to execute in epoch

* added execute_with_parameters

* replaced many to execute_with_parameters

* fix execute_with_parameters

* default values in eval with params

* ClarityInstance::new args

* unused import

* initialize contract

* fix open_and_exec

* added easy "not covered" match cases

* final "not covered" case

* Ok(ture) output

* clarityersion

* added clarity version args

* refixed some clarityversion's

* no field blocklimit on clarityinstance

* no method StacksChainState::open_with_block_limit

* test_burnstatedb_epoch arguments

* remove bad import

* fix SortitionDB::connect

* SortitionDB::open

* add pox constants

* aded block limit and epoch

* format

* clarity version reference

* iget_burn_start_height

* iget_stacks_epoch_by_epoch_id

* BlockLimitBurnStateDB

* BlockLimitBurnStateDB

* helper eecute

* StacksEpoch::unit_test

* PoxConstants::new

* compiles

* fixed double epochs creation

* wrong assert

* fixed some epoch stuff

* set some epochs to 2.0

* adding to execute changes

* don't add block limit

* no sortdb

* moved epochs

* use clarityversion in tests

* add epochs

* add epochs and pox constants

* stacks-node compiles

* fix epochs

* fixed epoch advacing

* fix vm::tests::costs::test_all_mainnet

* format

* epoch_205_test_all_mainnet passing

* analysis/tests/costs passing

* fixing pox tests

* gettig close

* test worked but other regressions

* tests passing

* trimmed out debug info

* removed debug files

* format

* ivm::tests::events::test_emit_stx_transfer_memo_ok

* differentiate test_epoch_switch_2_05 test_epoch_switch_21

* remove dns

* removed a warning

* simplify key value pair

* remove extra epochs defn

* reinstate the serialize/deserialize

* adjusted comments

* s/NullBurnStateDB/BlockLimitBurnStateDB/

* changed stacks 2.0 test names in tests/costs to say that they are 'epoch20'

* reinstate panics in pox methods for NullBurnStateDB

* 0x0a is 10, not 0x10

* epoch21 gets its own key is pessimistic estimator

* allow jump from epoch20 to epoch21

* test each epoch separately in tests/costs, including epoch21

* use >= for epoch condition

* reinstate  epochs.sort(), to see what will break

* revert to  ClaritySerializable for u32

* fixed inadvertent build error

* chore: fix emit event tests

Co-authored-by: Aaron Blankstein <aaron@blockstack.com>
Co-authored-by: Pavitthra Pandurangan <paviusa23@gmail.com>
Co-authored-by: Jude Nelson <judecn@gmail.com>
Co-authored-by: Charlie <2747302+CharlieC3@users.noreply.github.com>
Co-authored-by: Greg Coppola <greg@hiro.so>
  • Loading branch information
6 people committed Dec 15, 2021
1 parent 6a3e292 commit c250655
Show file tree
Hide file tree
Showing 134 changed files with 16,406 additions and 2,175 deletions.
38 changes: 9 additions & 29 deletions .github/actions/bitcoin-int-tests/Dockerfile.bitcoin-tests
@@ -1,32 +1,12 @@
FROM rust:bullseye
FROM stacks-node:integrations

WORKDIR /src/

COPY . .

WORKDIR /src/testnet/stacks-node
RUN cargo test --no-run

RUN cd / && wget https://bitcoin.org/bin/bitcoin-core-0.20.0/bitcoin-0.20.0-x86_64-linux-gnu.tar.gz
RUN cd / && tar -xvzf bitcoin-0.20.0-x86_64-linux-gnu.tar.gz
ARG test_name
ENV BITCOIND_TEST 1

RUN ln -s /bitcoin-0.20.0/bin/bitcoind /bin/
RUN cargo build && \
cargo test -- --test-threads 1 --ignored "$test_name"

ENV BITCOIND_TEST 1
RUN cargo test -- --test-threads 1 --ignored tests::neon_integrations::microblock_integration_test
RUN cargo test -- --test-threads 1 --ignored tests::neon_integrations::size_check_integration_test
RUN cargo test -- --test-threads 1 --ignored tests::neon_integrations::cost_voting_integration
RUN cargo test -- --test-threads 1 --ignored tests::integrations::integration_test_get_info
RUN cargo test -- --test-threads 1 --ignored tests::neon_integrations::bitcoind_integration_test
RUN cargo test -- --test-threads 1 --ignored tests::neon_integrations::liquid_ustx_integration
RUN cargo test -- --test-threads 1 --ignored tests::neon_integrations::stx_transfer_btc_integration_test
RUN cargo test -- --test-threads 1 --ignored tests::neon_integrations::bitcoind_forking_test
RUN cargo test -- --test-threads 1 --ignored tests::neon_integrations::should_fix_2771
RUN cargo test -- --test-threads 1 --ignored tests::neon_integrations::pox_integration_test
RUN cargo test -- --test-threads 1 --ignored tests::bitcoin_regtest::bitcoind_integration_test
RUN cargo test -- --test-threads 1 --ignored tests::should_succeed_handling_malformed_and_valid_txs
RUN cargo test -- --test-threads 1 --ignored tests::neon_integrations::size_overflow_unconfirmed_microblocks_integration_test
RUN cargo test -- --test-threads 1 --ignored tests::neon_integrations::size_overflow_unconfirmed_stream_microblocks_integration_test
RUN cargo test -- --test-threads 1 --ignored tests::neon_integrations::size_overflow_unconfirmed_invalid_stream_microblocks_integration_test
RUN cargo test -- --test-threads 1 --ignored tests::neon_integrations::runtime_overflow_unconfirmed_microblocks_integration_test
RUN cargo test -- --test-threads 1 --ignored tests::neon_integrations::antientropy_integration_test
RUN grcov . --binary-path ../../target/debug/ -s ../.. -t lcov --branch --ignore-not-existing --ignore "/*" -o lcov.info && \
curl -Os https://uploader.codecov.io/latest/linux/codecov && \
chmod +x codecov && \
./codecov --name "$test_name"
4 changes: 3 additions & 1 deletion .github/actions/bitcoin-int-tests/Dockerfile.code-cov
Expand Up @@ -16,4 +16,6 @@ RUN cargo build && \

# Generate coverage report and upload it to codecov
RUN grcov . --binary-path ./target/debug/ -s . -t lcov --branch --ignore-not-existing --ignore "/*" -o lcov.info && \
bash -c "bash <(curl -s https://codecov.io/bash)"
curl -Os https://uploader.codecov.io/latest/linux/codecov && \
chmod +x codecov && \
./codecov --name "unit_tests"
24 changes: 24 additions & 0 deletions .github/actions/bitcoin-int-tests/Dockerfile.generic.bitcoin-tests
@@ -0,0 +1,24 @@
FROM rust:bullseye

WORKDIR /src/

COPY . .

WORKDIR /src/testnet/stacks-node

RUN rustup override set nightly && \
rustup component add llvm-tools-preview && \
cargo install grcov

ENV RUSTFLAGS="-Zinstrument-coverage" \
LLVM_PROFILE_FILE="stacks-blockchain-%p-%m.profraw"

RUN cargo test --no-run && \
cargo build

RUN cd / && wget https://bitcoin.org/bin/bitcoin-core-0.20.0/bitcoin-0.20.0-x86_64-linux-gnu.tar.gz
RUN cd / && tar -xvzf bitcoin-0.20.0-x86_64-linux-gnu.tar.gz

RUN ln -s /bitcoin-0.20.0/bin/bitcoind /bin/

ENV BITCOIND_TEST 1
17 changes: 15 additions & 2 deletions .github/actions/bitcoin-int-tests/Dockerfile.large-genesis
Expand Up @@ -4,12 +4,25 @@ WORKDIR /src

COPY . .

RUN cargo test --no-run --workspace

RUN cd / && wget https://bitcoin.org/bin/bitcoin-core-0.20.0/bitcoin-0.20.0-x86_64-linux-gnu.tar.gz
RUN cd / && tar -xvzf bitcoin-0.20.0-x86_64-linux-gnu.tar.gz

RUN ln -s /bitcoin-0.20.0/bin/bitcoind /bin/

RUN rustup override set nightly && \
rustup component add llvm-tools-preview && \
cargo install grcov

ENV RUSTFLAGS="-Zinstrument-coverage" \
LLVM_PROFILE_FILE="stacks-blockchain-%p-%m.profraw"

RUN cargo test --no-run --workspace && \
cargo build --workspace

ENV BITCOIND_TEST 1
RUN cd testnet/stacks-node && cargo test --release --features prod-genesis-chainstate -- --test-threads 1 --ignored neon_integrations::bitcoind_integration_test

RUN grcov . --binary-path ./target/debug/ -s . -t lcov --branch --ignore-not-existing --ignore "/*" -o lcov.info && \
curl -Os https://uploader.codecov.io/latest/linux/codecov && \
chmod +x codecov && \
./codecov --name "large_genesis"
7 changes: 5 additions & 2 deletions .github/stale.yml
@@ -1,11 +1,14 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 180
daysUntilStale: 365
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
daysUntilClose: 30
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
- stacks-2.1
- consensus-critical
- clarity
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
Expand Down
81 changes: 76 additions & 5 deletions .github/workflows/bitcoin-tests.yml
Expand Up @@ -6,22 +6,93 @@ on:
pull_request:

jobs:
# Run sampled genesis tests
build-integration-image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build bitcoin integration testing image
env:
DOCKER_BUILDKIT: 1
# Remove .dockerignore file so codecov has access to git info
run: |
rm .dockerignore
docker build -f ./.github/actions/bitcoin-int-tests/Dockerfile.generic.bitcoin-tests -t stacks-node:integrations .
- name: Export docker image as tarball
run: docker save -o integration-image.tar stacks-node:integrations
- name: Upload built docker image
uses: actions/upload-artifact@v2
with:
name: integration-image.tar
path: integration-image.tar
# Run integration tests using sampled genesis block
sampled-genesis:
runs-on: ubuntu-latest
needs:
- build-integration-image
strategy:
fail-fast: false
matrix:
test-name:
- tests::neon_integrations::microblock_integration_test
- tests::neon_integrations::size_check_integration_test
- tests::neon_integrations::cost_voting_integration
- tests::integrations::integration_test_get_info
- tests::neon_integrations::bitcoind_integration_test
- tests::neon_integrations::liquid_ustx_integration
- tests::neon_integrations::stx_transfer_btc_integration_test
- tests::neon_integrations::bitcoind_forking_test
- tests::neon_integrations::should_fix_2771
- tests::neon_integrations::pox_integration_test
- tests::bitcoin_regtest::bitcoind_integration_test
- tests::should_succeed_handling_malformed_and_valid_txs
- tests::neon_integrations::size_overflow_unconfirmed_microblocks_integration_test
- tests::neon_integrations::size_overflow_unconfirmed_stream_microblocks_integration_test
- tests::neon_integrations::size_overflow_unconfirmed_invalid_stream_microblocks_integration_test
- tests::neon_integrations::runtime_overflow_unconfirmed_microblocks_integration_test
- tests::neon_integrations::antientropy_integration_test
- tests::neon_integrations::filter_low_fee_tx_integration_test
- tests::neon_integrations::filter_long_runtime_tx_integration_test
- tests::neon_integrations::mining_transactions_is_fair
- tests::epoch_205::test_dynamic_db_method_costs
- tests::epoch_205::transition_empty_blocks
- tests::epoch_205::test_cost_limit_switch_version205
- tests::epoch_205::test_exact_block_costs
steps:
- uses: actions/checkout@v2
- name: Download docker image
uses: actions/download-artifact@v2
with:
name: integration-image.tar
- name: Load docker image
run: docker load -i integration-image.tar && rm integration-image.tar
- name: All integration tests with sampled genesis
timeout-minutes: 30
env:
DOCKER_BUILDKIT: 1
run: docker build -f ./.github/actions/bitcoin-int-tests/Dockerfile.bitcoin-tests .
TEST_NAME: ${{ matrix.test-name }}
run: docker build --build-arg test_name=${{ matrix.test-name }} -f ./.github/actions/bitcoin-int-tests/Dockerfile.bitcoin-tests .
atlas-test:
# disable this job/test for now, as the atlas endpoints are currently disabled.
if: ${{ true }}
runs-on: ubuntu-latest
needs:
- build-integration-image
strategy:
fail-fast: false
matrix:
test-name:
- tests::neon_integrations::atlas_integration_test
- tests::neon_integrations::atlas_stress_integration_test
steps:
- uses: actions/checkout@v2
- name: All integration tests with sampled genesis
- name: Download docker image
uses: actions/download-artifact@v2
with:
name: integration-image.tar
- name: Load docker image
run: docker load -i integration-image.tar && rm integration-image.tar
- name: Atlas integration tests
timeout-minutes: 40
env:
DOCKER_BUILDKIT: 1
run: docker build -f ./.github/actions/bitcoin-int-tests/Dockerfile.atlas-test .
TEST_NAME: ${{ matrix.test-name }}
run: docker build --build-arg test_name=${{ matrix.test-name }} -f ./.github/actions/bitcoin-int-tests/Dockerfile.bitcoin-tests .
12 changes: 9 additions & 3 deletions .github/workflows/stacks-blockchain.yml
Expand Up @@ -39,7 +39,10 @@ jobs:
- name: Single full genesis integration test
env:
DOCKER_BUILDKIT: 1
run: docker build -f ./.github/actions/bitcoin-int-tests/Dockerfile.large-genesis .
# Remove .dockerignore file so codecov has access to git info
run: |
rm .dockerignore
docker build -f ./.github/actions/bitcoin-int-tests/Dockerfile.large-genesis .
# Run unit tests with code coverage
unit-tests:
Expand All @@ -49,7 +52,10 @@ jobs:
- name: Run units tests (with coverage)
env:
DOCKER_BUILDKIT: 1
run: docker build -f ./.github/actions/bitcoin-int-tests/Dockerfile.code-cov .
# Remove .dockerignore file so codecov has access to git info
run: |
rm .dockerignore
docker build -f ./.github/actions/bitcoin-int-tests/Dockerfile.code-cov .
open-api-validation:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -218,7 +224,7 @@ jobs:
tag_name: ${{ github.event.inputs.tag || github.ref }}
release_name: Release ${{ github.event.inputs.tag || github.ref }}
draft: false
prerelease: false
prerelease: true

# Upload distributables to a new release if we're building a tag or a tag was passed in
upload-dist:
Expand Down
70 changes: 70 additions & 0 deletions CHANGELOG.md
Expand Up @@ -13,6 +13,76 @@ This release will contain consensus-breaking changes.

- Clarity function `stx-transfer?` now takes a 4th optional argument, which is a memo.

## [2.05.0.0.0]

This software update is a consensus changing release and the
implementation of the proposed cost changes in SIP-012. This release's
chainstate directory is compatible with chainstate directories from
2.0.11.4.0. However, this release is only compatible with chainstate
directories before the 2.05 consensus changes activate (Bitcoin height
713,000). If you run a 2.00 stacks-node beyond this point, and wish to
run a 2.05 node afterwards, you must start from a new chainstate
directory.

## Added

- At height 713,000 a new `costs-2` contract will be launched by the
Stacks boot address.

## Changed

- Stacks blocks whose parents are mined >= 713,000 will use default costs
from the new `costs-2` contract.
- Stacks blocks whose parents are mined >= 713,000 will use the real
serialized length of Clarity values as the cost inputs to several methods
that previously used the maximum possible size for the associated types.
- Stacks blocks whose parents are mined >= 713,000 will use the new block
limit defined in SIP-012.

## Fixed

- Miners are now more aggressive in calculating their block limits
when confirming microblocks (#2916)

## [2.0.11.4.0]

This software update is a point-release to change the transaction
selection logic in the default miner to prioritize by an estimated fee
rate instead of raw fee. This release's chainstate directory is
compatible with chainstate directories from 2.0.11.3.0.

## Added

- FeeEstimator and CostEstimator interfaces. These can be controlled
via node configuration options. See the `README.md` for more
information on the configuration.
- New fee rate estimation endpoint `/v2/fees/transaction` (#2872). See
`docs/rpc/openapi.yaml` for more information.

## Changed

- Prioritize transaction inclusion in blocks by estimated fee rates (#2859).
- MARF sqlite connections will now use `mmap`'ed connections with up to 256MB
space (#2869).

## [2.0.11.3.0]

This software update is a point-release to change the transaction selection
logic in the default miner to prioritize by fee instead of nonce sequence. This
release's chainstate directory is compatible with chainstate directories from
2.0.11.2.0.

## Added

- The node will enforce a soft deadline for mining a block, so that a node
operator can control how frequently their node attempts to mine a block
regardless of how congested the mempool is. The timeout parameters are
controlled in the `[miner]` section of the node's config file (#2823).

## Changed

- Prioritize transaction inclusion in the mempool by transaction fee (#2823).

## [2.0.11.2.0]

NOTE: This change resets the `testnet`. Users running a testnet node will need
Expand Down

0 comments on commit c250655

Please sign in to comment.